]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
Automatic date update in version.in
[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. */
277 domain_enum namespace;
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'
599 || (strncmp (field_name + len, "___", 3) == 0
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{
8739bc53 797 type = resolve_dynamic_type (type, 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{
8739bc53 818 type = resolve_dynamic_type (type, 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
JB
1005 mapping->encoded != NULL
1006 && strncmp (mapping->decoded, p,
1007 strlen (mapping->decoded)) != 0; mapping += 1)
4c4b4cd2
PH
1008 ;
1009 if (mapping->encoded == NULL)
323e0a4a 1010 error (_("invalid Ada operator name: %s"), p);
4c4b4cd2
PH
1011 strcpy (encoding_buffer + k, mapping->encoded);
1012 k += strlen (mapping->encoded);
1013 break;
1014 }
d2e4a39e 1015 else
4c4b4cd2
PH
1016 {
1017 encoding_buffer[k] = *p;
1018 k += 1;
1019 }
14f9c5c9
AS
1020 }
1021
4c4b4cd2
PH
1022 encoding_buffer[k] = '\0';
1023 return encoding_buffer;
14f9c5c9
AS
1024}
1025
1026/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
1027 quotes, unfolded, but with the quotes stripped away. Result good
1028 to next call. */
1029
d2e4a39e
AS
1030char *
1031ada_fold_name (const char *name)
14f9c5c9 1032{
d2e4a39e 1033 static char *fold_buffer = NULL;
14f9c5c9
AS
1034 static size_t fold_buffer_size = 0;
1035
1036 int len = strlen (name);
d2e4a39e 1037 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
1038
1039 if (name[0] == '\'')
1040 {
d2e4a39e
AS
1041 strncpy (fold_buffer, name + 1, len - 2);
1042 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
1043 }
1044 else
1045 {
1046 int i;
5b4ee69b 1047
14f9c5c9 1048 for (i = 0; i <= len; i += 1)
4c4b4cd2 1049 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
1050 }
1051
1052 return fold_buffer;
1053}
1054
529cad9c
PH
1055/* Return nonzero if C is either a digit or a lowercase alphabet character. */
1056
1057static int
1058is_lower_alphanum (const char c)
1059{
1060 return (isdigit (c) || (isalpha (c) && islower (c)));
1061}
1062
c90092fe
JB
1063/* ENCODED is the linkage name of a symbol and LEN contains its length.
1064 This function saves in LEN the length of that same symbol name but
1065 without either of these suffixes:
29480c32
JB
1066 . .{DIGIT}+
1067 . ${DIGIT}+
1068 . ___{DIGIT}+
1069 . __{DIGIT}+.
c90092fe 1070
29480c32
JB
1071 These are suffixes introduced by the compiler for entities such as
1072 nested subprogram for instance, in order to avoid name clashes.
1073 They do not serve any purpose for the debugger. */
1074
1075static void
1076ada_remove_trailing_digits (const char *encoded, int *len)
1077{
1078 if (*len > 1 && isdigit (encoded[*len - 1]))
1079 {
1080 int i = *len - 2;
5b4ee69b 1081
29480c32
JB
1082 while (i > 0 && isdigit (encoded[i]))
1083 i--;
1084 if (i >= 0 && encoded[i] == '.')
1085 *len = i;
1086 else if (i >= 0 && encoded[i] == '$')
1087 *len = i;
1088 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1089 *len = i - 2;
1090 else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1091 *len = i - 1;
1092 }
1093}
1094
1095/* Remove the suffix introduced by the compiler for protected object
1096 subprograms. */
1097
1098static void
1099ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1100{
1101 /* Remove trailing N. */
1102
1103 /* Protected entry subprograms are broken into two
1104 separate subprograms: The first one is unprotected, and has
1105 a 'N' suffix; the second is the protected version, and has
0963b4bd 1106 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1107 the protection. Since the P subprograms are internally generated,
1108 we leave these names undecoded, giving the user a clue that this
1109 entity is internal. */
1110
1111 if (*len > 1
1112 && encoded[*len - 1] == 'N'
1113 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1114 *len = *len - 1;
1115}
1116
69fadcdf
JB
1117/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
1118
1119static void
1120ada_remove_Xbn_suffix (const char *encoded, int *len)
1121{
1122 int i = *len - 1;
1123
1124 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1125 i--;
1126
1127 if (encoded[i] != 'X')
1128 return;
1129
1130 if (i == 0)
1131 return;
1132
1133 if (isalnum (encoded[i-1]))
1134 *len = i;
1135}
1136
29480c32
JB
1137/* If ENCODED follows the GNAT entity encoding conventions, then return
1138 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1139 replaced by ENCODED.
14f9c5c9 1140
4c4b4cd2 1141 The resulting string is valid until the next call of ada_decode.
29480c32 1142 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
1143 is returned. */
1144
1145const char *
1146ada_decode (const char *encoded)
14f9c5c9
AS
1147{
1148 int i, j;
1149 int len0;
d2e4a39e 1150 const char *p;
4c4b4cd2 1151 char *decoded;
14f9c5c9 1152 int at_start_name;
4c4b4cd2
PH
1153 static char *decoding_buffer = NULL;
1154 static size_t decoding_buffer_size = 0;
d2e4a39e 1155
29480c32
JB
1156 /* The name of the Ada main procedure starts with "_ada_".
1157 This prefix is not part of the decoded name, so skip this part
1158 if we see this prefix. */
4c4b4cd2
PH
1159 if (strncmp (encoded, "_ada_", 5) == 0)
1160 encoded += 5;
14f9c5c9 1161
29480c32
JB
1162 /* If the name starts with '_', then it is not a properly encoded
1163 name, so do not attempt to decode it. Similarly, if the name
1164 starts with '<', the name should not be decoded. */
4c4b4cd2 1165 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1166 goto Suppress;
1167
4c4b4cd2 1168 len0 = strlen (encoded);
4c4b4cd2 1169
29480c32
JB
1170 ada_remove_trailing_digits (encoded, &len0);
1171 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1172
4c4b4cd2
PH
1173 /* Remove the ___X.* suffix if present. Do not forget to verify that
1174 the suffix is located before the current "end" of ENCODED. We want
1175 to avoid re-matching parts of ENCODED that have previously been
1176 marked as discarded (by decrementing LEN0). */
1177 p = strstr (encoded, "___");
1178 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1179 {
1180 if (p[3] == 'X')
4c4b4cd2 1181 len0 = p - encoded;
14f9c5c9 1182 else
4c4b4cd2 1183 goto Suppress;
14f9c5c9 1184 }
4c4b4cd2 1185
29480c32
JB
1186 /* Remove any trailing TKB suffix. It tells us that this symbol
1187 is for the body of a task, but that information does not actually
1188 appear in the decoded name. */
1189
4c4b4cd2 1190 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
14f9c5c9 1191 len0 -= 3;
76a01679 1192
a10967fa
JB
1193 /* Remove any trailing TB suffix. The TB suffix is slightly different
1194 from the TKB suffix because it is used for non-anonymous task
1195 bodies. */
1196
1197 if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1198 len0 -= 2;
1199
29480c32
JB
1200 /* Remove trailing "B" suffixes. */
1201 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1202
4c4b4cd2 1203 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
14f9c5c9
AS
1204 len0 -= 1;
1205
4c4b4cd2 1206 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1207
4c4b4cd2
PH
1208 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1209 decoded = decoding_buffer;
14f9c5c9 1210
29480c32
JB
1211 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1212
4c4b4cd2 1213 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1214 {
4c4b4cd2
PH
1215 i = len0 - 2;
1216 while ((i >= 0 && isdigit (encoded[i]))
1217 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1218 i -= 1;
1219 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1220 len0 = i - 1;
1221 else if (encoded[i] == '$')
1222 len0 = i;
d2e4a39e 1223 }
14f9c5c9 1224
29480c32
JB
1225 /* The first few characters that are not alphabetic are not part
1226 of any encoding we use, so we can copy them over verbatim. */
1227
4c4b4cd2
PH
1228 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1229 decoded[j] = encoded[i];
14f9c5c9
AS
1230
1231 at_start_name = 1;
1232 while (i < len0)
1233 {
29480c32 1234 /* Is this a symbol function? */
4c4b4cd2
PH
1235 if (at_start_name && encoded[i] == 'O')
1236 {
1237 int k;
5b4ee69b 1238
4c4b4cd2
PH
1239 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1240 {
1241 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1242 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1243 op_len - 1) == 0)
1244 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1245 {
1246 strcpy (decoded + j, ada_opname_table[k].decoded);
1247 at_start_name = 0;
1248 i += op_len;
1249 j += strlen (ada_opname_table[k].decoded);
1250 break;
1251 }
1252 }
1253 if (ada_opname_table[k].encoded != NULL)
1254 continue;
1255 }
14f9c5c9
AS
1256 at_start_name = 0;
1257
529cad9c
PH
1258 /* Replace "TK__" with "__", which will eventually be translated
1259 into "." (just below). */
1260
4c4b4cd2
PH
1261 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1262 i += 2;
529cad9c 1263
29480c32
JB
1264 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1265 be translated into "." (just below). These are internal names
1266 generated for anonymous blocks inside which our symbol is nested. */
1267
1268 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1269 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1270 && isdigit (encoded [i+4]))
1271 {
1272 int k = i + 5;
1273
1274 while (k < len0 && isdigit (encoded[k]))
1275 k++; /* Skip any extra digit. */
1276
1277 /* Double-check that the "__B_{DIGITS}+" sequence we found
1278 is indeed followed by "__". */
1279 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1280 i = k;
1281 }
1282
529cad9c
PH
1283 /* Remove _E{DIGITS}+[sb] */
1284
1285 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1286 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1287 one implements the actual entry code, and has a suffix following
1288 the convention above; the second one implements the barrier and
1289 uses the same convention as above, except that the 'E' is replaced
1290 by a 'B'.
1291
1292 Just as above, we do not decode the name of barrier functions
1293 to give the user a clue that the code he is debugging has been
1294 internally generated. */
1295
1296 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1297 && isdigit (encoded[i+2]))
1298 {
1299 int k = i + 3;
1300
1301 while (k < len0 && isdigit (encoded[k]))
1302 k++;
1303
1304 if (k < len0
1305 && (encoded[k] == 'b' || encoded[k] == 's'))
1306 {
1307 k++;
1308 /* Just as an extra precaution, make sure that if this
1309 suffix is followed by anything else, it is a '_'.
1310 Otherwise, we matched this sequence by accident. */
1311 if (k == len0
1312 || (k < len0 && encoded[k] == '_'))
1313 i = k;
1314 }
1315 }
1316
1317 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1318 the GNAT front-end in protected object subprograms. */
1319
1320 if (i < len0 + 3
1321 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1322 {
1323 /* Backtrack a bit up until we reach either the begining of
1324 the encoded name, or "__". Make sure that we only find
1325 digits or lowercase characters. */
1326 const char *ptr = encoded + i - 1;
1327
1328 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1329 ptr--;
1330 if (ptr < encoded
1331 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1332 i++;
1333 }
1334
4c4b4cd2
PH
1335 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1336 {
29480c32
JB
1337 /* This is a X[bn]* sequence not separated from the previous
1338 part of the name with a non-alpha-numeric character (in other
1339 words, immediately following an alpha-numeric character), then
1340 verify that it is placed at the end of the encoded name. If
1341 not, then the encoding is not valid and we should abort the
1342 decoding. Otherwise, just skip it, it is used in body-nested
1343 package names. */
4c4b4cd2
PH
1344 do
1345 i += 1;
1346 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1347 if (i < len0)
1348 goto Suppress;
1349 }
cdc7bb92 1350 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1351 {
29480c32 1352 /* Replace '__' by '.'. */
4c4b4cd2
PH
1353 decoded[j] = '.';
1354 at_start_name = 1;
1355 i += 2;
1356 j += 1;
1357 }
14f9c5c9 1358 else
4c4b4cd2 1359 {
29480c32
JB
1360 /* It's a character part of the decoded name, so just copy it
1361 over. */
4c4b4cd2
PH
1362 decoded[j] = encoded[i];
1363 i += 1;
1364 j += 1;
1365 }
14f9c5c9 1366 }
4c4b4cd2 1367 decoded[j] = '\000';
14f9c5c9 1368
29480c32
JB
1369 /* Decoded names should never contain any uppercase character.
1370 Double-check this, and abort the decoding if we find one. */
1371
4c4b4cd2
PH
1372 for (i = 0; decoded[i] != '\0'; i += 1)
1373 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1374 goto Suppress;
1375
4c4b4cd2
PH
1376 if (strcmp (decoded, encoded) == 0)
1377 return encoded;
1378 else
1379 return decoded;
14f9c5c9
AS
1380
1381Suppress:
4c4b4cd2
PH
1382 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1383 decoded = decoding_buffer;
1384 if (encoded[0] == '<')
1385 strcpy (decoded, encoded);
14f9c5c9 1386 else
88c15c34 1387 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1388 return decoded;
1389
1390}
1391
1392/* Table for keeping permanent unique copies of decoded names. Once
1393 allocated, names in this table are never released. While this is a
1394 storage leak, it should not be significant unless there are massive
1395 changes in the set of decoded names in successive versions of a
1396 symbol table loaded during a single session. */
1397static struct htab *decoded_names_store;
1398
1399/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1400 in the language-specific part of GSYMBOL, if it has not been
1401 previously computed. Tries to save the decoded name in the same
1402 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1403 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1404 GSYMBOL).
4c4b4cd2
PH
1405 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1406 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1407 when a decoded name is cached in it. */
4c4b4cd2 1408
45e6c716 1409const char *
f85f34ed 1410ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1411{
f85f34ed
TT
1412 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1413 const char **resultp =
1414 &gsymbol->language_specific.mangled_lang.demangled_name;
5b4ee69b 1415
f85f34ed 1416 if (!gsymbol->ada_mangled)
4c4b4cd2
PH
1417 {
1418 const char *decoded = ada_decode (gsymbol->name);
f85f34ed 1419 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1420
f85f34ed 1421 gsymbol->ada_mangled = 1;
5b4ee69b 1422
f85f34ed
TT
1423 if (obstack != NULL)
1424 *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1425 else
76a01679 1426 {
f85f34ed
TT
1427 /* Sometimes, we can't find a corresponding objfile, in
1428 which case, we put the result on the heap. Since we only
1429 decode when needed, we hope this usually does not cause a
1430 significant memory leak (FIXME). */
1431
76a01679
JB
1432 char **slot = (char **) htab_find_slot (decoded_names_store,
1433 decoded, INSERT);
5b4ee69b 1434
76a01679
JB
1435 if (*slot == NULL)
1436 *slot = xstrdup (decoded);
1437 *resultp = *slot;
1438 }
4c4b4cd2 1439 }
14f9c5c9 1440
4c4b4cd2
PH
1441 return *resultp;
1442}
76a01679 1443
2c0b251b 1444static char *
76a01679 1445ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1446{
1447 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1448}
1449
1450/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
4c4b4cd2
PH
1451 suffixes that encode debugging information or leading _ada_ on
1452 SYM_NAME (see is_name_suffix commentary for the debugging
1453 information that is ignored). If WILD, then NAME need only match a
1454 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1455 either argument is NULL. */
14f9c5c9 1456
2c0b251b 1457static int
40658b94 1458match_name (const char *sym_name, const char *name, int wild)
14f9c5c9
AS
1459{
1460 if (sym_name == NULL || name == NULL)
1461 return 0;
1462 else if (wild)
73589123 1463 return wild_match (sym_name, name) == 0;
d2e4a39e
AS
1464 else
1465 {
1466 int len_name = strlen (name);
5b4ee69b 1467
4c4b4cd2
PH
1468 return (strncmp (sym_name, name, len_name) == 0
1469 && is_name_suffix (sym_name + len_name))
1470 || (strncmp (sym_name, "_ada_", 5) == 0
1471 && strncmp (sym_name + 5, name, len_name) == 0
1472 && is_name_suffix (sym_name + len_name + 5));
d2e4a39e 1473 }
14f9c5c9 1474}
14f9c5c9 1475\f
d2e4a39e 1476
4c4b4cd2 1477 /* Arrays */
14f9c5c9 1478
28c85d6c
JB
1479/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1480 generated by the GNAT compiler to describe the index type used
1481 for each dimension of an array, check whether it follows the latest
1482 known encoding. If not, fix it up to conform to the latest encoding.
1483 Otherwise, do nothing. This function also does nothing if
1484 INDEX_DESC_TYPE is NULL.
1485
1486 The GNAT encoding used to describle the array index type evolved a bit.
1487 Initially, the information would be provided through the name of each
1488 field of the structure type only, while the type of these fields was
1489 described as unspecified and irrelevant. The debugger was then expected
1490 to perform a global type lookup using the name of that field in order
1491 to get access to the full index type description. Because these global
1492 lookups can be very expensive, the encoding was later enhanced to make
1493 the global lookup unnecessary by defining the field type as being
1494 the full index type description.
1495
1496 The purpose of this routine is to allow us to support older versions
1497 of the compiler by detecting the use of the older encoding, and by
1498 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1499 we essentially replace each field's meaningless type by the associated
1500 index subtype). */
1501
1502void
1503ada_fixup_array_indexes_type (struct type *index_desc_type)
1504{
1505 int i;
1506
1507 if (index_desc_type == NULL)
1508 return;
1509 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1510
1511 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1512 to check one field only, no need to check them all). If not, return
1513 now.
1514
1515 If our INDEX_DESC_TYPE was generated using the older encoding,
1516 the field type should be a meaningless integer type whose name
1517 is not equal to the field name. */
1518 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1519 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1520 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1521 return;
1522
1523 /* Fixup each field of INDEX_DESC_TYPE. */
1524 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1525 {
0d5cff50 1526 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1527 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1528
1529 if (raw_type)
1530 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1531 }
1532}
1533
4c4b4cd2 1534/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1535
d2e4a39e
AS
1536static char *bound_name[] = {
1537 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1538 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1539};
1540
1541/* Maximum number of array dimensions we are prepared to handle. */
1542
4c4b4cd2 1543#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1544
14f9c5c9 1545
4c4b4cd2
PH
1546/* The desc_* routines return primitive portions of array descriptors
1547 (fat pointers). */
14f9c5c9
AS
1548
1549/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1550 level of indirection, if needed. */
1551
d2e4a39e
AS
1552static struct type *
1553desc_base_type (struct type *type)
14f9c5c9
AS
1554{
1555 if (type == NULL)
1556 return NULL;
61ee279c 1557 type = ada_check_typedef (type);
720d1a40
JB
1558 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1559 type = ada_typedef_target_type (type);
1560
1265e4aa
JB
1561 if (type != NULL
1562 && (TYPE_CODE (type) == TYPE_CODE_PTR
1563 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1564 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1565 else
1566 return type;
1567}
1568
4c4b4cd2
PH
1569/* True iff TYPE indicates a "thin" array pointer type. */
1570
14f9c5c9 1571static int
d2e4a39e 1572is_thin_pntr (struct type *type)
14f9c5c9 1573{
d2e4a39e 1574 return
14f9c5c9
AS
1575 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1576 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1577}
1578
4c4b4cd2
PH
1579/* The descriptor type for thin pointer type TYPE. */
1580
d2e4a39e
AS
1581static struct type *
1582thin_descriptor_type (struct type *type)
14f9c5c9 1583{
d2e4a39e 1584 struct type *base_type = desc_base_type (type);
5b4ee69b 1585
14f9c5c9
AS
1586 if (base_type == NULL)
1587 return NULL;
1588 if (is_suffix (ada_type_name (base_type), "___XVE"))
1589 return base_type;
d2e4a39e 1590 else
14f9c5c9 1591 {
d2e4a39e 1592 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1593
14f9c5c9 1594 if (alt_type == NULL)
4c4b4cd2 1595 return base_type;
14f9c5c9 1596 else
4c4b4cd2 1597 return alt_type;
14f9c5c9
AS
1598 }
1599}
1600
4c4b4cd2
PH
1601/* A pointer to the array data for thin-pointer value VAL. */
1602
d2e4a39e
AS
1603static struct value *
1604thin_data_pntr (struct value *val)
14f9c5c9 1605{
828292f2 1606 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1607 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1608
556bdfd4
UW
1609 data_type = lookup_pointer_type (data_type);
1610
14f9c5c9 1611 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1612 return value_cast (data_type, value_copy (val));
d2e4a39e 1613 else
42ae5230 1614 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1615}
1616
4c4b4cd2
PH
1617/* True iff TYPE indicates a "thick" array pointer type. */
1618
14f9c5c9 1619static int
d2e4a39e 1620is_thick_pntr (struct type *type)
14f9c5c9
AS
1621{
1622 type = desc_base_type (type);
1623 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1624 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1625}
1626
4c4b4cd2
PH
1627/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1628 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1629
d2e4a39e
AS
1630static struct type *
1631desc_bounds_type (struct type *type)
14f9c5c9 1632{
d2e4a39e 1633 struct type *r;
14f9c5c9
AS
1634
1635 type = desc_base_type (type);
1636
1637 if (type == NULL)
1638 return NULL;
1639 else if (is_thin_pntr (type))
1640 {
1641 type = thin_descriptor_type (type);
1642 if (type == NULL)
4c4b4cd2 1643 return NULL;
14f9c5c9
AS
1644 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1645 if (r != NULL)
61ee279c 1646 return ada_check_typedef (r);
14f9c5c9
AS
1647 }
1648 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1649 {
1650 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1651 if (r != NULL)
61ee279c 1652 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1653 }
1654 return NULL;
1655}
1656
1657/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1658 one, a pointer to its bounds data. Otherwise NULL. */
1659
d2e4a39e
AS
1660static struct value *
1661desc_bounds (struct value *arr)
14f9c5c9 1662{
df407dfe 1663 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1664
d2e4a39e 1665 if (is_thin_pntr (type))
14f9c5c9 1666 {
d2e4a39e 1667 struct type *bounds_type =
4c4b4cd2 1668 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1669 LONGEST addr;
1670
4cdfadb1 1671 if (bounds_type == NULL)
323e0a4a 1672 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1673
1674 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1675 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1676 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1677 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1678 addr = value_as_long (arr);
d2e4a39e 1679 else
42ae5230 1680 addr = value_address (arr);
14f9c5c9 1681
d2e4a39e 1682 return
4c4b4cd2
PH
1683 value_from_longest (lookup_pointer_type (bounds_type),
1684 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1685 }
1686
1687 else if (is_thick_pntr (type))
05e522ef
JB
1688 {
1689 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1690 _("Bad GNAT array descriptor"));
1691 struct type *p_bounds_type = value_type (p_bounds);
1692
1693 if (p_bounds_type
1694 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1695 {
1696 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1697
1698 if (TYPE_STUB (target_type))
1699 p_bounds = value_cast (lookup_pointer_type
1700 (ada_check_typedef (target_type)),
1701 p_bounds);
1702 }
1703 else
1704 error (_("Bad GNAT array descriptor"));
1705
1706 return p_bounds;
1707 }
14f9c5c9
AS
1708 else
1709 return NULL;
1710}
1711
4c4b4cd2
PH
1712/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1713 position of the field containing the address of the bounds data. */
1714
14f9c5c9 1715static int
d2e4a39e 1716fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1717{
1718 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1719}
1720
1721/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1722 size of the field containing the address of the bounds data. */
1723
14f9c5c9 1724static int
d2e4a39e 1725fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1726{
1727 type = desc_base_type (type);
1728
d2e4a39e 1729 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1730 return TYPE_FIELD_BITSIZE (type, 1);
1731 else
61ee279c 1732 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1733}
1734
4c4b4cd2 1735/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1736 pointer to one, the type of its array data (a array-with-no-bounds type);
1737 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1738 data. */
4c4b4cd2 1739
d2e4a39e 1740static struct type *
556bdfd4 1741desc_data_target_type (struct type *type)
14f9c5c9
AS
1742{
1743 type = desc_base_type (type);
1744
4c4b4cd2 1745 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1746 if (is_thin_pntr (type))
556bdfd4 1747 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1748 else if (is_thick_pntr (type))
556bdfd4
UW
1749 {
1750 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1751
1752 if (data_type
1753 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1754 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1755 }
1756
1757 return NULL;
14f9c5c9
AS
1758}
1759
1760/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1761 its array data. */
4c4b4cd2 1762
d2e4a39e
AS
1763static struct value *
1764desc_data (struct value *arr)
14f9c5c9 1765{
df407dfe 1766 struct type *type = value_type (arr);
5b4ee69b 1767
14f9c5c9
AS
1768 if (is_thin_pntr (type))
1769 return thin_data_pntr (arr);
1770 else if (is_thick_pntr (type))
d2e4a39e 1771 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1772 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1773 else
1774 return NULL;
1775}
1776
1777
1778/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1779 position of the field containing the address of the data. */
1780
14f9c5c9 1781static int
d2e4a39e 1782fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1783{
1784 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1785}
1786
1787/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1788 size of the field containing the address of the data. */
1789
14f9c5c9 1790static int
d2e4a39e 1791fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1792{
1793 type = desc_base_type (type);
1794
1795 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1796 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1797 else
14f9c5c9
AS
1798 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1799}
1800
4c4b4cd2 1801/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1802 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1803 bound, if WHICH is 1. The first bound is I=1. */
1804
d2e4a39e
AS
1805static struct value *
1806desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1807{
d2e4a39e 1808 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1809 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1810}
1811
1812/* If BOUNDS is an array-bounds structure type, return the bit position
1813 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1814 bound, if WHICH is 1. The first bound is I=1. */
1815
14f9c5c9 1816static int
d2e4a39e 1817desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1818{
d2e4a39e 1819 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1820}
1821
1822/* If BOUNDS is an array-bounds structure type, return the bit field size
1823 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1824 bound, if WHICH is 1. The first bound is I=1. */
1825
76a01679 1826static int
d2e4a39e 1827desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1828{
1829 type = desc_base_type (type);
1830
d2e4a39e
AS
1831 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1832 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1833 else
1834 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1835}
1836
1837/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1838 Ith bound (numbering from 1). Otherwise, NULL. */
1839
d2e4a39e
AS
1840static struct type *
1841desc_index_type (struct type *type, int i)
14f9c5c9
AS
1842{
1843 type = desc_base_type (type);
1844
1845 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1846 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1847 else
14f9c5c9
AS
1848 return NULL;
1849}
1850
4c4b4cd2
PH
1851/* The number of index positions in the array-bounds type TYPE.
1852 Return 0 if TYPE is NULL. */
1853
14f9c5c9 1854static int
d2e4a39e 1855desc_arity (struct type *type)
14f9c5c9
AS
1856{
1857 type = desc_base_type (type);
1858
1859 if (type != NULL)
1860 return TYPE_NFIELDS (type) / 2;
1861 return 0;
1862}
1863
4c4b4cd2
PH
1864/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1865 an array descriptor type (representing an unconstrained array
1866 type). */
1867
76a01679
JB
1868static int
1869ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1870{
1871 if (type == NULL)
1872 return 0;
61ee279c 1873 type = ada_check_typedef (type);
4c4b4cd2 1874 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1875 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1876}
1877
52ce6436 1878/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1879 * to one. */
52ce6436 1880
2c0b251b 1881static int
52ce6436
PH
1882ada_is_array_type (struct type *type)
1883{
1884 while (type != NULL
1885 && (TYPE_CODE (type) == TYPE_CODE_PTR
1886 || TYPE_CODE (type) == TYPE_CODE_REF))
1887 type = TYPE_TARGET_TYPE (type);
1888 return ada_is_direct_array_type (type);
1889}
1890
4c4b4cd2 1891/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1892
14f9c5c9 1893int
4c4b4cd2 1894ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1895{
1896 if (type == NULL)
1897 return 0;
61ee279c 1898 type = ada_check_typedef (type);
14f9c5c9 1899 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2 1900 || (TYPE_CODE (type) == TYPE_CODE_PTR
b0dd7688
JB
1901 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1902 == TYPE_CODE_ARRAY));
14f9c5c9
AS
1903}
1904
4c4b4cd2
PH
1905/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1906
14f9c5c9 1907int
4c4b4cd2 1908ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1909{
556bdfd4 1910 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1911
1912 if (type == NULL)
1913 return 0;
61ee279c 1914 type = ada_check_typedef (type);
556bdfd4
UW
1915 return (data_type != NULL
1916 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1917 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1918}
1919
1920/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1921 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1922 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1923 is still needed. */
1924
14f9c5c9 1925int
ebf56fd3 1926ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1927{
d2e4a39e 1928 return
14f9c5c9
AS
1929 type != NULL
1930 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1931 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1932 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1933 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1934}
1935
1936
4c4b4cd2 1937/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1938 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1939 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1940 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1941 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1942 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1943 a descriptor. */
d2e4a39e
AS
1944struct type *
1945ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1946{
ad82864c
JB
1947 if (ada_is_constrained_packed_array_type (value_type (arr)))
1948 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1949
df407dfe
AC
1950 if (!ada_is_array_descriptor_type (value_type (arr)))
1951 return value_type (arr);
d2e4a39e
AS
1952
1953 if (!bounds)
ad82864c
JB
1954 {
1955 struct type *array_type =
1956 ada_check_typedef (desc_data_target_type (value_type (arr)));
1957
1958 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1959 TYPE_FIELD_BITSIZE (array_type, 0) =
1960 decode_packed_array_bitsize (value_type (arr));
1961
1962 return array_type;
1963 }
14f9c5c9
AS
1964 else
1965 {
d2e4a39e 1966 struct type *elt_type;
14f9c5c9 1967 int arity;
d2e4a39e 1968 struct value *descriptor;
14f9c5c9 1969
df407dfe
AC
1970 elt_type = ada_array_element_type (value_type (arr), -1);
1971 arity = ada_array_arity (value_type (arr));
14f9c5c9 1972
d2e4a39e 1973 if (elt_type == NULL || arity == 0)
df407dfe 1974 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1975
1976 descriptor = desc_bounds (arr);
d2e4a39e 1977 if (value_as_long (descriptor) == 0)
4c4b4cd2 1978 return NULL;
d2e4a39e 1979 while (arity > 0)
4c4b4cd2 1980 {
e9bb382b
UW
1981 struct type *range_type = alloc_type_copy (value_type (arr));
1982 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1983 struct value *low = desc_one_bound (descriptor, arity, 0);
1984 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1985
5b4ee69b 1986 arity -= 1;
0c9c3474
SA
1987 create_static_range_type (range_type, value_type (low),
1988 longest_to_int (value_as_long (low)),
1989 longest_to_int (value_as_long (high)));
4c4b4cd2 1990 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1991
1992 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1993 {
1994 /* We need to store the element packed bitsize, as well as
1995 recompute the array size, because it was previously
1996 computed based on the unpacked element size. */
1997 LONGEST lo = value_as_long (low);
1998 LONGEST hi = value_as_long (high);
1999
2000 TYPE_FIELD_BITSIZE (elt_type, 0) =
2001 decode_packed_array_bitsize (value_type (arr));
2002 /* If the array has no element, then the size is already
2003 zero, and does not need to be recomputed. */
2004 if (lo < hi)
2005 {
2006 int array_bitsize =
2007 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2008
2009 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2010 }
2011 }
4c4b4cd2 2012 }
14f9c5c9
AS
2013
2014 return lookup_pointer_type (elt_type);
2015 }
2016}
2017
2018/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
2019 Otherwise, returns either a standard GDB array with bounds set
2020 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2021 GDB array. Returns NULL if ARR is a null fat pointer. */
2022
d2e4a39e
AS
2023struct value *
2024ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 2025{
df407dfe 2026 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2027 {
d2e4a39e 2028 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 2029
14f9c5c9 2030 if (arrType == NULL)
4c4b4cd2 2031 return NULL;
14f9c5c9
AS
2032 return value_cast (arrType, value_copy (desc_data (arr)));
2033 }
ad82864c
JB
2034 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2035 return decode_constrained_packed_array (arr);
14f9c5c9
AS
2036 else
2037 return arr;
2038}
2039
2040/* If ARR does not represent an array, returns ARR unchanged.
2041 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
2042 be ARR itself if it already is in the proper form). */
2043
720d1a40 2044struct value *
d2e4a39e 2045ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 2046{
df407dfe 2047 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2048 {
d2e4a39e 2049 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 2050
14f9c5c9 2051 if (arrVal == NULL)
323e0a4a 2052 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 2053 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
2054 return value_ind (arrVal);
2055 }
ad82864c
JB
2056 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2057 return decode_constrained_packed_array (arr);
d2e4a39e 2058 else
14f9c5c9
AS
2059 return arr;
2060}
2061
2062/* If TYPE represents a GNAT array type, return it translated to an
2063 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
2064 packing). For other types, is the identity. */
2065
d2e4a39e
AS
2066struct type *
2067ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 2068{
ad82864c
JB
2069 if (ada_is_constrained_packed_array_type (type))
2070 return decode_constrained_packed_array_type (type);
17280b9f
UW
2071
2072 if (ada_is_array_descriptor_type (type))
556bdfd4 2073 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
2074
2075 return type;
14f9c5c9
AS
2076}
2077
4c4b4cd2
PH
2078/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
2079
ad82864c
JB
2080static int
2081ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
2082{
2083 if (type == NULL)
2084 return 0;
4c4b4cd2 2085 type = desc_base_type (type);
61ee279c 2086 type = ada_check_typedef (type);
d2e4a39e 2087 return
14f9c5c9
AS
2088 ada_type_name (type) != NULL
2089 && strstr (ada_type_name (type), "___XP") != NULL;
2090}
2091
ad82864c
JB
2092/* Non-zero iff TYPE represents a standard GNAT constrained
2093 packed-array type. */
2094
2095int
2096ada_is_constrained_packed_array_type (struct type *type)
2097{
2098 return ada_is_packed_array_type (type)
2099 && !ada_is_array_descriptor_type (type);
2100}
2101
2102/* Non-zero iff TYPE represents an array descriptor for a
2103 unconstrained packed-array type. */
2104
2105static int
2106ada_is_unconstrained_packed_array_type (struct type *type)
2107{
2108 return ada_is_packed_array_type (type)
2109 && ada_is_array_descriptor_type (type);
2110}
2111
2112/* Given that TYPE encodes a packed array type (constrained or unconstrained),
2113 return the size of its elements in bits. */
2114
2115static long
2116decode_packed_array_bitsize (struct type *type)
2117{
0d5cff50
DE
2118 const char *raw_name;
2119 const char *tail;
ad82864c
JB
2120 long bits;
2121
720d1a40
JB
2122 /* Access to arrays implemented as fat pointers are encoded as a typedef
2123 of the fat pointer type. We need the name of the fat pointer type
2124 to do the decoding, so strip the typedef layer. */
2125 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2126 type = ada_typedef_target_type (type);
2127
2128 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2129 if (!raw_name)
2130 raw_name = ada_type_name (desc_base_type (type));
2131
2132 if (!raw_name)
2133 return 0;
2134
2135 tail = strstr (raw_name, "___XP");
720d1a40 2136 gdb_assert (tail != NULL);
ad82864c
JB
2137
2138 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2139 {
2140 lim_warning
2141 (_("could not understand bit size information on packed array"));
2142 return 0;
2143 }
2144
2145 return bits;
2146}
2147
14f9c5c9
AS
2148/* Given that TYPE is a standard GDB array type with all bounds filled
2149 in, and that the element size of its ultimate scalar constituents
2150 (that is, either its elements, or, if it is an array of arrays, its
2151 elements' elements, etc.) is *ELT_BITS, return an identical type,
2152 but with the bit sizes of its elements (and those of any
2153 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2154 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2155 in bits.
2156
2157 Note that, for arrays whose index type has an XA encoding where
2158 a bound references a record discriminant, getting that discriminant,
2159 and therefore the actual value of that bound, is not possible
2160 because none of the given parameters gives us access to the record.
2161 This function assumes that it is OK in the context where it is being
2162 used to return an array whose bounds are still dynamic and where
2163 the length is arbitrary. */
4c4b4cd2 2164
d2e4a39e 2165static struct type *
ad82864c 2166constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2167{
d2e4a39e
AS
2168 struct type *new_elt_type;
2169 struct type *new_type;
99b1c762
JB
2170 struct type *index_type_desc;
2171 struct type *index_type;
14f9c5c9
AS
2172 LONGEST low_bound, high_bound;
2173
61ee279c 2174 type = ada_check_typedef (type);
14f9c5c9
AS
2175 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2176 return type;
2177
99b1c762
JB
2178 index_type_desc = ada_find_parallel_type (type, "___XA");
2179 if (index_type_desc)
2180 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2181 NULL);
2182 else
2183 index_type = TYPE_INDEX_TYPE (type);
2184
e9bb382b 2185 new_type = alloc_type_copy (type);
ad82864c
JB
2186 new_elt_type =
2187 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2188 elt_bits);
99b1c762 2189 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9
AS
2190 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2191 TYPE_NAME (new_type) = ada_type_name (type);
2192
4a46959e
JB
2193 if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2194 && is_dynamic_type (check_typedef (index_type)))
2195 || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
14f9c5c9
AS
2196 low_bound = high_bound = 0;
2197 if (high_bound < low_bound)
2198 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2199 else
14f9c5c9
AS
2200 {
2201 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2202 TYPE_LENGTH (new_type) =
4c4b4cd2 2203 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2204 }
2205
876cecd0 2206 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2207 return new_type;
2208}
2209
ad82864c
JB
2210/* The array type encoded by TYPE, where
2211 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2212
d2e4a39e 2213static struct type *
ad82864c 2214decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2215{
0d5cff50 2216 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2217 char *name;
0d5cff50 2218 const char *tail;
d2e4a39e 2219 struct type *shadow_type;
14f9c5c9 2220 long bits;
14f9c5c9 2221
727e3d2e
JB
2222 if (!raw_name)
2223 raw_name = ada_type_name (desc_base_type (type));
2224
2225 if (!raw_name)
2226 return NULL;
2227
2228 name = (char *) alloca (strlen (raw_name) + 1);
2229 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2230 type = desc_base_type (type);
2231
14f9c5c9
AS
2232 memcpy (name, raw_name, tail - raw_name);
2233 name[tail - raw_name] = '\000';
2234
b4ba55a1
JB
2235 shadow_type = ada_find_parallel_type_with_name (type, name);
2236
2237 if (shadow_type == NULL)
14f9c5c9 2238 {
323e0a4a 2239 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2240 return NULL;
2241 }
cb249c71 2242 CHECK_TYPEDEF (shadow_type);
14f9c5c9
AS
2243
2244 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2245 {
0963b4bd
MS
2246 lim_warning (_("could not understand bounds "
2247 "information on packed array"));
14f9c5c9
AS
2248 return NULL;
2249 }
d2e4a39e 2250
ad82864c
JB
2251 bits = decode_packed_array_bitsize (type);
2252 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2253}
2254
ad82864c
JB
2255/* Given that ARR is a struct value *indicating a GNAT constrained packed
2256 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2257 standard GDB array type except that the BITSIZEs of the array
2258 target types are set to the number of bits in each element, and the
4c4b4cd2 2259 type length is set appropriately. */
14f9c5c9 2260
d2e4a39e 2261static struct value *
ad82864c 2262decode_constrained_packed_array (struct value *arr)
14f9c5c9 2263{
4c4b4cd2 2264 struct type *type;
14f9c5c9 2265
11aa919a
PMR
2266 /* If our value is a pointer, then dereference it. Likewise if
2267 the value is a reference. Make sure that this operation does not
2268 cause the target type to be fixed, as this would indirectly cause
2269 this array to be decoded. The rest of the routine assumes that
2270 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2271 and "value_ind" routines to perform the dereferencing, as opposed
2272 to using "ada_coerce_ref" or "ada_value_ind". */
2273 arr = coerce_ref (arr);
828292f2 2274 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
284614f0 2275 arr = value_ind (arr);
4c4b4cd2 2276
ad82864c 2277 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2278 if (type == NULL)
2279 {
323e0a4a 2280 error (_("can't unpack array"));
14f9c5c9
AS
2281 return NULL;
2282 }
61ee279c 2283
50810684 2284 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2285 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2286 {
2287 /* This is a (right-justified) modular type representing a packed
2288 array with no wrapper. In order to interpret the value through
2289 the (left-justified) packed array type we just built, we must
2290 first left-justify it. */
2291 int bit_size, bit_pos;
2292 ULONGEST mod;
2293
df407dfe 2294 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2295 bit_size = 0;
2296 while (mod > 0)
2297 {
2298 bit_size += 1;
2299 mod >>= 1;
2300 }
df407dfe 2301 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2302 arr = ada_value_primitive_packed_val (arr, NULL,
2303 bit_pos / HOST_CHAR_BIT,
2304 bit_pos % HOST_CHAR_BIT,
2305 bit_size,
2306 type);
2307 }
2308
4c4b4cd2 2309 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2310}
2311
2312
2313/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2314 given in IND. ARR must be a simple array. */
14f9c5c9 2315
d2e4a39e
AS
2316static struct value *
2317value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2318{
2319 int i;
2320 int bits, elt_off, bit_off;
2321 long elt_total_bit_offset;
d2e4a39e
AS
2322 struct type *elt_type;
2323 struct value *v;
14f9c5c9
AS
2324
2325 bits = 0;
2326 elt_total_bit_offset = 0;
df407dfe 2327 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2328 for (i = 0; i < arity; i += 1)
14f9c5c9 2329 {
d2e4a39e 2330 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2331 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2332 error
0963b4bd
MS
2333 (_("attempt to do packed indexing of "
2334 "something other than a packed array"));
14f9c5c9 2335 else
4c4b4cd2
PH
2336 {
2337 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2338 LONGEST lowerbound, upperbound;
2339 LONGEST idx;
2340
2341 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2342 {
323e0a4a 2343 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2344 lowerbound = upperbound = 0;
2345 }
2346
3cb382c9 2347 idx = pos_atr (ind[i]);
4c4b4cd2 2348 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2349 lim_warning (_("packed array index %ld out of bounds"),
2350 (long) idx);
4c4b4cd2
PH
2351 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2352 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2353 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2354 }
14f9c5c9
AS
2355 }
2356 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2357 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2358
2359 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2360 bits, elt_type);
14f9c5c9
AS
2361 return v;
2362}
2363
4c4b4cd2 2364/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2365
2366static int
d2e4a39e 2367has_negatives (struct type *type)
14f9c5c9 2368{
d2e4a39e
AS
2369 switch (TYPE_CODE (type))
2370 {
2371 default:
2372 return 0;
2373 case TYPE_CODE_INT:
2374 return !TYPE_UNSIGNED (type);
2375 case TYPE_CODE_RANGE:
2376 return TYPE_LOW_BOUND (type) < 0;
2377 }
14f9c5c9 2378}
d2e4a39e 2379
14f9c5c9
AS
2380
2381/* Create a new value of type TYPE from the contents of OBJ starting
2382 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2383 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
0963b4bd 2384 assigning through the result will set the field fetched from.
4c4b4cd2
PH
2385 VALADDR is ignored unless OBJ is NULL, in which case,
2386 VALADDR+OFFSET must address the start of storage containing the
2387 packed value. The value returned in this case is never an lval.
2388 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
14f9c5c9 2389
d2e4a39e 2390struct value *
fc1a4b47 2391ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
a2bd3dcd 2392 long offset, int bit_offset, int bit_size,
4c4b4cd2 2393 struct type *type)
14f9c5c9 2394{
d2e4a39e 2395 struct value *v;
4c4b4cd2
PH
2396 int src, /* Index into the source area */
2397 targ, /* Index into the target area */
2398 srcBitsLeft, /* Number of source bits left to move */
2399 nsrc, ntarg, /* Number of source and target bytes */
2400 unusedLS, /* Number of bits in next significant
2401 byte of source that are unused */
2402 accumSize; /* Number of meaningful bits in accum */
2403 unsigned char *bytes; /* First byte containing data to unpack */
d2e4a39e 2404 unsigned char *unpacked;
4c4b4cd2 2405 unsigned long accum; /* Staging area for bits being transferred */
14f9c5c9
AS
2406 unsigned char sign;
2407 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
4c4b4cd2
PH
2408 /* Transmit bytes from least to most significant; delta is the direction
2409 the indices move. */
50810684 2410 int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
14f9c5c9 2411
61ee279c 2412 type = ada_check_typedef (type);
14f9c5c9
AS
2413
2414 if (obj == NULL)
2415 {
2416 v = allocate_value (type);
d2e4a39e 2417 bytes = (unsigned char *) (valaddr + offset);
14f9c5c9 2418 }
9214ee5f 2419 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
14f9c5c9 2420 {
53ba8333 2421 v = value_at (type, value_address (obj));
9f1f738a 2422 type = value_type (v);
d2e4a39e 2423 bytes = (unsigned char *) alloca (len);
53ba8333 2424 read_memory (value_address (v) + offset, bytes, len);
14f9c5c9 2425 }
d2e4a39e 2426 else
14f9c5c9
AS
2427 {
2428 v = allocate_value (type);
0fd88904 2429 bytes = (unsigned char *) value_contents (obj) + offset;
14f9c5c9 2430 }
d2e4a39e
AS
2431
2432 if (obj != NULL)
14f9c5c9 2433 {
53ba8333 2434 long new_offset = offset;
5b4ee69b 2435
74bcbdf3 2436 set_value_component_location (v, obj);
9bbda503
AC
2437 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2438 set_value_bitsize (v, bit_size);
df407dfe 2439 if (value_bitpos (v) >= HOST_CHAR_BIT)
4c4b4cd2 2440 {
53ba8333 2441 ++new_offset;
9bbda503 2442 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
4c4b4cd2 2443 }
53ba8333
JB
2444 set_value_offset (v, new_offset);
2445
2446 /* Also set the parent value. This is needed when trying to
2447 assign a new value (in inferior memory). */
2448 set_value_parent (v, obj);
14f9c5c9
AS
2449 }
2450 else
9bbda503 2451 set_value_bitsize (v, bit_size);
0fd88904 2452 unpacked = (unsigned char *) value_contents (v);
14f9c5c9
AS
2453
2454 srcBitsLeft = bit_size;
2455 nsrc = len;
2456 ntarg = TYPE_LENGTH (type);
2457 sign = 0;
2458 if (bit_size == 0)
2459 {
2460 memset (unpacked, 0, TYPE_LENGTH (type));
2461 return v;
2462 }
50810684 2463 else if (gdbarch_bits_big_endian (get_type_arch (type)))
14f9c5c9 2464 {
d2e4a39e 2465 src = len - 1;
1265e4aa
JB
2466 if (has_negatives (type)
2467 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2468 sign = ~0;
d2e4a39e
AS
2469
2470 unusedLS =
4c4b4cd2
PH
2471 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2472 % HOST_CHAR_BIT;
14f9c5c9
AS
2473
2474 switch (TYPE_CODE (type))
4c4b4cd2
PH
2475 {
2476 case TYPE_CODE_ARRAY:
2477 case TYPE_CODE_UNION:
2478 case TYPE_CODE_STRUCT:
2479 /* Non-scalar values must be aligned at a byte boundary... */
2480 accumSize =
2481 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2482 /* ... And are placed at the beginning (most-significant) bytes
2483 of the target. */
529cad9c 2484 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
0056e4d5 2485 ntarg = targ + 1;
4c4b4cd2
PH
2486 break;
2487 default:
2488 accumSize = 0;
2489 targ = TYPE_LENGTH (type) - 1;
2490 break;
2491 }
14f9c5c9 2492 }
d2e4a39e 2493 else
14f9c5c9
AS
2494 {
2495 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2496
2497 src = targ = 0;
2498 unusedLS = bit_offset;
2499 accumSize = 0;
2500
d2e4a39e 2501 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2502 sign = ~0;
14f9c5c9 2503 }
d2e4a39e 2504
14f9c5c9
AS
2505 accum = 0;
2506 while (nsrc > 0)
2507 {
2508 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2509 part of the value. */
d2e4a39e 2510 unsigned int unusedMSMask =
4c4b4cd2
PH
2511 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2512 1;
2513 /* Sign-extend bits for this byte. */
14f9c5c9 2514 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2515
d2e4a39e 2516 accum |=
4c4b4cd2 2517 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2518 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2519 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2
PH
2520 {
2521 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2522 accumSize -= HOST_CHAR_BIT;
2523 accum >>= HOST_CHAR_BIT;
2524 ntarg -= 1;
2525 targ += delta;
2526 }
14f9c5c9
AS
2527 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2528 unusedLS = 0;
2529 nsrc -= 1;
2530 src += delta;
2531 }
2532 while (ntarg > 0)
2533 {
2534 accum |= sign << accumSize;
2535 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2536 accumSize -= HOST_CHAR_BIT;
2537 accum >>= HOST_CHAR_BIT;
2538 ntarg -= 1;
2539 targ += delta;
2540 }
2541
2542 return v;
2543}
d2e4a39e 2544
14f9c5c9
AS
2545/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2546 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2547 not overlap. */
14f9c5c9 2548static void
fc1a4b47 2549move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2550 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2551{
2552 unsigned int accum, mask;
2553 int accum_bits, chunk_size;
2554
2555 target += targ_offset / HOST_CHAR_BIT;
2556 targ_offset %= HOST_CHAR_BIT;
2557 source += src_offset / HOST_CHAR_BIT;
2558 src_offset %= HOST_CHAR_BIT;
50810684 2559 if (bits_big_endian_p)
14f9c5c9
AS
2560 {
2561 accum = (unsigned char) *source;
2562 source += 1;
2563 accum_bits = HOST_CHAR_BIT - src_offset;
2564
d2e4a39e 2565 while (n > 0)
4c4b4cd2
PH
2566 {
2567 int unused_right;
5b4ee69b 2568
4c4b4cd2
PH
2569 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2570 accum_bits += HOST_CHAR_BIT;
2571 source += 1;
2572 chunk_size = HOST_CHAR_BIT - targ_offset;
2573 if (chunk_size > n)
2574 chunk_size = n;
2575 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2576 mask = ((1 << chunk_size) - 1) << unused_right;
2577 *target =
2578 (*target & ~mask)
2579 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2580 n -= chunk_size;
2581 accum_bits -= chunk_size;
2582 target += 1;
2583 targ_offset = 0;
2584 }
14f9c5c9
AS
2585 }
2586 else
2587 {
2588 accum = (unsigned char) *source >> src_offset;
2589 source += 1;
2590 accum_bits = HOST_CHAR_BIT - src_offset;
2591
d2e4a39e 2592 while (n > 0)
4c4b4cd2
PH
2593 {
2594 accum = accum + ((unsigned char) *source << accum_bits);
2595 accum_bits += HOST_CHAR_BIT;
2596 source += 1;
2597 chunk_size = HOST_CHAR_BIT - targ_offset;
2598 if (chunk_size > n)
2599 chunk_size = n;
2600 mask = ((1 << chunk_size) - 1) << targ_offset;
2601 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2602 n -= chunk_size;
2603 accum_bits -= chunk_size;
2604 accum >>= chunk_size;
2605 target += 1;
2606 targ_offset = 0;
2607 }
14f9c5c9
AS
2608 }
2609}
2610
14f9c5c9
AS
2611/* Store the contents of FROMVAL into the location of TOVAL.
2612 Return a new value with the location of TOVAL and contents of
2613 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2614 floating-point or non-scalar types. */
14f9c5c9 2615
d2e4a39e
AS
2616static struct value *
2617ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2618{
df407dfe
AC
2619 struct type *type = value_type (toval);
2620 int bits = value_bitsize (toval);
14f9c5c9 2621
52ce6436
PH
2622 toval = ada_coerce_ref (toval);
2623 fromval = ada_coerce_ref (fromval);
2624
2625 if (ada_is_direct_array_type (value_type (toval)))
2626 toval = ada_coerce_to_simple_array (toval);
2627 if (ada_is_direct_array_type (value_type (fromval)))
2628 fromval = ada_coerce_to_simple_array (fromval);
2629
88e3b34b 2630 if (!deprecated_value_modifiable (toval))
323e0a4a 2631 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2632
d2e4a39e 2633 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2634 && bits > 0
d2e4a39e 2635 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2636 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2637 {
df407dfe
AC
2638 int len = (value_bitpos (toval)
2639 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2640 int from_size;
948f8e3d 2641 gdb_byte *buffer = alloca (len);
d2e4a39e 2642 struct value *val;
42ae5230 2643 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2644
2645 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2646 fromval = value_cast (type, fromval);
14f9c5c9 2647
52ce6436 2648 read_memory (to_addr, buffer, len);
aced2898
PH
2649 from_size = value_bitsize (fromval);
2650 if (from_size == 0)
2651 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2652 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2653 move_bits (buffer, value_bitpos (toval),
50810684 2654 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2655 else
50810684
UW
2656 move_bits (buffer, value_bitpos (toval),
2657 value_contents (fromval), 0, bits, 0);
972daa01 2658 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2659
14f9c5c9 2660 val = value_copy (toval);
0fd88904 2661 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2662 TYPE_LENGTH (type));
04624583 2663 deprecated_set_value_type (val, type);
d2e4a39e 2664
14f9c5c9
AS
2665 return val;
2666 }
2667
2668 return value_assign (toval, fromval);
2669}
2670
2671
52ce6436
PH
2672/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2673 * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2674 * CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2675 * COMPONENT, and not the inferior's memory. The current contents
2676 * of COMPONENT are ignored. */
2677static void
2678value_assign_to_component (struct value *container, struct value *component,
2679 struct value *val)
2680{
2681 LONGEST offset_in_container =
42ae5230 2682 (LONGEST) (value_address (component) - value_address (container));
52ce6436
PH
2683 int bit_offset_in_container =
2684 value_bitpos (component) - value_bitpos (container);
2685 int bits;
2686
2687 val = value_cast (value_type (component), val);
2688
2689 if (value_bitsize (component) == 0)
2690 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2691 else
2692 bits = value_bitsize (component);
2693
50810684 2694 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
52ce6436
PH
2695 move_bits (value_contents_writeable (container) + offset_in_container,
2696 value_bitpos (container) + bit_offset_in_container,
2697 value_contents (val),
2698 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
50810684 2699 bits, 1);
52ce6436
PH
2700 else
2701 move_bits (value_contents_writeable (container) + offset_in_container,
2702 value_bitpos (container) + bit_offset_in_container,
50810684 2703 value_contents (val), 0, bits, 0);
52ce6436
PH
2704}
2705
4c4b4cd2
PH
2706/* The value of the element of array ARR at the ARITY indices given in IND.
2707 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2708 thereto. */
2709
d2e4a39e
AS
2710struct value *
2711ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2712{
2713 int k;
d2e4a39e
AS
2714 struct value *elt;
2715 struct type *elt_type;
14f9c5c9
AS
2716
2717 elt = ada_coerce_to_simple_array (arr);
2718
df407dfe 2719 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2720 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2721 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2722 return value_subscript_packed (elt, arity, ind);
2723
2724 for (k = 0; k < arity; k += 1)
2725 {
2726 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2727 error (_("too many subscripts (%d expected)"), k);
2497b498 2728 elt = value_subscript (elt, pos_atr (ind[k]));
14f9c5c9
AS
2729 }
2730 return elt;
2731}
2732
deede10c
JB
2733/* Assuming ARR is a pointer to a GDB array, the value of the element
2734 of *ARR at the ARITY indices given in IND.
2735 Does not read the entire array into memory. */
14f9c5c9 2736
2c0b251b 2737static struct value *
deede10c 2738ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2739{
2740 int k;
deede10c
JB
2741 struct type *type
2742 = check_typedef (value_enclosing_type (ada_value_ind (arr)));
14f9c5c9
AS
2743
2744 for (k = 0; k < arity; k += 1)
2745 {
2746 LONGEST lwb, upb;
14f9c5c9
AS
2747
2748 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2749 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2750 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2751 value_copy (arr));
14f9c5c9 2752 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2497b498 2753 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2754 type = TYPE_TARGET_TYPE (type);
2755 }
2756
2757 return value_ind (arr);
2758}
2759
0b5d8877 2760/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
f5938064
JG
2761 actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2762 elements starting at index LOW. The lower bound of this array is LOW, as
0963b4bd 2763 per Ada rules. */
0b5d8877 2764static struct value *
f5938064
JG
2765ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2766 int low, int high)
0b5d8877 2767{
b0dd7688 2768 struct type *type0 = ada_check_typedef (type);
6c038f32 2769 CORE_ADDR base = value_as_address (array_ptr)
b0dd7688
JB
2770 + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2771 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
0c9c3474
SA
2772 struct type *index_type
2773 = create_static_range_type (NULL,
2774 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2775 low, high);
6c038f32 2776 struct type *slice_type =
b0dd7688 2777 create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
5b4ee69b 2778
f5938064 2779 return value_at_lazy (slice_type, base);
0b5d8877
PH
2780}
2781
2782
2783static struct value *
2784ada_value_slice (struct value *array, int low, int high)
2785{
b0dd7688 2786 struct type *type = ada_check_typedef (value_type (array));
0c9c3474
SA
2787 struct type *index_type
2788 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
6c038f32 2789 struct type *slice_type =
0b5d8877 2790 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
5b4ee69b 2791
6c038f32 2792 return value_cast (slice_type, value_slice (array, low, high - low + 1));
0b5d8877
PH
2793}
2794
14f9c5c9
AS
2795/* If type is a record type in the form of a standard GNAT array
2796 descriptor, returns the number of dimensions for type. If arr is a
2797 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2798 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2799
2800int
d2e4a39e 2801ada_array_arity (struct type *type)
14f9c5c9
AS
2802{
2803 int arity;
2804
2805 if (type == NULL)
2806 return 0;
2807
2808 type = desc_base_type (type);
2809
2810 arity = 0;
d2e4a39e 2811 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2812 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2813 else
2814 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2815 {
4c4b4cd2 2816 arity += 1;
61ee279c 2817 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2818 }
d2e4a39e 2819
14f9c5c9
AS
2820 return arity;
2821}
2822
2823/* If TYPE is a record type in the form of a standard GNAT array
2824 descriptor or a simple array type, returns the element type for
2825 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2826 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2827
d2e4a39e
AS
2828struct type *
2829ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2830{
2831 type = desc_base_type (type);
2832
d2e4a39e 2833 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2834 {
2835 int k;
d2e4a39e 2836 struct type *p_array_type;
14f9c5c9 2837
556bdfd4 2838 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2839
2840 k = ada_array_arity (type);
2841 if (k == 0)
4c4b4cd2 2842 return NULL;
d2e4a39e 2843
4c4b4cd2 2844 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2845 if (nindices >= 0 && k > nindices)
4c4b4cd2 2846 k = nindices;
d2e4a39e 2847 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2848 {
61ee279c 2849 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2850 k -= 1;
2851 }
14f9c5c9
AS
2852 return p_array_type;
2853 }
2854 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2855 {
2856 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2857 {
2858 type = TYPE_TARGET_TYPE (type);
2859 nindices -= 1;
2860 }
14f9c5c9
AS
2861 return type;
2862 }
2863
2864 return NULL;
2865}
2866
4c4b4cd2 2867/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2868 Does not examine memory. Throws an error if N is invalid or TYPE
2869 is not an array type. NAME is the name of the Ada attribute being
2870 evaluated ('range, 'first, 'last, or 'length); it is used in building
2871 the error message. */
14f9c5c9 2872
1eea4ebd
UW
2873static struct type *
2874ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2875{
4c4b4cd2
PH
2876 struct type *result_type;
2877
14f9c5c9
AS
2878 type = desc_base_type (type);
2879
1eea4ebd
UW
2880 if (n < 0 || n > ada_array_arity (type))
2881 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2882
4c4b4cd2 2883 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2884 {
2885 int i;
2886
2887 for (i = 1; i < n; i += 1)
4c4b4cd2 2888 type = TYPE_TARGET_TYPE (type);
262452ec 2889 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
2890 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2891 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 2892 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
2893 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2894 result_type = NULL;
14f9c5c9 2895 }
d2e4a39e 2896 else
1eea4ebd
UW
2897 {
2898 result_type = desc_index_type (desc_bounds_type (type), n);
2899 if (result_type == NULL)
2900 error (_("attempt to take bound of something that is not an array"));
2901 }
2902
2903 return result_type;
14f9c5c9
AS
2904}
2905
2906/* Given that arr is an array type, returns the lower bound of the
2907 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2908 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2909 array-descriptor type. It works for other arrays with bounds supplied
2910 by run-time quantities other than discriminants. */
14f9c5c9 2911
abb68b3e 2912static LONGEST
fb5e3d5c 2913ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2914{
8a48ac95 2915 struct type *type, *index_type_desc, *index_type;
1ce677a4 2916 int i;
262452ec
JK
2917
2918 gdb_assert (which == 0 || which == 1);
14f9c5c9 2919
ad82864c
JB
2920 if (ada_is_constrained_packed_array_type (arr_type))
2921 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2922
4c4b4cd2 2923 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2924 return (LONGEST) - which;
14f9c5c9
AS
2925
2926 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2927 type = TYPE_TARGET_TYPE (arr_type);
2928 else
2929 type = arr_type;
2930
bafffb51
JB
2931 if (TYPE_FIXED_INSTANCE (type))
2932 {
2933 /* The array has already been fixed, so we do not need to
2934 check the parallel ___XA type again. That encoding has
2935 already been applied, so ignore it now. */
2936 index_type_desc = NULL;
2937 }
2938 else
2939 {
2940 index_type_desc = ada_find_parallel_type (type, "___XA");
2941 ada_fixup_array_indexes_type (index_type_desc);
2942 }
2943
262452ec 2944 if (index_type_desc != NULL)
28c85d6c
JB
2945 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2946 NULL);
262452ec 2947 else
8a48ac95
JB
2948 {
2949 struct type *elt_type = check_typedef (type);
2950
2951 for (i = 1; i < n; i++)
2952 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2953
2954 index_type = TYPE_INDEX_TYPE (elt_type);
2955 }
262452ec 2956
43bbcdc2
PH
2957 return
2958 (LONGEST) (which == 0
2959 ? ada_discrete_type_low_bound (index_type)
2960 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2961}
2962
2963/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
2964 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2965 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 2966 supplied by run-time quantities other than discriminants. */
14f9c5c9 2967
1eea4ebd 2968static LONGEST
4dc81987 2969ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 2970{
eb479039
JB
2971 struct type *arr_type;
2972
2973 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2974 arr = value_ind (arr);
2975 arr_type = value_enclosing_type (arr);
14f9c5c9 2976
ad82864c
JB
2977 if (ada_is_constrained_packed_array_type (arr_type))
2978 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 2979 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 2980 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 2981 else
1eea4ebd 2982 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
2983}
2984
2985/* Given that arr is an array value, returns the length of the
2986 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
2987 supplied by run-time quantities other than discriminants.
2988 Does not work for arrays indexed by enumeration types with representation
2989 clauses at the moment. */
14f9c5c9 2990
1eea4ebd 2991static LONGEST
d2e4a39e 2992ada_array_length (struct value *arr, int n)
14f9c5c9 2993{
eb479039
JB
2994 struct type *arr_type;
2995
2996 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2997 arr = value_ind (arr);
2998 arr_type = value_enclosing_type (arr);
14f9c5c9 2999
ad82864c
JB
3000 if (ada_is_constrained_packed_array_type (arr_type))
3001 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3002
4c4b4cd2 3003 if (ada_is_simple_array_type (arr_type))
1eea4ebd
UW
3004 return (ada_array_bound_from_type (arr_type, n, 1)
3005 - ada_array_bound_from_type (arr_type, n, 0) + 1);
14f9c5c9 3006 else
1eea4ebd
UW
3007 return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
3008 - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
4c4b4cd2
PH
3009}
3010
3011/* An empty array whose type is that of ARR_TYPE (an array type),
3012 with bounds LOW to LOW-1. */
3013
3014static struct value *
3015empty_array (struct type *arr_type, int low)
3016{
b0dd7688 3017 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3018 struct type *index_type
3019 = create_static_range_type
3020 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, low - 1);
b0dd7688 3021 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3022
0b5d8877 3023 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3024}
14f9c5c9 3025\f
d2e4a39e 3026
4c4b4cd2 3027 /* Name resolution */
14f9c5c9 3028
4c4b4cd2
PH
3029/* The "decoded" name for the user-definable Ada operator corresponding
3030 to OP. */
14f9c5c9 3031
d2e4a39e 3032static const char *
4c4b4cd2 3033ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3034{
3035 int i;
3036
4c4b4cd2 3037 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3038 {
3039 if (ada_opname_table[i].op == op)
4c4b4cd2 3040 return ada_opname_table[i].decoded;
14f9c5c9 3041 }
323e0a4a 3042 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3043}
3044
3045
4c4b4cd2
PH
3046/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3047 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3048 undefined namespace) and converts operators that are
3049 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
3050 non-null, it provides a preferred result type [at the moment, only
3051 type void has any effect---causing procedures to be preferred over
3052 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 3053 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3054
4c4b4cd2
PH
3055static void
3056resolve (struct expression **expp, int void_context_p)
14f9c5c9 3057{
30b15541
UW
3058 struct type *context_type = NULL;
3059 int pc = 0;
3060
3061 if (void_context_p)
3062 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3063
3064 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
3065}
3066
4c4b4cd2
PH
3067/* Resolve the operator of the subexpression beginning at
3068 position *POS of *EXPP. "Resolving" consists of replacing
3069 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3070 with their resolutions, replacing built-in operators with
3071 function calls to user-defined operators, where appropriate, and,
3072 when DEPROCEDURE_P is non-zero, converting function-valued variables
3073 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3074 are as in ada_resolve, above. */
14f9c5c9 3075
d2e4a39e 3076static struct value *
4c4b4cd2 3077resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 3078 struct type *context_type)
14f9c5c9
AS
3079{
3080 int pc = *pos;
3081 int i;
4c4b4cd2 3082 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 3083 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
3084 struct value **argvec; /* Vector of operand types (alloca'ed). */
3085 int nargs; /* Number of operands. */
52ce6436 3086 int oplen;
14f9c5c9
AS
3087
3088 argvec = NULL;
3089 nargs = 0;
3090 exp = *expp;
3091
52ce6436
PH
3092 /* Pass one: resolve operands, saving their types and updating *pos,
3093 if needed. */
14f9c5c9
AS
3094 switch (op)
3095 {
4c4b4cd2
PH
3096 case OP_FUNCALL:
3097 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
3098 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3099 *pos += 7;
4c4b4cd2
PH
3100 else
3101 {
3102 *pos += 3;
3103 resolve_subexp (expp, pos, 0, NULL);
3104 }
3105 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
3106 break;
3107
14f9c5c9 3108 case UNOP_ADDR:
4c4b4cd2
PH
3109 *pos += 1;
3110 resolve_subexp (expp, pos, 0, NULL);
3111 break;
3112
52ce6436
PH
3113 case UNOP_QUAL:
3114 *pos += 3;
17466c1a 3115 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
3116 break;
3117
52ce6436 3118 case OP_ATR_MODULUS:
4c4b4cd2
PH
3119 case OP_ATR_SIZE:
3120 case OP_ATR_TAG:
4c4b4cd2
PH
3121 case OP_ATR_FIRST:
3122 case OP_ATR_LAST:
3123 case OP_ATR_LENGTH:
3124 case OP_ATR_POS:
3125 case OP_ATR_VAL:
4c4b4cd2
PH
3126 case OP_ATR_MIN:
3127 case OP_ATR_MAX:
52ce6436
PH
3128 case TERNOP_IN_RANGE:
3129 case BINOP_IN_BOUNDS:
3130 case UNOP_IN_RANGE:
3131 case OP_AGGREGATE:
3132 case OP_OTHERS:
3133 case OP_CHOICES:
3134 case OP_POSITIONAL:
3135 case OP_DISCRETE_RANGE:
3136 case OP_NAME:
3137 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3138 *pos += oplen;
14f9c5c9
AS
3139 break;
3140
3141 case BINOP_ASSIGN:
3142 {
4c4b4cd2
PH
3143 struct value *arg1;
3144
3145 *pos += 1;
3146 arg1 = resolve_subexp (expp, pos, 0, NULL);
3147 if (arg1 == NULL)
3148 resolve_subexp (expp, pos, 1, NULL);
3149 else
df407dfe 3150 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 3151 break;
14f9c5c9
AS
3152 }
3153
4c4b4cd2 3154 case UNOP_CAST:
4c4b4cd2
PH
3155 *pos += 3;
3156 nargs = 1;
3157 break;
14f9c5c9 3158
4c4b4cd2
PH
3159 case BINOP_ADD:
3160 case BINOP_SUB:
3161 case BINOP_MUL:
3162 case BINOP_DIV:
3163 case BINOP_REM:
3164 case BINOP_MOD:
3165 case BINOP_EXP:
3166 case BINOP_CONCAT:
3167 case BINOP_LOGICAL_AND:
3168 case BINOP_LOGICAL_OR:
3169 case BINOP_BITWISE_AND:
3170 case BINOP_BITWISE_IOR:
3171 case BINOP_BITWISE_XOR:
14f9c5c9 3172
4c4b4cd2
PH
3173 case BINOP_EQUAL:
3174 case BINOP_NOTEQUAL:
3175 case BINOP_LESS:
3176 case BINOP_GTR:
3177 case BINOP_LEQ:
3178 case BINOP_GEQ:
14f9c5c9 3179
4c4b4cd2
PH
3180 case BINOP_REPEAT:
3181 case BINOP_SUBSCRIPT:
3182 case BINOP_COMMA:
40c8aaa9
JB
3183 *pos += 1;
3184 nargs = 2;
3185 break;
14f9c5c9 3186
4c4b4cd2
PH
3187 case UNOP_NEG:
3188 case UNOP_PLUS:
3189 case UNOP_LOGICAL_NOT:
3190 case UNOP_ABS:
3191 case UNOP_IND:
3192 *pos += 1;
3193 nargs = 1;
3194 break;
14f9c5c9 3195
4c4b4cd2
PH
3196 case OP_LONG:
3197 case OP_DOUBLE:
3198 case OP_VAR_VALUE:
3199 *pos += 4;
3200 break;
14f9c5c9 3201
4c4b4cd2
PH
3202 case OP_TYPE:
3203 case OP_BOOL:
3204 case OP_LAST:
4c4b4cd2
PH
3205 case OP_INTERNALVAR:
3206 *pos += 3;
3207 break;
14f9c5c9 3208
4c4b4cd2
PH
3209 case UNOP_MEMVAL:
3210 *pos += 3;
3211 nargs = 1;
3212 break;
3213
67f3407f
DJ
3214 case OP_REGISTER:
3215 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3216 break;
3217
4c4b4cd2
PH
3218 case STRUCTOP_STRUCT:
3219 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3220 nargs = 1;
3221 break;
3222
4c4b4cd2 3223 case TERNOP_SLICE:
4c4b4cd2
PH
3224 *pos += 1;
3225 nargs = 3;
3226 break;
3227
52ce6436 3228 case OP_STRING:
14f9c5c9 3229 break;
4c4b4cd2
PH
3230
3231 default:
323e0a4a 3232 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3233 }
3234
76a01679 3235 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
4c4b4cd2
PH
3236 for (i = 0; i < nargs; i += 1)
3237 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3238 argvec[i] = NULL;
3239 exp = *expp;
3240
3241 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3242 switch (op)
3243 {
3244 default:
3245 break;
3246
14f9c5c9 3247 case OP_VAR_VALUE:
4c4b4cd2 3248 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
3249 {
3250 struct ada_symbol_info *candidates;
3251 int n_candidates;
3252
3253 n_candidates =
3254 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3255 (exp->elts[pc + 2].symbol),
3256 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3257 &candidates);
76a01679
JB
3258
3259 if (n_candidates > 1)
3260 {
3261 /* Types tend to get re-introduced locally, so if there
3262 are any local symbols that are not types, first filter
3263 out all types. */
3264 int j;
3265 for (j = 0; j < n_candidates; j += 1)
3266 switch (SYMBOL_CLASS (candidates[j].sym))
3267 {
3268 case LOC_REGISTER:
3269 case LOC_ARG:
3270 case LOC_REF_ARG:
76a01679
JB
3271 case LOC_REGPARM_ADDR:
3272 case LOC_LOCAL:
76a01679 3273 case LOC_COMPUTED:
76a01679
JB
3274 goto FoundNonType;
3275 default:
3276 break;
3277 }
3278 FoundNonType:
3279 if (j < n_candidates)
3280 {
3281 j = 0;
3282 while (j < n_candidates)
3283 {
3284 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3285 {
3286 candidates[j] = candidates[n_candidates - 1];
3287 n_candidates -= 1;
3288 }
3289 else
3290 j += 1;
3291 }
3292 }
3293 }
3294
3295 if (n_candidates == 0)
323e0a4a 3296 error (_("No definition found for %s"),
76a01679
JB
3297 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3298 else if (n_candidates == 1)
3299 i = 0;
3300 else if (deprocedure_p
3301 && !is_nonfunction (candidates, n_candidates))
3302 {
06d5cf63
JB
3303 i = ada_resolve_function
3304 (candidates, n_candidates, NULL, 0,
3305 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3306 context_type);
76a01679 3307 if (i < 0)
323e0a4a 3308 error (_("Could not find a match for %s"),
76a01679
JB
3309 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3310 }
3311 else
3312 {
323e0a4a 3313 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3314 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3315 user_select_syms (candidates, n_candidates, 1);
3316 i = 0;
3317 }
3318
3319 exp->elts[pc + 1].block = candidates[i].block;
3320 exp->elts[pc + 2].symbol = candidates[i].sym;
1265e4aa
JB
3321 if (innermost_block == NULL
3322 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3323 innermost_block = candidates[i].block;
3324 }
3325
3326 if (deprocedure_p
3327 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3328 == TYPE_CODE_FUNC))
3329 {
3330 replace_operator_with_call (expp, pc, 0, 0,
3331 exp->elts[pc + 2].symbol,
3332 exp->elts[pc + 1].block);
3333 exp = *expp;
3334 }
14f9c5c9
AS
3335 break;
3336
3337 case OP_FUNCALL:
3338 {
4c4b4cd2 3339 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3340 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2
PH
3341 {
3342 struct ada_symbol_info *candidates;
3343 int n_candidates;
3344
3345 n_candidates =
76a01679
JB
3346 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3347 (exp->elts[pc + 5].symbol),
3348 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3349 &candidates);
4c4b4cd2
PH
3350 if (n_candidates == 1)
3351 i = 0;
3352 else
3353 {
06d5cf63
JB
3354 i = ada_resolve_function
3355 (candidates, n_candidates,
3356 argvec, nargs,
3357 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3358 context_type);
4c4b4cd2 3359 if (i < 0)
323e0a4a 3360 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3361 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3362 }
3363
3364 exp->elts[pc + 4].block = candidates[i].block;
3365 exp->elts[pc + 5].symbol = candidates[i].sym;
1265e4aa
JB
3366 if (innermost_block == NULL
3367 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3368 innermost_block = candidates[i].block;
3369 }
14f9c5c9
AS
3370 }
3371 break;
3372 case BINOP_ADD:
3373 case BINOP_SUB:
3374 case BINOP_MUL:
3375 case BINOP_DIV:
3376 case BINOP_REM:
3377 case BINOP_MOD:
3378 case BINOP_CONCAT:
3379 case BINOP_BITWISE_AND:
3380 case BINOP_BITWISE_IOR:
3381 case BINOP_BITWISE_XOR:
3382 case BINOP_EQUAL:
3383 case BINOP_NOTEQUAL:
3384 case BINOP_LESS:
3385 case BINOP_GTR:
3386 case BINOP_LEQ:
3387 case BINOP_GEQ:
3388 case BINOP_EXP:
3389 case UNOP_NEG:
3390 case UNOP_PLUS:
3391 case UNOP_LOGICAL_NOT:
3392 case UNOP_ABS:
3393 if (possible_user_operator_p (op, argvec))
4c4b4cd2
PH
3394 {
3395 struct ada_symbol_info *candidates;
3396 int n_candidates;
3397
3398 n_candidates =
3399 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3400 (struct block *) NULL, VAR_DOMAIN,
4eeaa230 3401 &candidates);
4c4b4cd2 3402 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3403 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3404 if (i < 0)
3405 break;
3406
76a01679
JB
3407 replace_operator_with_call (expp, pc, nargs, 1,
3408 candidates[i].sym, candidates[i].block);
4c4b4cd2
PH
3409 exp = *expp;
3410 }
14f9c5c9 3411 break;
4c4b4cd2
PH
3412
3413 case OP_TYPE:
b3dbf008 3414 case OP_REGISTER:
4c4b4cd2 3415 return NULL;
14f9c5c9
AS
3416 }
3417
3418 *pos = pc;
3419 return evaluate_subexp_type (exp, pos);
3420}
3421
3422/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3423 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3424 a non-pointer. */
14f9c5c9 3425/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3426 liberal. */
14f9c5c9
AS
3427
3428static int
4dc81987 3429ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3430{
61ee279c
PH
3431 ftype = ada_check_typedef (ftype);
3432 atype = ada_check_typedef (atype);
14f9c5c9
AS
3433
3434 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3435 ftype = TYPE_TARGET_TYPE (ftype);
3436 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3437 atype = TYPE_TARGET_TYPE (atype);
3438
d2e4a39e 3439 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3440 {
3441 default:
5b3d5b7d 3442 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3443 case TYPE_CODE_PTR:
3444 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3445 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3446 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3447 else
1265e4aa
JB
3448 return (may_deref
3449 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3450 case TYPE_CODE_INT:
3451 case TYPE_CODE_ENUM:
3452 case TYPE_CODE_RANGE:
3453 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3454 {
3455 case TYPE_CODE_INT:
3456 case TYPE_CODE_ENUM:
3457 case TYPE_CODE_RANGE:
3458 return 1;
3459 default:
3460 return 0;
3461 }
14f9c5c9
AS
3462
3463 case TYPE_CODE_ARRAY:
d2e4a39e 3464 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3465 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3466
3467 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3468 if (ada_is_array_descriptor_type (ftype))
3469 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3470 || ada_is_array_descriptor_type (atype));
14f9c5c9 3471 else
4c4b4cd2
PH
3472 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3473 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3474
3475 case TYPE_CODE_UNION:
3476 case TYPE_CODE_FLT:
3477 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3478 }
3479}
3480
3481/* Return non-zero if the formals of FUNC "sufficiently match" the
3482 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3483 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3484 argument function. */
14f9c5c9
AS
3485
3486static int
d2e4a39e 3487ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3488{
3489 int i;
d2e4a39e 3490 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3491
1265e4aa
JB
3492 if (SYMBOL_CLASS (func) == LOC_CONST
3493 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3494 return (n_actuals == 0);
3495 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3496 return 0;
3497
3498 if (TYPE_NFIELDS (func_type) != n_actuals)
3499 return 0;
3500
3501 for (i = 0; i < n_actuals; i += 1)
3502 {
4c4b4cd2 3503 if (actuals[i] == NULL)
76a01679
JB
3504 return 0;
3505 else
3506 {
5b4ee69b
MS
3507 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3508 i));
df407dfe 3509 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3510
76a01679
JB
3511 if (!ada_type_match (ftype, atype, 1))
3512 return 0;
3513 }
14f9c5c9
AS
3514 }
3515 return 1;
3516}
3517
3518/* False iff function type FUNC_TYPE definitely does not produce a value
3519 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3520 FUNC_TYPE is not a valid function type with a non-null return type
3521 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3522
3523static int
d2e4a39e 3524return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3525{
d2e4a39e 3526 struct type *return_type;
14f9c5c9
AS
3527
3528 if (func_type == NULL)
3529 return 1;
3530
4c4b4cd2 3531 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3532 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3533 else
18af8284 3534 return_type = get_base_type (func_type);
14f9c5c9
AS
3535 if (return_type == NULL)
3536 return 1;
3537
18af8284 3538 context_type = get_base_type (context_type);
14f9c5c9
AS
3539
3540 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3541 return context_type == NULL || return_type == context_type;
3542 else if (context_type == NULL)
3543 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3544 else
3545 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3546}
3547
3548
4c4b4cd2 3549/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3550 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3551 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3552 that returns that type, then eliminate matches that don't. If
3553 CONTEXT_TYPE is void and there is at least one match that does not
3554 return void, eliminate all matches that do.
3555
14f9c5c9
AS
3556 Asks the user if there is more than one match remaining. Returns -1
3557 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3558 solely for messages. May re-arrange and modify SYMS in
3559 the process; the index returned is for the modified vector. */
14f9c5c9 3560
4c4b4cd2
PH
3561static int
3562ada_resolve_function (struct ada_symbol_info syms[],
3563 int nsyms, struct value **args, int nargs,
3564 const char *name, struct type *context_type)
14f9c5c9 3565{
30b15541 3566 int fallback;
14f9c5c9 3567 int k;
4c4b4cd2 3568 int m; /* Number of hits */
14f9c5c9 3569
d2e4a39e 3570 m = 0;
30b15541
UW
3571 /* In the first pass of the loop, we only accept functions matching
3572 context_type. If none are found, we add a second pass of the loop
3573 where every function is accepted. */
3574 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3575 {
3576 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3577 {
61ee279c 3578 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
4c4b4cd2
PH
3579
3580 if (ada_args_match (syms[k].sym, args, nargs)
30b15541 3581 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3582 {
3583 syms[m] = syms[k];
3584 m += 1;
3585 }
3586 }
14f9c5c9
AS
3587 }
3588
3589 if (m == 0)
3590 return -1;
3591 else if (m > 1)
3592 {
323e0a4a 3593 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3594 user_select_syms (syms, m, 1);
14f9c5c9
AS
3595 return 0;
3596 }
3597 return 0;
3598}
3599
4c4b4cd2
PH
3600/* Returns true (non-zero) iff decoded name N0 should appear before N1
3601 in a listing of choices during disambiguation (see sort_choices, below).
3602 The idea is that overloadings of a subprogram name from the
3603 same package should sort in their source order. We settle for ordering
3604 such symbols by their trailing number (__N or $N). */
3605
14f9c5c9 3606static int
0d5cff50 3607encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3608{
3609 if (N1 == NULL)
3610 return 0;
3611 else if (N0 == NULL)
3612 return 1;
3613 else
3614 {
3615 int k0, k1;
5b4ee69b 3616
d2e4a39e 3617 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3618 ;
d2e4a39e 3619 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3620 ;
d2e4a39e 3621 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3622 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3623 {
3624 int n0, n1;
5b4ee69b 3625
4c4b4cd2
PH
3626 n0 = k0;
3627 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3628 n0 -= 1;
3629 n1 = k1;
3630 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3631 n1 -= 1;
3632 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3633 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3634 }
14f9c5c9
AS
3635 return (strcmp (N0, N1) < 0);
3636 }
3637}
d2e4a39e 3638
4c4b4cd2
PH
3639/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3640 encoded names. */
3641
d2e4a39e 3642static void
4c4b4cd2 3643sort_choices (struct ada_symbol_info syms[], int nsyms)
14f9c5c9 3644{
4c4b4cd2 3645 int i;
5b4ee69b 3646
d2e4a39e 3647 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3648 {
4c4b4cd2 3649 struct ada_symbol_info sym = syms[i];
14f9c5c9
AS
3650 int j;
3651
d2e4a39e 3652 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2
PH
3653 {
3654 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3655 SYMBOL_LINKAGE_NAME (sym.sym)))
3656 break;
3657 syms[j + 1] = syms[j];
3658 }
d2e4a39e 3659 syms[j + 1] = sym;
14f9c5c9
AS
3660 }
3661}
3662
4c4b4cd2
PH
3663/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3664 by asking the user (if necessary), returning the number selected,
3665 and setting the first elements of SYMS items. Error if no symbols
3666 selected. */
14f9c5c9
AS
3667
3668/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3669 to be re-integrated one of these days. */
14f9c5c9
AS
3670
3671int
4c4b4cd2 3672user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
14f9c5c9
AS
3673{
3674 int i;
d2e4a39e 3675 int *chosen = (int *) alloca (sizeof (int) * nsyms);
14f9c5c9
AS
3676 int n_chosen;
3677 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3678 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3679
3680 if (max_results < 1)
323e0a4a 3681 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3682 if (nsyms <= 1)
3683 return nsyms;
3684
717d2f5a
JB
3685 if (select_mode == multiple_symbols_cancel)
3686 error (_("\
3687canceled because the command is ambiguous\n\
3688See set/show multiple-symbol."));
3689
3690 /* If select_mode is "all", then return all possible symbols.
3691 Only do that if more than one symbol can be selected, of course.
3692 Otherwise, display the menu as usual. */
3693 if (select_mode == multiple_symbols_all && max_results > 1)
3694 return nsyms;
3695
323e0a4a 3696 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3697 if (max_results > 1)
323e0a4a 3698 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3699
4c4b4cd2 3700 sort_choices (syms, nsyms);
14f9c5c9
AS
3701
3702 for (i = 0; i < nsyms; i += 1)
3703 {
4c4b4cd2
PH
3704 if (syms[i].sym == NULL)
3705 continue;
3706
3707 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3708 {
76a01679
JB
3709 struct symtab_and_line sal =
3710 find_function_start_sal (syms[i].sym, 1);
5b4ee69b 3711
323e0a4a
AC
3712 if (sal.symtab == NULL)
3713 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3714 i + first_choice,
3715 SYMBOL_PRINT_NAME (syms[i].sym),
3716 sal.line);
3717 else
3718 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3719 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3720 symtab_to_filename_for_display (sal.symtab),
3721 sal.line);
4c4b4cd2
PH
3722 continue;
3723 }
d2e4a39e 3724 else
4c4b4cd2
PH
3725 {
3726 int is_enumeral =
3727 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3728 && SYMBOL_TYPE (syms[i].sym) != NULL
3729 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
1994afbf
DE
3730 struct symtab *symtab = NULL;
3731
3732 if (SYMBOL_OBJFILE_OWNED (syms[i].sym))
3733 symtab = symbol_symtab (syms[i].sym);
4c4b4cd2
PH
3734
3735 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
323e0a4a 3736 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2
PH
3737 i + first_choice,
3738 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3739 symtab_to_filename_for_display (symtab),
3740 SYMBOL_LINE (syms[i].sym));
76a01679
JB
3741 else if (is_enumeral
3742 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
4c4b4cd2 3743 {
a3f17187 3744 printf_unfiltered (("[%d] "), i + first_choice);
76a01679 3745 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
79d43c61 3746 gdb_stdout, -1, 0, &type_print_raw_options);
323e0a4a 3747 printf_unfiltered (_("'(%s) (enumeral)\n"),
4c4b4cd2
PH
3748 SYMBOL_PRINT_NAME (syms[i].sym));
3749 }
3750 else if (symtab != NULL)
3751 printf_unfiltered (is_enumeral
323e0a4a
AC
3752 ? _("[%d] %s in %s (enumeral)\n")
3753 : _("[%d] %s at %s:?\n"),
4c4b4cd2
PH
3754 i + first_choice,
3755 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821 3756 symtab_to_filename_for_display (symtab));
4c4b4cd2
PH
3757 else
3758 printf_unfiltered (is_enumeral
323e0a4a
AC
3759 ? _("[%d] %s (enumeral)\n")
3760 : _("[%d] %s at ?\n"),
4c4b4cd2
PH
3761 i + first_choice,
3762 SYMBOL_PRINT_NAME (syms[i].sym));
3763 }
14f9c5c9 3764 }
d2e4a39e 3765
14f9c5c9 3766 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3767 "overload-choice");
14f9c5c9
AS
3768
3769 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3770 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3771
3772 return n_chosen;
3773}
3774
3775/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3776 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3777 order in CHOICES[0 .. N-1], and return N.
3778
3779 The user types choices as a sequence of numbers on one line
3780 separated by blanks, encoding them as follows:
3781
4c4b4cd2 3782 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3783 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3784 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3785
4c4b4cd2 3786 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3787
3788 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3789 prompts (for use with the -f switch). */
14f9c5c9
AS
3790
3791int
d2e4a39e 3792get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3793 int is_all_choice, char *annotation_suffix)
14f9c5c9 3794{
d2e4a39e 3795 char *args;
0bcd0149 3796 char *prompt;
14f9c5c9
AS
3797 int n_chosen;
3798 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3799
14f9c5c9
AS
3800 prompt = getenv ("PS2");
3801 if (prompt == NULL)
0bcd0149 3802 prompt = "> ";
14f9c5c9 3803
0bcd0149 3804 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3805
14f9c5c9 3806 if (args == NULL)
323e0a4a 3807 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3808
3809 n_chosen = 0;
76a01679 3810
4c4b4cd2
PH
3811 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3812 order, as given in args. Choices are validated. */
14f9c5c9
AS
3813 while (1)
3814 {
d2e4a39e 3815 char *args2;
14f9c5c9
AS
3816 int choice, j;
3817
0fcd72ba 3818 args = skip_spaces (args);
14f9c5c9 3819 if (*args == '\0' && n_chosen == 0)
323e0a4a 3820 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3821 else if (*args == '\0')
4c4b4cd2 3822 break;
14f9c5c9
AS
3823
3824 choice = strtol (args, &args2, 10);
d2e4a39e 3825 if (args == args2 || choice < 0
4c4b4cd2 3826 || choice > n_choices + first_choice - 1)
323e0a4a 3827 error (_("Argument must be choice number"));
14f9c5c9
AS
3828 args = args2;
3829
d2e4a39e 3830 if (choice == 0)
323e0a4a 3831 error (_("cancelled"));
14f9c5c9
AS
3832
3833 if (choice < first_choice)
4c4b4cd2
PH
3834 {
3835 n_chosen = n_choices;
3836 for (j = 0; j < n_choices; j += 1)
3837 choices[j] = j;
3838 break;
3839 }
14f9c5c9
AS
3840 choice -= first_choice;
3841
d2e4a39e 3842 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3843 {
3844 }
14f9c5c9
AS
3845
3846 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3847 {
3848 int k;
5b4ee69b 3849
4c4b4cd2
PH
3850 for (k = n_chosen - 1; k > j; k -= 1)
3851 choices[k + 1] = choices[k];
3852 choices[j + 1] = choice;
3853 n_chosen += 1;
3854 }
14f9c5c9
AS
3855 }
3856
3857 if (n_chosen > max_results)
323e0a4a 3858 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3859
14f9c5c9
AS
3860 return n_chosen;
3861}
3862
4c4b4cd2
PH
3863/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3864 on the function identified by SYM and BLOCK, and taking NARGS
3865 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3866
3867static void
d2e4a39e 3868replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2 3869 int oplen, struct symbol *sym,
270140bd 3870 const struct block *block)
14f9c5c9
AS
3871{
3872 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 3873 symbol, -oplen for operator being replaced). */
d2e4a39e 3874 struct expression *newexp = (struct expression *)
8c1a34e7 3875 xzalloc (sizeof (struct expression)
4c4b4cd2 3876 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 3877 struct expression *exp = *expp;
14f9c5c9
AS
3878
3879 newexp->nelts = exp->nelts + 7 - oplen;
3880 newexp->language_defn = exp->language_defn;
3489610d 3881 newexp->gdbarch = exp->gdbarch;
14f9c5c9 3882 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 3883 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 3884 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
3885
3886 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3887 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3888
3889 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3890 newexp->elts[pc + 4].block = block;
3891 newexp->elts[pc + 5].symbol = sym;
3892
3893 *expp = newexp;
aacb1f0a 3894 xfree (exp);
d2e4a39e 3895}
14f9c5c9
AS
3896
3897/* Type-class predicates */
3898
4c4b4cd2
PH
3899/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3900 or FLOAT). */
14f9c5c9
AS
3901
3902static int
d2e4a39e 3903numeric_type_p (struct type *type)
14f9c5c9
AS
3904{
3905 if (type == NULL)
3906 return 0;
d2e4a39e
AS
3907 else
3908 {
3909 switch (TYPE_CODE (type))
4c4b4cd2
PH
3910 {
3911 case TYPE_CODE_INT:
3912 case TYPE_CODE_FLT:
3913 return 1;
3914 case TYPE_CODE_RANGE:
3915 return (type == TYPE_TARGET_TYPE (type)
3916 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3917 default:
3918 return 0;
3919 }
d2e4a39e 3920 }
14f9c5c9
AS
3921}
3922
4c4b4cd2 3923/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
3924
3925static int
d2e4a39e 3926integer_type_p (struct type *type)
14f9c5c9
AS
3927{
3928 if (type == NULL)
3929 return 0;
d2e4a39e
AS
3930 else
3931 {
3932 switch (TYPE_CODE (type))
4c4b4cd2
PH
3933 {
3934 case TYPE_CODE_INT:
3935 return 1;
3936 case TYPE_CODE_RANGE:
3937 return (type == TYPE_TARGET_TYPE (type)
3938 || integer_type_p (TYPE_TARGET_TYPE (type)));
3939 default:
3940 return 0;
3941 }
d2e4a39e 3942 }
14f9c5c9
AS
3943}
3944
4c4b4cd2 3945/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
3946
3947static int
d2e4a39e 3948scalar_type_p (struct type *type)
14f9c5c9
AS
3949{
3950 if (type == NULL)
3951 return 0;
d2e4a39e
AS
3952 else
3953 {
3954 switch (TYPE_CODE (type))
4c4b4cd2
PH
3955 {
3956 case TYPE_CODE_INT:
3957 case TYPE_CODE_RANGE:
3958 case TYPE_CODE_ENUM:
3959 case TYPE_CODE_FLT:
3960 return 1;
3961 default:
3962 return 0;
3963 }
d2e4a39e 3964 }
14f9c5c9
AS
3965}
3966
4c4b4cd2 3967/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
3968
3969static int
d2e4a39e 3970discrete_type_p (struct type *type)
14f9c5c9
AS
3971{
3972 if (type == NULL)
3973 return 0;
d2e4a39e
AS
3974 else
3975 {
3976 switch (TYPE_CODE (type))
4c4b4cd2
PH
3977 {
3978 case TYPE_CODE_INT:
3979 case TYPE_CODE_RANGE:
3980 case TYPE_CODE_ENUM:
872f0337 3981 case TYPE_CODE_BOOL:
4c4b4cd2
PH
3982 return 1;
3983 default:
3984 return 0;
3985 }
d2e4a39e 3986 }
14f9c5c9
AS
3987}
3988
4c4b4cd2
PH
3989/* Returns non-zero if OP with operands in the vector ARGS could be
3990 a user-defined function. Errs on the side of pre-defined operators
3991 (i.e., result 0). */
14f9c5c9
AS
3992
3993static int
d2e4a39e 3994possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 3995{
76a01679 3996 struct type *type0 =
df407dfe 3997 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 3998 struct type *type1 =
df407dfe 3999 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4000
4c4b4cd2
PH
4001 if (type0 == NULL)
4002 return 0;
4003
14f9c5c9
AS
4004 switch (op)
4005 {
4006 default:
4007 return 0;
4008
4009 case BINOP_ADD:
4010 case BINOP_SUB:
4011 case BINOP_MUL:
4012 case BINOP_DIV:
d2e4a39e 4013 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4014
4015 case BINOP_REM:
4016 case BINOP_MOD:
4017 case BINOP_BITWISE_AND:
4018 case BINOP_BITWISE_IOR:
4019 case BINOP_BITWISE_XOR:
d2e4a39e 4020 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4021
4022 case BINOP_EQUAL:
4023 case BINOP_NOTEQUAL:
4024 case BINOP_LESS:
4025 case BINOP_GTR:
4026 case BINOP_LEQ:
4027 case BINOP_GEQ:
d2e4a39e 4028 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4029
4030 case BINOP_CONCAT:
ee90b9ab 4031 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4032
4033 case BINOP_EXP:
d2e4a39e 4034 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4035
4036 case UNOP_NEG:
4037 case UNOP_PLUS:
4038 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4039 case UNOP_ABS:
4040 return (!numeric_type_p (type0));
14f9c5c9
AS
4041
4042 }
4043}
4044\f
4c4b4cd2 4045 /* Renaming */
14f9c5c9 4046
aeb5907d
JB
4047/* NOTES:
4048
4049 1. In the following, we assume that a renaming type's name may
4050 have an ___XD suffix. It would be nice if this went away at some
4051 point.
4052 2. We handle both the (old) purely type-based representation of
4053 renamings and the (new) variable-based encoding. At some point,
4054 it is devoutly to be hoped that the former goes away
4055 (FIXME: hilfinger-2007-07-09).
4056 3. Subprogram renamings are not implemented, although the XRS
4057 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4058
4059/* If SYM encodes a renaming,
4060
4061 <renaming> renames <renamed entity>,
4062
4063 sets *LEN to the length of the renamed entity's name,
4064 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4065 the string describing the subcomponent selected from the renamed
0963b4bd 4066 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4067 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4068 are undefined). Otherwise, returns a value indicating the category
4069 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4070 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4071 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4072 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4073 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4074 may be NULL, in which case they are not assigned.
4075
4076 [Currently, however, GCC does not generate subprogram renamings.] */
4077
4078enum ada_renaming_category
4079ada_parse_renaming (struct symbol *sym,
4080 const char **renamed_entity, int *len,
4081 const char **renaming_expr)
4082{
4083 enum ada_renaming_category kind;
4084 const char *info;
4085 const char *suffix;
4086
4087 if (sym == NULL)
4088 return ADA_NOT_RENAMING;
4089 switch (SYMBOL_CLASS (sym))
14f9c5c9 4090 {
aeb5907d
JB
4091 default:
4092 return ADA_NOT_RENAMING;
4093 case LOC_TYPEDEF:
4094 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4095 renamed_entity, len, renaming_expr);
4096 case LOC_LOCAL:
4097 case LOC_STATIC:
4098 case LOC_COMPUTED:
4099 case LOC_OPTIMIZED_OUT:
4100 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4101 if (info == NULL)
4102 return ADA_NOT_RENAMING;
4103 switch (info[5])
4104 {
4105 case '_':
4106 kind = ADA_OBJECT_RENAMING;
4107 info += 6;
4108 break;
4109 case 'E':
4110 kind = ADA_EXCEPTION_RENAMING;
4111 info += 7;
4112 break;
4113 case 'P':
4114 kind = ADA_PACKAGE_RENAMING;
4115 info += 7;
4116 break;
4117 case 'S':
4118 kind = ADA_SUBPROGRAM_RENAMING;
4119 info += 7;
4120 break;
4121 default:
4122 return ADA_NOT_RENAMING;
4123 }
14f9c5c9 4124 }
4c4b4cd2 4125
aeb5907d
JB
4126 if (renamed_entity != NULL)
4127 *renamed_entity = info;
4128 suffix = strstr (info, "___XE");
4129 if (suffix == NULL || suffix == info)
4130 return ADA_NOT_RENAMING;
4131 if (len != NULL)
4132 *len = strlen (info) - strlen (suffix);
4133 suffix += 5;
4134 if (renaming_expr != NULL)
4135 *renaming_expr = suffix;
4136 return kind;
4137}
4138
4139/* Assuming TYPE encodes a renaming according to the old encoding in
4140 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4141 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4142 ADA_NOT_RENAMING otherwise. */
4143static enum ada_renaming_category
4144parse_old_style_renaming (struct type *type,
4145 const char **renamed_entity, int *len,
4146 const char **renaming_expr)
4147{
4148 enum ada_renaming_category kind;
4149 const char *name;
4150 const char *info;
4151 const char *suffix;
14f9c5c9 4152
aeb5907d
JB
4153 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4154 || TYPE_NFIELDS (type) != 1)
4155 return ADA_NOT_RENAMING;
14f9c5c9 4156
aeb5907d
JB
4157 name = type_name_no_tag (type);
4158 if (name == NULL)
4159 return ADA_NOT_RENAMING;
4160
4161 name = strstr (name, "___XR");
4162 if (name == NULL)
4163 return ADA_NOT_RENAMING;
4164 switch (name[5])
4165 {
4166 case '\0':
4167 case '_':
4168 kind = ADA_OBJECT_RENAMING;
4169 break;
4170 case 'E':
4171 kind = ADA_EXCEPTION_RENAMING;
4172 break;
4173 case 'P':
4174 kind = ADA_PACKAGE_RENAMING;
4175 break;
4176 case 'S':
4177 kind = ADA_SUBPROGRAM_RENAMING;
4178 break;
4179 default:
4180 return ADA_NOT_RENAMING;
4181 }
14f9c5c9 4182
aeb5907d
JB
4183 info = TYPE_FIELD_NAME (type, 0);
4184 if (info == NULL)
4185 return ADA_NOT_RENAMING;
4186 if (renamed_entity != NULL)
4187 *renamed_entity = info;
4188 suffix = strstr (info, "___XE");
4189 if (renaming_expr != NULL)
4190 *renaming_expr = suffix + 5;
4191 if (suffix == NULL || suffix == info)
4192 return ADA_NOT_RENAMING;
4193 if (len != NULL)
4194 *len = suffix - info;
4195 return kind;
a5ee536b
JB
4196}
4197
4198/* Compute the value of the given RENAMING_SYM, which is expected to
4199 be a symbol encoding a renaming expression. BLOCK is the block
4200 used to evaluate the renaming. */
52ce6436 4201
a5ee536b
JB
4202static struct value *
4203ada_read_renaming_var_value (struct symbol *renaming_sym,
3977b71f 4204 const struct block *block)
a5ee536b 4205{
bbc13ae3 4206 const char *sym_name;
a5ee536b
JB
4207 struct expression *expr;
4208 struct value *value;
4209 struct cleanup *old_chain = NULL;
4210
bbc13ae3 4211 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
1bb9788d 4212 expr = parse_exp_1 (&sym_name, 0, block, 0);
bbc13ae3 4213 old_chain = make_cleanup (free_current_contents, &expr);
a5ee536b
JB
4214 value = evaluate_expression (expr);
4215
4216 do_cleanups (old_chain);
4217 return value;
4218}
14f9c5c9 4219\f
d2e4a39e 4220
4c4b4cd2 4221 /* Evaluation: Function Calls */
14f9c5c9 4222
4c4b4cd2 4223/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4224 lvalues, and otherwise has the side-effect of allocating memory
4225 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4226
d2e4a39e 4227static struct value *
40bc484c 4228ensure_lval (struct value *val)
14f9c5c9 4229{
40bc484c
JB
4230 if (VALUE_LVAL (val) == not_lval
4231 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4232 {
df407dfe 4233 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4234 const CORE_ADDR addr =
4235 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4236
40bc484c 4237 set_value_address (val, addr);
a84a8a0d 4238 VALUE_LVAL (val) = lval_memory;
40bc484c 4239 write_memory (addr, value_contents (val), len);
c3e5cd34 4240 }
14f9c5c9
AS
4241
4242 return val;
4243}
4244
4245/* Return the value ACTUAL, converted to be an appropriate value for a
4246 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4247 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4248 values not residing in memory, updating it as needed. */
14f9c5c9 4249
a93c0eb6 4250struct value *
40bc484c 4251ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4252{
df407dfe 4253 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4254 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4255 struct type *formal_target =
4256 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4257 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4258 struct type *actual_target =
4259 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4260 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4261
4c4b4cd2 4262 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4263 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4264 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4265 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4266 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4267 {
a84a8a0d 4268 struct value *result;
5b4ee69b 4269
14f9c5c9 4270 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4271 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4272 result = desc_data (actual);
14f9c5c9 4273 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4274 {
4275 if (VALUE_LVAL (actual) != lval_memory)
4276 {
4277 struct value *val;
5b4ee69b 4278
df407dfe 4279 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4280 val = allocate_value (actual_type);
990a07ab 4281 memcpy ((char *) value_contents_raw (val),
0fd88904 4282 (char *) value_contents (actual),
4c4b4cd2 4283 TYPE_LENGTH (actual_type));
40bc484c 4284 actual = ensure_lval (val);
4c4b4cd2 4285 }
a84a8a0d 4286 result = value_addr (actual);
4c4b4cd2 4287 }
a84a8a0d
JB
4288 else
4289 return actual;
b1af9e97 4290 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4291 }
4292 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4293 return ada_value_ind (actual);
4294
4295 return actual;
4296}
4297
438c98a1
JB
4298/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4299 type TYPE. This is usually an inefficient no-op except on some targets
4300 (such as AVR) where the representation of a pointer and an address
4301 differs. */
4302
4303static CORE_ADDR
4304value_pointer (struct value *value, struct type *type)
4305{
4306 struct gdbarch *gdbarch = get_type_arch (type);
4307 unsigned len = TYPE_LENGTH (type);
4308 gdb_byte *buf = alloca (len);
4309 CORE_ADDR addr;
4310
4311 addr = value_address (value);
4312 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4313 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4314 return addr;
4315}
4316
14f9c5c9 4317
4c4b4cd2
PH
4318/* Push a descriptor of type TYPE for array value ARR on the stack at
4319 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4320 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4321 to-descriptor type rather than a descriptor type), a struct value *
4322 representing a pointer to this descriptor. */
14f9c5c9 4323
d2e4a39e 4324static struct value *
40bc484c 4325make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4326{
d2e4a39e
AS
4327 struct type *bounds_type = desc_bounds_type (type);
4328 struct type *desc_type = desc_base_type (type);
4329 struct value *descriptor = allocate_value (desc_type);
4330 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4331 int i;
d2e4a39e 4332
0963b4bd
MS
4333 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4334 i > 0; i -= 1)
14f9c5c9 4335 {
19f220c3
JK
4336 modify_field (value_type (bounds), value_contents_writeable (bounds),
4337 ada_array_bound (arr, i, 0),
4338 desc_bound_bitpos (bounds_type, i, 0),
4339 desc_bound_bitsize (bounds_type, i, 0));
4340 modify_field (value_type (bounds), value_contents_writeable (bounds),
4341 ada_array_bound (arr, i, 1),
4342 desc_bound_bitpos (bounds_type, i, 1),
4343 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4344 }
d2e4a39e 4345
40bc484c 4346 bounds = ensure_lval (bounds);
d2e4a39e 4347
19f220c3
JK
4348 modify_field (value_type (descriptor),
4349 value_contents_writeable (descriptor),
4350 value_pointer (ensure_lval (arr),
4351 TYPE_FIELD_TYPE (desc_type, 0)),
4352 fat_pntr_data_bitpos (desc_type),
4353 fat_pntr_data_bitsize (desc_type));
4354
4355 modify_field (value_type (descriptor),
4356 value_contents_writeable (descriptor),
4357 value_pointer (bounds,
4358 TYPE_FIELD_TYPE (desc_type, 1)),
4359 fat_pntr_bounds_bitpos (desc_type),
4360 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4361
40bc484c 4362 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4363
4364 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4365 return value_addr (descriptor);
4366 else
4367 return descriptor;
4368}
14f9c5c9 4369\f
3d9434b5
JB
4370 /* Symbol Cache Module */
4371
3d9434b5 4372/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4373 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4374 on the type of entity being printed, the cache can make it as much
4375 as an order of magnitude faster than without it.
4376
4377 The descriptive type DWARF extension has significantly reduced
4378 the need for this cache, at least when DWARF is being used. However,
4379 even in this case, some expensive name-based symbol searches are still
4380 sometimes necessary - to find an XVZ variable, mostly. */
4381
ee01b665 4382/* Initialize the contents of SYM_CACHE. */
3d9434b5 4383
ee01b665
JB
4384static void
4385ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4386{
4387 obstack_init (&sym_cache->cache_space);
4388 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4389}
3d9434b5 4390
ee01b665
JB
4391/* Free the memory used by SYM_CACHE. */
4392
4393static void
4394ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4395{
ee01b665
JB
4396 obstack_free (&sym_cache->cache_space, NULL);
4397 xfree (sym_cache);
4398}
3d9434b5 4399
ee01b665
JB
4400/* Return the symbol cache associated to the given program space PSPACE.
4401 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4402
ee01b665
JB
4403static struct ada_symbol_cache *
4404ada_get_symbol_cache (struct program_space *pspace)
4405{
4406 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4407 struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4408
4409 if (sym_cache == NULL)
4410 {
4411 sym_cache = XCNEW (struct ada_symbol_cache);
4412 ada_init_symbol_cache (sym_cache);
4413 }
4414
4415 return sym_cache;
4416}
3d9434b5
JB
4417
4418/* Clear all entries from the symbol cache. */
4419
4420static void
4421ada_clear_symbol_cache (void)
4422{
ee01b665
JB
4423 struct ada_symbol_cache *sym_cache
4424 = ada_get_symbol_cache (current_program_space);
4425
4426 obstack_free (&sym_cache->cache_space, NULL);
4427 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4428}
4429
4430/* Search our cache for an entry matching NAME and NAMESPACE.
4431 Return it if found, or NULL otherwise. */
4432
4433static struct cache_entry **
4434find_entry (const char *name, domain_enum namespace)
4435{
ee01b665
JB
4436 struct ada_symbol_cache *sym_cache
4437 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4438 int h = msymbol_hash (name) % HASH_SIZE;
4439 struct cache_entry **e;
4440
ee01b665 4441 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5
JB
4442 {
4443 if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4444 return e;
4445 }
4446 return NULL;
4447}
4448
4449/* Search the symbol cache for an entry matching NAME and NAMESPACE.
4450 Return 1 if found, 0 otherwise.
4451
4452 If an entry was found and SYM is not NULL, set *SYM to the entry's
4453 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4454
96d887e8
PH
4455static int
4456lookup_cached_symbol (const char *name, domain_enum namespace,
f0c5f9b2 4457 struct symbol **sym, const struct block **block)
96d887e8 4458{
3d9434b5
JB
4459 struct cache_entry **e = find_entry (name, namespace);
4460
4461 if (e == NULL)
4462 return 0;
4463 if (sym != NULL)
4464 *sym = (*e)->sym;
4465 if (block != NULL)
4466 *block = (*e)->block;
4467 return 1;
96d887e8
PH
4468}
4469
3d9434b5
JB
4470/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4471 in domain NAMESPACE, save this result in our symbol cache. */
4472
96d887e8
PH
4473static void
4474cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
270140bd 4475 const struct block *block)
96d887e8 4476{
ee01b665
JB
4477 struct ada_symbol_cache *sym_cache
4478 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4479 int h;
4480 char *copy;
4481 struct cache_entry *e;
4482
1994afbf
DE
4483 /* Symbols for builtin types don't have a block.
4484 For now don't cache such symbols. */
4485 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4486 return;
4487
3d9434b5
JB
4488 /* If the symbol is a local symbol, then do not cache it, as a search
4489 for that symbol depends on the context. To determine whether
4490 the symbol is local or not, we check the block where we found it
4491 against the global and static blocks of its associated symtab. */
4492 if (sym
08be3fe3 4493 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4494 GLOBAL_BLOCK) != block
08be3fe3 4495 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4496 STATIC_BLOCK) != block)
3d9434b5
JB
4497 return;
4498
4499 h = msymbol_hash (name) % HASH_SIZE;
ee01b665
JB
4500 e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4501 sizeof (*e));
4502 e->next = sym_cache->root[h];
4503 sym_cache->root[h] = e;
4504 e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
3d9434b5
JB
4505 strcpy (copy, name);
4506 e->sym = sym;
4507 e->namespace = namespace;
4508 e->block = block;
96d887e8 4509}
4c4b4cd2
PH
4510\f
4511 /* Symbol Lookup */
4512
c0431670
JB
4513/* Return nonzero if wild matching should be used when searching for
4514 all symbols matching LOOKUP_NAME.
4515
4516 LOOKUP_NAME is expected to be a symbol name after transformation
4517 for Ada lookups (see ada_name_for_lookup). */
4518
4519static int
4520should_use_wild_match (const char *lookup_name)
4521{
4522 return (strstr (lookup_name, "__") == NULL);
4523}
4524
4c4b4cd2
PH
4525/* Return the result of a standard (literal, C-like) lookup of NAME in
4526 given DOMAIN, visible from lexical block BLOCK. */
4527
4528static struct symbol *
4529standard_lookup (const char *name, const struct block *block,
4530 domain_enum domain)
4531{
acbd605d
MGD
4532 /* Initialize it just to avoid a GCC false warning. */
4533 struct symbol *sym = NULL;
4c4b4cd2 4534
2570f2b7 4535 if (lookup_cached_symbol (name, domain, &sym, NULL))
4c4b4cd2 4536 return sym;
2570f2b7
UW
4537 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4538 cache_symbol (name, domain, sym, block_found);
4c4b4cd2
PH
4539 return sym;
4540}
4541
4542
4543/* Non-zero iff there is at least one non-function/non-enumeral symbol
4544 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4545 since they contend in overloading in the same way. */
4546static int
4547is_nonfunction (struct ada_symbol_info syms[], int n)
4548{
4549 int i;
4550
4551 for (i = 0; i < n; i += 1)
4552 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4553 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4554 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
14f9c5c9
AS
4555 return 1;
4556
4557 return 0;
4558}
4559
4560/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4561 struct types. Otherwise, they may not. */
14f9c5c9
AS
4562
4563static int
d2e4a39e 4564equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4565{
d2e4a39e 4566 if (type0 == type1)
14f9c5c9 4567 return 1;
d2e4a39e 4568 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4569 || TYPE_CODE (type0) != TYPE_CODE (type1))
4570 return 0;
d2e4a39e 4571 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4572 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4573 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4574 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4575 return 1;
d2e4a39e 4576
14f9c5c9
AS
4577 return 0;
4578}
4579
4580/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4581 no more defined than that of SYM1. */
14f9c5c9
AS
4582
4583static int
d2e4a39e 4584lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4585{
4586 if (sym0 == sym1)
4587 return 1;
176620f1 4588 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4589 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4590 return 0;
4591
d2e4a39e 4592 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4593 {
4594 case LOC_UNDEF:
4595 return 1;
4596 case LOC_TYPEDEF:
4597 {
4c4b4cd2
PH
4598 struct type *type0 = SYMBOL_TYPE (sym0);
4599 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4600 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4601 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4602 int len0 = strlen (name0);
5b4ee69b 4603
4c4b4cd2
PH
4604 return
4605 TYPE_CODE (type0) == TYPE_CODE (type1)
4606 && (equiv_types (type0, type1)
4607 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4608 && strncmp (name1 + len0, "___XV", 5) == 0));
14f9c5c9
AS
4609 }
4610 case LOC_CONST:
4611 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4612 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4613 default:
4614 return 0;
14f9c5c9
AS
4615 }
4616}
4617
4c4b4cd2
PH
4618/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4619 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4620
4621static void
76a01679
JB
4622add_defn_to_vec (struct obstack *obstackp,
4623 struct symbol *sym,
f0c5f9b2 4624 const struct block *block)
14f9c5c9
AS
4625{
4626 int i;
4c4b4cd2 4627 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4628
529cad9c
PH
4629 /* Do not try to complete stub types, as the debugger is probably
4630 already scanning all symbols matching a certain name at the
4631 time when this function is called. Trying to replace the stub
4632 type by its associated full type will cause us to restart a scan
4633 which may lead to an infinite recursion. Instead, the client
4634 collecting the matching symbols will end up collecting several
4635 matches, with at least one of them complete. It can then filter
4636 out the stub ones if needed. */
4637
4c4b4cd2
PH
4638 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4639 {
4640 if (lesseq_defined_than (sym, prevDefns[i].sym))
4641 return;
4642 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4643 {
4644 prevDefns[i].sym = sym;
4645 prevDefns[i].block = block;
4c4b4cd2 4646 return;
76a01679 4647 }
4c4b4cd2
PH
4648 }
4649
4650 {
4651 struct ada_symbol_info info;
4652
4653 info.sym = sym;
4654 info.block = block;
4c4b4cd2
PH
4655 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4656 }
4657}
4658
4659/* Number of ada_symbol_info structures currently collected in
4660 current vector in *OBSTACKP. */
4661
76a01679
JB
4662static int
4663num_defns_collected (struct obstack *obstackp)
4c4b4cd2
PH
4664{
4665 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4666}
4667
4668/* Vector of ada_symbol_info structures currently collected in current
4669 vector in *OBSTACKP. If FINISH, close off the vector and return
4670 its final address. */
4671
76a01679 4672static struct ada_symbol_info *
4c4b4cd2
PH
4673defns_collected (struct obstack *obstackp, int finish)
4674{
4675 if (finish)
4676 return obstack_finish (obstackp);
4677 else
4678 return (struct ada_symbol_info *) obstack_base (obstackp);
4679}
4680
7c7b6655
TT
4681/* Return a bound minimal symbol matching NAME according to Ada
4682 decoding rules. Returns an invalid symbol if there is no such
4683 minimal symbol. Names prefixed with "standard__" are handled
4684 specially: "standard__" is first stripped off, and only static and
4685 global symbols are searched. */
4c4b4cd2 4686
7c7b6655 4687struct bound_minimal_symbol
96d887e8 4688ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4689{
7c7b6655 4690 struct bound_minimal_symbol result;
4c4b4cd2 4691 struct objfile *objfile;
96d887e8 4692 struct minimal_symbol *msymbol;
dc4024cd 4693 const int wild_match_p = should_use_wild_match (name);
4c4b4cd2 4694
7c7b6655
TT
4695 memset (&result, 0, sizeof (result));
4696
c0431670
JB
4697 /* Special case: If the user specifies a symbol name inside package
4698 Standard, do a non-wild matching of the symbol name without
4699 the "standard__" prefix. This was primarily introduced in order
4700 to allow the user to specifically access the standard exceptions
4701 using, for instance, Standard.Constraint_Error when Constraint_Error
4702 is ambiguous (due to the user defining its own Constraint_Error
4703 entity inside its program). */
96d887e8 4704 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
c0431670 4705 name += sizeof ("standard__") - 1;
4c4b4cd2 4706
96d887e8
PH
4707 ALL_MSYMBOLS (objfile, msymbol)
4708 {
efd66ac6 4709 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
96d887e8 4710 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
7c7b6655
TT
4711 {
4712 result.minsym = msymbol;
4713 result.objfile = objfile;
4714 break;
4715 }
96d887e8 4716 }
4c4b4cd2 4717
7c7b6655 4718 return result;
96d887e8 4719}
4c4b4cd2 4720
96d887e8
PH
4721/* For all subprograms that statically enclose the subprogram of the
4722 selected frame, add symbols matching identifier NAME in DOMAIN
4723 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4724 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4725 with a wildcard prefix. */
4c4b4cd2 4726
96d887e8
PH
4727static void
4728add_symbols_from_enclosing_procs (struct obstack *obstackp,
76a01679 4729 const char *name, domain_enum namespace,
48b78332 4730 int wild_match_p)
96d887e8 4731{
96d887e8 4732}
14f9c5c9 4733
96d887e8
PH
4734/* True if TYPE is definitely an artificial type supplied to a symbol
4735 for which no debugging information was given in the symbol file. */
14f9c5c9 4736
96d887e8
PH
4737static int
4738is_nondebugging_type (struct type *type)
4739{
0d5cff50 4740 const char *name = ada_type_name (type);
5b4ee69b 4741
96d887e8
PH
4742 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4743}
4c4b4cd2 4744
8f17729f
JB
4745/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4746 that are deemed "identical" for practical purposes.
4747
4748 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4749 types and that their number of enumerals is identical (in other
4750 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4751
4752static int
4753ada_identical_enum_types_p (struct type *type1, struct type *type2)
4754{
4755 int i;
4756
4757 /* The heuristic we use here is fairly conservative. We consider
4758 that 2 enumerate types are identical if they have the same
4759 number of enumerals and that all enumerals have the same
4760 underlying value and name. */
4761
4762 /* All enums in the type should have an identical underlying value. */
4763 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 4764 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4765 return 0;
4766
4767 /* All enumerals should also have the same name (modulo any numerical
4768 suffix). */
4769 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4770 {
0d5cff50
DE
4771 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4772 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4773 int len_1 = strlen (name_1);
4774 int len_2 = strlen (name_2);
4775
4776 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4777 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4778 if (len_1 != len_2
4779 || strncmp (TYPE_FIELD_NAME (type1, i),
4780 TYPE_FIELD_NAME (type2, i),
4781 len_1) != 0)
4782 return 0;
4783 }
4784
4785 return 1;
4786}
4787
4788/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4789 that are deemed "identical" for practical purposes. Sometimes,
4790 enumerals are not strictly identical, but their types are so similar
4791 that they can be considered identical.
4792
4793 For instance, consider the following code:
4794
4795 type Color is (Black, Red, Green, Blue, White);
4796 type RGB_Color is new Color range Red .. Blue;
4797
4798 Type RGB_Color is a subrange of an implicit type which is a copy
4799 of type Color. If we call that implicit type RGB_ColorB ("B" is
4800 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4801 As a result, when an expression references any of the enumeral
4802 by name (Eg. "print green"), the expression is technically
4803 ambiguous and the user should be asked to disambiguate. But
4804 doing so would only hinder the user, since it wouldn't matter
4805 what choice he makes, the outcome would always be the same.
4806 So, for practical purposes, we consider them as the same. */
4807
4808static int
4809symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4810{
4811 int i;
4812
4813 /* Before performing a thorough comparison check of each type,
4814 we perform a series of inexpensive checks. We expect that these
4815 checks will quickly fail in the vast majority of cases, and thus
4816 help prevent the unnecessary use of a more expensive comparison.
4817 Said comparison also expects us to make some of these checks
4818 (see ada_identical_enum_types_p). */
4819
4820 /* Quick check: All symbols should have an enum type. */
4821 for (i = 0; i < nsyms; i++)
4822 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4823 return 0;
4824
4825 /* Quick check: They should all have the same value. */
4826 for (i = 1; i < nsyms; i++)
4827 if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4828 return 0;
4829
4830 /* Quick check: They should all have the same number of enumerals. */
4831 for (i = 1; i < nsyms; i++)
4832 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4833 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4834 return 0;
4835
4836 /* All the sanity checks passed, so we might have a set of
4837 identical enumeration types. Perform a more complete
4838 comparison of the type of each symbol. */
4839 for (i = 1; i < nsyms; i++)
4840 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4841 SYMBOL_TYPE (syms[0].sym)))
4842 return 0;
4843
4844 return 1;
4845}
4846
96d887e8
PH
4847/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4848 duplicate other symbols in the list (The only case I know of where
4849 this happens is when object files containing stabs-in-ecoff are
4850 linked with files containing ordinary ecoff debugging symbols (or no
4851 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4852 Returns the number of items in the modified list. */
4c4b4cd2 4853
96d887e8
PH
4854static int
4855remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4856{
4857 int i, j;
4c4b4cd2 4858
8f17729f
JB
4859 /* We should never be called with less than 2 symbols, as there
4860 cannot be any extra symbol in that case. But it's easy to
4861 handle, since we have nothing to do in that case. */
4862 if (nsyms < 2)
4863 return nsyms;
4864
96d887e8
PH
4865 i = 0;
4866 while (i < nsyms)
4867 {
a35ddb44 4868 int remove_p = 0;
339c13b6
JB
4869
4870 /* If two symbols have the same name and one of them is a stub type,
4871 the get rid of the stub. */
4872
4873 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4874 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4875 {
4876 for (j = 0; j < nsyms; j++)
4877 {
4878 if (j != i
4879 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4880 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4881 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4882 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
a35ddb44 4883 remove_p = 1;
339c13b6
JB
4884 }
4885 }
4886
4887 /* Two symbols with the same name, same class and same address
4888 should be identical. */
4889
4890 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
96d887e8
PH
4891 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4892 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4893 {
4894 for (j = 0; j < nsyms; j += 1)
4895 {
4896 if (i != j
4897 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4898 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
76a01679 4899 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
96d887e8
PH
4900 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4901 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4902 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
a35ddb44 4903 remove_p = 1;
4c4b4cd2 4904 }
4c4b4cd2 4905 }
339c13b6 4906
a35ddb44 4907 if (remove_p)
339c13b6
JB
4908 {
4909 for (j = i + 1; j < nsyms; j += 1)
4910 syms[j - 1] = syms[j];
4911 nsyms -= 1;
4912 }
4913
96d887e8 4914 i += 1;
14f9c5c9 4915 }
8f17729f
JB
4916
4917 /* If all the remaining symbols are identical enumerals, then
4918 just keep the first one and discard the rest.
4919
4920 Unlike what we did previously, we do not discard any entry
4921 unless they are ALL identical. This is because the symbol
4922 comparison is not a strict comparison, but rather a practical
4923 comparison. If all symbols are considered identical, then
4924 we can just go ahead and use the first one and discard the rest.
4925 But if we cannot reduce the list to a single element, we have
4926 to ask the user to disambiguate anyways. And if we have to
4927 present a multiple-choice menu, it's less confusing if the list
4928 isn't missing some choices that were identical and yet distinct. */
4929 if (symbols_are_identical_enums (syms, nsyms))
4930 nsyms = 1;
4931
96d887e8 4932 return nsyms;
14f9c5c9
AS
4933}
4934
96d887e8
PH
4935/* Given a type that corresponds to a renaming entity, use the type name
4936 to extract the scope (package name or function name, fully qualified,
4937 and following the GNAT encoding convention) where this renaming has been
4938 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 4939
96d887e8
PH
4940static char *
4941xget_renaming_scope (struct type *renaming_type)
14f9c5c9 4942{
96d887e8 4943 /* The renaming types adhere to the following convention:
0963b4bd 4944 <scope>__<rename>___<XR extension>.
96d887e8
PH
4945 So, to extract the scope, we search for the "___XR" extension,
4946 and then backtrack until we find the first "__". */
76a01679 4947
96d887e8
PH
4948 const char *name = type_name_no_tag (renaming_type);
4949 char *suffix = strstr (name, "___XR");
4950 char *last;
4951 int scope_len;
4952 char *scope;
14f9c5c9 4953
96d887e8
PH
4954 /* Now, backtrack a bit until we find the first "__". Start looking
4955 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 4956
96d887e8
PH
4957 for (last = suffix - 3; last > name; last--)
4958 if (last[0] == '_' && last[1] == '_')
4959 break;
76a01679 4960
96d887e8 4961 /* Make a copy of scope and return it. */
14f9c5c9 4962
96d887e8
PH
4963 scope_len = last - name;
4964 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 4965
96d887e8
PH
4966 strncpy (scope, name, scope_len);
4967 scope[scope_len] = '\0';
4c4b4cd2 4968
96d887e8 4969 return scope;
4c4b4cd2
PH
4970}
4971
96d887e8 4972/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 4973
96d887e8
PH
4974static int
4975is_package_name (const char *name)
4c4b4cd2 4976{
96d887e8
PH
4977 /* Here, We take advantage of the fact that no symbols are generated
4978 for packages, while symbols are generated for each function.
4979 So the condition for NAME represent a package becomes equivalent
4980 to NAME not existing in our list of symbols. There is only one
4981 small complication with library-level functions (see below). */
4c4b4cd2 4982
96d887e8 4983 char *fun_name;
76a01679 4984
96d887e8
PH
4985 /* If it is a function that has not been defined at library level,
4986 then we should be able to look it up in the symbols. */
4987 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4988 return 0;
14f9c5c9 4989
96d887e8
PH
4990 /* Library-level function names start with "_ada_". See if function
4991 "_ada_" followed by NAME can be found. */
14f9c5c9 4992
96d887e8 4993 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 4994 functions names cannot contain "__" in them. */
96d887e8
PH
4995 if (strstr (name, "__") != NULL)
4996 return 0;
4c4b4cd2 4997
b435e160 4998 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 4999
96d887e8
PH
5000 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
5001}
14f9c5c9 5002
96d887e8 5003/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5004 not visible from FUNCTION_NAME. */
14f9c5c9 5005
96d887e8 5006static int
0d5cff50 5007old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5008{
aeb5907d 5009 char *scope;
1509e573 5010 struct cleanup *old_chain;
aeb5907d
JB
5011
5012 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5013 return 0;
5014
5015 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
1509e573 5016 old_chain = make_cleanup (xfree, scope);
14f9c5c9 5017
96d887e8
PH
5018 /* If the rename has been defined in a package, then it is visible. */
5019 if (is_package_name (scope))
1509e573
JB
5020 {
5021 do_cleanups (old_chain);
5022 return 0;
5023 }
14f9c5c9 5024
96d887e8
PH
5025 /* Check that the rename is in the current function scope by checking
5026 that its name starts with SCOPE. */
76a01679 5027
96d887e8
PH
5028 /* If the function name starts with "_ada_", it means that it is
5029 a library-level function. Strip this prefix before doing the
5030 comparison, as the encoding for the renaming does not contain
5031 this prefix. */
5032 if (strncmp (function_name, "_ada_", 5) == 0)
5033 function_name += 5;
f26caa11 5034
1509e573
JB
5035 {
5036 int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
5037
5038 do_cleanups (old_chain);
5039 return is_invisible;
5040 }
f26caa11
PH
5041}
5042
aeb5907d
JB
5043/* Remove entries from SYMS that corresponds to a renaming entity that
5044 is not visible from the function associated with CURRENT_BLOCK or
5045 that is superfluous due to the presence of more specific renaming
5046 information. Places surviving symbols in the initial entries of
5047 SYMS and returns the number of surviving symbols.
96d887e8
PH
5048
5049 Rationale:
aeb5907d
JB
5050 First, in cases where an object renaming is implemented as a
5051 reference variable, GNAT may produce both the actual reference
5052 variable and the renaming encoding. In this case, we discard the
5053 latter.
5054
5055 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5056 entity. Unfortunately, STABS currently does not support the definition
5057 of types that are local to a given lexical block, so all renamings types
5058 are emitted at library level. As a consequence, if an application
5059 contains two renaming entities using the same name, and a user tries to
5060 print the value of one of these entities, the result of the ada symbol
5061 lookup will also contain the wrong renaming type.
f26caa11 5062
96d887e8
PH
5063 This function partially covers for this limitation by attempting to
5064 remove from the SYMS list renaming symbols that should be visible
5065 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5066 method with the current information available. The implementation
5067 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5068
5069 - When the user tries to print a rename in a function while there
5070 is another rename entity defined in a package: Normally, the
5071 rename in the function has precedence over the rename in the
5072 package, so the latter should be removed from the list. This is
5073 currently not the case.
5074
5075 - This function will incorrectly remove valid renames if
5076 the CURRENT_BLOCK corresponds to a function which symbol name
5077 has been changed by an "Export" pragma. As a consequence,
5078 the user will be unable to print such rename entities. */
4c4b4cd2 5079
14f9c5c9 5080static int
aeb5907d
JB
5081remove_irrelevant_renamings (struct ada_symbol_info *syms,
5082 int nsyms, const struct block *current_block)
4c4b4cd2
PH
5083{
5084 struct symbol *current_function;
0d5cff50 5085 const char *current_function_name;
4c4b4cd2 5086 int i;
aeb5907d
JB
5087 int is_new_style_renaming;
5088
5089 /* If there is both a renaming foo___XR... encoded as a variable and
5090 a simple variable foo in the same block, discard the latter.
0963b4bd 5091 First, zero out such symbols, then compress. */
aeb5907d
JB
5092 is_new_style_renaming = 0;
5093 for (i = 0; i < nsyms; i += 1)
5094 {
5095 struct symbol *sym = syms[i].sym;
270140bd 5096 const struct block *block = syms[i].block;
aeb5907d
JB
5097 const char *name;
5098 const char *suffix;
5099
5100 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5101 continue;
5102 name = SYMBOL_LINKAGE_NAME (sym);
5103 suffix = strstr (name, "___XR");
5104
5105 if (suffix != NULL)
5106 {
5107 int name_len = suffix - name;
5108 int j;
5b4ee69b 5109
aeb5907d
JB
5110 is_new_style_renaming = 1;
5111 for (j = 0; j < nsyms; j += 1)
5112 if (i != j && syms[j].sym != NULL
5113 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5114 name_len) == 0
5115 && block == syms[j].block)
5116 syms[j].sym = NULL;
5117 }
5118 }
5119 if (is_new_style_renaming)
5120 {
5121 int j, k;
5122
5123 for (j = k = 0; j < nsyms; j += 1)
5124 if (syms[j].sym != NULL)
5125 {
5126 syms[k] = syms[j];
5127 k += 1;
5128 }
5129 return k;
5130 }
4c4b4cd2
PH
5131
5132 /* Extract the function name associated to CURRENT_BLOCK.
5133 Abort if unable to do so. */
76a01679 5134
4c4b4cd2
PH
5135 if (current_block == NULL)
5136 return nsyms;
76a01679 5137
7f0df278 5138 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
5139 if (current_function == NULL)
5140 return nsyms;
5141
5142 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5143 if (current_function_name == NULL)
5144 return nsyms;
5145
5146 /* Check each of the symbols, and remove it from the list if it is
5147 a type corresponding to a renaming that is out of the scope of
5148 the current block. */
5149
5150 i = 0;
5151 while (i < nsyms)
5152 {
aeb5907d
JB
5153 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5154 == ADA_OBJECT_RENAMING
5155 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4c4b4cd2
PH
5156 {
5157 int j;
5b4ee69b 5158
aeb5907d 5159 for (j = i + 1; j < nsyms; j += 1)
76a01679 5160 syms[j - 1] = syms[j];
4c4b4cd2
PH
5161 nsyms -= 1;
5162 }
5163 else
5164 i += 1;
5165 }
5166
5167 return nsyms;
5168}
5169
339c13b6
JB
5170/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5171 whose name and domain match NAME and DOMAIN respectively.
5172 If no match was found, then extend the search to "enclosing"
5173 routines (in other words, if we're inside a nested function,
5174 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5175 If WILD_MATCH_P is nonzero, perform the naming matching in
5176 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5177
5178 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5179
5180static void
5181ada_add_local_symbols (struct obstack *obstackp, const char *name,
f0c5f9b2 5182 const struct block *block, domain_enum domain,
d0a8ab18 5183 int wild_match_p)
339c13b6
JB
5184{
5185 int block_depth = 0;
5186
5187 while (block != NULL)
5188 {
5189 block_depth += 1;
d0a8ab18
JB
5190 ada_add_block_symbols (obstackp, block, name, domain, NULL,
5191 wild_match_p);
339c13b6
JB
5192
5193 /* If we found a non-function match, assume that's the one. */
5194 if (is_nonfunction (defns_collected (obstackp, 0),
5195 num_defns_collected (obstackp)))
5196 return;
5197
5198 block = BLOCK_SUPERBLOCK (block);
5199 }
5200
5201 /* If no luck so far, try to find NAME as a local symbol in some lexically
5202 enclosing subprogram. */
5203 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
d0a8ab18 5204 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
339c13b6
JB
5205}
5206
ccefe4c4 5207/* An object of this type is used as the user_data argument when
40658b94 5208 calling the map_matching_symbols method. */
ccefe4c4 5209
40658b94 5210struct match_data
ccefe4c4 5211{
40658b94 5212 struct objfile *objfile;
ccefe4c4 5213 struct obstack *obstackp;
40658b94
PH
5214 struct symbol *arg_sym;
5215 int found_sym;
ccefe4c4
TT
5216};
5217
40658b94
PH
5218/* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5219 to a list of symbols. DATA0 is a pointer to a struct match_data *
5220 containing the obstack that collects the symbol list, the file that SYM
5221 must come from, a flag indicating whether a non-argument symbol has
5222 been found in the current block, and the last argument symbol
5223 passed in SYM within the current block (if any). When SYM is null,
5224 marking the end of a block, the argument symbol is added if no
5225 other has been found. */
ccefe4c4 5226
40658b94
PH
5227static int
5228aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 5229{
40658b94
PH
5230 struct match_data *data = (struct match_data *) data0;
5231
5232 if (sym == NULL)
5233 {
5234 if (!data->found_sym && data->arg_sym != NULL)
5235 add_defn_to_vec (data->obstackp,
5236 fixup_symbol_section (data->arg_sym, data->objfile),
5237 block);
5238 data->found_sym = 0;
5239 data->arg_sym = NULL;
5240 }
5241 else
5242 {
5243 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5244 return 0;
5245 else if (SYMBOL_IS_ARGUMENT (sym))
5246 data->arg_sym = sym;
5247 else
5248 {
5249 data->found_sym = 1;
5250 add_defn_to_vec (data->obstackp,
5251 fixup_symbol_section (sym, data->objfile),
5252 block);
5253 }
5254 }
5255 return 0;
5256}
5257
db230ce3
JB
5258/* Implements compare_names, but only applying the comparision using
5259 the given CASING. */
5b4ee69b 5260
40658b94 5261static int
db230ce3
JB
5262compare_names_with_case (const char *string1, const char *string2,
5263 enum case_sensitivity casing)
40658b94
PH
5264{
5265 while (*string1 != '\0' && *string2 != '\0')
5266 {
db230ce3
JB
5267 char c1, c2;
5268
40658b94
PH
5269 if (isspace (*string1) || isspace (*string2))
5270 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5271
5272 if (casing == case_sensitive_off)
5273 {
5274 c1 = tolower (*string1);
5275 c2 = tolower (*string2);
5276 }
5277 else
5278 {
5279 c1 = *string1;
5280 c2 = *string2;
5281 }
5282 if (c1 != c2)
40658b94 5283 break;
db230ce3 5284
40658b94
PH
5285 string1 += 1;
5286 string2 += 1;
5287 }
db230ce3 5288
40658b94
PH
5289 switch (*string1)
5290 {
5291 case '(':
5292 return strcmp_iw_ordered (string1, string2);
5293 case '_':
5294 if (*string2 == '\0')
5295 {
052874e8 5296 if (is_name_suffix (string1))
40658b94
PH
5297 return 0;
5298 else
1a1d5513 5299 return 1;
40658b94 5300 }
dbb8534f 5301 /* FALLTHROUGH */
40658b94
PH
5302 default:
5303 if (*string2 == '(')
5304 return strcmp_iw_ordered (string1, string2);
5305 else
db230ce3
JB
5306 {
5307 if (casing == case_sensitive_off)
5308 return tolower (*string1) - tolower (*string2);
5309 else
5310 return *string1 - *string2;
5311 }
40658b94 5312 }
ccefe4c4
TT
5313}
5314
db230ce3
JB
5315/* Compare STRING1 to STRING2, with results as for strcmp.
5316 Compatible with strcmp_iw_ordered in that...
5317
5318 strcmp_iw_ordered (STRING1, STRING2) <= 0
5319
5320 ... implies...
5321
5322 compare_names (STRING1, STRING2) <= 0
5323
5324 (they may differ as to what symbols compare equal). */
5325
5326static int
5327compare_names (const char *string1, const char *string2)
5328{
5329 int result;
5330
5331 /* Similar to what strcmp_iw_ordered does, we need to perform
5332 a case-insensitive comparison first, and only resort to
5333 a second, case-sensitive, comparison if the first one was
5334 not sufficient to differentiate the two strings. */
5335
5336 result = compare_names_with_case (string1, string2, case_sensitive_off);
5337 if (result == 0)
5338 result = compare_names_with_case (string1, string2, case_sensitive_on);
5339
5340 return result;
5341}
5342
339c13b6
JB
5343/* Add to OBSTACKP all non-local symbols whose name and domain match
5344 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
5345 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
5346
5347static void
40658b94
PH
5348add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5349 domain_enum domain, int global,
5350 int is_wild_match)
339c13b6
JB
5351{
5352 struct objfile *objfile;
40658b94 5353 struct match_data data;
339c13b6 5354
6475f2fe 5355 memset (&data, 0, sizeof data);
ccefe4c4 5356 data.obstackp = obstackp;
339c13b6 5357
ccefe4c4 5358 ALL_OBJFILES (objfile)
40658b94
PH
5359 {
5360 data.objfile = objfile;
5361
5362 if (is_wild_match)
4186eb54
KS
5363 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5364 aux_add_nonlocal_symbols, &data,
5365 wild_match, NULL);
40658b94 5366 else
4186eb54
KS
5367 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5368 aux_add_nonlocal_symbols, &data,
5369 full_match, compare_names);
40658b94
PH
5370 }
5371
5372 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5373 {
5374 ALL_OBJFILES (objfile)
5375 {
5376 char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5377 strcpy (name1, "_ada_");
5378 strcpy (name1 + sizeof ("_ada_") - 1, name);
5379 data.objfile = objfile;
ade7ed9e
DE
5380 objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5381 global,
0963b4bd
MS
5382 aux_add_nonlocal_symbols,
5383 &data,
40658b94
PH
5384 full_match, compare_names);
5385 }
5386 }
339c13b6
JB
5387}
5388
4eeaa230
DE
5389/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5390 non-zero, enclosing scope and in global scopes, returning the number of
5391 matches.
9f88c959 5392 Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4c4b4cd2 5393 indicating the symbols found and the blocks and symbol tables (if
4eeaa230
DE
5394 any) in which they were found. This vector is transient---good only to
5395 the next call of ada_lookup_symbol_list.
5396
5397 When full_search is non-zero, any non-function/non-enumeral
4c4b4cd2
PH
5398 symbol match within the nest of blocks whose innermost member is BLOCK0,
5399 is the one match returned (no other matches in that or
d9680e73 5400 enclosing blocks is returned). If there are any matches in or
4eeaa230
DE
5401 surrounding BLOCK0, then these alone are returned.
5402
9f88c959 5403 Names prefixed with "standard__" are handled specially: "standard__"
4c4b4cd2 5404 is first stripped off, and only static and global symbols are searched. */
14f9c5c9 5405
4eeaa230
DE
5406static int
5407ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5408 domain_enum namespace,
5409 struct ada_symbol_info **results,
5410 int full_search)
14f9c5c9
AS
5411{
5412 struct symbol *sym;
f0c5f9b2 5413 const struct block *block;
4c4b4cd2 5414 const char *name;
82ccd55e 5415 const int wild_match_p = should_use_wild_match (name0);
14f9c5c9 5416 int cacheIfUnique;
4c4b4cd2 5417 int ndefns;
14f9c5c9 5418
4c4b4cd2
PH
5419 obstack_free (&symbol_list_obstack, NULL);
5420 obstack_init (&symbol_list_obstack);
14f9c5c9 5421
14f9c5c9
AS
5422 cacheIfUnique = 0;
5423
5424 /* Search specified block and its superiors. */
5425
4c4b4cd2 5426 name = name0;
f0c5f9b2 5427 block = block0;
339c13b6
JB
5428
5429 /* Special case: If the user specifies a symbol name inside package
5430 Standard, do a non-wild matching of the symbol name without
5431 the "standard__" prefix. This was primarily introduced in order
5432 to allow the user to specifically access the standard exceptions
5433 using, for instance, Standard.Constraint_Error when Constraint_Error
5434 is ambiguous (due to the user defining its own Constraint_Error
5435 entity inside its program). */
4c4b4cd2
PH
5436 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5437 {
4c4b4cd2
PH
5438 block = NULL;
5439 name = name0 + sizeof ("standard__") - 1;
5440 }
5441
339c13b6 5442 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5443
4eeaa230
DE
5444 if (block != NULL)
5445 {
5446 if (full_search)
5447 {
5448 ada_add_local_symbols (&symbol_list_obstack, name, block,
5449 namespace, wild_match_p);
5450 }
5451 else
5452 {
5453 /* In the !full_search case we're are being called by
5454 ada_iterate_over_symbols, and we don't want to search
5455 superblocks. */
5456 ada_add_block_symbols (&symbol_list_obstack, block, name,
5457 namespace, NULL, wild_match_p);
5458 }
5459 if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5460 goto done;
5461 }
d2e4a39e 5462
339c13b6
JB
5463 /* No non-global symbols found. Check our cache to see if we have
5464 already performed this search before. If we have, then return
5465 the same result. */
5466
14f9c5c9 5467 cacheIfUnique = 1;
2570f2b7 5468 if (lookup_cached_symbol (name0, namespace, &sym, &block))
4c4b4cd2
PH
5469 {
5470 if (sym != NULL)
2570f2b7 5471 add_defn_to_vec (&symbol_list_obstack, sym, block);
4c4b4cd2
PH
5472 goto done;
5473 }
14f9c5c9 5474
339c13b6
JB
5475 /* Search symbols from all global blocks. */
5476
40658b94 5477 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
82ccd55e 5478 wild_match_p);
d2e4a39e 5479
4c4b4cd2 5480 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5481 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5482
4c4b4cd2 5483 if (num_defns_collected (&symbol_list_obstack) == 0)
40658b94 5484 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
82ccd55e 5485 wild_match_p);
14f9c5c9 5486
4c4b4cd2
PH
5487done:
5488 ndefns = num_defns_collected (&symbol_list_obstack);
5489 *results = defns_collected (&symbol_list_obstack, 1);
5490
5491 ndefns = remove_extra_symbols (*results, ndefns);
5492
2ad01556 5493 if (ndefns == 0 && full_search)
2570f2b7 5494 cache_symbol (name0, namespace, NULL, NULL);
14f9c5c9 5495
2ad01556 5496 if (ndefns == 1 && full_search && cacheIfUnique)
2570f2b7 5497 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
14f9c5c9 5498
aeb5907d 5499 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
14f9c5c9 5500
14f9c5c9
AS
5501 return ndefns;
5502}
5503
4eeaa230
DE
5504/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5505 in global scopes, returning the number of matches, and setting *RESULTS
5506 to a vector of (SYM,BLOCK) tuples.
5507 See ada_lookup_symbol_list_worker for further details. */
5508
5509int
5510ada_lookup_symbol_list (const char *name0, const struct block *block0,
5511 domain_enum domain, struct ada_symbol_info **results)
5512{
5513 return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5514}
5515
5516/* Implementation of the la_iterate_over_symbols method. */
5517
5518static void
5519ada_iterate_over_symbols (const struct block *block,
5520 const char *name, domain_enum domain,
5521 symbol_found_callback_ftype *callback,
5522 void *data)
5523{
5524 int ndefs, i;
5525 struct ada_symbol_info *results;
5526
5527 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5528 for (i = 0; i < ndefs; ++i)
5529 {
5530 if (! (*callback) (results[i].sym, data))
5531 break;
5532 }
5533}
5534
f8eba3c6
TT
5535/* If NAME is the name of an entity, return a string that should
5536 be used to look that entity up in Ada units. This string should
5537 be deallocated after use using xfree.
5538
5539 NAME can have any form that the "break" or "print" commands might
5540 recognize. In other words, it does not have to be the "natural"
5541 name, or the "encoded" name. */
5542
5543char *
5544ada_name_for_lookup (const char *name)
5545{
5546 char *canon;
5547 int nlen = strlen (name);
5548
5549 if (name[0] == '<' && name[nlen - 1] == '>')
5550 {
5551 canon = xmalloc (nlen - 1);
5552 memcpy (canon, name + 1, nlen - 2);
5553 canon[nlen - 2] = '\0';
5554 }
5555 else
5556 canon = xstrdup (ada_encode (ada_fold_name (name)));
5557 return canon;
5558}
5559
4e5c77fe
JB
5560/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5561 to 1, but choosing the first symbol found if there are multiple
5562 choices.
5563
5e2336be
JB
5564 The result is stored in *INFO, which must be non-NULL.
5565 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5566
5567void
5568ada_lookup_encoded_symbol (const char *name, const struct block *block,
5569 domain_enum namespace,
5e2336be 5570 struct ada_symbol_info *info)
14f9c5c9 5571{
4c4b4cd2 5572 struct ada_symbol_info *candidates;
14f9c5c9
AS
5573 int n_candidates;
5574
5e2336be
JB
5575 gdb_assert (info != NULL);
5576 memset (info, 0, sizeof (struct ada_symbol_info));
4e5c77fe 5577
4eeaa230 5578 n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
14f9c5c9 5579 if (n_candidates == 0)
4e5c77fe 5580 return;
4c4b4cd2 5581
5e2336be
JB
5582 *info = candidates[0];
5583 info->sym = fixup_symbol_section (info->sym, NULL);
4e5c77fe 5584}
aeb5907d
JB
5585
5586/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5587 scope and in global scopes, or NULL if none. NAME is folded and
5588 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5589 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5590 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5591
aeb5907d
JB
5592struct symbol *
5593ada_lookup_symbol (const char *name, const struct block *block0,
21b556f4 5594 domain_enum namespace, int *is_a_field_of_this)
aeb5907d 5595{
5e2336be 5596 struct ada_symbol_info info;
4e5c77fe 5597
aeb5907d
JB
5598 if (is_a_field_of_this != NULL)
5599 *is_a_field_of_this = 0;
5600
4e5c77fe 5601 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5e2336be
JB
5602 block0, namespace, &info);
5603 return info.sym;
4c4b4cd2 5604}
14f9c5c9 5605
4c4b4cd2 5606static struct symbol *
f606139a
DE
5607ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5608 const char *name,
76a01679 5609 const struct block *block,
21b556f4 5610 const domain_enum domain)
4c4b4cd2 5611{
04dccad0
JB
5612 struct symbol *sym;
5613
5614 sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5615 if (sym != NULL)
5616 return sym;
5617
5618 /* If we haven't found a match at this point, try the primitive
5619 types. In other languages, this search is performed before
5620 searching for global symbols in order to short-circuit that
5621 global-symbol search if it happens that the name corresponds
5622 to a primitive type. But we cannot do the same in Ada, because
5623 it is perfectly legitimate for a program to declare a type which
5624 has the same name as a standard type. If looking up a type in
5625 that situation, we have traditionally ignored the primitive type
5626 in favor of user-defined types. This is why, unlike most other
5627 languages, we search the primitive types this late and only after
5628 having searched the global symbols without success. */
5629
5630 if (domain == VAR_DOMAIN)
5631 {
5632 struct gdbarch *gdbarch;
5633
5634 if (block == NULL)
5635 gdbarch = target_gdbarch ();
5636 else
5637 gdbarch = block_gdbarch (block);
5638 sym = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5639 if (sym != NULL)
5640 return sym;
5641 }
5642
5643 return NULL;
14f9c5c9
AS
5644}
5645
5646
4c4b4cd2
PH
5647/* True iff STR is a possible encoded suffix of a normal Ada name
5648 that is to be ignored for matching purposes. Suffixes of parallel
5649 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5650 are given by any of the regular expressions:
4c4b4cd2 5651
babe1480
JB
5652 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5653 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5654 TKB [subprogram suffix for task bodies]
babe1480 5655 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5656 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5657
5658 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5659 match is performed. This sequence is used to differentiate homonyms,
5660 is an optional part of a valid name suffix. */
4c4b4cd2 5661
14f9c5c9 5662static int
d2e4a39e 5663is_name_suffix (const char *str)
14f9c5c9
AS
5664{
5665 int k;
4c4b4cd2
PH
5666 const char *matching;
5667 const int len = strlen (str);
5668
babe1480
JB
5669 /* Skip optional leading __[0-9]+. */
5670
4c4b4cd2
PH
5671 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5672 {
babe1480
JB
5673 str += 3;
5674 while (isdigit (str[0]))
5675 str += 1;
4c4b4cd2 5676 }
babe1480
JB
5677
5678 /* [.$][0-9]+ */
4c4b4cd2 5679
babe1480 5680 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5681 {
babe1480 5682 matching = str + 1;
4c4b4cd2
PH
5683 while (isdigit (matching[0]))
5684 matching += 1;
5685 if (matching[0] == '\0')
5686 return 1;
5687 }
5688
5689 /* ___[0-9]+ */
babe1480 5690
4c4b4cd2
PH
5691 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5692 {
5693 matching = str + 3;
5694 while (isdigit (matching[0]))
5695 matching += 1;
5696 if (matching[0] == '\0')
5697 return 1;
5698 }
5699
9ac7f98e
JB
5700 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5701
5702 if (strcmp (str, "TKB") == 0)
5703 return 1;
5704
529cad9c
PH
5705#if 0
5706 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5707 with a N at the end. Unfortunately, the compiler uses the same
5708 convention for other internal types it creates. So treating
529cad9c 5709 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5710 some regressions. For instance, consider the case of an enumerated
5711 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5712 name ends with N.
5713 Having a single character like this as a suffix carrying some
0963b4bd 5714 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5715 to be something like "_N" instead. In the meantime, do not do
5716 the following check. */
5717 /* Protected Object Subprograms */
5718 if (len == 1 && str [0] == 'N')
5719 return 1;
5720#endif
5721
5722 /* _E[0-9]+[bs]$ */
5723 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5724 {
5725 matching = str + 3;
5726 while (isdigit (matching[0]))
5727 matching += 1;
5728 if ((matching[0] == 'b' || matching[0] == 's')
5729 && matching [1] == '\0')
5730 return 1;
5731 }
5732
4c4b4cd2
PH
5733 /* ??? We should not modify STR directly, as we are doing below. This
5734 is fine in this case, but may become problematic later if we find
5735 that this alternative did not work, and want to try matching
5736 another one from the begining of STR. Since we modified it, we
5737 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5738 if (str[0] == 'X')
5739 {
5740 str += 1;
d2e4a39e 5741 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
5742 {
5743 if (str[0] != 'n' && str[0] != 'b')
5744 return 0;
5745 str += 1;
5746 }
14f9c5c9 5747 }
babe1480 5748
14f9c5c9
AS
5749 if (str[0] == '\000')
5750 return 1;
babe1480 5751
d2e4a39e 5752 if (str[0] == '_')
14f9c5c9
AS
5753 {
5754 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 5755 return 0;
d2e4a39e 5756 if (str[2] == '_')
4c4b4cd2 5757 {
61ee279c
PH
5758 if (strcmp (str + 3, "JM") == 0)
5759 return 1;
5760 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5761 the LJM suffix in favor of the JM one. But we will
5762 still accept LJM as a valid suffix for a reasonable
5763 amount of time, just to allow ourselves to debug programs
5764 compiled using an older version of GNAT. */
4c4b4cd2
PH
5765 if (strcmp (str + 3, "LJM") == 0)
5766 return 1;
5767 if (str[3] != 'X')
5768 return 0;
1265e4aa
JB
5769 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5770 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
5771 return 1;
5772 if (str[4] == 'R' && str[5] != 'T')
5773 return 1;
5774 return 0;
5775 }
5776 if (!isdigit (str[2]))
5777 return 0;
5778 for (k = 3; str[k] != '\0'; k += 1)
5779 if (!isdigit (str[k]) && str[k] != '_')
5780 return 0;
14f9c5c9
AS
5781 return 1;
5782 }
4c4b4cd2 5783 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5784 {
4c4b4cd2
PH
5785 for (k = 2; str[k] != '\0'; k += 1)
5786 if (!isdigit (str[k]) && str[k] != '_')
5787 return 0;
14f9c5c9
AS
5788 return 1;
5789 }
5790 return 0;
5791}
d2e4a39e 5792
aeb5907d
JB
5793/* Return non-zero if the string starting at NAME and ending before
5794 NAME_END contains no capital letters. */
529cad9c
PH
5795
5796static int
5797is_valid_name_for_wild_match (const char *name0)
5798{
5799 const char *decoded_name = ada_decode (name0);
5800 int i;
5801
5823c3ef
JB
5802 /* If the decoded name starts with an angle bracket, it means that
5803 NAME0 does not follow the GNAT encoding format. It should then
5804 not be allowed as a possible wild match. */
5805 if (decoded_name[0] == '<')
5806 return 0;
5807
529cad9c
PH
5808 for (i=0; decoded_name[i] != '\0'; i++)
5809 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5810 return 0;
5811
5812 return 1;
5813}
5814
73589123
PH
5815/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5816 that could start a simple name. Assumes that *NAMEP points into
5817 the string beginning at NAME0. */
4c4b4cd2 5818
14f9c5c9 5819static int
73589123 5820advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 5821{
73589123 5822 const char *name = *namep;
5b4ee69b 5823
5823c3ef 5824 while (1)
14f9c5c9 5825 {
aa27d0b3 5826 int t0, t1;
73589123
PH
5827
5828 t0 = *name;
5829 if (t0 == '_')
5830 {
5831 t1 = name[1];
5832 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5833 {
5834 name += 1;
5835 if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5836 break;
5837 else
5838 name += 1;
5839 }
aa27d0b3
JB
5840 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5841 || name[2] == target0))
73589123
PH
5842 {
5843 name += 2;
5844 break;
5845 }
5846 else
5847 return 0;
5848 }
5849 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5850 name += 1;
5851 else
5823c3ef 5852 return 0;
73589123
PH
5853 }
5854
5855 *namep = name;
5856 return 1;
5857}
5858
5859/* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
5860 informational suffixes of NAME (i.e., for which is_name_suffix is
5861 true). Assumes that PATN is a lower-cased Ada simple name. */
5862
5863static int
5864wild_match (const char *name, const char *patn)
5865{
22e048c9 5866 const char *p;
73589123
PH
5867 const char *name0 = name;
5868
5869 while (1)
5870 {
5871 const char *match = name;
5872
5873 if (*name == *patn)
5874 {
5875 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5876 if (*p != *name)
5877 break;
5878 if (*p == '\0' && is_name_suffix (name))
5879 return match != name0 && !is_valid_name_for_wild_match (name0);
5880
5881 if (name[-1] == '_')
5882 name -= 1;
5883 }
5884 if (!advance_wild_match (&name, name0, *patn))
5885 return 1;
96d887e8 5886 }
96d887e8
PH
5887}
5888
40658b94
PH
5889/* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5890 informational suffix. */
5891
c4d840bd
PH
5892static int
5893full_match (const char *sym_name, const char *search_name)
5894{
40658b94 5895 return !match_name (sym_name, search_name, 0);
c4d840bd
PH
5896}
5897
5898
96d887e8
PH
5899/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5900 vector *defn_symbols, updating the list of symbols in OBSTACKP
0963b4bd 5901 (if necessary). If WILD, treat as NAME with a wildcard prefix.
4eeaa230 5902 OBJFILE is the section containing BLOCK. */
96d887e8
PH
5903
5904static void
5905ada_add_block_symbols (struct obstack *obstackp,
f0c5f9b2 5906 const struct block *block, const char *name,
96d887e8 5907 domain_enum domain, struct objfile *objfile,
2570f2b7 5908 int wild)
96d887e8 5909{
8157b174 5910 struct block_iterator iter;
96d887e8
PH
5911 int name_len = strlen (name);
5912 /* A matching argument symbol, if any. */
5913 struct symbol *arg_sym;
5914 /* Set true when we find a matching non-argument symbol. */
5915 int found_sym;
5916 struct symbol *sym;
5917
5918 arg_sym = NULL;
5919 found_sym = 0;
5920 if (wild)
5921 {
8157b174
TT
5922 for (sym = block_iter_match_first (block, name, wild_match, &iter);
5923 sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
76a01679 5924 {
4186eb54
KS
5925 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5926 SYMBOL_DOMAIN (sym), domain)
73589123 5927 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
76a01679 5928 {
2a2d4dc3
AS
5929 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5930 continue;
5931 else if (SYMBOL_IS_ARGUMENT (sym))
5932 arg_sym = sym;
5933 else
5934 {
76a01679
JB
5935 found_sym = 1;
5936 add_defn_to_vec (obstackp,
5937 fixup_symbol_section (sym, objfile),
2570f2b7 5938 block);
76a01679
JB
5939 }
5940 }
5941 }
96d887e8
PH
5942 }
5943 else
5944 {
8157b174
TT
5945 for (sym = block_iter_match_first (block, name, full_match, &iter);
5946 sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
76a01679 5947 {
4186eb54
KS
5948 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5949 SYMBOL_DOMAIN (sym), domain))
76a01679 5950 {
c4d840bd
PH
5951 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5952 {
5953 if (SYMBOL_IS_ARGUMENT (sym))
5954 arg_sym = sym;
5955 else
2a2d4dc3 5956 {
c4d840bd
PH
5957 found_sym = 1;
5958 add_defn_to_vec (obstackp,
5959 fixup_symbol_section (sym, objfile),
5960 block);
2a2d4dc3 5961 }
c4d840bd 5962 }
76a01679
JB
5963 }
5964 }
96d887e8
PH
5965 }
5966
5967 if (!found_sym && arg_sym != NULL)
5968 {
76a01679
JB
5969 add_defn_to_vec (obstackp,
5970 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5971 block);
96d887e8
PH
5972 }
5973
5974 if (!wild)
5975 {
5976 arg_sym = NULL;
5977 found_sym = 0;
5978
5979 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5980 {
4186eb54
KS
5981 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5982 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
5983 {
5984 int cmp;
5985
5986 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5987 if (cmp == 0)
5988 {
5989 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5990 if (cmp == 0)
5991 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5992 name_len);
5993 }
5994
5995 if (cmp == 0
5996 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5997 {
2a2d4dc3
AS
5998 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5999 {
6000 if (SYMBOL_IS_ARGUMENT (sym))
6001 arg_sym = sym;
6002 else
6003 {
6004 found_sym = 1;
6005 add_defn_to_vec (obstackp,
6006 fixup_symbol_section (sym, objfile),
6007 block);
6008 }
6009 }
76a01679
JB
6010 }
6011 }
76a01679 6012 }
96d887e8
PH
6013
6014 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6015 They aren't parameters, right? */
6016 if (!found_sym && arg_sym != NULL)
6017 {
6018 add_defn_to_vec (obstackp,
76a01679 6019 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6020 block);
96d887e8
PH
6021 }
6022 }
6023}
6024\f
41d27058
JB
6025
6026 /* Symbol Completion */
6027
6028/* If SYM_NAME is a completion candidate for TEXT, return this symbol
6029 name in a form that's appropriate for the completion. The result
6030 does not need to be deallocated, but is only good until the next call.
6031
6032 TEXT_LEN is equal to the length of TEXT.
e701b3c0 6033 Perform a wild match if WILD_MATCH_P is set.
6ea35997 6034 ENCODED_P should be set if TEXT represents the start of a symbol name
41d27058
JB
6035 in its encoded form. */
6036
6037static const char *
6038symbol_completion_match (const char *sym_name,
6039 const char *text, int text_len,
6ea35997 6040 int wild_match_p, int encoded_p)
41d27058 6041{
41d27058
JB
6042 const int verbatim_match = (text[0] == '<');
6043 int match = 0;
6044
6045 if (verbatim_match)
6046 {
6047 /* Strip the leading angle bracket. */
6048 text = text + 1;
6049 text_len--;
6050 }
6051
6052 /* First, test against the fully qualified name of the symbol. */
6053
6054 if (strncmp (sym_name, text, text_len) == 0)
6055 match = 1;
6056
6ea35997 6057 if (match && !encoded_p)
41d27058
JB
6058 {
6059 /* One needed check before declaring a positive match is to verify
6060 that iff we are doing a verbatim match, the decoded version
6061 of the symbol name starts with '<'. Otherwise, this symbol name
6062 is not a suitable completion. */
6063 const char *sym_name_copy = sym_name;
6064 int has_angle_bracket;
6065
6066 sym_name = ada_decode (sym_name);
6067 has_angle_bracket = (sym_name[0] == '<');
6068 match = (has_angle_bracket == verbatim_match);
6069 sym_name = sym_name_copy;
6070 }
6071
6072 if (match && !verbatim_match)
6073 {
6074 /* When doing non-verbatim match, another check that needs to
6075 be done is to verify that the potentially matching symbol name
6076 does not include capital letters, because the ada-mode would
6077 not be able to understand these symbol names without the
6078 angle bracket notation. */
6079 const char *tmp;
6080
6081 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6082 if (*tmp != '\0')
6083 match = 0;
6084 }
6085
6086 /* Second: Try wild matching... */
6087
e701b3c0 6088 if (!match && wild_match_p)
41d27058
JB
6089 {
6090 /* Since we are doing wild matching, this means that TEXT
6091 may represent an unqualified symbol name. We therefore must
6092 also compare TEXT against the unqualified name of the symbol. */
6093 sym_name = ada_unqualified_name (ada_decode (sym_name));
6094
6095 if (strncmp (sym_name, text, text_len) == 0)
6096 match = 1;
6097 }
6098
6099 /* Finally: If we found a mach, prepare the result to return. */
6100
6101 if (!match)
6102 return NULL;
6103
6104 if (verbatim_match)
6105 sym_name = add_angle_brackets (sym_name);
6106
6ea35997 6107 if (!encoded_p)
41d27058
JB
6108 sym_name = ada_decode (sym_name);
6109
6110 return sym_name;
6111}
6112
6113/* A companion function to ada_make_symbol_completion_list().
6114 Check if SYM_NAME represents a symbol which name would be suitable
6115 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6116 it is appended at the end of the given string vector SV.
6117
6118 ORIG_TEXT is the string original string from the user command
6119 that needs to be completed. WORD is the entire command on which
6120 completion should be performed. These two parameters are used to
6121 determine which part of the symbol name should be added to the
6122 completion vector.
c0af1706 6123 if WILD_MATCH_P is set, then wild matching is performed.
cb8e9b97 6124 ENCODED_P should be set if TEXT represents a symbol name in its
41d27058
JB
6125 encoded formed (in which case the completion should also be
6126 encoded). */
6127
6128static void
d6565258 6129symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
6130 const char *sym_name,
6131 const char *text, int text_len,
6132 const char *orig_text, const char *word,
cb8e9b97 6133 int wild_match_p, int encoded_p)
41d27058
JB
6134{
6135 const char *match = symbol_completion_match (sym_name, text, text_len,
cb8e9b97 6136 wild_match_p, encoded_p);
41d27058
JB
6137 char *completion;
6138
6139 if (match == NULL)
6140 return;
6141
6142 /* We found a match, so add the appropriate completion to the given
6143 string vector. */
6144
6145 if (word == orig_text)
6146 {
6147 completion = xmalloc (strlen (match) + 5);
6148 strcpy (completion, match);
6149 }
6150 else if (word > orig_text)
6151 {
6152 /* Return some portion of sym_name. */
6153 completion = xmalloc (strlen (match) + 5);
6154 strcpy (completion, match + (word - orig_text));
6155 }
6156 else
6157 {
6158 /* Return some of ORIG_TEXT plus sym_name. */
6159 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6160 strncpy (completion, word, orig_text - word);
6161 completion[orig_text - word] = '\0';
6162 strcat (completion, match);
6163 }
6164
d6565258 6165 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
6166}
6167
ccefe4c4 6168/* An object of this type is passed as the user_data argument to the
bb4142cf 6169 expand_symtabs_matching method. */
ccefe4c4
TT
6170struct add_partial_datum
6171{
6172 VEC(char_ptr) **completions;
6f937416 6173 const char *text;
ccefe4c4 6174 int text_len;
6f937416
PA
6175 const char *text0;
6176 const char *word;
ccefe4c4
TT
6177 int wild_match;
6178 int encoded;
6179};
6180
bb4142cf
DE
6181/* A callback for expand_symtabs_matching. */
6182
7b08b9eb 6183static int
bb4142cf 6184ada_complete_symbol_matcher (const char *name, void *user_data)
ccefe4c4
TT
6185{
6186 struct add_partial_datum *data = user_data;
7b08b9eb
JK
6187
6188 return symbol_completion_match (name, data->text, data->text_len,
6189 data->wild_match, data->encoded) != NULL;
ccefe4c4
TT
6190}
6191
49c4e619
TT
6192/* Return a list of possible symbol names completing TEXT0. WORD is
6193 the entire command on which completion is made. */
41d27058 6194
49c4e619 6195static VEC (char_ptr) *
6f937416
PA
6196ada_make_symbol_completion_list (const char *text0, const char *word,
6197 enum type_code code)
41d27058
JB
6198{
6199 char *text;
6200 int text_len;
b1ed564a
JB
6201 int wild_match_p;
6202 int encoded_p;
2ba95b9b 6203 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058 6204 struct symbol *sym;
43f3e411 6205 struct compunit_symtab *s;
41d27058
JB
6206 struct minimal_symbol *msymbol;
6207 struct objfile *objfile;
3977b71f 6208 const struct block *b, *surrounding_static_block = 0;
41d27058 6209 int i;
8157b174 6210 struct block_iterator iter;
b8fea896 6211 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
41d27058 6212
2f68a895
TT
6213 gdb_assert (code == TYPE_CODE_UNDEF);
6214
41d27058
JB
6215 if (text0[0] == '<')
6216 {
6217 text = xstrdup (text0);
6218 make_cleanup (xfree, text);
6219 text_len = strlen (text);
b1ed564a
JB
6220 wild_match_p = 0;
6221 encoded_p = 1;
41d27058
JB
6222 }
6223 else
6224 {
6225 text = xstrdup (ada_encode (text0));
6226 make_cleanup (xfree, text);
6227 text_len = strlen (text);
6228 for (i = 0; i < text_len; i++)
6229 text[i] = tolower (text[i]);
6230
b1ed564a 6231 encoded_p = (strstr (text0, "__") != NULL);
41d27058
JB
6232 /* If the name contains a ".", then the user is entering a fully
6233 qualified entity name, and the match must not be done in wild
6234 mode. Similarly, if the user wants to complete what looks like
6235 an encoded name, the match must not be done in wild mode. */
b1ed564a 6236 wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
41d27058
JB
6237 }
6238
6239 /* First, look at the partial symtab symbols. */
41d27058 6240 {
ccefe4c4
TT
6241 struct add_partial_datum data;
6242
6243 data.completions = &completions;
6244 data.text = text;
6245 data.text_len = text_len;
6246 data.text0 = text0;
6247 data.word = word;
b1ed564a
JB
6248 data.wild_match = wild_match_p;
6249 data.encoded = encoded_p;
276d885b
GB
6250 expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
6251 ALL_DOMAIN, &data);
41d27058
JB
6252 }
6253
6254 /* At this point scan through the misc symbol vectors and add each
6255 symbol you find to the list. Eventually we want to ignore
6256 anything that isn't a text symbol (everything else will be
6257 handled by the psymtab code above). */
6258
6259 ALL_MSYMBOLS (objfile, msymbol)
6260 {
6261 QUIT;
efd66ac6 6262 symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
b1ed564a
JB
6263 text, text_len, text0, word, wild_match_p,
6264 encoded_p);
41d27058
JB
6265 }
6266
6267 /* Search upwards from currently selected frame (so that we can
6268 complete on local vars. */
6269
6270 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6271 {
6272 if (!BLOCK_SUPERBLOCK (b))
6273 surrounding_static_block = b; /* For elmin of dups */
6274
6275 ALL_BLOCK_SYMBOLS (b, iter, sym)
6276 {
d6565258 6277 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6278 text, text_len, text0, word,
b1ed564a 6279 wild_match_p, encoded_p);
41d27058
JB
6280 }
6281 }
6282
6283 /* Go through the symtabs and check the externs and statics for
43f3e411 6284 symbols which match. */
41d27058 6285
43f3e411 6286 ALL_COMPUNITS (objfile, s)
41d27058
JB
6287 {
6288 QUIT;
43f3e411 6289 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
41d27058
JB
6290 ALL_BLOCK_SYMBOLS (b, iter, sym)
6291 {
d6565258 6292 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6293 text, text_len, text0, word,
b1ed564a 6294 wild_match_p, encoded_p);
41d27058
JB
6295 }
6296 }
6297
43f3e411 6298 ALL_COMPUNITS (objfile, s)
41d27058
JB
6299 {
6300 QUIT;
43f3e411 6301 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
41d27058
JB
6302 /* Don't do this block twice. */
6303 if (b == surrounding_static_block)
6304 continue;
6305 ALL_BLOCK_SYMBOLS (b, iter, sym)
6306 {
d6565258 6307 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6308 text, text_len, text0, word,
b1ed564a 6309 wild_match_p, encoded_p);
41d27058
JB
6310 }
6311 }
6312
b8fea896 6313 do_cleanups (old_chain);
49c4e619 6314 return completions;
41d27058
JB
6315}
6316
963a6417 6317 /* Field Access */
96d887e8 6318
73fb9985
JB
6319/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6320 for tagged types. */
6321
6322static int
6323ada_is_dispatch_table_ptr_type (struct type *type)
6324{
0d5cff50 6325 const char *name;
73fb9985
JB
6326
6327 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6328 return 0;
6329
6330 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6331 if (name == NULL)
6332 return 0;
6333
6334 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6335}
6336
ac4a2da4
JG
6337/* Return non-zero if TYPE is an interface tag. */
6338
6339static int
6340ada_is_interface_tag (struct type *type)
6341{
6342 const char *name = TYPE_NAME (type);
6343
6344 if (name == NULL)
6345 return 0;
6346
6347 return (strcmp (name, "ada__tags__interface_tag") == 0);
6348}
6349
963a6417
PH
6350/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6351 to be invisible to users. */
96d887e8 6352
963a6417
PH
6353int
6354ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6355{
963a6417
PH
6356 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6357 return 1;
ffde82bf 6358
73fb9985
JB
6359 /* Check the name of that field. */
6360 {
6361 const char *name = TYPE_FIELD_NAME (type, field_num);
6362
6363 /* Anonymous field names should not be printed.
6364 brobecker/2007-02-20: I don't think this can actually happen
6365 but we don't want to print the value of annonymous fields anyway. */
6366 if (name == NULL)
6367 return 1;
6368
ffde82bf
JB
6369 /* Normally, fields whose name start with an underscore ("_")
6370 are fields that have been internally generated by the compiler,
6371 and thus should not be printed. The "_parent" field is special,
6372 however: This is a field internally generated by the compiler
6373 for tagged types, and it contains the components inherited from
6374 the parent type. This field should not be printed as is, but
6375 should not be ignored either. */
73fb9985
JB
6376 if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6377 return 1;
6378 }
6379
ac4a2da4
JG
6380 /* If this is the dispatch table of a tagged type or an interface tag,
6381 then ignore. */
73fb9985 6382 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6383 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6384 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6385 return 1;
6386
6387 /* Not a special field, so it should not be ignored. */
6388 return 0;
963a6417 6389}
96d887e8 6390
963a6417 6391/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6392 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6393
963a6417
PH
6394int
6395ada_is_tagged_type (struct type *type, int refok)
6396{
6397 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6398}
96d887e8 6399
963a6417 6400/* True iff TYPE represents the type of X'Tag */
96d887e8 6401
963a6417
PH
6402int
6403ada_is_tag_type (struct type *type)
6404{
6405 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6406 return 0;
6407 else
96d887e8 6408 {
963a6417 6409 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6410
963a6417
PH
6411 return (name != NULL
6412 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6413 }
96d887e8
PH
6414}
6415
963a6417 6416/* The type of the tag on VAL. */
76a01679 6417
963a6417
PH
6418struct type *
6419ada_tag_type (struct value *val)
96d887e8 6420{
df407dfe 6421 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 6422}
96d887e8 6423
b50d69b5
JG
6424/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6425 retired at Ada 05). */
6426
6427static int
6428is_ada95_tag (struct value *tag)
6429{
6430 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6431}
6432
963a6417 6433/* The value of the tag on VAL. */
96d887e8 6434
963a6417
PH
6435struct value *
6436ada_value_tag (struct value *val)
6437{
03ee6b2e 6438 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6439}
6440
963a6417
PH
6441/* The value of the tag on the object of type TYPE whose contents are
6442 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6443 ADDRESS. */
96d887e8 6444
963a6417 6445static struct value *
10a2c479 6446value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6447 const gdb_byte *valaddr,
963a6417 6448 CORE_ADDR address)
96d887e8 6449{
b5385fc0 6450 int tag_byte_offset;
963a6417 6451 struct type *tag_type;
5b4ee69b 6452
963a6417 6453 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6454 NULL, NULL, NULL))
96d887e8 6455 {
fc1a4b47 6456 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6457 ? NULL
6458 : valaddr + tag_byte_offset);
963a6417 6459 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6460
963a6417 6461 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6462 }
963a6417
PH
6463 return NULL;
6464}
96d887e8 6465
963a6417
PH
6466static struct type *
6467type_from_tag (struct value *tag)
6468{
6469 const char *type_name = ada_tag_name (tag);
5b4ee69b 6470
963a6417
PH
6471 if (type_name != NULL)
6472 return ada_find_any_type (ada_encode (type_name));
6473 return NULL;
6474}
96d887e8 6475
b50d69b5
JG
6476/* Given a value OBJ of a tagged type, return a value of this
6477 type at the base address of the object. The base address, as
6478 defined in Ada.Tags, it is the address of the primary tag of
6479 the object, and therefore where the field values of its full
6480 view can be fetched. */
6481
6482struct value *
6483ada_tag_value_at_base_address (struct value *obj)
6484{
6485 volatile struct gdb_exception e;
6486 struct value *val;
6487 LONGEST offset_to_top = 0;
6488 struct type *ptr_type, *obj_type;
6489 struct value *tag;
6490 CORE_ADDR base_address;
6491
6492 obj_type = value_type (obj);
6493
6494 /* It is the responsability of the caller to deref pointers. */
6495
6496 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6497 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6498 return obj;
6499
6500 tag = ada_value_tag (obj);
6501 if (!tag)
6502 return obj;
6503
6504 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6505
6506 if (is_ada95_tag (tag))
6507 return obj;
6508
6509 ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6510 ptr_type = lookup_pointer_type (ptr_type);
6511 val = value_cast (ptr_type, tag);
6512 if (!val)
6513 return obj;
6514
6515 /* It is perfectly possible that an exception be raised while
6516 trying to determine the base address, just like for the tag;
6517 see ada_tag_name for more details. We do not print the error
6518 message for the same reason. */
6519
6520 TRY_CATCH (e, RETURN_MASK_ERROR)
6521 {
6522 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6523 }
6524
6525 if (e.reason < 0)
6526 return obj;
6527
6528 /* If offset is null, nothing to do. */
6529
6530 if (offset_to_top == 0)
6531 return obj;
6532
6533 /* -1 is a special case in Ada.Tags; however, what should be done
6534 is not quite clear from the documentation. So do nothing for
6535 now. */
6536
6537 if (offset_to_top == -1)
6538 return obj;
6539
6540 base_address = value_address (obj) - offset_to_top;
6541 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6542
6543 /* Make sure that we have a proper tag at the new address.
6544 Otherwise, offset_to_top is bogus (which can happen when
6545 the object is not initialized yet). */
6546
6547 if (!tag)
6548 return obj;
6549
6550 obj_type = type_from_tag (tag);
6551
6552 if (!obj_type)
6553 return obj;
6554
6555 return value_from_contents_and_address (obj_type, NULL, base_address);
6556}
6557
1b611343
JB
6558/* Return the "ada__tags__type_specific_data" type. */
6559
6560static struct type *
6561ada_get_tsd_type (struct inferior *inf)
963a6417 6562{
1b611343 6563 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6564
1b611343
JB
6565 if (data->tsd_type == 0)
6566 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6567 return data->tsd_type;
6568}
529cad9c 6569
1b611343
JB
6570/* Return the TSD (type-specific data) associated to the given TAG.
6571 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6572
1b611343 6573 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6574
1b611343
JB
6575static struct value *
6576ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6577{
4c4b4cd2 6578 struct value *val;
1b611343 6579 struct type *type;
5b4ee69b 6580
1b611343
JB
6581 /* First option: The TSD is simply stored as a field of our TAG.
6582 Only older versions of GNAT would use this format, but we have
6583 to test it first, because there are no visible markers for
6584 the current approach except the absence of that field. */
529cad9c 6585
1b611343
JB
6586 val = ada_value_struct_elt (tag, "tsd", 1);
6587 if (val)
6588 return val;
e802dbe0 6589
1b611343
JB
6590 /* Try the second representation for the dispatch table (in which
6591 there is no explicit 'tsd' field in the referent of the tag pointer,
6592 and instead the tsd pointer is stored just before the dispatch
6593 table. */
e802dbe0 6594
1b611343
JB
6595 type = ada_get_tsd_type (current_inferior());
6596 if (type == NULL)
6597 return NULL;
6598 type = lookup_pointer_type (lookup_pointer_type (type));
6599 val = value_cast (type, tag);
6600 if (val == NULL)
6601 return NULL;
6602 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6603}
6604
1b611343
JB
6605/* Given the TSD of a tag (type-specific data), return a string
6606 containing the name of the associated type.
6607
6608 The returned value is good until the next call. May return NULL
6609 if we are unable to determine the tag name. */
6610
6611static char *
6612ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6613{
529cad9c
PH
6614 static char name[1024];
6615 char *p;
1b611343 6616 struct value *val;
529cad9c 6617
1b611343 6618 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6619 if (val == NULL)
1b611343 6620 return NULL;
4c4b4cd2
PH
6621 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6622 for (p = name; *p != '\0'; p += 1)
6623 if (isalpha (*p))
6624 *p = tolower (*p);
1b611343 6625 return name;
4c4b4cd2
PH
6626}
6627
6628/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6629 a C string.
6630
6631 Return NULL if the TAG is not an Ada tag, or if we were unable to
6632 determine the name of that tag. The result is good until the next
6633 call. */
4c4b4cd2
PH
6634
6635const char *
6636ada_tag_name (struct value *tag)
6637{
1b611343
JB
6638 volatile struct gdb_exception e;
6639 char *name = NULL;
5b4ee69b 6640
df407dfe 6641 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6642 return NULL;
1b611343
JB
6643
6644 /* It is perfectly possible that an exception be raised while trying
6645 to determine the TAG's name, even under normal circumstances:
6646 The associated variable may be uninitialized or corrupted, for
6647 instance. We do not let any exception propagate past this point.
6648 instead we return NULL.
6649
6650 We also do not print the error message either (which often is very
6651 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6652 the caller print a more meaningful message if necessary. */
6653 TRY_CATCH (e, RETURN_MASK_ERROR)
6654 {
6655 struct value *tsd = ada_get_tsd_from_tag (tag);
6656
6657 if (tsd != NULL)
6658 name = ada_tag_name_from_tsd (tsd);
6659 }
6660
6661 return name;
4c4b4cd2
PH
6662}
6663
6664/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6665
d2e4a39e 6666struct type *
ebf56fd3 6667ada_parent_type (struct type *type)
14f9c5c9
AS
6668{
6669 int i;
6670
61ee279c 6671 type = ada_check_typedef (type);
14f9c5c9
AS
6672
6673 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6674 return NULL;
6675
6676 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6677 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6678 {
6679 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6680
6681 /* If the _parent field is a pointer, then dereference it. */
6682 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6683 parent_type = TYPE_TARGET_TYPE (parent_type);
6684 /* If there is a parallel XVS type, get the actual base type. */
6685 parent_type = ada_get_base_type (parent_type);
6686
6687 return ada_check_typedef (parent_type);
6688 }
14f9c5c9
AS
6689
6690 return NULL;
6691}
6692
4c4b4cd2
PH
6693/* True iff field number FIELD_NUM of structure type TYPE contains the
6694 parent-type (inherited) fields of a derived type. Assumes TYPE is
6695 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6696
6697int
ebf56fd3 6698ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6699{
61ee279c 6700 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6701
4c4b4cd2
PH
6702 return (name != NULL
6703 && (strncmp (name, "PARENT", 6) == 0
6704 || strncmp (name, "_parent", 7) == 0));
14f9c5c9
AS
6705}
6706
4c4b4cd2 6707/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6708 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6709 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6710 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6711 structures. */
14f9c5c9
AS
6712
6713int
ebf56fd3 6714ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6715{
d2e4a39e 6716 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6717
d2e4a39e 6718 return (name != NULL
4c4b4cd2
PH
6719 && (strncmp (name, "PARENT", 6) == 0
6720 || strcmp (name, "REP") == 0
6721 || strncmp (name, "_parent", 7) == 0
6722 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6723}
6724
4c4b4cd2
PH
6725/* True iff field number FIELD_NUM of structure or union type TYPE
6726 is a variant wrapper. Assumes TYPE is a structure type with at least
6727 FIELD_NUM+1 fields. */
14f9c5c9
AS
6728
6729int
ebf56fd3 6730ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6731{
d2e4a39e 6732 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6733
14f9c5c9 6734 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 6735 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
6736 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6737 == TYPE_CODE_UNION)));
14f9c5c9
AS
6738}
6739
6740/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6741 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6742 returns the type of the controlling discriminant for the variant.
6743 May return NULL if the type could not be found. */
14f9c5c9 6744
d2e4a39e 6745struct type *
ebf56fd3 6746ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6747{
d2e4a39e 6748 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6749
7c964f07 6750 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
6751}
6752
4c4b4cd2 6753/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6754 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6755 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
6756
6757int
ebf56fd3 6758ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6759{
d2e4a39e 6760 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6761
14f9c5c9
AS
6762 return (name != NULL && name[0] == 'O');
6763}
6764
6765/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6766 returns the name of the discriminant controlling the variant.
6767 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6768
d2e4a39e 6769char *
ebf56fd3 6770ada_variant_discrim_name (struct type *type0)
14f9c5c9 6771{
d2e4a39e 6772 static char *result = NULL;
14f9c5c9 6773 static size_t result_len = 0;
d2e4a39e
AS
6774 struct type *type;
6775 const char *name;
6776 const char *discrim_end;
6777 const char *discrim_start;
14f9c5c9
AS
6778
6779 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6780 type = TYPE_TARGET_TYPE (type0);
6781 else
6782 type = type0;
6783
6784 name = ada_type_name (type);
6785
6786 if (name == NULL || name[0] == '\000')
6787 return "";
6788
6789 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6790 discrim_end -= 1)
6791 {
4c4b4cd2
PH
6792 if (strncmp (discrim_end, "___XVN", 6) == 0)
6793 break;
14f9c5c9
AS
6794 }
6795 if (discrim_end == name)
6796 return "";
6797
d2e4a39e 6798 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6799 discrim_start -= 1)
6800 {
d2e4a39e 6801 if (discrim_start == name + 1)
4c4b4cd2 6802 return "";
76a01679 6803 if ((discrim_start > name + 3
4c4b4cd2
PH
6804 && strncmp (discrim_start - 3, "___", 3) == 0)
6805 || discrim_start[-1] == '.')
6806 break;
14f9c5c9
AS
6807 }
6808
6809 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6810 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 6811 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
6812 return result;
6813}
6814
4c4b4cd2
PH
6815/* Scan STR for a subtype-encoded number, beginning at position K.
6816 Put the position of the character just past the number scanned in
6817 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6818 Return 1 if there was a valid number at the given position, and 0
6819 otherwise. A "subtype-encoded" number consists of the absolute value
6820 in decimal, followed by the letter 'm' to indicate a negative number.
6821 Assumes 0m does not occur. */
14f9c5c9
AS
6822
6823int
d2e4a39e 6824ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6825{
6826 ULONGEST RU;
6827
d2e4a39e 6828 if (!isdigit (str[k]))
14f9c5c9
AS
6829 return 0;
6830
4c4b4cd2 6831 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6832 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6833 LONGEST. */
14f9c5c9
AS
6834 RU = 0;
6835 while (isdigit (str[k]))
6836 {
d2e4a39e 6837 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6838 k += 1;
6839 }
6840
d2e4a39e 6841 if (str[k] == 'm')
14f9c5c9
AS
6842 {
6843 if (R != NULL)
4c4b4cd2 6844 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6845 k += 1;
6846 }
6847 else if (R != NULL)
6848 *R = (LONGEST) RU;
6849
4c4b4cd2 6850 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6851 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6852 number representable as a LONGEST (although either would probably work
6853 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6854 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6855
6856 if (new_k != NULL)
6857 *new_k = k;
6858 return 1;
6859}
6860
4c4b4cd2
PH
6861/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6862 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6863 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6864
d2e4a39e 6865int
ebf56fd3 6866ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6867{
d2e4a39e 6868 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6869 int p;
6870
6871 p = 0;
6872 while (1)
6873 {
d2e4a39e 6874 switch (name[p])
4c4b4cd2
PH
6875 {
6876 case '\0':
6877 return 0;
6878 case 'S':
6879 {
6880 LONGEST W;
5b4ee69b 6881
4c4b4cd2
PH
6882 if (!ada_scan_number (name, p + 1, &W, &p))
6883 return 0;
6884 if (val == W)
6885 return 1;
6886 break;
6887 }
6888 case 'R':
6889 {
6890 LONGEST L, U;
5b4ee69b 6891
4c4b4cd2
PH
6892 if (!ada_scan_number (name, p + 1, &L, &p)
6893 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6894 return 0;
6895 if (val >= L && val <= U)
6896 return 1;
6897 break;
6898 }
6899 case 'O':
6900 return 1;
6901 default:
6902 return 0;
6903 }
6904 }
6905}
6906
0963b4bd 6907/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6908
6909/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6910 ARG_TYPE, extract and return the value of one of its (non-static)
6911 fields. FIELDNO says which field. Differs from value_primitive_field
6912 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6913
4c4b4cd2 6914static struct value *
d2e4a39e 6915ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 6916 struct type *arg_type)
14f9c5c9 6917{
14f9c5c9
AS
6918 struct type *type;
6919
61ee279c 6920 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
6921 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6922
4c4b4cd2 6923 /* Handle packed fields. */
14f9c5c9
AS
6924
6925 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6926 {
6927 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6928 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6929
0fd88904 6930 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
6931 offset + bit_pos / 8,
6932 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6933 }
6934 else
6935 return value_primitive_field (arg1, offset, fieldno, arg_type);
6936}
6937
52ce6436
PH
6938/* Find field with name NAME in object of type TYPE. If found,
6939 set the following for each argument that is non-null:
6940 - *FIELD_TYPE_P to the field's type;
6941 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6942 an object of that type;
6943 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6944 - *BIT_SIZE_P to its size in bits if the field is packed, and
6945 0 otherwise;
6946 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6947 fields up to but not including the desired field, or by the total
6948 number of fields if not found. A NULL value of NAME never
6949 matches; the function just counts visible fields in this case.
6950
0963b4bd 6951 Returns 1 if found, 0 otherwise. */
52ce6436 6952
4c4b4cd2 6953static int
0d5cff50 6954find_struct_field (const char *name, struct type *type, int offset,
76a01679 6955 struct type **field_type_p,
52ce6436
PH
6956 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6957 int *index_p)
4c4b4cd2
PH
6958{
6959 int i;
6960
61ee279c 6961 type = ada_check_typedef (type);
76a01679 6962
52ce6436
PH
6963 if (field_type_p != NULL)
6964 *field_type_p = NULL;
6965 if (byte_offset_p != NULL)
d5d6fca5 6966 *byte_offset_p = 0;
52ce6436
PH
6967 if (bit_offset_p != NULL)
6968 *bit_offset_p = 0;
6969 if (bit_size_p != NULL)
6970 *bit_size_p = 0;
6971
6972 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
6973 {
6974 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6975 int fld_offset = offset + bit_pos / 8;
0d5cff50 6976 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6977
4c4b4cd2
PH
6978 if (t_field_name == NULL)
6979 continue;
6980
52ce6436 6981 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
6982 {
6983 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6984
52ce6436
PH
6985 if (field_type_p != NULL)
6986 *field_type_p = TYPE_FIELD_TYPE (type, i);
6987 if (byte_offset_p != NULL)
6988 *byte_offset_p = fld_offset;
6989 if (bit_offset_p != NULL)
6990 *bit_offset_p = bit_pos % 8;
6991 if (bit_size_p != NULL)
6992 *bit_size_p = bit_size;
76a01679
JB
6993 return 1;
6994 }
4c4b4cd2
PH
6995 else if (ada_is_wrapper_field (type, i))
6996 {
52ce6436
PH
6997 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6998 field_type_p, byte_offset_p, bit_offset_p,
6999 bit_size_p, index_p))
76a01679
JB
7000 return 1;
7001 }
4c4b4cd2
PH
7002 else if (ada_is_variant_part (type, i))
7003 {
52ce6436
PH
7004 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7005 fixed type?? */
4c4b4cd2 7006 int j;
52ce6436
PH
7007 struct type *field_type
7008 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7009
52ce6436 7010 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7011 {
76a01679
JB
7012 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7013 fld_offset
7014 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7015 field_type_p, byte_offset_p,
52ce6436 7016 bit_offset_p, bit_size_p, index_p))
76a01679 7017 return 1;
4c4b4cd2
PH
7018 }
7019 }
52ce6436
PH
7020 else if (index_p != NULL)
7021 *index_p += 1;
4c4b4cd2
PH
7022 }
7023 return 0;
7024}
7025
0963b4bd 7026/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7027
52ce6436
PH
7028static int
7029num_visible_fields (struct type *type)
7030{
7031 int n;
5b4ee69b 7032
52ce6436
PH
7033 n = 0;
7034 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7035 return n;
7036}
14f9c5c9 7037
4c4b4cd2 7038/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7039 and search in it assuming it has (class) type TYPE.
7040 If found, return value, else return NULL.
7041
4c4b4cd2 7042 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 7043
4c4b4cd2 7044static struct value *
d2e4a39e 7045ada_search_struct_field (char *name, struct value *arg, int offset,
4c4b4cd2 7046 struct type *type)
14f9c5c9
AS
7047{
7048 int i;
14f9c5c9 7049
5b4ee69b 7050 type = ada_check_typedef (type);
52ce6436 7051 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 7052 {
0d5cff50 7053 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7054
7055 if (t_field_name == NULL)
4c4b4cd2 7056 continue;
14f9c5c9
AS
7057
7058 else if (field_name_match (t_field_name, name))
4c4b4cd2 7059 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7060
7061 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7062 {
0963b4bd 7063 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
7064 ada_search_struct_field (name, arg,
7065 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7066 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7067
4c4b4cd2
PH
7068 if (v != NULL)
7069 return v;
7070 }
14f9c5c9
AS
7071
7072 else if (ada_is_variant_part (type, i))
4c4b4cd2 7073 {
0963b4bd 7074 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7075 int j;
5b4ee69b
MS
7076 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7077 i));
4c4b4cd2
PH
7078 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7079
52ce6436 7080 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7081 {
0963b4bd
MS
7082 struct value *v = ada_search_struct_field /* Force line
7083 break. */
06d5cf63
JB
7084 (name, arg,
7085 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7086 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7087
4c4b4cd2
PH
7088 if (v != NULL)
7089 return v;
7090 }
7091 }
14f9c5c9
AS
7092 }
7093 return NULL;
7094}
d2e4a39e 7095
52ce6436
PH
7096static struct value *ada_index_struct_field_1 (int *, struct value *,
7097 int, struct type *);
7098
7099
7100/* Return field #INDEX in ARG, where the index is that returned by
7101 * find_struct_field through its INDEX_P argument. Adjust the address
7102 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7103 * If found, return value, else return NULL. */
52ce6436
PH
7104
7105static struct value *
7106ada_index_struct_field (int index, struct value *arg, int offset,
7107 struct type *type)
7108{
7109 return ada_index_struct_field_1 (&index, arg, offset, type);
7110}
7111
7112
7113/* Auxiliary function for ada_index_struct_field. Like
7114 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7115 * *INDEX_P. */
52ce6436
PH
7116
7117static struct value *
7118ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7119 struct type *type)
7120{
7121 int i;
7122 type = ada_check_typedef (type);
7123
7124 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7125 {
7126 if (TYPE_FIELD_NAME (type, i) == NULL)
7127 continue;
7128 else if (ada_is_wrapper_field (type, i))
7129 {
0963b4bd 7130 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7131 ada_index_struct_field_1 (index_p, arg,
7132 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7133 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7134
52ce6436
PH
7135 if (v != NULL)
7136 return v;
7137 }
7138
7139 else if (ada_is_variant_part (type, i))
7140 {
7141 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7142 find_struct_field. */
52ce6436
PH
7143 error (_("Cannot assign this kind of variant record"));
7144 }
7145 else if (*index_p == 0)
7146 return ada_value_primitive_field (arg, offset, i, type);
7147 else
7148 *index_p -= 1;
7149 }
7150 return NULL;
7151}
7152
4c4b4cd2
PH
7153/* Given ARG, a value of type (pointer or reference to a)*
7154 structure/union, extract the component named NAME from the ultimate
7155 target structure/union and return it as a value with its
f5938064 7156 appropriate type.
14f9c5c9 7157
4c4b4cd2
PH
7158 The routine searches for NAME among all members of the structure itself
7159 and (recursively) among all members of any wrapper members
14f9c5c9
AS
7160 (e.g., '_parent').
7161
03ee6b2e
PH
7162 If NO_ERR, then simply return NULL in case of error, rather than
7163 calling error. */
14f9c5c9 7164
d2e4a39e 7165struct value *
03ee6b2e 7166ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 7167{
4c4b4cd2 7168 struct type *t, *t1;
d2e4a39e 7169 struct value *v;
14f9c5c9 7170
4c4b4cd2 7171 v = NULL;
df407dfe 7172 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
7173 if (TYPE_CODE (t) == TYPE_CODE_REF)
7174 {
7175 t1 = TYPE_TARGET_TYPE (t);
7176 if (t1 == NULL)
03ee6b2e 7177 goto BadValue;
61ee279c 7178 t1 = ada_check_typedef (t1);
4c4b4cd2 7179 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 7180 {
994b9211 7181 arg = coerce_ref (arg);
76a01679
JB
7182 t = t1;
7183 }
4c4b4cd2 7184 }
14f9c5c9 7185
4c4b4cd2
PH
7186 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7187 {
7188 t1 = TYPE_TARGET_TYPE (t);
7189 if (t1 == NULL)
03ee6b2e 7190 goto BadValue;
61ee279c 7191 t1 = ada_check_typedef (t1);
4c4b4cd2 7192 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
7193 {
7194 arg = value_ind (arg);
7195 t = t1;
7196 }
4c4b4cd2 7197 else
76a01679 7198 break;
4c4b4cd2 7199 }
14f9c5c9 7200
4c4b4cd2 7201 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 7202 goto BadValue;
14f9c5c9 7203
4c4b4cd2
PH
7204 if (t1 == t)
7205 v = ada_search_struct_field (name, arg, 0, t);
7206 else
7207 {
7208 int bit_offset, bit_size, byte_offset;
7209 struct type *field_type;
7210 CORE_ADDR address;
7211
76a01679 7212 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 7213 address = value_address (ada_value_ind (arg));
4c4b4cd2 7214 else
b50d69b5 7215 address = value_address (ada_coerce_ref (arg));
14f9c5c9 7216
1ed6ede0 7217 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
7218 if (find_struct_field (name, t1, 0,
7219 &field_type, &byte_offset, &bit_offset,
52ce6436 7220 &bit_size, NULL))
76a01679
JB
7221 {
7222 if (bit_size != 0)
7223 {
714e53ab
PH
7224 if (TYPE_CODE (t) == TYPE_CODE_REF)
7225 arg = ada_coerce_ref (arg);
7226 else
7227 arg = ada_value_ind (arg);
76a01679
JB
7228 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7229 bit_offset, bit_size,
7230 field_type);
7231 }
7232 else
f5938064 7233 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
7234 }
7235 }
7236
03ee6b2e
PH
7237 if (v != NULL || no_err)
7238 return v;
7239 else
323e0a4a 7240 error (_("There is no member named %s."), name);
14f9c5c9 7241
03ee6b2e
PH
7242 BadValue:
7243 if (no_err)
7244 return NULL;
7245 else
0963b4bd
MS
7246 error (_("Attempt to extract a component of "
7247 "a value that is not a record."));
14f9c5c9
AS
7248}
7249
7250/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7251 If DISPP is non-null, add its byte displacement from the beginning of a
7252 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7253 work for packed fields).
7254
7255 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7256 followed by "___".
14f9c5c9 7257
0963b4bd 7258 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7259 be a (pointer or reference)+ to a struct or union, and the
7260 ultimate target type will be searched.
14f9c5c9
AS
7261
7262 Looks recursively into variant clauses and parent types.
7263
4c4b4cd2
PH
7264 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7265 TYPE is not a type of the right kind. */
14f9c5c9 7266
4c4b4cd2 7267static struct type *
76a01679
JB
7268ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7269 int noerr, int *dispp)
14f9c5c9
AS
7270{
7271 int i;
7272
7273 if (name == NULL)
7274 goto BadName;
7275
76a01679 7276 if (refok && type != NULL)
4c4b4cd2
PH
7277 while (1)
7278 {
61ee279c 7279 type = ada_check_typedef (type);
76a01679
JB
7280 if (TYPE_CODE (type) != TYPE_CODE_PTR
7281 && TYPE_CODE (type) != TYPE_CODE_REF)
7282 break;
7283 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7284 }
14f9c5c9 7285
76a01679 7286 if (type == NULL
1265e4aa
JB
7287 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7288 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 7289 {
4c4b4cd2 7290 if (noerr)
76a01679 7291 return NULL;
4c4b4cd2 7292 else
76a01679
JB
7293 {
7294 target_terminal_ours ();
7295 gdb_flush (gdb_stdout);
323e0a4a
AC
7296 if (type == NULL)
7297 error (_("Type (null) is not a structure or union type"));
7298 else
7299 {
7300 /* XXX: type_sprint */
7301 fprintf_unfiltered (gdb_stderr, _("Type "));
7302 type_print (type, "", gdb_stderr, -1);
7303 error (_(" is not a structure or union type"));
7304 }
76a01679 7305 }
14f9c5c9
AS
7306 }
7307
7308 type = to_static_fixed_type (type);
7309
7310 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7311 {
0d5cff50 7312 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7313 struct type *t;
7314 int disp;
d2e4a39e 7315
14f9c5c9 7316 if (t_field_name == NULL)
4c4b4cd2 7317 continue;
14f9c5c9
AS
7318
7319 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
7320 {
7321 if (dispp != NULL)
7322 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
61ee279c 7323 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7324 }
14f9c5c9
AS
7325
7326 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
7327 {
7328 disp = 0;
7329 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7330 0, 1, &disp);
7331 if (t != NULL)
7332 {
7333 if (dispp != NULL)
7334 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7335 return t;
7336 }
7337 }
14f9c5c9
AS
7338
7339 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7340 {
7341 int j;
5b4ee69b
MS
7342 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7343 i));
4c4b4cd2
PH
7344
7345 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7346 {
b1f33ddd
JB
7347 /* FIXME pnh 2008/01/26: We check for a field that is
7348 NOT wrapped in a struct, since the compiler sometimes
7349 generates these for unchecked variant types. Revisit
0963b4bd 7350 if the compiler changes this practice. */
0d5cff50 7351 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 7352 disp = 0;
b1f33ddd
JB
7353 if (v_field_name != NULL
7354 && field_name_match (v_field_name, name))
7355 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7356 else
0963b4bd
MS
7357 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7358 j),
b1f33ddd
JB
7359 name, 0, 1, &disp);
7360
4c4b4cd2
PH
7361 if (t != NULL)
7362 {
7363 if (dispp != NULL)
7364 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7365 return t;
7366 }
7367 }
7368 }
14f9c5c9
AS
7369
7370 }
7371
7372BadName:
d2e4a39e 7373 if (!noerr)
14f9c5c9
AS
7374 {
7375 target_terminal_ours ();
7376 gdb_flush (gdb_stdout);
323e0a4a
AC
7377 if (name == NULL)
7378 {
7379 /* XXX: type_sprint */
7380 fprintf_unfiltered (gdb_stderr, _("Type "));
7381 type_print (type, "", gdb_stderr, -1);
7382 error (_(" has no component named <null>"));
7383 }
7384 else
7385 {
7386 /* XXX: type_sprint */
7387 fprintf_unfiltered (gdb_stderr, _("Type "));
7388 type_print (type, "", gdb_stderr, -1);
7389 error (_(" has no component named %s"), name);
7390 }
14f9c5c9
AS
7391 }
7392
7393 return NULL;
7394}
7395
b1f33ddd
JB
7396/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7397 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7398 represents an unchecked union (that is, the variant part of a
0963b4bd 7399 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7400
7401static int
7402is_unchecked_variant (struct type *var_type, struct type *outer_type)
7403{
7404 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7405
b1f33ddd
JB
7406 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7407 == NULL);
7408}
7409
7410
14f9c5c9
AS
7411/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7412 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7413 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7414 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7415
d2e4a39e 7416int
ebf56fd3 7417ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7418 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7419{
7420 int others_clause;
7421 int i;
d2e4a39e 7422 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7423 struct value *outer;
7424 struct value *discrim;
14f9c5c9
AS
7425 LONGEST discrim_val;
7426
012370f6
TT
7427 /* Using plain value_from_contents_and_address here causes problems
7428 because we will end up trying to resolve a type that is currently
7429 being constructed. */
7430 outer = value_from_contents_and_address_unresolved (outer_type,
7431 outer_valaddr, 0);
0c281816
JB
7432 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7433 if (discrim == NULL)
14f9c5c9 7434 return -1;
0c281816 7435 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7436
7437 others_clause = -1;
7438 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7439 {
7440 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7441 others_clause = i;
14f9c5c9 7442 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7443 return i;
14f9c5c9
AS
7444 }
7445
7446 return others_clause;
7447}
d2e4a39e 7448\f
14f9c5c9
AS
7449
7450
4c4b4cd2 7451 /* Dynamic-Sized Records */
14f9c5c9
AS
7452
7453/* Strategy: The type ostensibly attached to a value with dynamic size
7454 (i.e., a size that is not statically recorded in the debugging
7455 data) does not accurately reflect the size or layout of the value.
7456 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7457 conventional types that are constructed on the fly. */
14f9c5c9
AS
7458
7459/* There is a subtle and tricky problem here. In general, we cannot
7460 determine the size of dynamic records without its data. However,
7461 the 'struct value' data structure, which GDB uses to represent
7462 quantities in the inferior process (the target), requires the size
7463 of the type at the time of its allocation in order to reserve space
7464 for GDB's internal copy of the data. That's why the
7465 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7466 rather than struct value*s.
14f9c5c9
AS
7467
7468 However, GDB's internal history variables ($1, $2, etc.) are
7469 struct value*s containing internal copies of the data that are not, in
7470 general, the same as the data at their corresponding addresses in
7471 the target. Fortunately, the types we give to these values are all
7472 conventional, fixed-size types (as per the strategy described
7473 above), so that we don't usually have to perform the
7474 'to_fixed_xxx_type' conversions to look at their values.
7475 Unfortunately, there is one exception: if one of the internal
7476 history variables is an array whose elements are unconstrained
7477 records, then we will need to create distinct fixed types for each
7478 element selected. */
7479
7480/* The upshot of all of this is that many routines take a (type, host
7481 address, target address) triple as arguments to represent a value.
7482 The host address, if non-null, is supposed to contain an internal
7483 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7484 target at the target address. */
14f9c5c9
AS
7485
7486/* Assuming that VAL0 represents a pointer value, the result of
7487 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7488 dynamic-sized types. */
14f9c5c9 7489
d2e4a39e
AS
7490struct value *
7491ada_value_ind (struct value *val0)
14f9c5c9 7492{
c48db5ca 7493 struct value *val = value_ind (val0);
5b4ee69b 7494
b50d69b5
JG
7495 if (ada_is_tagged_type (value_type (val), 0))
7496 val = ada_tag_value_at_base_address (val);
7497
4c4b4cd2 7498 return ada_to_fixed_value (val);
14f9c5c9
AS
7499}
7500
7501/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7502 qualifiers on VAL0. */
7503
d2e4a39e
AS
7504static struct value *
7505ada_coerce_ref (struct value *val0)
7506{
df407dfe 7507 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7508 {
7509 struct value *val = val0;
5b4ee69b 7510
994b9211 7511 val = coerce_ref (val);
b50d69b5
JG
7512
7513 if (ada_is_tagged_type (value_type (val), 0))
7514 val = ada_tag_value_at_base_address (val);
7515
4c4b4cd2 7516 return ada_to_fixed_value (val);
d2e4a39e
AS
7517 }
7518 else
14f9c5c9
AS
7519 return val0;
7520}
7521
7522/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7523 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7524
7525static unsigned int
ebf56fd3 7526align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7527{
7528 return (off + alignment - 1) & ~(alignment - 1);
7529}
7530
4c4b4cd2 7531/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7532
7533static unsigned int
ebf56fd3 7534field_alignment (struct type *type, int f)
14f9c5c9 7535{
d2e4a39e 7536 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7537 int len;
14f9c5c9
AS
7538 int align_offset;
7539
64a1bf19
JB
7540 /* The field name should never be null, unless the debugging information
7541 is somehow malformed. In this case, we assume the field does not
7542 require any alignment. */
7543 if (name == NULL)
7544 return 1;
7545
7546 len = strlen (name);
7547
4c4b4cd2
PH
7548 if (!isdigit (name[len - 1]))
7549 return 1;
14f9c5c9 7550
d2e4a39e 7551 if (isdigit (name[len - 2]))
14f9c5c9
AS
7552 align_offset = len - 2;
7553 else
7554 align_offset = len - 1;
7555
4c4b4cd2 7556 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
14f9c5c9
AS
7557 return TARGET_CHAR_BIT;
7558
4c4b4cd2
PH
7559 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7560}
7561
852dff6c 7562/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7563
852dff6c
JB
7564static struct symbol *
7565ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7566{
7567 struct symbol *sym;
7568
7569 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7570 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7571 return sym;
7572
4186eb54
KS
7573 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7574 return sym;
14f9c5c9
AS
7575}
7576
dddfab26
UW
7577/* Find a type named NAME. Ignores ambiguity. This routine will look
7578 solely for types defined by debug info, it will not search the GDB
7579 primitive types. */
4c4b4cd2 7580
852dff6c 7581static struct type *
ebf56fd3 7582ada_find_any_type (const char *name)
14f9c5c9 7583{
852dff6c 7584 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7585
14f9c5c9 7586 if (sym != NULL)
dddfab26 7587 return SYMBOL_TYPE (sym);
14f9c5c9 7588
dddfab26 7589 return NULL;
14f9c5c9
AS
7590}
7591
739593e0
JB
7592/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7593 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7594 symbol, in which case it is returned. Otherwise, this looks for
7595 symbols whose name is that of NAME_SYM suffixed with "___XR".
7596 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
7597
7598struct symbol *
270140bd 7599ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 7600{
739593e0 7601 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
7602 struct symbol *sym;
7603
739593e0
JB
7604 if (strstr (name, "___XR") != NULL)
7605 return name_sym;
7606
aeb5907d
JB
7607 sym = find_old_style_renaming_symbol (name, block);
7608
7609 if (sym != NULL)
7610 return sym;
7611
0963b4bd 7612 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 7613 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
7614 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7615 return sym;
7616 else
7617 return NULL;
7618}
7619
7620static struct symbol *
270140bd 7621find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 7622{
7f0df278 7623 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
7624 char *rename;
7625
7626 if (function_sym != NULL)
7627 {
7628 /* If the symbol is defined inside a function, NAME is not fully
7629 qualified. This means we need to prepend the function name
7630 as well as adding the ``___XR'' suffix to build the name of
7631 the associated renaming symbol. */
0d5cff50 7632 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
7633 /* Function names sometimes contain suffixes used
7634 for instance to qualify nested subprograms. When building
7635 the XR type name, we need to make sure that this suffix is
7636 not included. So do not include any suffix in the function
7637 name length below. */
69fadcdf 7638 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
7639 const int rename_len = function_name_len + 2 /* "__" */
7640 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 7641
529cad9c 7642 /* Strip the suffix if necessary. */
69fadcdf
JB
7643 ada_remove_trailing_digits (function_name, &function_name_len);
7644 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7645 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 7646
4c4b4cd2
PH
7647 /* Library-level functions are a special case, as GNAT adds
7648 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 7649 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
7650 have this prefix, so we need to skip this prefix if present. */
7651 if (function_name_len > 5 /* "_ada_" */
7652 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
7653 {
7654 function_name += 5;
7655 function_name_len -= 5;
7656 }
4c4b4cd2
PH
7657
7658 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
7659 strncpy (rename, function_name, function_name_len);
7660 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7661 "__%s___XR", name);
4c4b4cd2
PH
7662 }
7663 else
7664 {
7665 const int rename_len = strlen (name) + 6;
5b4ee69b 7666
4c4b4cd2 7667 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 7668 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
7669 }
7670
852dff6c 7671 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
7672}
7673
14f9c5c9 7674/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7675 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7676 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7677 otherwise return 0. */
7678
14f9c5c9 7679int
d2e4a39e 7680ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7681{
7682 if (type1 == NULL)
7683 return 1;
7684 else if (type0 == NULL)
7685 return 0;
7686 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7687 return 1;
7688 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7689 return 0;
4c4b4cd2
PH
7690 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7691 return 1;
ad82864c 7692 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7693 return 1;
4c4b4cd2
PH
7694 else if (ada_is_array_descriptor_type (type0)
7695 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7696 return 1;
aeb5907d
JB
7697 else
7698 {
7699 const char *type0_name = type_name_no_tag (type0);
7700 const char *type1_name = type_name_no_tag (type1);
7701
7702 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7703 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7704 return 1;
7705 }
14f9c5c9
AS
7706 return 0;
7707}
7708
7709/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
7710 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7711
0d5cff50 7712const char *
d2e4a39e 7713ada_type_name (struct type *type)
14f9c5c9 7714{
d2e4a39e 7715 if (type == NULL)
14f9c5c9
AS
7716 return NULL;
7717 else if (TYPE_NAME (type) != NULL)
7718 return TYPE_NAME (type);
7719 else
7720 return TYPE_TAG_NAME (type);
7721}
7722
b4ba55a1
JB
7723/* Search the list of "descriptive" types associated to TYPE for a type
7724 whose name is NAME. */
7725
7726static struct type *
7727find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7728{
7729 struct type *result;
7730
c6044dd1
JB
7731 if (ada_ignore_descriptive_types_p)
7732 return NULL;
7733
b4ba55a1
JB
7734 /* If there no descriptive-type info, then there is no parallel type
7735 to be found. */
7736 if (!HAVE_GNAT_AUX_INFO (type))
7737 return NULL;
7738
7739 result = TYPE_DESCRIPTIVE_TYPE (type);
7740 while (result != NULL)
7741 {
0d5cff50 7742 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7743
7744 if (result_name == NULL)
7745 {
7746 warning (_("unexpected null name on descriptive type"));
7747 return NULL;
7748 }
7749
7750 /* If the names match, stop. */
7751 if (strcmp (result_name, name) == 0)
7752 break;
7753
7754 /* Otherwise, look at the next item on the list, if any. */
7755 if (HAVE_GNAT_AUX_INFO (result))
7756 result = TYPE_DESCRIPTIVE_TYPE (result);
7757 else
7758 result = NULL;
7759 }
7760
7761 /* If we didn't find a match, see whether this is a packed array. With
7762 older compilers, the descriptive type information is either absent or
7763 irrelevant when it comes to packed arrays so the above lookup fails.
7764 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7765 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7766 return ada_find_any_type (name);
7767
7768 return result;
7769}
7770
7771/* Find a parallel type to TYPE with the specified NAME, using the
7772 descriptive type taken from the debugging information, if available,
7773 and otherwise using the (slower) name-based method. */
7774
7775static struct type *
7776ada_find_parallel_type_with_name (struct type *type, const char *name)
7777{
7778 struct type *result = NULL;
7779
7780 if (HAVE_GNAT_AUX_INFO (type))
7781 result = find_parallel_type_by_descriptive_type (type, name);
7782 else
7783 result = ada_find_any_type (name);
7784
7785 return result;
7786}
7787
7788/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7789 SUFFIX to the name of TYPE. */
14f9c5c9 7790
d2e4a39e 7791struct type *
ebf56fd3 7792ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7793{
0d5cff50
DE
7794 char *name;
7795 const char *typename = ada_type_name (type);
14f9c5c9 7796 int len;
d2e4a39e 7797
14f9c5c9
AS
7798 if (typename == NULL)
7799 return NULL;
7800
7801 len = strlen (typename);
7802
b4ba55a1 7803 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9
AS
7804
7805 strcpy (name, typename);
7806 strcpy (name + len, suffix);
7807
b4ba55a1 7808 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7809}
7810
14f9c5c9 7811/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7812 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7813
d2e4a39e
AS
7814static struct type *
7815dynamic_template_type (struct type *type)
14f9c5c9 7816{
61ee279c 7817 type = ada_check_typedef (type);
14f9c5c9
AS
7818
7819 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 7820 || ada_type_name (type) == NULL)
14f9c5c9 7821 return NULL;
d2e4a39e 7822 else
14f9c5c9
AS
7823 {
7824 int len = strlen (ada_type_name (type));
5b4ee69b 7825
4c4b4cd2
PH
7826 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7827 return type;
14f9c5c9 7828 else
4c4b4cd2 7829 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7830 }
7831}
7832
7833/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7834 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7835
d2e4a39e
AS
7836static int
7837is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7838{
7839 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7840
d2e4a39e 7841 return name != NULL
14f9c5c9
AS
7842 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7843 && strstr (name, "___XVL") != NULL;
7844}
7845
4c4b4cd2
PH
7846/* The index of the variant field of TYPE, or -1 if TYPE does not
7847 represent a variant record type. */
14f9c5c9 7848
d2e4a39e 7849static int
4c4b4cd2 7850variant_field_index (struct type *type)
14f9c5c9
AS
7851{
7852 int f;
7853
4c4b4cd2
PH
7854 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7855 return -1;
7856
7857 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7858 {
7859 if (ada_is_variant_part (type, f))
7860 return f;
7861 }
7862 return -1;
14f9c5c9
AS
7863}
7864
4c4b4cd2
PH
7865/* A record type with no fields. */
7866
d2e4a39e 7867static struct type *
e9bb382b 7868empty_record (struct type *template)
14f9c5c9 7869{
e9bb382b 7870 struct type *type = alloc_type_copy (template);
5b4ee69b 7871
14f9c5c9
AS
7872 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7873 TYPE_NFIELDS (type) = 0;
7874 TYPE_FIELDS (type) = NULL;
b1f33ddd 7875 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
7876 TYPE_NAME (type) = "<empty>";
7877 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
7878 TYPE_LENGTH (type) = 0;
7879 return type;
7880}
7881
7882/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7883 the value of type TYPE at VALADDR or ADDRESS (see comments at
7884 the beginning of this section) VAL according to GNAT conventions.
7885 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7886 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7887 an outer-level type (i.e., as opposed to a branch of a variant.) A
7888 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7889 of the variant.
14f9c5c9 7890
4c4b4cd2
PH
7891 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7892 length are not statically known are discarded. As a consequence,
7893 VALADDR, ADDRESS and DVAL0 are ignored.
7894
7895 NOTE: Limitations: For now, we assume that dynamic fields and
7896 variants occupy whole numbers of bytes. However, they need not be
7897 byte-aligned. */
7898
7899struct type *
10a2c479 7900ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7901 const gdb_byte *valaddr,
4c4b4cd2
PH
7902 CORE_ADDR address, struct value *dval0,
7903 int keep_dynamic_fields)
14f9c5c9 7904{
d2e4a39e
AS
7905 struct value *mark = value_mark ();
7906 struct value *dval;
7907 struct type *rtype;
14f9c5c9 7908 int nfields, bit_len;
4c4b4cd2 7909 int variant_field;
14f9c5c9 7910 long off;
d94e4f4f 7911 int fld_bit_len;
14f9c5c9
AS
7912 int f;
7913
4c4b4cd2
PH
7914 /* Compute the number of fields in this record type that are going
7915 to be processed: unless keep_dynamic_fields, this includes only
7916 fields whose position and length are static will be processed. */
7917 if (keep_dynamic_fields)
7918 nfields = TYPE_NFIELDS (type);
7919 else
7920 {
7921 nfields = 0;
76a01679 7922 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
7923 && !ada_is_variant_part (type, nfields)
7924 && !is_dynamic_field (type, nfields))
7925 nfields++;
7926 }
7927
e9bb382b 7928 rtype = alloc_type_copy (type);
14f9c5c9
AS
7929 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7930 INIT_CPLUS_SPECIFIC (rtype);
7931 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 7932 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
7933 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7934 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7935 TYPE_NAME (rtype) = ada_type_name (type);
7936 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7937 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 7938
d2e4a39e
AS
7939 off = 0;
7940 bit_len = 0;
4c4b4cd2
PH
7941 variant_field = -1;
7942
14f9c5c9
AS
7943 for (f = 0; f < nfields; f += 1)
7944 {
6c038f32
PH
7945 off = align_value (off, field_alignment (type, f))
7946 + TYPE_FIELD_BITPOS (type, f);
945b3a32 7947 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 7948 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7949
d2e4a39e 7950 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
7951 {
7952 variant_field = f;
d94e4f4f 7953 fld_bit_len = 0;
4c4b4cd2 7954 }
14f9c5c9 7955 else if (is_dynamic_field (type, f))
4c4b4cd2 7956 {
284614f0
JB
7957 const gdb_byte *field_valaddr = valaddr;
7958 CORE_ADDR field_address = address;
7959 struct type *field_type =
7960 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7961
4c4b4cd2 7962 if (dval0 == NULL)
b5304971
JG
7963 {
7964 /* rtype's length is computed based on the run-time
7965 value of discriminants. If the discriminants are not
7966 initialized, the type size may be completely bogus and
0963b4bd 7967 GDB may fail to allocate a value for it. So check the
b5304971 7968 size first before creating the value. */
c1b5a1a6 7969 ada_ensure_varsize_limit (rtype);
012370f6
TT
7970 /* Using plain value_from_contents_and_address here
7971 causes problems because we will end up trying to
7972 resolve a type that is currently being
7973 constructed. */
7974 dval = value_from_contents_and_address_unresolved (rtype,
7975 valaddr,
7976 address);
9f1f738a 7977 rtype = value_type (dval);
b5304971 7978 }
4c4b4cd2
PH
7979 else
7980 dval = dval0;
7981
284614f0
JB
7982 /* If the type referenced by this field is an aligner type, we need
7983 to unwrap that aligner type, because its size might not be set.
7984 Keeping the aligner type would cause us to compute the wrong
7985 size for this field, impacting the offset of the all the fields
7986 that follow this one. */
7987 if (ada_is_aligner_type (field_type))
7988 {
7989 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7990
7991 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7992 field_address = cond_offset_target (field_address, field_offset);
7993 field_type = ada_aligned_type (field_type);
7994 }
7995
7996 field_valaddr = cond_offset_host (field_valaddr,
7997 off / TARGET_CHAR_BIT);
7998 field_address = cond_offset_target (field_address,
7999 off / TARGET_CHAR_BIT);
8000
8001 /* Get the fixed type of the field. Note that, in this case,
8002 we do not want to get the real type out of the tag: if
8003 the current field is the parent part of a tagged record,
8004 we will get the tag of the object. Clearly wrong: the real
8005 type of the parent is not the real type of the child. We
8006 would end up in an infinite loop. */
8007 field_type = ada_get_base_type (field_type);
8008 field_type = ada_to_fixed_type (field_type, field_valaddr,
8009 field_address, dval, 0);
27f2a97b
JB
8010 /* If the field size is already larger than the maximum
8011 object size, then the record itself will necessarily
8012 be larger than the maximum object size. We need to make
8013 this check now, because the size might be so ridiculously
8014 large (due to an uninitialized variable in the inferior)
8015 that it would cause an overflow when adding it to the
8016 record size. */
c1b5a1a6 8017 ada_ensure_varsize_limit (field_type);
284614f0
JB
8018
8019 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 8020 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
8021 /* The multiplication can potentially overflow. But because
8022 the field length has been size-checked just above, and
8023 assuming that the maximum size is a reasonable value,
8024 an overflow should not happen in practice. So rather than
8025 adding overflow recovery code to this already complex code,
8026 we just assume that it's not going to happen. */
d94e4f4f 8027 fld_bit_len =
4c4b4cd2
PH
8028 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8029 }
14f9c5c9 8030 else
4c4b4cd2 8031 {
5ded5331
JB
8032 /* Note: If this field's type is a typedef, it is important
8033 to preserve the typedef layer.
8034
8035 Otherwise, we might be transforming a typedef to a fat
8036 pointer (encoding a pointer to an unconstrained array),
8037 into a basic fat pointer (encoding an unconstrained
8038 array). As both types are implemented using the same
8039 structure, the typedef is the only clue which allows us
8040 to distinguish between the two options. Stripping it
8041 would prevent us from printing this field appropriately. */
8042 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
8043 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8044 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 8045 fld_bit_len =
4c4b4cd2
PH
8046 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8047 else
5ded5331
JB
8048 {
8049 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8050
8051 /* We need to be careful of typedefs when computing
8052 the length of our field. If this is a typedef,
8053 get the length of the target type, not the length
8054 of the typedef. */
8055 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8056 field_type = ada_typedef_target_type (field_type);
8057
8058 fld_bit_len =
8059 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8060 }
4c4b4cd2 8061 }
14f9c5c9 8062 if (off + fld_bit_len > bit_len)
4c4b4cd2 8063 bit_len = off + fld_bit_len;
d94e4f4f 8064 off += fld_bit_len;
4c4b4cd2
PH
8065 TYPE_LENGTH (rtype) =
8066 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 8067 }
4c4b4cd2
PH
8068
8069 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 8070 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
8071 the record. This can happen in the presence of representation
8072 clauses. */
8073 if (variant_field >= 0)
8074 {
8075 struct type *branch_type;
8076
8077 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8078
8079 if (dval0 == NULL)
9f1f738a 8080 {
012370f6
TT
8081 /* Using plain value_from_contents_and_address here causes
8082 problems because we will end up trying to resolve a type
8083 that is currently being constructed. */
8084 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8085 address);
9f1f738a
SA
8086 rtype = value_type (dval);
8087 }
4c4b4cd2
PH
8088 else
8089 dval = dval0;
8090
8091 branch_type =
8092 to_fixed_variant_branch_type
8093 (TYPE_FIELD_TYPE (type, variant_field),
8094 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8095 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8096 if (branch_type == NULL)
8097 {
8098 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8099 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8100 TYPE_NFIELDS (rtype) -= 1;
8101 }
8102 else
8103 {
8104 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8105 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8106 fld_bit_len =
8107 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8108 TARGET_CHAR_BIT;
8109 if (off + fld_bit_len > bit_len)
8110 bit_len = off + fld_bit_len;
8111 TYPE_LENGTH (rtype) =
8112 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8113 }
8114 }
8115
714e53ab
PH
8116 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8117 should contain the alignment of that record, which should be a strictly
8118 positive value. If null or negative, then something is wrong, most
8119 probably in the debug info. In that case, we don't round up the size
0963b4bd 8120 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8121 the current RTYPE length might be good enough for our purposes. */
8122 if (TYPE_LENGTH (type) <= 0)
8123 {
323e0a4a
AC
8124 if (TYPE_NAME (rtype))
8125 warning (_("Invalid type size for `%s' detected: %d."),
8126 TYPE_NAME (rtype), TYPE_LENGTH (type));
8127 else
8128 warning (_("Invalid type size for <unnamed> detected: %d."),
8129 TYPE_LENGTH (type));
714e53ab
PH
8130 }
8131 else
8132 {
8133 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8134 TYPE_LENGTH (type));
8135 }
14f9c5c9
AS
8136
8137 value_free_to_mark (mark);
d2e4a39e 8138 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8139 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8140 return rtype;
8141}
8142
4c4b4cd2
PH
8143/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8144 of 1. */
14f9c5c9 8145
d2e4a39e 8146static struct type *
fc1a4b47 8147template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8148 CORE_ADDR address, struct value *dval0)
8149{
8150 return ada_template_to_fixed_record_type_1 (type, valaddr,
8151 address, dval0, 1);
8152}
8153
8154/* An ordinary record type in which ___XVL-convention fields and
8155 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8156 static approximations, containing all possible fields. Uses
8157 no runtime values. Useless for use in values, but that's OK,
8158 since the results are used only for type determinations. Works on both
8159 structs and unions. Representation note: to save space, we memorize
8160 the result of this function in the TYPE_TARGET_TYPE of the
8161 template type. */
8162
8163static struct type *
8164template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8165{
8166 struct type *type;
8167 int nfields;
8168 int f;
8169
4c4b4cd2
PH
8170 if (TYPE_TARGET_TYPE (type0) != NULL)
8171 return TYPE_TARGET_TYPE (type0);
8172
8173 nfields = TYPE_NFIELDS (type0);
8174 type = type0;
14f9c5c9
AS
8175
8176 for (f = 0; f < nfields; f += 1)
8177 {
61ee279c 8178 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
4c4b4cd2 8179 struct type *new_type;
14f9c5c9 8180
4c4b4cd2
PH
8181 if (is_dynamic_field (type0, f))
8182 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
14f9c5c9 8183 else
f192137b 8184 new_type = static_unwrap_type (field_type);
4c4b4cd2
PH
8185 if (type == type0 && new_type != field_type)
8186 {
e9bb382b 8187 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
4c4b4cd2
PH
8188 TYPE_CODE (type) = TYPE_CODE (type0);
8189 INIT_CPLUS_SPECIFIC (type);
8190 TYPE_NFIELDS (type) = nfields;
8191 TYPE_FIELDS (type) = (struct field *)
8192 TYPE_ALLOC (type, nfields * sizeof (struct field));
8193 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8194 sizeof (struct field) * nfields);
8195 TYPE_NAME (type) = ada_type_name (type0);
8196 TYPE_TAG_NAME (type) = NULL;
876cecd0 8197 TYPE_FIXED_INSTANCE (type) = 1;
4c4b4cd2
PH
8198 TYPE_LENGTH (type) = 0;
8199 }
8200 TYPE_FIELD_TYPE (type, f) = new_type;
8201 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
14f9c5c9 8202 }
14f9c5c9
AS
8203 return type;
8204}
8205
4c4b4cd2 8206/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8207 whose address in memory is ADDRESS, returns a revision of TYPE,
8208 which should be a non-dynamic-sized record, in which the variant
8209 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8210 for discriminant values in DVAL0, which can be NULL if the record
8211 contains the necessary discriminant values. */
8212
d2e4a39e 8213static struct type *
fc1a4b47 8214to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8215 CORE_ADDR address, struct value *dval0)
14f9c5c9 8216{
d2e4a39e 8217 struct value *mark = value_mark ();
4c4b4cd2 8218 struct value *dval;
d2e4a39e 8219 struct type *rtype;
14f9c5c9
AS
8220 struct type *branch_type;
8221 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 8222 int variant_field = variant_field_index (type);
14f9c5c9 8223
4c4b4cd2 8224 if (variant_field == -1)
14f9c5c9
AS
8225 return type;
8226
4c4b4cd2 8227 if (dval0 == NULL)
9f1f738a
SA
8228 {
8229 dval = value_from_contents_and_address (type, valaddr, address);
8230 type = value_type (dval);
8231 }
4c4b4cd2
PH
8232 else
8233 dval = dval0;
8234
e9bb382b 8235 rtype = alloc_type_copy (type);
14f9c5c9 8236 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
8237 INIT_CPLUS_SPECIFIC (rtype);
8238 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
8239 TYPE_FIELDS (rtype) =
8240 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8241 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 8242 sizeof (struct field) * nfields);
14f9c5c9
AS
8243 TYPE_NAME (rtype) = ada_type_name (type);
8244 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 8245 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8246 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8247
4c4b4cd2
PH
8248 branch_type = to_fixed_variant_branch_type
8249 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8250 cond_offset_host (valaddr,
4c4b4cd2
PH
8251 TYPE_FIELD_BITPOS (type, variant_field)
8252 / TARGET_CHAR_BIT),
d2e4a39e 8253 cond_offset_target (address,
4c4b4cd2
PH
8254 TYPE_FIELD_BITPOS (type, variant_field)
8255 / TARGET_CHAR_BIT), dval);
d2e4a39e 8256 if (branch_type == NULL)
14f9c5c9 8257 {
4c4b4cd2 8258 int f;
5b4ee69b 8259
4c4b4cd2
PH
8260 for (f = variant_field + 1; f < nfields; f += 1)
8261 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 8262 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
8263 }
8264 else
8265 {
4c4b4cd2
PH
8266 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8267 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8268 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8269 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8270 }
4c4b4cd2 8271 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8272
4c4b4cd2 8273 value_free_to_mark (mark);
14f9c5c9
AS
8274 return rtype;
8275}
8276
8277/* An ordinary record type (with fixed-length fields) that describes
8278 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8279 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8280 should be in DVAL, a record value; it may be NULL if the object
8281 at ADDR itself contains any necessary discriminant values.
8282 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8283 values from the record are needed. Except in the case that DVAL,
8284 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8285 unchecked) is replaced by a particular branch of the variant.
8286
8287 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8288 is questionable and may be removed. It can arise during the
8289 processing of an unconstrained-array-of-record type where all the
8290 variant branches have exactly the same size. This is because in
8291 such cases, the compiler does not bother to use the XVS convention
8292 when encoding the record. I am currently dubious of this
8293 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8294
d2e4a39e 8295static struct type *
fc1a4b47 8296to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8297 CORE_ADDR address, struct value *dval)
14f9c5c9 8298{
d2e4a39e 8299 struct type *templ_type;
14f9c5c9 8300
876cecd0 8301 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8302 return type0;
8303
d2e4a39e 8304 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8305
8306 if (templ_type != NULL)
8307 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8308 else if (variant_field_index (type0) >= 0)
8309 {
8310 if (dval == NULL && valaddr == NULL && address == 0)
8311 return type0;
8312 return to_record_with_fixed_variant_part (type0, valaddr, address,
8313 dval);
8314 }
14f9c5c9
AS
8315 else
8316 {
876cecd0 8317 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8318 return type0;
8319 }
8320
8321}
8322
8323/* An ordinary record type (with fixed-length fields) that describes
8324 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8325 union type. Any necessary discriminants' values should be in DVAL,
8326 a record value. That is, this routine selects the appropriate
8327 branch of the union at ADDR according to the discriminant value
b1f33ddd 8328 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8329 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8330
d2e4a39e 8331static struct type *
fc1a4b47 8332to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8333 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8334{
8335 int which;
d2e4a39e
AS
8336 struct type *templ_type;
8337 struct type *var_type;
14f9c5c9
AS
8338
8339 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8340 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8341 else
14f9c5c9
AS
8342 var_type = var_type0;
8343
8344 templ_type = ada_find_parallel_type (var_type, "___XVU");
8345
8346 if (templ_type != NULL)
8347 var_type = templ_type;
8348
b1f33ddd
JB
8349 if (is_unchecked_variant (var_type, value_type (dval)))
8350 return var_type0;
d2e4a39e
AS
8351 which =
8352 ada_which_variant_applies (var_type,
0fd88904 8353 value_type (dval), value_contents (dval));
14f9c5c9
AS
8354
8355 if (which < 0)
e9bb382b 8356 return empty_record (var_type);
14f9c5c9 8357 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8358 return to_fixed_record_type
d2e4a39e
AS
8359 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8360 valaddr, address, dval);
4c4b4cd2 8361 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8362 return
8363 to_fixed_record_type
8364 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8365 else
8366 return TYPE_FIELD_TYPE (var_type, which);
8367}
8368
8908fca5
JB
8369/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8370 ENCODING_TYPE, a type following the GNAT conventions for discrete
8371 type encodings, only carries redundant information. */
8372
8373static int
8374ada_is_redundant_range_encoding (struct type *range_type,
8375 struct type *encoding_type)
8376{
8377 struct type *fixed_range_type;
8378 char *bounds_str;
8379 int n;
8380 LONGEST lo, hi;
8381
8382 gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8383
005e2509
JB
8384 if (TYPE_CODE (get_base_type (range_type))
8385 != TYPE_CODE (get_base_type (encoding_type)))
8386 {
8387 /* The compiler probably used a simple base type to describe
8388 the range type instead of the range's actual base type,
8389 expecting us to get the real base type from the encoding
8390 anyway. In this situation, the encoding cannot be ignored
8391 as redundant. */
8392 return 0;
8393 }
8394
8908fca5
JB
8395 if (is_dynamic_type (range_type))
8396 return 0;
8397
8398 if (TYPE_NAME (encoding_type) == NULL)
8399 return 0;
8400
8401 bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8402 if (bounds_str == NULL)
8403 return 0;
8404
8405 n = 8; /* Skip "___XDLU_". */
8406 if (!ada_scan_number (bounds_str, n, &lo, &n))
8407 return 0;
8408 if (TYPE_LOW_BOUND (range_type) != lo)
8409 return 0;
8410
8411 n += 2; /* Skip the "__" separator between the two bounds. */
8412 if (!ada_scan_number (bounds_str, n, &hi, &n))
8413 return 0;
8414 if (TYPE_HIGH_BOUND (range_type) != hi)
8415 return 0;
8416
8417 return 1;
8418}
8419
8420/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8421 a type following the GNAT encoding for describing array type
8422 indices, only carries redundant information. */
8423
8424static int
8425ada_is_redundant_index_type_desc (struct type *array_type,
8426 struct type *desc_type)
8427{
8428 struct type *this_layer = check_typedef (array_type);
8429 int i;
8430
8431 for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8432 {
8433 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8434 TYPE_FIELD_TYPE (desc_type, i)))
8435 return 0;
8436 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8437 }
8438
8439 return 1;
8440}
8441
14f9c5c9
AS
8442/* Assuming that TYPE0 is an array type describing the type of a value
8443 at ADDR, and that DVAL describes a record containing any
8444 discriminants used in TYPE0, returns a type for the value that
8445 contains no dynamic components (that is, no components whose sizes
8446 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8447 true, gives an error message if the resulting type's size is over
4c4b4cd2 8448 varsize_limit. */
14f9c5c9 8449
d2e4a39e
AS
8450static struct type *
8451to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8452 int ignore_too_big)
14f9c5c9 8453{
d2e4a39e
AS
8454 struct type *index_type_desc;
8455 struct type *result;
ad82864c 8456 int constrained_packed_array_p;
14f9c5c9 8457
b0dd7688 8458 type0 = ada_check_typedef (type0);
284614f0 8459 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8460 return type0;
14f9c5c9 8461
ad82864c
JB
8462 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8463 if (constrained_packed_array_p)
8464 type0 = decode_constrained_packed_array_type (type0);
284614f0 8465
14f9c5c9 8466 index_type_desc = ada_find_parallel_type (type0, "___XA");
28c85d6c 8467 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8468 if (index_type_desc != NULL
8469 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8470 {
8471 /* Ignore this ___XA parallel type, as it does not bring any
8472 useful information. This allows us to avoid creating fixed
8473 versions of the array's index types, which would be identical
8474 to the original ones. This, in turn, can also help avoid
8475 the creation of fixed versions of the array itself. */
8476 index_type_desc = NULL;
8477 }
8478
14f9c5c9
AS
8479 if (index_type_desc == NULL)
8480 {
61ee279c 8481 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8482
14f9c5c9 8483 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8484 depend on the contents of the array in properly constructed
8485 debugging data. */
529cad9c
PH
8486 /* Create a fixed version of the array element type.
8487 We're not providing the address of an element here,
e1d5a0d2 8488 and thus the actual object value cannot be inspected to do
529cad9c
PH
8489 the conversion. This should not be a problem, since arrays of
8490 unconstrained objects are not allowed. In particular, all
8491 the elements of an array of a tagged type should all be of
8492 the same type specified in the debugging info. No need to
8493 consult the object tag. */
1ed6ede0 8494 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8495
284614f0
JB
8496 /* Make sure we always create a new array type when dealing with
8497 packed array types, since we're going to fix-up the array
8498 type length and element bitsize a little further down. */
ad82864c 8499 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8500 result = type0;
14f9c5c9 8501 else
e9bb382b 8502 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8503 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8504 }
8505 else
8506 {
8507 int i;
8508 struct type *elt_type0;
8509
8510 elt_type0 = type0;
8511 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8512 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8513
8514 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8515 depend on the contents of the array in properly constructed
8516 debugging data. */
529cad9c
PH
8517 /* Create a fixed version of the array element type.
8518 We're not providing the address of an element here,
e1d5a0d2 8519 and thus the actual object value cannot be inspected to do
529cad9c
PH
8520 the conversion. This should not be a problem, since arrays of
8521 unconstrained objects are not allowed. In particular, all
8522 the elements of an array of a tagged type should all be of
8523 the same type specified in the debugging info. No need to
8524 consult the object tag. */
1ed6ede0
JB
8525 result =
8526 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8527
8528 elt_type0 = type0;
14f9c5c9 8529 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8530 {
8531 struct type *range_type =
28c85d6c 8532 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8533
e9bb382b 8534 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8535 result, range_type);
1ce677a4 8536 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8537 }
d2e4a39e 8538 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8539 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8540 }
8541
2e6fda7d
JB
8542 /* We want to preserve the type name. This can be useful when
8543 trying to get the type name of a value that has already been
8544 printed (for instance, if the user did "print VAR; whatis $". */
8545 TYPE_NAME (result) = TYPE_NAME (type0);
8546
ad82864c 8547 if (constrained_packed_array_p)
284614f0
JB
8548 {
8549 /* So far, the resulting type has been created as if the original
8550 type was a regular (non-packed) array type. As a result, the
8551 bitsize of the array elements needs to be set again, and the array
8552 length needs to be recomputed based on that bitsize. */
8553 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8554 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8555
8556 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8557 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8558 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8559 TYPE_LENGTH (result)++;
8560 }
8561
876cecd0 8562 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 8563 return result;
d2e4a39e 8564}
14f9c5c9
AS
8565
8566
8567/* A standard type (containing no dynamically sized components)
8568 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8569 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8570 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8571 ADDRESS or in VALADDR contains these discriminants.
8572
1ed6ede0
JB
8573 If CHECK_TAG is not null, in the case of tagged types, this function
8574 attempts to locate the object's tag and use it to compute the actual
8575 type. However, when ADDRESS is null, we cannot use it to determine the
8576 location of the tag, and therefore compute the tagged type's actual type.
8577 So we return the tagged type without consulting the tag. */
529cad9c 8578
f192137b
JB
8579static struct type *
8580ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 8581 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8582{
61ee279c 8583 type = ada_check_typedef (type);
d2e4a39e
AS
8584 switch (TYPE_CODE (type))
8585 {
8586 default:
14f9c5c9 8587 return type;
d2e4a39e 8588 case TYPE_CODE_STRUCT:
4c4b4cd2 8589 {
76a01679 8590 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
8591 struct type *fixed_record_type =
8592 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 8593
529cad9c
PH
8594 /* If STATIC_TYPE is a tagged type and we know the object's address,
8595 then we can determine its tag, and compute the object's actual
0963b4bd 8596 type from there. Note that we have to use the fixed record
1ed6ede0
JB
8597 type (the parent part of the record may have dynamic fields
8598 and the way the location of _tag is expressed may depend on
8599 them). */
529cad9c 8600
1ed6ede0 8601 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 8602 {
b50d69b5
JG
8603 struct value *tag =
8604 value_tag_from_contents_and_address
8605 (fixed_record_type,
8606 valaddr,
8607 address);
8608 struct type *real_type = type_from_tag (tag);
8609 struct value *obj =
8610 value_from_contents_and_address (fixed_record_type,
8611 valaddr,
8612 address);
9f1f738a 8613 fixed_record_type = value_type (obj);
76a01679 8614 if (real_type != NULL)
b50d69b5
JG
8615 return to_fixed_record_type
8616 (real_type, NULL,
8617 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 8618 }
4af88198
JB
8619
8620 /* Check to see if there is a parallel ___XVZ variable.
8621 If there is, then it provides the actual size of our type. */
8622 else if (ada_type_name (fixed_record_type) != NULL)
8623 {
0d5cff50 8624 const char *name = ada_type_name (fixed_record_type);
4af88198
JB
8625 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8626 int xvz_found = 0;
8627 LONGEST size;
8628
88c15c34 8629 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
8630 size = get_int_var_value (xvz_name, &xvz_found);
8631 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8632 {
8633 fixed_record_type = copy_type (fixed_record_type);
8634 TYPE_LENGTH (fixed_record_type) = size;
8635
8636 /* The FIXED_RECORD_TYPE may have be a stub. We have
8637 observed this when the debugging info is STABS, and
8638 apparently it is something that is hard to fix.
8639
8640 In practice, we don't need the actual type definition
8641 at all, because the presence of the XVZ variable allows us
8642 to assume that there must be a XVS type as well, which we
8643 should be able to use later, when we need the actual type
8644 definition.
8645
8646 In the meantime, pretend that the "fixed" type we are
8647 returning is NOT a stub, because this can cause trouble
8648 when using this type to create new types targeting it.
8649 Indeed, the associated creation routines often check
8650 whether the target type is a stub and will try to replace
0963b4bd 8651 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
8652 might cause the new type to have the wrong size too.
8653 Consider the case of an array, for instance, where the size
8654 of the array is computed from the number of elements in
8655 our array multiplied by the size of its element. */
8656 TYPE_STUB (fixed_record_type) = 0;
8657 }
8658 }
1ed6ede0 8659 return fixed_record_type;
4c4b4cd2 8660 }
d2e4a39e 8661 case TYPE_CODE_ARRAY:
4c4b4cd2 8662 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8663 case TYPE_CODE_UNION:
8664 if (dval == NULL)
4c4b4cd2 8665 return type;
d2e4a39e 8666 else
4c4b4cd2 8667 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8668 }
14f9c5c9
AS
8669}
8670
f192137b
JB
8671/* The same as ada_to_fixed_type_1, except that it preserves the type
8672 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8673
8674 The typedef layer needs be preserved in order to differentiate between
8675 arrays and array pointers when both types are implemented using the same
8676 fat pointer. In the array pointer case, the pointer is encoded as
8677 a typedef of the pointer type. For instance, considering:
8678
8679 type String_Access is access String;
8680 S1 : String_Access := null;
8681
8682 To the debugger, S1 is defined as a typedef of type String. But
8683 to the user, it is a pointer. So if the user tries to print S1,
8684 we should not dereference the array, but print the array address
8685 instead.
8686
8687 If we didn't preserve the typedef layer, we would lose the fact that
8688 the type is to be presented as a pointer (needs de-reference before
8689 being printed). And we would also use the source-level type name. */
f192137b
JB
8690
8691struct type *
8692ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8693 CORE_ADDR address, struct value *dval, int check_tag)
8694
8695{
8696 struct type *fixed_type =
8697 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8698
96dbd2c1
JB
8699 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8700 then preserve the typedef layer.
8701
8702 Implementation note: We can only check the main-type portion of
8703 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8704 from TYPE now returns a type that has the same instance flags
8705 as TYPE. For instance, if TYPE is a "typedef const", and its
8706 target type is a "struct", then the typedef elimination will return
8707 a "const" version of the target type. See check_typedef for more
8708 details about how the typedef layer elimination is done.
8709
8710 brobecker/2010-11-19: It seems to me that the only case where it is
8711 useful to preserve the typedef layer is when dealing with fat pointers.
8712 Perhaps, we could add a check for that and preserve the typedef layer
8713 only in that situation. But this seems unecessary so far, probably
8714 because we call check_typedef/ada_check_typedef pretty much everywhere.
8715 */
f192137b 8716 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 8717 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8718 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8719 return type;
8720
8721 return fixed_type;
8722}
8723
14f9c5c9 8724/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8725 TYPE0, but based on no runtime data. */
14f9c5c9 8726
d2e4a39e
AS
8727static struct type *
8728to_static_fixed_type (struct type *type0)
14f9c5c9 8729{
d2e4a39e 8730 struct type *type;
14f9c5c9
AS
8731
8732 if (type0 == NULL)
8733 return NULL;
8734
876cecd0 8735 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8736 return type0;
8737
61ee279c 8738 type0 = ada_check_typedef (type0);
d2e4a39e 8739
14f9c5c9
AS
8740 switch (TYPE_CODE (type0))
8741 {
8742 default:
8743 return type0;
8744 case TYPE_CODE_STRUCT:
8745 type = dynamic_template_type (type0);
d2e4a39e 8746 if (type != NULL)
4c4b4cd2
PH
8747 return template_to_static_fixed_type (type);
8748 else
8749 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8750 case TYPE_CODE_UNION:
8751 type = ada_find_parallel_type (type0, "___XVU");
8752 if (type != NULL)
4c4b4cd2
PH
8753 return template_to_static_fixed_type (type);
8754 else
8755 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8756 }
8757}
8758
4c4b4cd2
PH
8759/* A static approximation of TYPE with all type wrappers removed. */
8760
d2e4a39e
AS
8761static struct type *
8762static_unwrap_type (struct type *type)
14f9c5c9
AS
8763{
8764 if (ada_is_aligner_type (type))
8765 {
61ee279c 8766 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 8767 if (ada_type_name (type1) == NULL)
4c4b4cd2 8768 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
8769
8770 return static_unwrap_type (type1);
8771 }
d2e4a39e 8772 else
14f9c5c9 8773 {
d2e4a39e 8774 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8775
d2e4a39e 8776 if (raw_real_type == type)
4c4b4cd2 8777 return type;
14f9c5c9 8778 else
4c4b4cd2 8779 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8780 }
8781}
8782
8783/* In some cases, incomplete and private types require
4c4b4cd2 8784 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8785 type Foo;
8786 type FooP is access Foo;
8787 V: FooP;
8788 type Foo is array ...;
4c4b4cd2 8789 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8790 cross-references to such types, we instead substitute for FooP a
8791 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8792 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8793
8794/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8795 exists, otherwise TYPE. */
8796
d2e4a39e 8797struct type *
61ee279c 8798ada_check_typedef (struct type *type)
14f9c5c9 8799{
727e3d2e
JB
8800 if (type == NULL)
8801 return NULL;
8802
720d1a40
JB
8803 /* If our type is a typedef type of a fat pointer, then we're done.
8804 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8805 what allows us to distinguish between fat pointers that represent
8806 array types, and fat pointers that represent array access types
8807 (in both cases, the compiler implements them as fat pointers). */
8808 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8809 && is_thick_pntr (ada_typedef_target_type (type)))
8810 return type;
8811
14f9c5c9
AS
8812 CHECK_TYPEDEF (type);
8813 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 8814 || !TYPE_STUB (type)
14f9c5c9
AS
8815 || TYPE_TAG_NAME (type) == NULL)
8816 return type;
d2e4a39e 8817 else
14f9c5c9 8818 {
0d5cff50 8819 const char *name = TYPE_TAG_NAME (type);
d2e4a39e 8820 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8821
05e522ef
JB
8822 if (type1 == NULL)
8823 return type;
8824
8825 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8826 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8827 types, only for the typedef-to-array types). If that's the case,
8828 strip the typedef layer. */
8829 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8830 type1 = ada_check_typedef (type1);
8831
8832 return type1;
14f9c5c9
AS
8833 }
8834}
8835
8836/* A value representing the data at VALADDR/ADDRESS as described by
8837 type TYPE0, but with a standard (static-sized) type that correctly
8838 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8839 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8840 creation of struct values]. */
14f9c5c9 8841
4c4b4cd2
PH
8842static struct value *
8843ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8844 struct value *val0)
14f9c5c9 8845{
1ed6ede0 8846 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8847
14f9c5c9
AS
8848 if (type == type0 && val0 != NULL)
8849 return val0;
d2e4a39e 8850 else
4c4b4cd2
PH
8851 return value_from_contents_and_address (type, 0, address);
8852}
8853
8854/* A value representing VAL, but with a standard (static-sized) type
8855 that correctly describes it. Does not necessarily create a new
8856 value. */
8857
0c3acc09 8858struct value *
4c4b4cd2
PH
8859ada_to_fixed_value (struct value *val)
8860{
c48db5ca
JB
8861 val = unwrap_value (val);
8862 val = ada_to_fixed_value_create (value_type (val),
8863 value_address (val),
8864 val);
8865 return val;
14f9c5c9 8866}
d2e4a39e 8867\f
14f9c5c9 8868
14f9c5c9
AS
8869/* Attributes */
8870
4c4b4cd2
PH
8871/* Table mapping attribute numbers to names.
8872 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8873
d2e4a39e 8874static const char *attribute_names[] = {
14f9c5c9
AS
8875 "<?>",
8876
d2e4a39e 8877 "first",
14f9c5c9
AS
8878 "last",
8879 "length",
8880 "image",
14f9c5c9
AS
8881 "max",
8882 "min",
4c4b4cd2
PH
8883 "modulus",
8884 "pos",
8885 "size",
8886 "tag",
14f9c5c9 8887 "val",
14f9c5c9
AS
8888 0
8889};
8890
d2e4a39e 8891const char *
4c4b4cd2 8892ada_attribute_name (enum exp_opcode n)
14f9c5c9 8893{
4c4b4cd2
PH
8894 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8895 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8896 else
8897 return attribute_names[0];
8898}
8899
4c4b4cd2 8900/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8901
4c4b4cd2
PH
8902static LONGEST
8903pos_atr (struct value *arg)
14f9c5c9 8904{
24209737
PH
8905 struct value *val = coerce_ref (arg);
8906 struct type *type = value_type (val);
14f9c5c9 8907
d2e4a39e 8908 if (!discrete_type_p (type))
323e0a4a 8909 error (_("'POS only defined on discrete types"));
14f9c5c9
AS
8910
8911 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8912 {
8913 int i;
24209737 8914 LONGEST v = value_as_long (val);
14f9c5c9 8915
d2e4a39e 8916 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2 8917 {
14e75d8e 8918 if (v == TYPE_FIELD_ENUMVAL (type, i))
4c4b4cd2
PH
8919 return i;
8920 }
323e0a4a 8921 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9
AS
8922 }
8923 else
24209737 8924 return value_as_long (val);
4c4b4cd2
PH
8925}
8926
8927static struct value *
3cb382c9 8928value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8929{
3cb382c9 8930 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8931}
8932
4c4b4cd2 8933/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8934
d2e4a39e
AS
8935static struct value *
8936value_val_atr (struct type *type, struct value *arg)
14f9c5c9 8937{
d2e4a39e 8938 if (!discrete_type_p (type))
323e0a4a 8939 error (_("'VAL only defined on discrete types"));
df407dfe 8940 if (!integer_type_p (value_type (arg)))
323e0a4a 8941 error (_("'VAL requires integral argument"));
14f9c5c9
AS
8942
8943 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8944 {
8945 long pos = value_as_long (arg);
5b4ee69b 8946
14f9c5c9 8947 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 8948 error (_("argument to 'VAL out of range"));
14e75d8e 8949 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
8950 }
8951 else
8952 return value_from_longest (type, value_as_long (arg));
8953}
14f9c5c9 8954\f
d2e4a39e 8955
4c4b4cd2 8956 /* Evaluation */
14f9c5c9 8957
4c4b4cd2
PH
8958/* True if TYPE appears to be an Ada character type.
8959 [At the moment, this is true only for Character and Wide_Character;
8960 It is a heuristic test that could stand improvement]. */
14f9c5c9 8961
d2e4a39e
AS
8962int
8963ada_is_character_type (struct type *type)
14f9c5c9 8964{
7b9f71f2
JB
8965 const char *name;
8966
8967 /* If the type code says it's a character, then assume it really is,
8968 and don't check any further. */
8969 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8970 return 1;
8971
8972 /* Otherwise, assume it's a character type iff it is a discrete type
8973 with a known character type name. */
8974 name = ada_type_name (type);
8975 return (name != NULL
8976 && (TYPE_CODE (type) == TYPE_CODE_INT
8977 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8978 && (strcmp (name, "character") == 0
8979 || strcmp (name, "wide_character") == 0
5a517ebd 8980 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 8981 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8982}
8983
4c4b4cd2 8984/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
8985
8986int
ebf56fd3 8987ada_is_string_type (struct type *type)
14f9c5c9 8988{
61ee279c 8989 type = ada_check_typedef (type);
d2e4a39e 8990 if (type != NULL
14f9c5c9 8991 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
8992 && (ada_is_simple_array_type (type)
8993 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8994 && ada_array_arity (type) == 1)
8995 {
8996 struct type *elttype = ada_array_element_type (type, 1);
8997
8998 return ada_is_character_type (elttype);
8999 }
d2e4a39e 9000 else
14f9c5c9
AS
9001 return 0;
9002}
9003
5bf03f13
JB
9004/* The compiler sometimes provides a parallel XVS type for a given
9005 PAD type. Normally, it is safe to follow the PAD type directly,
9006 but older versions of the compiler have a bug that causes the offset
9007 of its "F" field to be wrong. Following that field in that case
9008 would lead to incorrect results, but this can be worked around
9009 by ignoring the PAD type and using the associated XVS type instead.
9010
9011 Set to True if the debugger should trust the contents of PAD types.
9012 Otherwise, ignore the PAD type if there is a parallel XVS type. */
9013static int trust_pad_over_xvs = 1;
14f9c5c9
AS
9014
9015/* True if TYPE is a struct type introduced by the compiler to force the
9016 alignment of a value. Such types have a single field with a
4c4b4cd2 9017 distinctive name. */
14f9c5c9
AS
9018
9019int
ebf56fd3 9020ada_is_aligner_type (struct type *type)
14f9c5c9 9021{
61ee279c 9022 type = ada_check_typedef (type);
714e53ab 9023
5bf03f13 9024 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
9025 return 0;
9026
14f9c5c9 9027 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
9028 && TYPE_NFIELDS (type) == 1
9029 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
9030}
9031
9032/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 9033 the parallel type. */
14f9c5c9 9034
d2e4a39e
AS
9035struct type *
9036ada_get_base_type (struct type *raw_type)
14f9c5c9 9037{
d2e4a39e
AS
9038 struct type *real_type_namer;
9039 struct type *raw_real_type;
14f9c5c9
AS
9040
9041 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9042 return raw_type;
9043
284614f0
JB
9044 if (ada_is_aligner_type (raw_type))
9045 /* The encoding specifies that we should always use the aligner type.
9046 So, even if this aligner type has an associated XVS type, we should
9047 simply ignore it.
9048
9049 According to the compiler gurus, an XVS type parallel to an aligner
9050 type may exist because of a stabs limitation. In stabs, aligner
9051 types are empty because the field has a variable-sized type, and
9052 thus cannot actually be used as an aligner type. As a result,
9053 we need the associated parallel XVS type to decode the type.
9054 Since the policy in the compiler is to not change the internal
9055 representation based on the debugging info format, we sometimes
9056 end up having a redundant XVS type parallel to the aligner type. */
9057 return raw_type;
9058
14f9c5c9 9059 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9060 if (real_type_namer == NULL
14f9c5c9
AS
9061 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9062 || TYPE_NFIELDS (real_type_namer) != 1)
9063 return raw_type;
9064
f80d3ff2
JB
9065 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9066 {
9067 /* This is an older encoding form where the base type needs to be
9068 looked up by name. We prefer the newer enconding because it is
9069 more efficient. */
9070 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9071 if (raw_real_type == NULL)
9072 return raw_type;
9073 else
9074 return raw_real_type;
9075 }
9076
9077 /* The field in our XVS type is a reference to the base type. */
9078 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 9079}
14f9c5c9 9080
4c4b4cd2 9081/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9082
d2e4a39e
AS
9083struct type *
9084ada_aligned_type (struct type *type)
14f9c5c9
AS
9085{
9086 if (ada_is_aligner_type (type))
9087 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9088 else
9089 return ada_get_base_type (type);
9090}
9091
9092
9093/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9094 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9095
fc1a4b47
AC
9096const gdb_byte *
9097ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9098{
d2e4a39e 9099 if (ada_is_aligner_type (type))
14f9c5c9 9100 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
9101 valaddr +
9102 TYPE_FIELD_BITPOS (type,
9103 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9104 else
9105 return valaddr;
9106}
9107
4c4b4cd2
PH
9108
9109
14f9c5c9 9110/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9111 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9112const char *
9113ada_enum_name (const char *name)
14f9c5c9 9114{
4c4b4cd2
PH
9115 static char *result;
9116 static size_t result_len = 0;
d2e4a39e 9117 char *tmp;
14f9c5c9 9118
4c4b4cd2
PH
9119 /* First, unqualify the enumeration name:
9120 1. Search for the last '.' character. If we find one, then skip
177b42fe 9121 all the preceding characters, the unqualified name starts
76a01679 9122 right after that dot.
4c4b4cd2 9123 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9124 translates dots into "__". Search forward for double underscores,
9125 but stop searching when we hit an overloading suffix, which is
9126 of the form "__" followed by digits. */
4c4b4cd2 9127
c3e5cd34
PH
9128 tmp = strrchr (name, '.');
9129 if (tmp != NULL)
4c4b4cd2
PH
9130 name = tmp + 1;
9131 else
14f9c5c9 9132 {
4c4b4cd2
PH
9133 while ((tmp = strstr (name, "__")) != NULL)
9134 {
9135 if (isdigit (tmp[2]))
9136 break;
9137 else
9138 name = tmp + 2;
9139 }
14f9c5c9
AS
9140 }
9141
9142 if (name[0] == 'Q')
9143 {
14f9c5c9 9144 int v;
5b4ee69b 9145
14f9c5c9 9146 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
9147 {
9148 if (sscanf (name + 2, "%x", &v) != 1)
9149 return name;
9150 }
14f9c5c9 9151 else
4c4b4cd2 9152 return name;
14f9c5c9 9153
4c4b4cd2 9154 GROW_VECT (result, result_len, 16);
14f9c5c9 9155 if (isascii (v) && isprint (v))
88c15c34 9156 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9157 else if (name[1] == 'U')
88c15c34 9158 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9159 else
88c15c34 9160 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9161
9162 return result;
9163 }
d2e4a39e 9164 else
4c4b4cd2 9165 {
c3e5cd34
PH
9166 tmp = strstr (name, "__");
9167 if (tmp == NULL)
9168 tmp = strstr (name, "$");
9169 if (tmp != NULL)
4c4b4cd2
PH
9170 {
9171 GROW_VECT (result, result_len, tmp - name + 1);
9172 strncpy (result, name, tmp - name);
9173 result[tmp - name] = '\0';
9174 return result;
9175 }
9176
9177 return name;
9178 }
14f9c5c9
AS
9179}
9180
14f9c5c9
AS
9181/* Evaluate the subexpression of EXP starting at *POS as for
9182 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9183 expression. */
14f9c5c9 9184
d2e4a39e
AS
9185static struct value *
9186evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9187{
4b27a620 9188 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9189}
9190
9191/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9192 value it wraps. */
14f9c5c9 9193
d2e4a39e
AS
9194static struct value *
9195unwrap_value (struct value *val)
14f9c5c9 9196{
df407dfe 9197 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9198
14f9c5c9
AS
9199 if (ada_is_aligner_type (type))
9200 {
de4d072f 9201 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9202 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9203
14f9c5c9 9204 if (ada_type_name (val_type) == NULL)
4c4b4cd2 9205 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
9206
9207 return unwrap_value (v);
9208 }
d2e4a39e 9209 else
14f9c5c9 9210 {
d2e4a39e 9211 struct type *raw_real_type =
61ee279c 9212 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9213
5bf03f13
JB
9214 /* If there is no parallel XVS or XVE type, then the value is
9215 already unwrapped. Return it without further modification. */
9216 if ((type == raw_real_type)
9217 && ada_find_parallel_type (type, "___XVE") == NULL)
9218 return val;
14f9c5c9 9219
d2e4a39e 9220 return
4c4b4cd2
PH
9221 coerce_unspec_val_to_type
9222 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9223 value_address (val),
1ed6ede0 9224 NULL, 1));
14f9c5c9
AS
9225 }
9226}
d2e4a39e
AS
9227
9228static struct value *
9229cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
9230{
9231 LONGEST val;
9232
df407dfe 9233 if (type == value_type (arg))
14f9c5c9 9234 return arg;
df407dfe 9235 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 9236 val = ada_float_to_fixed (type,
df407dfe 9237 ada_fixed_to_float (value_type (arg),
4c4b4cd2 9238 value_as_long (arg)));
d2e4a39e 9239 else
14f9c5c9 9240 {
a53b7a21 9241 DOUBLEST argd = value_as_double (arg);
5b4ee69b 9242
14f9c5c9
AS
9243 val = ada_float_to_fixed (type, argd);
9244 }
9245
9246 return value_from_longest (type, val);
9247}
9248
d2e4a39e 9249static struct value *
a53b7a21 9250cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9251{
df407dfe 9252 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 9253 value_as_long (arg));
5b4ee69b 9254
a53b7a21 9255 return value_from_double (type, val);
14f9c5c9
AS
9256}
9257
d99dcf51
JB
9258/* Given two array types T1 and T2, return nonzero iff both arrays
9259 contain the same number of elements. */
9260
9261static int
9262ada_same_array_size_p (struct type *t1, struct type *t2)
9263{
9264 LONGEST lo1, hi1, lo2, hi2;
9265
9266 /* Get the array bounds in order to verify that the size of
9267 the two arrays match. */
9268 if (!get_array_bounds (t1, &lo1, &hi1)
9269 || !get_array_bounds (t2, &lo2, &hi2))
9270 error (_("unable to determine array bounds"));
9271
9272 /* To make things easier for size comparison, normalize a bit
9273 the case of empty arrays by making sure that the difference
9274 between upper bound and lower bound is always -1. */
9275 if (lo1 > hi1)
9276 hi1 = lo1 - 1;
9277 if (lo2 > hi2)
9278 hi2 = lo2 - 1;
9279
9280 return (hi1 - lo1 == hi2 - lo2);
9281}
9282
9283/* Assuming that VAL is an array of integrals, and TYPE represents
9284 an array with the same number of elements, but with wider integral
9285 elements, return an array "casted" to TYPE. In practice, this
9286 means that the returned array is built by casting each element
9287 of the original array into TYPE's (wider) element type. */
9288
9289static struct value *
9290ada_promote_array_of_integrals (struct type *type, struct value *val)
9291{
9292 struct type *elt_type = TYPE_TARGET_TYPE (type);
9293 LONGEST lo, hi;
9294 struct value *res;
9295 LONGEST i;
9296
9297 /* Verify that both val and type are arrays of scalars, and
9298 that the size of val's elements is smaller than the size
9299 of type's element. */
9300 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9301 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9302 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9303 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9304 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9305 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9306
9307 if (!get_array_bounds (type, &lo, &hi))
9308 error (_("unable to determine array bounds"));
9309
9310 res = allocate_value (type);
9311
9312 /* Promote each array element. */
9313 for (i = 0; i < hi - lo + 1; i++)
9314 {
9315 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9316
9317 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9318 value_contents_all (elt), TYPE_LENGTH (elt_type));
9319 }
9320
9321 return res;
9322}
9323
4c4b4cd2
PH
9324/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9325 return the converted value. */
9326
d2e4a39e
AS
9327static struct value *
9328coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9329{
df407dfe 9330 struct type *type2 = value_type (val);
5b4ee69b 9331
14f9c5c9
AS
9332 if (type == type2)
9333 return val;
9334
61ee279c
PH
9335 type2 = ada_check_typedef (type2);
9336 type = ada_check_typedef (type);
14f9c5c9 9337
d2e4a39e
AS
9338 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9339 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
9340 {
9341 val = ada_value_ind (val);
df407dfe 9342 type2 = value_type (val);
14f9c5c9
AS
9343 }
9344
d2e4a39e 9345 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
9346 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9347 {
d99dcf51
JB
9348 if (!ada_same_array_size_p (type, type2))
9349 error (_("cannot assign arrays of different length"));
9350
9351 if (is_integral_type (TYPE_TARGET_TYPE (type))
9352 && is_integral_type (TYPE_TARGET_TYPE (type2))
9353 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9354 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9355 {
9356 /* Allow implicit promotion of the array elements to
9357 a wider type. */
9358 return ada_promote_array_of_integrals (type, val);
9359 }
9360
9361 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9362 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9363 error (_("Incompatible types in assignment"));
04624583 9364 deprecated_set_value_type (val, type);
14f9c5c9 9365 }
d2e4a39e 9366 return val;
14f9c5c9
AS
9367}
9368
4c4b4cd2
PH
9369static struct value *
9370ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9371{
9372 struct value *val;
9373 struct type *type1, *type2;
9374 LONGEST v, v1, v2;
9375
994b9211
AC
9376 arg1 = coerce_ref (arg1);
9377 arg2 = coerce_ref (arg2);
18af8284
JB
9378 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9379 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9380
76a01679
JB
9381 if (TYPE_CODE (type1) != TYPE_CODE_INT
9382 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
9383 return value_binop (arg1, arg2, op);
9384
76a01679 9385 switch (op)
4c4b4cd2
PH
9386 {
9387 case BINOP_MOD:
9388 case BINOP_DIV:
9389 case BINOP_REM:
9390 break;
9391 default:
9392 return value_binop (arg1, arg2, op);
9393 }
9394
9395 v2 = value_as_long (arg2);
9396 if (v2 == 0)
323e0a4a 9397 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9398
9399 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9400 return value_binop (arg1, arg2, op);
9401
9402 v1 = value_as_long (arg1);
9403 switch (op)
9404 {
9405 case BINOP_DIV:
9406 v = v1 / v2;
76a01679
JB
9407 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9408 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9409 break;
9410 case BINOP_REM:
9411 v = v1 % v2;
76a01679
JB
9412 if (v * v1 < 0)
9413 v -= v2;
4c4b4cd2
PH
9414 break;
9415 default:
9416 /* Should not reach this point. */
9417 v = 0;
9418 }
9419
9420 val = allocate_value (type1);
990a07ab 9421 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9422 TYPE_LENGTH (value_type (val)),
9423 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9424 return val;
9425}
9426
9427static int
9428ada_value_equal (struct value *arg1, struct value *arg2)
9429{
df407dfe
AC
9430 if (ada_is_direct_array_type (value_type (arg1))
9431 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9432 {
f58b38bf
JB
9433 /* Automatically dereference any array reference before
9434 we attempt to perform the comparison. */
9435 arg1 = ada_coerce_ref (arg1);
9436 arg2 = ada_coerce_ref (arg2);
9437
4c4b4cd2
PH
9438 arg1 = ada_coerce_to_simple_array (arg1);
9439 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
9440 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9441 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 9442 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9443 /* FIXME: The following works only for types whose
76a01679
JB
9444 representations use all bits (no padding or undefined bits)
9445 and do not have user-defined equality. */
9446 return
df407dfe 9447 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 9448 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 9449 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
9450 }
9451 return value_equal (arg1, arg2);
9452}
9453
52ce6436
PH
9454/* Total number of component associations in the aggregate starting at
9455 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9456 OP_AGGREGATE. */
52ce6436
PH
9457
9458static int
9459num_component_specs (struct expression *exp, int pc)
9460{
9461 int n, m, i;
5b4ee69b 9462
52ce6436
PH
9463 m = exp->elts[pc + 1].longconst;
9464 pc += 3;
9465 n = 0;
9466 for (i = 0; i < m; i += 1)
9467 {
9468 switch (exp->elts[pc].opcode)
9469 {
9470 default:
9471 n += 1;
9472 break;
9473 case OP_CHOICES:
9474 n += exp->elts[pc + 1].longconst;
9475 break;
9476 }
9477 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9478 }
9479 return n;
9480}
9481
9482/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9483 component of LHS (a simple array or a record), updating *POS past
9484 the expression, assuming that LHS is contained in CONTAINER. Does
9485 not modify the inferior's memory, nor does it modify LHS (unless
9486 LHS == CONTAINER). */
9487
9488static void
9489assign_component (struct value *container, struct value *lhs, LONGEST index,
9490 struct expression *exp, int *pos)
9491{
9492 struct value *mark = value_mark ();
9493 struct value *elt;
5b4ee69b 9494
52ce6436
PH
9495 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9496 {
22601c15
UW
9497 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9498 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9499
52ce6436
PH
9500 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9501 }
9502 else
9503 {
9504 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9505 elt = ada_to_fixed_value (elt);
52ce6436
PH
9506 }
9507
9508 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9509 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9510 else
9511 value_assign_to_component (container, elt,
9512 ada_evaluate_subexp (NULL, exp, pos,
9513 EVAL_NORMAL));
9514
9515 value_free_to_mark (mark);
9516}
9517
9518/* Assuming that LHS represents an lvalue having a record or array
9519 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9520 of that aggregate's value to LHS, advancing *POS past the
9521 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9522 lvalue containing LHS (possibly LHS itself). Does not modify
9523 the inferior's memory, nor does it modify the contents of
0963b4bd 9524 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9525
9526static struct value *
9527assign_aggregate (struct value *container,
9528 struct value *lhs, struct expression *exp,
9529 int *pos, enum noside noside)
9530{
9531 struct type *lhs_type;
9532 int n = exp->elts[*pos+1].longconst;
9533 LONGEST low_index, high_index;
9534 int num_specs;
9535 LONGEST *indices;
9536 int max_indices, num_indices;
52ce6436 9537 int i;
52ce6436
PH
9538
9539 *pos += 3;
9540 if (noside != EVAL_NORMAL)
9541 {
52ce6436
PH
9542 for (i = 0; i < n; i += 1)
9543 ada_evaluate_subexp (NULL, exp, pos, noside);
9544 return container;
9545 }
9546
9547 container = ada_coerce_ref (container);
9548 if (ada_is_direct_array_type (value_type (container)))
9549 container = ada_coerce_to_simple_array (container);
9550 lhs = ada_coerce_ref (lhs);
9551 if (!deprecated_value_modifiable (lhs))
9552 error (_("Left operand of assignment is not a modifiable lvalue."));
9553
9554 lhs_type = value_type (lhs);
9555 if (ada_is_direct_array_type (lhs_type))
9556 {
9557 lhs = ada_coerce_to_simple_array (lhs);
9558 lhs_type = value_type (lhs);
9559 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9560 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
9561 }
9562 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9563 {
9564 low_index = 0;
9565 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9566 }
9567 else
9568 error (_("Left-hand side must be array or record."));
9569
9570 num_specs = num_component_specs (exp, *pos - 3);
9571 max_indices = 4 * num_specs + 4;
9572 indices = alloca (max_indices * sizeof (indices[0]));
9573 indices[0] = indices[1] = low_index - 1;
9574 indices[2] = indices[3] = high_index + 1;
9575 num_indices = 4;
9576
9577 for (i = 0; i < n; i += 1)
9578 {
9579 switch (exp->elts[*pos].opcode)
9580 {
1fbf5ada
JB
9581 case OP_CHOICES:
9582 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9583 &num_indices, max_indices,
9584 low_index, high_index);
9585 break;
9586 case OP_POSITIONAL:
9587 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
9588 &num_indices, max_indices,
9589 low_index, high_index);
1fbf5ada
JB
9590 break;
9591 case OP_OTHERS:
9592 if (i != n-1)
9593 error (_("Misplaced 'others' clause"));
9594 aggregate_assign_others (container, lhs, exp, pos, indices,
9595 num_indices, low_index, high_index);
9596 break;
9597 default:
9598 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9599 }
9600 }
9601
9602 return container;
9603}
9604
9605/* Assign into the component of LHS indexed by the OP_POSITIONAL
9606 construct at *POS, updating *POS past the construct, given that
9607 the positions are relative to lower bound LOW, where HIGH is the
9608 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9609 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 9610 assign_aggregate. */
52ce6436
PH
9611static void
9612aggregate_assign_positional (struct value *container,
9613 struct value *lhs, struct expression *exp,
9614 int *pos, LONGEST *indices, int *num_indices,
9615 int max_indices, LONGEST low, LONGEST high)
9616{
9617 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9618
9619 if (ind - 1 == high)
e1d5a0d2 9620 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9621 if (ind <= high)
9622 {
9623 add_component_interval (ind, ind, indices, num_indices, max_indices);
9624 *pos += 3;
9625 assign_component (container, lhs, ind, exp, pos);
9626 }
9627 else
9628 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9629}
9630
9631/* Assign into the components of LHS indexed by the OP_CHOICES
9632 construct at *POS, updating *POS past the construct, given that
9633 the allowable indices are LOW..HIGH. Record the indices assigned
9634 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 9635 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9636static void
9637aggregate_assign_from_choices (struct value *container,
9638 struct value *lhs, struct expression *exp,
9639 int *pos, LONGEST *indices, int *num_indices,
9640 int max_indices, LONGEST low, LONGEST high)
9641{
9642 int j;
9643 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9644 int choice_pos, expr_pc;
9645 int is_array = ada_is_direct_array_type (value_type (lhs));
9646
9647 choice_pos = *pos += 3;
9648
9649 for (j = 0; j < n_choices; j += 1)
9650 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9651 expr_pc = *pos;
9652 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9653
9654 for (j = 0; j < n_choices; j += 1)
9655 {
9656 LONGEST lower, upper;
9657 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9658
52ce6436
PH
9659 if (op == OP_DISCRETE_RANGE)
9660 {
9661 choice_pos += 1;
9662 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9663 EVAL_NORMAL));
9664 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9665 EVAL_NORMAL));
9666 }
9667 else if (is_array)
9668 {
9669 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9670 EVAL_NORMAL));
9671 upper = lower;
9672 }
9673 else
9674 {
9675 int ind;
0d5cff50 9676 const char *name;
5b4ee69b 9677
52ce6436
PH
9678 switch (op)
9679 {
9680 case OP_NAME:
9681 name = &exp->elts[choice_pos + 2].string;
9682 break;
9683 case OP_VAR_VALUE:
9684 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9685 break;
9686 default:
9687 error (_("Invalid record component association."));
9688 }
9689 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9690 ind = 0;
9691 if (! find_struct_field (name, value_type (lhs), 0,
9692 NULL, NULL, NULL, NULL, &ind))
9693 error (_("Unknown component name: %s."), name);
9694 lower = upper = ind;
9695 }
9696
9697 if (lower <= upper && (lower < low || upper > high))
9698 error (_("Index in component association out of bounds."));
9699
9700 add_component_interval (lower, upper, indices, num_indices,
9701 max_indices);
9702 while (lower <= upper)
9703 {
9704 int pos1;
5b4ee69b 9705
52ce6436
PH
9706 pos1 = expr_pc;
9707 assign_component (container, lhs, lower, exp, &pos1);
9708 lower += 1;
9709 }
9710 }
9711}
9712
9713/* Assign the value of the expression in the OP_OTHERS construct in
9714 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9715 have not been previously assigned. The index intervals already assigned
9716 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 9717 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9718static void
9719aggregate_assign_others (struct value *container,
9720 struct value *lhs, struct expression *exp,
9721 int *pos, LONGEST *indices, int num_indices,
9722 LONGEST low, LONGEST high)
9723{
9724 int i;
5ce64950 9725 int expr_pc = *pos + 1;
52ce6436
PH
9726
9727 for (i = 0; i < num_indices - 2; i += 2)
9728 {
9729 LONGEST ind;
5b4ee69b 9730
52ce6436
PH
9731 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9732 {
5ce64950 9733 int localpos;
5b4ee69b 9734
5ce64950
MS
9735 localpos = expr_pc;
9736 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9737 }
9738 }
9739 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9740}
9741
9742/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9743 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9744 modifying *SIZE as needed. It is an error if *SIZE exceeds
9745 MAX_SIZE. The resulting intervals do not overlap. */
9746static void
9747add_component_interval (LONGEST low, LONGEST high,
9748 LONGEST* indices, int *size, int max_size)
9749{
9750 int i, j;
5b4ee69b 9751
52ce6436
PH
9752 for (i = 0; i < *size; i += 2) {
9753 if (high >= indices[i] && low <= indices[i + 1])
9754 {
9755 int kh;
5b4ee69b 9756
52ce6436
PH
9757 for (kh = i + 2; kh < *size; kh += 2)
9758 if (high < indices[kh])
9759 break;
9760 if (low < indices[i])
9761 indices[i] = low;
9762 indices[i + 1] = indices[kh - 1];
9763 if (high > indices[i + 1])
9764 indices[i + 1] = high;
9765 memcpy (indices + i + 2, indices + kh, *size - kh);
9766 *size -= kh - i - 2;
9767 return;
9768 }
9769 else if (high < indices[i])
9770 break;
9771 }
9772
9773 if (*size == max_size)
9774 error (_("Internal error: miscounted aggregate components."));
9775 *size += 2;
9776 for (j = *size-1; j >= i+2; j -= 1)
9777 indices[j] = indices[j - 2];
9778 indices[i] = low;
9779 indices[i + 1] = high;
9780}
9781
6e48bd2c
JB
9782/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9783 is different. */
9784
9785static struct value *
9786ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9787{
9788 if (type == ada_check_typedef (value_type (arg2)))
9789 return arg2;
9790
9791 if (ada_is_fixed_point_type (type))
9792 return (cast_to_fixed (type, arg2));
9793
9794 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 9795 return cast_from_fixed (type, arg2);
6e48bd2c
JB
9796
9797 return value_cast (type, arg2);
9798}
9799
284614f0
JB
9800/* Evaluating Ada expressions, and printing their result.
9801 ------------------------------------------------------
9802
21649b50
JB
9803 1. Introduction:
9804 ----------------
9805
284614f0
JB
9806 We usually evaluate an Ada expression in order to print its value.
9807 We also evaluate an expression in order to print its type, which
9808 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9809 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9810 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9811 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9812 similar.
9813
9814 Evaluating expressions is a little more complicated for Ada entities
9815 than it is for entities in languages such as C. The main reason for
9816 this is that Ada provides types whose definition might be dynamic.
9817 One example of such types is variant records. Or another example
9818 would be an array whose bounds can only be known at run time.
9819
9820 The following description is a general guide as to what should be
9821 done (and what should NOT be done) in order to evaluate an expression
9822 involving such types, and when. This does not cover how the semantic
9823 information is encoded by GNAT as this is covered separatly. For the
9824 document used as the reference for the GNAT encoding, see exp_dbug.ads
9825 in the GNAT sources.
9826
9827 Ideally, we should embed each part of this description next to its
9828 associated code. Unfortunately, the amount of code is so vast right
9829 now that it's hard to see whether the code handling a particular
9830 situation might be duplicated or not. One day, when the code is
9831 cleaned up, this guide might become redundant with the comments
9832 inserted in the code, and we might want to remove it.
9833
21649b50
JB
9834 2. ``Fixing'' an Entity, the Simple Case:
9835 -----------------------------------------
9836
284614f0
JB
9837 When evaluating Ada expressions, the tricky issue is that they may
9838 reference entities whose type contents and size are not statically
9839 known. Consider for instance a variant record:
9840
9841 type Rec (Empty : Boolean := True) is record
9842 case Empty is
9843 when True => null;
9844 when False => Value : Integer;
9845 end case;
9846 end record;
9847 Yes : Rec := (Empty => False, Value => 1);
9848 No : Rec := (empty => True);
9849
9850 The size and contents of that record depends on the value of the
9851 descriminant (Rec.Empty). At this point, neither the debugging
9852 information nor the associated type structure in GDB are able to
9853 express such dynamic types. So what the debugger does is to create
9854 "fixed" versions of the type that applies to the specific object.
9855 We also informally refer to this opperation as "fixing" an object,
9856 which means creating its associated fixed type.
9857
9858 Example: when printing the value of variable "Yes" above, its fixed
9859 type would look like this:
9860
9861 type Rec is record
9862 Empty : Boolean;
9863 Value : Integer;
9864 end record;
9865
9866 On the other hand, if we printed the value of "No", its fixed type
9867 would become:
9868
9869 type Rec is record
9870 Empty : Boolean;
9871 end record;
9872
9873 Things become a little more complicated when trying to fix an entity
9874 with a dynamic type that directly contains another dynamic type,
9875 such as an array of variant records, for instance. There are
9876 two possible cases: Arrays, and records.
9877
21649b50
JB
9878 3. ``Fixing'' Arrays:
9879 ---------------------
9880
9881 The type structure in GDB describes an array in terms of its bounds,
9882 and the type of its elements. By design, all elements in the array
9883 have the same type and we cannot represent an array of variant elements
9884 using the current type structure in GDB. When fixing an array,
9885 we cannot fix the array element, as we would potentially need one
9886 fixed type per element of the array. As a result, the best we can do
9887 when fixing an array is to produce an array whose bounds and size
9888 are correct (allowing us to read it from memory), but without having
9889 touched its element type. Fixing each element will be done later,
9890 when (if) necessary.
9891
9892 Arrays are a little simpler to handle than records, because the same
9893 amount of memory is allocated for each element of the array, even if
1b536f04 9894 the amount of space actually used by each element differs from element
21649b50 9895 to element. Consider for instance the following array of type Rec:
284614f0
JB
9896
9897 type Rec_Array is array (1 .. 2) of Rec;
9898
1b536f04
JB
9899 The actual amount of memory occupied by each element might be different
9900 from element to element, depending on the value of their discriminant.
21649b50 9901 But the amount of space reserved for each element in the array remains
1b536f04 9902 fixed regardless. So we simply need to compute that size using
21649b50
JB
9903 the debugging information available, from which we can then determine
9904 the array size (we multiply the number of elements of the array by
9905 the size of each element).
9906
9907 The simplest case is when we have an array of a constrained element
9908 type. For instance, consider the following type declarations:
9909
9910 type Bounded_String (Max_Size : Integer) is
9911 Length : Integer;
9912 Buffer : String (1 .. Max_Size);
9913 end record;
9914 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9915
9916 In this case, the compiler describes the array as an array of
9917 variable-size elements (identified by its XVS suffix) for which
9918 the size can be read in the parallel XVZ variable.
9919
9920 In the case of an array of an unconstrained element type, the compiler
9921 wraps the array element inside a private PAD type. This type should not
9922 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9923 that we also use the adjective "aligner" in our code to designate
9924 these wrapper types.
9925
1b536f04 9926 In some cases, the size allocated for each element is statically
21649b50
JB
9927 known. In that case, the PAD type already has the correct size,
9928 and the array element should remain unfixed.
9929
9930 But there are cases when this size is not statically known.
9931 For instance, assuming that "Five" is an integer variable:
284614f0
JB
9932
9933 type Dynamic is array (1 .. Five) of Integer;
9934 type Wrapper (Has_Length : Boolean := False) is record
9935 Data : Dynamic;
9936 case Has_Length is
9937 when True => Length : Integer;
9938 when False => null;
9939 end case;
9940 end record;
9941 type Wrapper_Array is array (1 .. 2) of Wrapper;
9942
9943 Hello : Wrapper_Array := (others => (Has_Length => True,
9944 Data => (others => 17),
9945 Length => 1));
9946
9947
9948 The debugging info would describe variable Hello as being an
9949 array of a PAD type. The size of that PAD type is not statically
9950 known, but can be determined using a parallel XVZ variable.
9951 In that case, a copy of the PAD type with the correct size should
9952 be used for the fixed array.
9953
21649b50
JB
9954 3. ``Fixing'' record type objects:
9955 ----------------------------------
9956
9957 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9958 record types. In this case, in order to compute the associated
9959 fixed type, we need to determine the size and offset of each of
9960 its components. This, in turn, requires us to compute the fixed
9961 type of each of these components.
9962
9963 Consider for instance the example:
9964
9965 type Bounded_String (Max_Size : Natural) is record
9966 Str : String (1 .. Max_Size);
9967 Length : Natural;
9968 end record;
9969 My_String : Bounded_String (Max_Size => 10);
9970
9971 In that case, the position of field "Length" depends on the size
9972 of field Str, which itself depends on the value of the Max_Size
21649b50 9973 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9974 we need to fix the type of field Str. Therefore, fixing a variant
9975 record requires us to fix each of its components.
9976
9977 However, if a component does not have a dynamic size, the component
9978 should not be fixed. In particular, fields that use a PAD type
9979 should not fixed. Here is an example where this might happen
9980 (assuming type Rec above):
9981
9982 type Container (Big : Boolean) is record
9983 First : Rec;
9984 After : Integer;
9985 case Big is
9986 when True => Another : Integer;
9987 when False => null;
9988 end case;
9989 end record;
9990 My_Container : Container := (Big => False,
9991 First => (Empty => True),
9992 After => 42);
9993
9994 In that example, the compiler creates a PAD type for component First,
9995 whose size is constant, and then positions the component After just
9996 right after it. The offset of component After is therefore constant
9997 in this case.
9998
9999 The debugger computes the position of each field based on an algorithm
10000 that uses, among other things, the actual position and size of the field
21649b50
JB
10001 preceding it. Let's now imagine that the user is trying to print
10002 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
10003 end up computing the offset of field After based on the size of the
10004 fixed version of field First. And since in our example First has
10005 only one actual field, the size of the fixed type is actually smaller
10006 than the amount of space allocated to that field, and thus we would
10007 compute the wrong offset of field After.
10008
21649b50
JB
10009 To make things more complicated, we need to watch out for dynamic
10010 components of variant records (identified by the ___XVL suffix in
10011 the component name). Even if the target type is a PAD type, the size
10012 of that type might not be statically known. So the PAD type needs
10013 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10014 we might end up with the wrong size for our component. This can be
10015 observed with the following type declarations:
284614f0
JB
10016
10017 type Octal is new Integer range 0 .. 7;
10018 type Octal_Array is array (Positive range <>) of Octal;
10019 pragma Pack (Octal_Array);
10020
10021 type Octal_Buffer (Size : Positive) is record
10022 Buffer : Octal_Array (1 .. Size);
10023 Length : Integer;
10024 end record;
10025
10026 In that case, Buffer is a PAD type whose size is unset and needs
10027 to be computed by fixing the unwrapped type.
10028
21649b50
JB
10029 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10030 ----------------------------------------------------------
10031
10032 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
10033 thus far, be actually fixed?
10034
10035 The answer is: Only when referencing that element. For instance
10036 when selecting one component of a record, this specific component
10037 should be fixed at that point in time. Or when printing the value
10038 of a record, each component should be fixed before its value gets
10039 printed. Similarly for arrays, the element of the array should be
10040 fixed when printing each element of the array, or when extracting
10041 one element out of that array. On the other hand, fixing should
10042 not be performed on the elements when taking a slice of an array!
10043
10044 Note that one of the side-effects of miscomputing the offset and
10045 size of each field is that we end up also miscomputing the size
10046 of the containing type. This can have adverse results when computing
10047 the value of an entity. GDB fetches the value of an entity based
10048 on the size of its type, and thus a wrong size causes GDB to fetch
10049 the wrong amount of memory. In the case where the computed size is
10050 too small, GDB fetches too little data to print the value of our
10051 entiry. Results in this case as unpredicatble, as we usually read
10052 past the buffer containing the data =:-o. */
10053
10054/* Implement the evaluate_exp routine in the exp_descriptor structure
10055 for the Ada language. */
10056
52ce6436 10057static struct value *
ebf56fd3 10058ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 10059 int *pos, enum noside noside)
14f9c5c9
AS
10060{
10061 enum exp_opcode op;
b5385fc0 10062 int tem;
14f9c5c9 10063 int pc;
5ec18f2b 10064 int preeval_pos;
14f9c5c9
AS
10065 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10066 struct type *type;
52ce6436 10067 int nargs, oplen;
d2e4a39e 10068 struct value **argvec;
14f9c5c9 10069
d2e4a39e
AS
10070 pc = *pos;
10071 *pos += 1;
14f9c5c9
AS
10072 op = exp->elts[pc].opcode;
10073
d2e4a39e 10074 switch (op)
14f9c5c9
AS
10075 {
10076 default:
10077 *pos -= 1;
6e48bd2c 10078 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10079
10080 if (noside == EVAL_NORMAL)
10081 arg1 = unwrap_value (arg1);
6e48bd2c
JB
10082
10083 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10084 then we need to perform the conversion manually, because
10085 evaluate_subexp_standard doesn't do it. This conversion is
10086 necessary in Ada because the different kinds of float/fixed
10087 types in Ada have different representations.
10088
10089 Similarly, we need to perform the conversion from OP_LONG
10090 ourselves. */
10091 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10092 arg1 = ada_value_cast (expect_type, arg1, noside);
10093
10094 return arg1;
4c4b4cd2
PH
10095
10096 case OP_STRING:
10097 {
76a01679 10098 struct value *result;
5b4ee69b 10099
76a01679
JB
10100 *pos -= 1;
10101 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10102 /* The result type will have code OP_STRING, bashed there from
10103 OP_ARRAY. Bash it back. */
df407dfe
AC
10104 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10105 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 10106 return result;
4c4b4cd2 10107 }
14f9c5c9
AS
10108
10109 case UNOP_CAST:
10110 (*pos) += 2;
10111 type = exp->elts[pc + 1].type;
10112 arg1 = evaluate_subexp (type, exp, pos, noside);
10113 if (noside == EVAL_SKIP)
4c4b4cd2 10114 goto nosideret;
6e48bd2c 10115 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
10116 return arg1;
10117
4c4b4cd2
PH
10118 case UNOP_QUAL:
10119 (*pos) += 2;
10120 type = exp->elts[pc + 1].type;
10121 return ada_evaluate_subexp (type, exp, pos, noside);
10122
14f9c5c9
AS
10123 case BINOP_ASSIGN:
10124 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
10125 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10126 {
10127 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10128 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10129 return arg1;
10130 return ada_value_assign (arg1, arg1);
10131 }
003f3813
JB
10132 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10133 except if the lhs of our assignment is a convenience variable.
10134 In the case of assigning to a convenience variable, the lhs
10135 should be exactly the result of the evaluation of the rhs. */
10136 type = value_type (arg1);
10137 if (VALUE_LVAL (arg1) == lval_internalvar)
10138 type = NULL;
10139 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10140 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10141 return arg1;
df407dfe
AC
10142 if (ada_is_fixed_point_type (value_type (arg1)))
10143 arg2 = cast_to_fixed (value_type (arg1), arg2);
10144 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 10145 error
323e0a4a 10146 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 10147 else
df407dfe 10148 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10149 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10150
10151 case BINOP_ADD:
10152 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10153 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10154 if (noside == EVAL_SKIP)
4c4b4cd2 10155 goto nosideret;
2ac8a782
JB
10156 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10157 return (value_from_longest
10158 (value_type (arg1),
10159 value_as_long (arg1) + value_as_long (arg2)));
c40cc657
JB
10160 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10161 return (value_from_longest
10162 (value_type (arg2),
10163 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
10164 if ((ada_is_fixed_point_type (value_type (arg1))
10165 || ada_is_fixed_point_type (value_type (arg2)))
10166 && value_type (arg1) != value_type (arg2))
323e0a4a 10167 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10168 /* Do the addition, and cast the result to the type of the first
10169 argument. We cannot cast the result to a reference type, so if
10170 ARG1 is a reference type, find its underlying type. */
10171 type = value_type (arg1);
10172 while (TYPE_CODE (type) == TYPE_CODE_REF)
10173 type = TYPE_TARGET_TYPE (type);
f44316fa 10174 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10175 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10176
10177 case BINOP_SUB:
10178 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10179 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10180 if (noside == EVAL_SKIP)
4c4b4cd2 10181 goto nosideret;
2ac8a782
JB
10182 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10183 return (value_from_longest
10184 (value_type (arg1),
10185 value_as_long (arg1) - value_as_long (arg2)));
c40cc657
JB
10186 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10187 return (value_from_longest
10188 (value_type (arg2),
10189 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
10190 if ((ada_is_fixed_point_type (value_type (arg1))
10191 || ada_is_fixed_point_type (value_type (arg2)))
10192 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10193 error (_("Operands of fixed-point subtraction "
10194 "must have the same type"));
b7789565
JB
10195 /* Do the substraction, and cast the result to the type of the first
10196 argument. We cannot cast the result to a reference type, so if
10197 ARG1 is a reference type, find its underlying type. */
10198 type = value_type (arg1);
10199 while (TYPE_CODE (type) == TYPE_CODE_REF)
10200 type = TYPE_TARGET_TYPE (type);
f44316fa 10201 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10202 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10203
10204 case BINOP_MUL:
10205 case BINOP_DIV:
e1578042
JB
10206 case BINOP_REM:
10207 case BINOP_MOD:
14f9c5c9
AS
10208 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10209 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10210 if (noside == EVAL_SKIP)
4c4b4cd2 10211 goto nosideret;
e1578042 10212 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10213 {
10214 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10215 return value_zero (value_type (arg1), not_lval);
10216 }
14f9c5c9 10217 else
4c4b4cd2 10218 {
a53b7a21 10219 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 10220 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 10221 arg1 = cast_from_fixed (type, arg1);
df407dfe 10222 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10223 arg2 = cast_from_fixed (type, arg2);
f44316fa 10224 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10225 return ada_value_binop (arg1, arg2, op);
10226 }
10227
4c4b4cd2
PH
10228 case BINOP_EQUAL:
10229 case BINOP_NOTEQUAL:
14f9c5c9 10230 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10231 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10232 if (noside == EVAL_SKIP)
76a01679 10233 goto nosideret;
4c4b4cd2 10234 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10235 tem = 0;
4c4b4cd2 10236 else
f44316fa
UW
10237 {
10238 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10239 tem = ada_value_equal (arg1, arg2);
10240 }
4c4b4cd2 10241 if (op == BINOP_NOTEQUAL)
76a01679 10242 tem = !tem;
fbb06eb1
UW
10243 type = language_bool_type (exp->language_defn, exp->gdbarch);
10244 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10245
10246 case UNOP_NEG:
10247 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10248 if (noside == EVAL_SKIP)
10249 goto nosideret;
df407dfe
AC
10250 else if (ada_is_fixed_point_type (value_type (arg1)))
10251 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10252 else
f44316fa
UW
10253 {
10254 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10255 return value_neg (arg1);
10256 }
4c4b4cd2 10257
2330c6c6
JB
10258 case BINOP_LOGICAL_AND:
10259 case BINOP_LOGICAL_OR:
10260 case UNOP_LOGICAL_NOT:
000d5124
JB
10261 {
10262 struct value *val;
10263
10264 *pos -= 1;
10265 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10266 type = language_bool_type (exp->language_defn, exp->gdbarch);
10267 return value_cast (type, val);
000d5124 10268 }
2330c6c6
JB
10269
10270 case BINOP_BITWISE_AND:
10271 case BINOP_BITWISE_IOR:
10272 case BINOP_BITWISE_XOR:
000d5124
JB
10273 {
10274 struct value *val;
10275
10276 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10277 *pos = pc;
10278 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10279
10280 return value_cast (value_type (arg1), val);
10281 }
2330c6c6 10282
14f9c5c9
AS
10283 case OP_VAR_VALUE:
10284 *pos -= 1;
6799def4 10285
14f9c5c9 10286 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10287 {
10288 *pos += 4;
10289 goto nosideret;
10290 }
da5c522f
JB
10291
10292 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10293 /* Only encountered when an unresolved symbol occurs in a
10294 context other than a function call, in which case, it is
52ce6436 10295 invalid. */
323e0a4a 10296 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 10297 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
da5c522f
JB
10298
10299 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10300 {
0c1f74cf 10301 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10302 /* Check to see if this is a tagged type. We also need to handle
10303 the case where the type is a reference to a tagged type, but
10304 we have to be careful to exclude pointers to tagged types.
10305 The latter should be shown as usual (as a pointer), whereas
10306 a reference should mostly be transparent to the user. */
10307 if (ada_is_tagged_type (type, 0)
023db19c 10308 || (TYPE_CODE (type) == TYPE_CODE_REF
31dbc1c5 10309 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10310 {
10311 /* Tagged types are a little special in the fact that the real
10312 type is dynamic and can only be determined by inspecting the
10313 object's tag. This means that we need to get the object's
10314 value first (EVAL_NORMAL) and then extract the actual object
10315 type from its tag.
10316
10317 Note that we cannot skip the final step where we extract
10318 the object type from its tag, because the EVAL_NORMAL phase
10319 results in dynamic components being resolved into fixed ones.
10320 This can cause problems when trying to print the type
10321 description of tagged types whose parent has a dynamic size:
10322 We use the type name of the "_parent" component in order
10323 to print the name of the ancestor type in the type description.
10324 If that component had a dynamic size, the resolution into
10325 a fixed type would result in the loss of that type name,
10326 thus preventing us from printing the name of the ancestor
10327 type in the type description. */
10328 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10329
10330 if (TYPE_CODE (type) != TYPE_CODE_REF)
10331 {
10332 struct type *actual_type;
10333
10334 actual_type = type_from_tag (ada_value_tag (arg1));
10335 if (actual_type == NULL)
10336 /* If, for some reason, we were unable to determine
10337 the actual type from the tag, then use the static
10338 approximation that we just computed as a fallback.
10339 This can happen if the debugging information is
10340 incomplete, for instance. */
10341 actual_type = type;
10342 return value_zero (actual_type, not_lval);
10343 }
10344 else
10345 {
10346 /* In the case of a ref, ada_coerce_ref takes care
10347 of determining the actual type. But the evaluation
10348 should return a ref as it should be valid to ask
10349 for its address; so rebuild a ref after coerce. */
10350 arg1 = ada_coerce_ref (arg1);
10351 return value_ref (arg1);
10352 }
10353 }
0c1f74cf 10354
84754697
JB
10355 /* Records and unions for which GNAT encodings have been
10356 generated need to be statically fixed as well.
10357 Otherwise, non-static fixing produces a type where
10358 all dynamic properties are removed, which prevents "ptype"
10359 from being able to completely describe the type.
10360 For instance, a case statement in a variant record would be
10361 replaced by the relevant components based on the actual
10362 value of the discriminants. */
10363 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10364 && dynamic_template_type (type) != NULL)
10365 || (TYPE_CODE (type) == TYPE_CODE_UNION
10366 && ada_find_parallel_type (type, "___XVU") != NULL))
10367 {
10368 *pos += 4;
10369 return value_zero (to_static_fixed_type (type), not_lval);
10370 }
4c4b4cd2 10371 }
da5c522f
JB
10372
10373 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10374 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10375
10376 case OP_FUNCALL:
10377 (*pos) += 2;
10378
10379 /* Allocate arg vector, including space for the function to be
10380 called in argvec[0] and a terminating NULL. */
10381 nargs = longest_to_int (exp->elts[pc + 1].longconst);
10382 argvec =
10383 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10384
10385 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10386 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10387 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
10388 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10389 else
10390 {
10391 for (tem = 0; tem <= nargs; tem += 1)
10392 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10393 argvec[tem] = 0;
10394
10395 if (noside == EVAL_SKIP)
10396 goto nosideret;
10397 }
10398
ad82864c
JB
10399 if (ada_is_constrained_packed_array_type
10400 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10401 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
10402 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10403 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10404 /* This is a packed array that has already been fixed, and
10405 therefore already coerced to a simple array. Nothing further
10406 to do. */
10407 ;
df407dfe
AC
10408 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10409 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
76a01679 10410 && VALUE_LVAL (argvec[0]) == lval_memory))
4c4b4cd2
PH
10411 argvec[0] = value_addr (argvec[0]);
10412
df407dfe 10413 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10414
10415 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10416 them. So, if this is an array typedef (encoding use for array
10417 access types encoded as fat pointers), strip it now. */
720d1a40
JB
10418 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10419 type = ada_typedef_target_type (type);
10420
4c4b4cd2
PH
10421 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10422 {
61ee279c 10423 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
10424 {
10425 case TYPE_CODE_FUNC:
61ee279c 10426 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10427 break;
10428 case TYPE_CODE_ARRAY:
10429 break;
10430 case TYPE_CODE_STRUCT:
10431 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10432 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10433 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10434 break;
10435 default:
323e0a4a 10436 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10437 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10438 break;
10439 }
10440 }
10441
10442 switch (TYPE_CODE (type))
10443 {
10444 case TYPE_CODE_FUNC:
10445 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972
PH
10446 {
10447 struct type *rtype = TYPE_TARGET_TYPE (type);
10448
10449 if (TYPE_GNU_IFUNC (type))
10450 return allocate_value (TYPE_TARGET_TYPE (rtype));
10451 return allocate_value (rtype);
10452 }
4c4b4cd2 10453 return call_function_by_hand (argvec[0], nargs, argvec + 1);
c8ea1972
PH
10454 case TYPE_CODE_INTERNAL_FUNCTION:
10455 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10456 /* We don't know anything about what the internal
10457 function might return, but we have to return
10458 something. */
10459 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10460 not_lval);
10461 else
10462 return call_internal_function (exp->gdbarch, exp->language_defn,
10463 argvec[0], nargs, argvec + 1);
10464
4c4b4cd2
PH
10465 case TYPE_CODE_STRUCT:
10466 {
10467 int arity;
10468
4c4b4cd2
PH
10469 arity = ada_array_arity (type);
10470 type = ada_array_element_type (type, nargs);
10471 if (type == NULL)
323e0a4a 10472 error (_("cannot subscript or call a record"));
4c4b4cd2 10473 if (arity != nargs)
323e0a4a 10474 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 10475 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 10476 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10477 return
10478 unwrap_value (ada_value_subscript
10479 (argvec[0], nargs, argvec + 1));
10480 }
10481 case TYPE_CODE_ARRAY:
10482 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10483 {
10484 type = ada_array_element_type (type, nargs);
10485 if (type == NULL)
323e0a4a 10486 error (_("element type of array unknown"));
4c4b4cd2 10487 else
0a07e705 10488 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10489 }
10490 return
10491 unwrap_value (ada_value_subscript
10492 (ada_coerce_to_simple_array (argvec[0]),
10493 nargs, argvec + 1));
10494 case TYPE_CODE_PTR: /* Pointer to array */
4c4b4cd2
PH
10495 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10496 {
deede10c 10497 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
4c4b4cd2
PH
10498 type = ada_array_element_type (type, nargs);
10499 if (type == NULL)
323e0a4a 10500 error (_("element type of array unknown"));
4c4b4cd2 10501 else
0a07e705 10502 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10503 }
10504 return
deede10c
JB
10505 unwrap_value (ada_value_ptr_subscript (argvec[0],
10506 nargs, argvec + 1));
4c4b4cd2
PH
10507
10508 default:
e1d5a0d2
PH
10509 error (_("Attempt to index or call something other than an "
10510 "array or function"));
4c4b4cd2
PH
10511 }
10512
10513 case TERNOP_SLICE:
10514 {
10515 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10516 struct value *low_bound_val =
10517 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
10518 struct value *high_bound_val =
10519 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10520 LONGEST low_bound;
10521 LONGEST high_bound;
5b4ee69b 10522
994b9211
AC
10523 low_bound_val = coerce_ref (low_bound_val);
10524 high_bound_val = coerce_ref (high_bound_val);
714e53ab
PH
10525 low_bound = pos_atr (low_bound_val);
10526 high_bound = pos_atr (high_bound_val);
963a6417 10527
4c4b4cd2
PH
10528 if (noside == EVAL_SKIP)
10529 goto nosideret;
10530
4c4b4cd2
PH
10531 /* If this is a reference to an aligner type, then remove all
10532 the aligners. */
df407dfe
AC
10533 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10534 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10535 TYPE_TARGET_TYPE (value_type (array)) =
10536 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 10537
ad82864c 10538 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 10539 error (_("cannot slice a packed array"));
4c4b4cd2
PH
10540
10541 /* If this is a reference to an array or an array lvalue,
10542 convert to a pointer. */
df407dfe
AC
10543 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10544 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
10545 && VALUE_LVAL (array) == lval_memory))
10546 array = value_addr (array);
10547
1265e4aa 10548 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 10549 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 10550 (value_type (array))))
0b5d8877 10551 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
10552
10553 array = ada_coerce_to_simple_array_ptr (array);
10554
714e53ab
PH
10555 /* If we have more than one level of pointer indirection,
10556 dereference the value until we get only one level. */
df407dfe
AC
10557 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10558 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
10559 == TYPE_CODE_PTR))
10560 array = value_ind (array);
10561
10562 /* Make sure we really do have an array type before going further,
10563 to avoid a SEGV when trying to get the index type or the target
10564 type later down the road if the debug info generated by
10565 the compiler is incorrect or incomplete. */
df407dfe 10566 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 10567 error (_("cannot take slice of non-array"));
714e53ab 10568
828292f2
JB
10569 if (TYPE_CODE (ada_check_typedef (value_type (array)))
10570 == TYPE_CODE_PTR)
4c4b4cd2 10571 {
828292f2
JB
10572 struct type *type0 = ada_check_typedef (value_type (array));
10573
0b5d8877 10574 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 10575 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
10576 else
10577 {
10578 struct type *arr_type0 =
828292f2 10579 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 10580
f5938064
JG
10581 return ada_value_slice_from_ptr (array, arr_type0,
10582 longest_to_int (low_bound),
10583 longest_to_int (high_bound));
4c4b4cd2
PH
10584 }
10585 }
10586 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10587 return array;
10588 else if (high_bound < low_bound)
df407dfe 10589 return empty_array (value_type (array), low_bound);
4c4b4cd2 10590 else
529cad9c
PH
10591 return ada_value_slice (array, longest_to_int (low_bound),
10592 longest_to_int (high_bound));
4c4b4cd2 10593 }
14f9c5c9 10594
4c4b4cd2
PH
10595 case UNOP_IN_RANGE:
10596 (*pos) += 2;
10597 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 10598 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 10599
14f9c5c9 10600 if (noside == EVAL_SKIP)
4c4b4cd2 10601 goto nosideret;
14f9c5c9 10602
4c4b4cd2
PH
10603 switch (TYPE_CODE (type))
10604 {
10605 default:
e1d5a0d2
PH
10606 lim_warning (_("Membership test incompletely implemented; "
10607 "always returns true"));
fbb06eb1
UW
10608 type = language_bool_type (exp->language_defn, exp->gdbarch);
10609 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
10610
10611 case TYPE_CODE_RANGE:
030b4912
UW
10612 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10613 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
10614 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10615 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
10616 type = language_bool_type (exp->language_defn, exp->gdbarch);
10617 return
10618 value_from_longest (type,
4c4b4cd2
PH
10619 (value_less (arg1, arg3)
10620 || value_equal (arg1, arg3))
10621 && (value_less (arg2, arg1)
10622 || value_equal (arg2, arg1)));
10623 }
10624
10625 case BINOP_IN_BOUNDS:
14f9c5c9 10626 (*pos) += 2;
4c4b4cd2
PH
10627 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10628 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10629
4c4b4cd2
PH
10630 if (noside == EVAL_SKIP)
10631 goto nosideret;
14f9c5c9 10632
4c4b4cd2 10633 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
10634 {
10635 type = language_bool_type (exp->language_defn, exp->gdbarch);
10636 return value_zero (type, not_lval);
10637 }
14f9c5c9 10638
4c4b4cd2 10639 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10640
1eea4ebd
UW
10641 type = ada_index_type (value_type (arg2), tem, "range");
10642 if (!type)
10643 type = value_type (arg1);
14f9c5c9 10644
1eea4ebd
UW
10645 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10646 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 10647
f44316fa
UW
10648 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10649 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10650 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10651 return
fbb06eb1 10652 value_from_longest (type,
4c4b4cd2
PH
10653 (value_less (arg1, arg3)
10654 || value_equal (arg1, arg3))
10655 && (value_less (arg2, arg1)
10656 || value_equal (arg2, arg1)));
10657
10658 case TERNOP_IN_RANGE:
10659 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10660 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10661 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10662
10663 if (noside == EVAL_SKIP)
10664 goto nosideret;
10665
f44316fa
UW
10666 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10667 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10668 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10669 return
fbb06eb1 10670 value_from_longest (type,
4c4b4cd2
PH
10671 (value_less (arg1, arg3)
10672 || value_equal (arg1, arg3))
10673 && (value_less (arg2, arg1)
10674 || value_equal (arg2, arg1)));
10675
10676 case OP_ATR_FIRST:
10677 case OP_ATR_LAST:
10678 case OP_ATR_LENGTH:
10679 {
76a01679 10680 struct type *type_arg;
5b4ee69b 10681
76a01679
JB
10682 if (exp->elts[*pos].opcode == OP_TYPE)
10683 {
10684 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10685 arg1 = NULL;
5bc23cb3 10686 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
10687 }
10688 else
10689 {
10690 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10691 type_arg = NULL;
10692 }
10693
10694 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 10695 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
10696 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10697 *pos += 4;
10698
10699 if (noside == EVAL_SKIP)
10700 goto nosideret;
10701
10702 if (type_arg == NULL)
10703 {
10704 arg1 = ada_coerce_ref (arg1);
10705
ad82864c 10706 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
10707 arg1 = ada_coerce_to_simple_array (arg1);
10708
aa4fb036 10709 if (op == OP_ATR_LENGTH)
1eea4ebd 10710 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10711 else
10712 {
10713 type = ada_index_type (value_type (arg1), tem,
10714 ada_attribute_name (op));
10715 if (type == NULL)
10716 type = builtin_type (exp->gdbarch)->builtin_int;
10717 }
76a01679
JB
10718
10719 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 10720 return allocate_value (type);
76a01679
JB
10721
10722 switch (op)
10723 {
10724 default: /* Should never happen. */
323e0a4a 10725 error (_("unexpected attribute encountered"));
76a01679 10726 case OP_ATR_FIRST:
1eea4ebd
UW
10727 return value_from_longest
10728 (type, ada_array_bound (arg1, tem, 0));
76a01679 10729 case OP_ATR_LAST:
1eea4ebd
UW
10730 return value_from_longest
10731 (type, ada_array_bound (arg1, tem, 1));
76a01679 10732 case OP_ATR_LENGTH:
1eea4ebd
UW
10733 return value_from_longest
10734 (type, ada_array_length (arg1, tem));
76a01679
JB
10735 }
10736 }
10737 else if (discrete_type_p (type_arg))
10738 {
10739 struct type *range_type;
0d5cff50 10740 const char *name = ada_type_name (type_arg);
5b4ee69b 10741
76a01679
JB
10742 range_type = NULL;
10743 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 10744 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
10745 if (range_type == NULL)
10746 range_type = type_arg;
10747 switch (op)
10748 {
10749 default:
323e0a4a 10750 error (_("unexpected attribute encountered"));
76a01679 10751 case OP_ATR_FIRST:
690cc4eb 10752 return value_from_longest
43bbcdc2 10753 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 10754 case OP_ATR_LAST:
690cc4eb 10755 return value_from_longest
43bbcdc2 10756 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 10757 case OP_ATR_LENGTH:
323e0a4a 10758 error (_("the 'length attribute applies only to array types"));
76a01679
JB
10759 }
10760 }
10761 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 10762 error (_("unimplemented type attribute"));
76a01679
JB
10763 else
10764 {
10765 LONGEST low, high;
10766
ad82864c
JB
10767 if (ada_is_constrained_packed_array_type (type_arg))
10768 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 10769
aa4fb036 10770 if (op == OP_ATR_LENGTH)
1eea4ebd 10771 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10772 else
10773 {
10774 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10775 if (type == NULL)
10776 type = builtin_type (exp->gdbarch)->builtin_int;
10777 }
1eea4ebd 10778
76a01679
JB
10779 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10780 return allocate_value (type);
10781
10782 switch (op)
10783 {
10784 default:
323e0a4a 10785 error (_("unexpected attribute encountered"));
76a01679 10786 case OP_ATR_FIRST:
1eea4ebd 10787 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
10788 return value_from_longest (type, low);
10789 case OP_ATR_LAST:
1eea4ebd 10790 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10791 return value_from_longest (type, high);
10792 case OP_ATR_LENGTH:
1eea4ebd
UW
10793 low = ada_array_bound_from_type (type_arg, tem, 0);
10794 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10795 return value_from_longest (type, high - low + 1);
10796 }
10797 }
14f9c5c9
AS
10798 }
10799
4c4b4cd2
PH
10800 case OP_ATR_TAG:
10801 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10802 if (noside == EVAL_SKIP)
76a01679 10803 goto nosideret;
4c4b4cd2
PH
10804
10805 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10806 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
10807
10808 return ada_value_tag (arg1);
10809
10810 case OP_ATR_MIN:
10811 case OP_ATR_MAX:
10812 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10813 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10814 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10815 if (noside == EVAL_SKIP)
76a01679 10816 goto nosideret;
d2e4a39e 10817 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10818 return value_zero (value_type (arg1), not_lval);
14f9c5c9 10819 else
f44316fa
UW
10820 {
10821 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10822 return value_binop (arg1, arg2,
10823 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10824 }
14f9c5c9 10825
4c4b4cd2
PH
10826 case OP_ATR_MODULUS:
10827 {
31dedfee 10828 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10829
5b4ee69b 10830 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
10831 if (noside == EVAL_SKIP)
10832 goto nosideret;
4c4b4cd2 10833
76a01679 10834 if (!ada_is_modular_type (type_arg))
323e0a4a 10835 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10836
76a01679
JB
10837 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10838 ada_modulus (type_arg));
4c4b4cd2
PH
10839 }
10840
10841
10842 case OP_ATR_POS:
10843 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10844 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10845 if (noside == EVAL_SKIP)
76a01679 10846 goto nosideret;
3cb382c9
UW
10847 type = builtin_type (exp->gdbarch)->builtin_int;
10848 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10849 return value_zero (type, not_lval);
14f9c5c9 10850 else
3cb382c9 10851 return value_pos_atr (type, arg1);
14f9c5c9 10852
4c4b4cd2
PH
10853 case OP_ATR_SIZE:
10854 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
10855 type = value_type (arg1);
10856
10857 /* If the argument is a reference, then dereference its type, since
10858 the user is really asking for the size of the actual object,
10859 not the size of the pointer. */
10860 if (TYPE_CODE (type) == TYPE_CODE_REF)
10861 type = TYPE_TARGET_TYPE (type);
10862
4c4b4cd2 10863 if (noside == EVAL_SKIP)
76a01679 10864 goto nosideret;
4c4b4cd2 10865 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 10866 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 10867 else
22601c15 10868 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 10869 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
10870
10871 case OP_ATR_VAL:
10872 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 10873 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 10874 type = exp->elts[pc + 2].type;
14f9c5c9 10875 if (noside == EVAL_SKIP)
76a01679 10876 goto nosideret;
4c4b4cd2 10877 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10878 return value_zero (type, not_lval);
4c4b4cd2 10879 else
76a01679 10880 return value_val_atr (type, arg1);
4c4b4cd2
PH
10881
10882 case BINOP_EXP:
10883 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10884 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10885 if (noside == EVAL_SKIP)
10886 goto nosideret;
10887 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10888 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 10889 else
f44316fa
UW
10890 {
10891 /* For integer exponentiation operations,
10892 only promote the first argument. */
10893 if (is_integral_type (value_type (arg2)))
10894 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10895 else
10896 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10897
10898 return value_binop (arg1, arg2, op);
10899 }
4c4b4cd2
PH
10900
10901 case UNOP_PLUS:
10902 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10903 if (noside == EVAL_SKIP)
10904 goto nosideret;
10905 else
10906 return arg1;
10907
10908 case UNOP_ABS:
10909 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10910 if (noside == EVAL_SKIP)
10911 goto nosideret;
f44316fa 10912 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 10913 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 10914 return value_neg (arg1);
14f9c5c9 10915 else
4c4b4cd2 10916 return arg1;
14f9c5c9
AS
10917
10918 case UNOP_IND:
5ec18f2b 10919 preeval_pos = *pos;
6b0d7253 10920 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10921 if (noside == EVAL_SKIP)
4c4b4cd2 10922 goto nosideret;
df407dfe 10923 type = ada_check_typedef (value_type (arg1));
14f9c5c9 10924 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
10925 {
10926 if (ada_is_array_descriptor_type (type))
10927 /* GDB allows dereferencing GNAT array descriptors. */
10928 {
10929 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 10930
4c4b4cd2 10931 if (arrType == NULL)
323e0a4a 10932 error (_("Attempt to dereference null array pointer."));
00a4c844 10933 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
10934 }
10935 else if (TYPE_CODE (type) == TYPE_CODE_PTR
10936 || TYPE_CODE (type) == TYPE_CODE_REF
10937 /* In C you can dereference an array to get the 1st elt. */
10938 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab 10939 {
5ec18f2b
JG
10940 /* As mentioned in the OP_VAR_VALUE case, tagged types can
10941 only be determined by inspecting the object's tag.
10942 This means that we need to evaluate completely the
10943 expression in order to get its type. */
10944
023db19c
JB
10945 if ((TYPE_CODE (type) == TYPE_CODE_REF
10946 || TYPE_CODE (type) == TYPE_CODE_PTR)
5ec18f2b
JG
10947 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10948 {
10949 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10950 EVAL_NORMAL);
10951 type = value_type (ada_value_ind (arg1));
10952 }
10953 else
10954 {
10955 type = to_static_fixed_type
10956 (ada_aligned_type
10957 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10958 }
c1b5a1a6 10959 ada_ensure_varsize_limit (type);
714e53ab
PH
10960 return value_zero (type, lval_memory);
10961 }
4c4b4cd2 10962 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
10963 {
10964 /* GDB allows dereferencing an int. */
10965 if (expect_type == NULL)
10966 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10967 lval_memory);
10968 else
10969 {
10970 expect_type =
10971 to_static_fixed_type (ada_aligned_type (expect_type));
10972 return value_zero (expect_type, lval_memory);
10973 }
10974 }
4c4b4cd2 10975 else
323e0a4a 10976 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 10977 }
0963b4bd 10978 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 10979 type = ada_check_typedef (value_type (arg1));
d2e4a39e 10980
96967637
JB
10981 if (TYPE_CODE (type) == TYPE_CODE_INT)
10982 /* GDB allows dereferencing an int. If we were given
10983 the expect_type, then use that as the target type.
10984 Otherwise, assume that the target type is an int. */
10985 {
10986 if (expect_type != NULL)
10987 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10988 arg1));
10989 else
10990 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10991 (CORE_ADDR) value_as_address (arg1));
10992 }
6b0d7253 10993
4c4b4cd2
PH
10994 if (ada_is_array_descriptor_type (type))
10995 /* GDB allows dereferencing GNAT array descriptors. */
10996 return ada_coerce_to_simple_array (arg1);
14f9c5c9 10997 else
4c4b4cd2 10998 return ada_value_ind (arg1);
14f9c5c9
AS
10999
11000 case STRUCTOP_STRUCT:
11001 tem = longest_to_int (exp->elts[pc + 1].longconst);
11002 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11003 preeval_pos = *pos;
14f9c5c9
AS
11004 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11005 if (noside == EVAL_SKIP)
4c4b4cd2 11006 goto nosideret;
14f9c5c9 11007 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11008 {
df407dfe 11009 struct type *type1 = value_type (arg1);
5b4ee69b 11010
76a01679
JB
11011 if (ada_is_tagged_type (type1, 1))
11012 {
11013 type = ada_lookup_struct_elt_type (type1,
11014 &exp->elts[pc + 2].string,
11015 1, 1, NULL);
5ec18f2b
JG
11016
11017 /* If the field is not found, check if it exists in the
11018 extension of this object's type. This means that we
11019 need to evaluate completely the expression. */
11020
76a01679 11021 if (type == NULL)
5ec18f2b
JG
11022 {
11023 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11024 EVAL_NORMAL);
11025 arg1 = ada_value_struct_elt (arg1,
11026 &exp->elts[pc + 2].string,
11027 0);
11028 arg1 = unwrap_value (arg1);
11029 type = value_type (ada_to_fixed_value (arg1));
11030 }
76a01679
JB
11031 }
11032 else
11033 type =
11034 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11035 0, NULL);
11036
11037 return value_zero (ada_aligned_type (type), lval_memory);
11038 }
14f9c5c9 11039 else
284614f0
JB
11040 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11041 arg1 = unwrap_value (arg1);
11042 return ada_to_fixed_value (arg1);
11043
14f9c5c9 11044 case OP_TYPE:
4c4b4cd2
PH
11045 /* The value is not supposed to be used. This is here to make it
11046 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11047 (*pos) += 2;
11048 if (noside == EVAL_SKIP)
4c4b4cd2 11049 goto nosideret;
14f9c5c9 11050 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 11051 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11052 else
323e0a4a 11053 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11054
11055 case OP_AGGREGATE:
11056 case OP_CHOICES:
11057 case OP_OTHERS:
11058 case OP_DISCRETE_RANGE:
11059 case OP_POSITIONAL:
11060 case OP_NAME:
11061 if (noside == EVAL_NORMAL)
11062 switch (op)
11063 {
11064 case OP_NAME:
11065 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11066 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11067 case OP_AGGREGATE:
11068 error (_("Aggregates only allowed on the right of an assignment"));
11069 default:
0963b4bd
MS
11070 internal_error (__FILE__, __LINE__,
11071 _("aggregate apparently mangled"));
52ce6436
PH
11072 }
11073
11074 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11075 *pos += oplen - 1;
11076 for (tem = 0; tem < nargs; tem += 1)
11077 ada_evaluate_subexp (NULL, exp, pos, noside);
11078 goto nosideret;
14f9c5c9
AS
11079 }
11080
11081nosideret:
22601c15 11082 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 11083}
14f9c5c9 11084\f
d2e4a39e 11085
4c4b4cd2 11086 /* Fixed point */
14f9c5c9
AS
11087
11088/* If TYPE encodes an Ada fixed-point type, return the suffix of the
11089 type name that encodes the 'small and 'delta information.
4c4b4cd2 11090 Otherwise, return NULL. */
14f9c5c9 11091
d2e4a39e 11092static const char *
ebf56fd3 11093fixed_type_info (struct type *type)
14f9c5c9 11094{
d2e4a39e 11095 const char *name = ada_type_name (type);
14f9c5c9
AS
11096 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11097
d2e4a39e
AS
11098 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11099 {
14f9c5c9 11100 const char *tail = strstr (name, "___XF_");
5b4ee69b 11101
14f9c5c9 11102 if (tail == NULL)
4c4b4cd2 11103 return NULL;
d2e4a39e 11104 else
4c4b4cd2 11105 return tail + 5;
14f9c5c9
AS
11106 }
11107 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11108 return fixed_type_info (TYPE_TARGET_TYPE (type));
11109 else
11110 return NULL;
11111}
11112
4c4b4cd2 11113/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
11114
11115int
ebf56fd3 11116ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
11117{
11118 return fixed_type_info (type) != NULL;
11119}
11120
4c4b4cd2
PH
11121/* Return non-zero iff TYPE represents a System.Address type. */
11122
11123int
11124ada_is_system_address_type (struct type *type)
11125{
11126 return (TYPE_NAME (type)
11127 && strcmp (TYPE_NAME (type), "system__address") == 0);
11128}
11129
14f9c5c9
AS
11130/* Assuming that TYPE is the representation of an Ada fixed-point
11131 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 11132 delta cannot be determined. */
14f9c5c9
AS
11133
11134DOUBLEST
ebf56fd3 11135ada_delta (struct type *type)
14f9c5c9
AS
11136{
11137 const char *encoding = fixed_type_info (type);
facc390f 11138 DOUBLEST num, den;
14f9c5c9 11139
facc390f
JB
11140 /* Strictly speaking, num and den are encoded as integer. However,
11141 they may not fit into a long, and they will have to be converted
11142 to DOUBLEST anyway. So scan them as DOUBLEST. */
11143 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11144 &num, &den) < 2)
14f9c5c9 11145 return -1.0;
d2e4a39e 11146 else
facc390f 11147 return num / den;
14f9c5c9
AS
11148}
11149
11150/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 11151 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
11152
11153static DOUBLEST
ebf56fd3 11154scaling_factor (struct type *type)
14f9c5c9
AS
11155{
11156 const char *encoding = fixed_type_info (type);
facc390f 11157 DOUBLEST num0, den0, num1, den1;
14f9c5c9 11158 int n;
d2e4a39e 11159
facc390f
JB
11160 /* Strictly speaking, num's and den's are encoded as integer. However,
11161 they may not fit into a long, and they will have to be converted
11162 to DOUBLEST anyway. So scan them as DOUBLEST. */
11163 n = sscanf (encoding,
11164 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11165 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11166 &num0, &den0, &num1, &den1);
14f9c5c9
AS
11167
11168 if (n < 2)
11169 return 1.0;
11170 else if (n == 4)
facc390f 11171 return num1 / den1;
d2e4a39e 11172 else
facc390f 11173 return num0 / den0;
14f9c5c9
AS
11174}
11175
11176
11177/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 11178 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
11179
11180DOUBLEST
ebf56fd3 11181ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 11182{
d2e4a39e 11183 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
11184}
11185
4c4b4cd2
PH
11186/* The representation of a fixed-point value of type TYPE
11187 corresponding to the value X. */
14f9c5c9
AS
11188
11189LONGEST
ebf56fd3 11190ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
11191{
11192 return (LONGEST) (x / scaling_factor (type) + 0.5);
11193}
11194
14f9c5c9 11195\f
d2e4a39e 11196
4c4b4cd2 11197 /* Range types */
14f9c5c9
AS
11198
11199/* Scan STR beginning at position K for a discriminant name, and
11200 return the value of that discriminant field of DVAL in *PX. If
11201 PNEW_K is not null, put the position of the character beyond the
11202 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11203 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11204
11205static int
07d8f827 11206scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
76a01679 11207 int *pnew_k)
14f9c5c9
AS
11208{
11209 static char *bound_buffer = NULL;
11210 static size_t bound_buffer_len = 0;
11211 char *bound;
11212 char *pend;
d2e4a39e 11213 struct value *bound_val;
14f9c5c9
AS
11214
11215 if (dval == NULL || str == NULL || str[k] == '\0')
11216 return 0;
11217
d2e4a39e 11218 pend = strstr (str + k, "__");
14f9c5c9
AS
11219 if (pend == NULL)
11220 {
d2e4a39e 11221 bound = str + k;
14f9c5c9
AS
11222 k += strlen (bound);
11223 }
d2e4a39e 11224 else
14f9c5c9 11225 {
d2e4a39e 11226 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
14f9c5c9 11227 bound = bound_buffer;
d2e4a39e
AS
11228 strncpy (bound_buffer, str + k, pend - (str + k));
11229 bound[pend - (str + k)] = '\0';
11230 k = pend - str;
14f9c5c9 11231 }
d2e4a39e 11232
df407dfe 11233 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11234 if (bound_val == NULL)
11235 return 0;
11236
11237 *px = value_as_long (bound_val);
11238 if (pnew_k != NULL)
11239 *pnew_k = k;
11240 return 1;
11241}
11242
11243/* Value of variable named NAME in the current environment. If
11244 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11245 otherwise causes an error with message ERR_MSG. */
11246
d2e4a39e
AS
11247static struct value *
11248get_var_value (char *name, char *err_msg)
14f9c5c9 11249{
4c4b4cd2 11250 struct ada_symbol_info *syms;
14f9c5c9
AS
11251 int nsyms;
11252
4c4b4cd2 11253 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
4eeaa230 11254 &syms);
14f9c5c9
AS
11255
11256 if (nsyms != 1)
11257 {
11258 if (err_msg == NULL)
4c4b4cd2 11259 return 0;
14f9c5c9 11260 else
8a3fe4f8 11261 error (("%s"), err_msg);
14f9c5c9
AS
11262 }
11263
4c4b4cd2 11264 return value_of_variable (syms[0].sym, syms[0].block);
14f9c5c9 11265}
d2e4a39e 11266
14f9c5c9 11267/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
11268 no such variable found, returns 0, and sets *FLAG to 0. If
11269 successful, sets *FLAG to 1. */
11270
14f9c5c9 11271LONGEST
4c4b4cd2 11272get_int_var_value (char *name, int *flag)
14f9c5c9 11273{
4c4b4cd2 11274 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11275
14f9c5c9
AS
11276 if (var_val == 0)
11277 {
11278 if (flag != NULL)
4c4b4cd2 11279 *flag = 0;
14f9c5c9
AS
11280 return 0;
11281 }
11282 else
11283 {
11284 if (flag != NULL)
4c4b4cd2 11285 *flag = 1;
14f9c5c9
AS
11286 return value_as_long (var_val);
11287 }
11288}
d2e4a39e 11289
14f9c5c9
AS
11290
11291/* Return a range type whose base type is that of the range type named
11292 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11293 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11294 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11295 corresponding range type from debug information; fall back to using it
11296 if symbol lookup fails. If a new type must be created, allocate it
11297 like ORIG_TYPE was. The bounds information, in general, is encoded
11298 in NAME, the base type given in the named range type. */
14f9c5c9 11299
d2e4a39e 11300static struct type *
28c85d6c 11301to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11302{
0d5cff50 11303 const char *name;
14f9c5c9 11304 struct type *base_type;
d2e4a39e 11305 char *subtype_info;
14f9c5c9 11306
28c85d6c
JB
11307 gdb_assert (raw_type != NULL);
11308 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 11309
1ce677a4 11310 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
11311 base_type = TYPE_TARGET_TYPE (raw_type);
11312 else
11313 base_type = raw_type;
11314
28c85d6c 11315 name = TYPE_NAME (raw_type);
14f9c5c9
AS
11316 subtype_info = strstr (name, "___XD");
11317 if (subtype_info == NULL)
690cc4eb 11318 {
43bbcdc2
PH
11319 LONGEST L = ada_discrete_type_low_bound (raw_type);
11320 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11321
690cc4eb
PH
11322 if (L < INT_MIN || U > INT_MAX)
11323 return raw_type;
11324 else
0c9c3474
SA
11325 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11326 L, U);
690cc4eb 11327 }
14f9c5c9
AS
11328 else
11329 {
11330 static char *name_buf = NULL;
11331 static size_t name_len = 0;
11332 int prefix_len = subtype_info - name;
11333 LONGEST L, U;
11334 struct type *type;
11335 char *bounds_str;
11336 int n;
11337
11338 GROW_VECT (name_buf, name_len, prefix_len + 5);
11339 strncpy (name_buf, name, prefix_len);
11340 name_buf[prefix_len] = '\0';
11341
11342 subtype_info += 5;
11343 bounds_str = strchr (subtype_info, '_');
11344 n = 1;
11345
d2e4a39e 11346 if (*subtype_info == 'L')
4c4b4cd2
PH
11347 {
11348 if (!ada_scan_number (bounds_str, n, &L, &n)
11349 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11350 return raw_type;
11351 if (bounds_str[n] == '_')
11352 n += 2;
0963b4bd 11353 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11354 n += 1;
11355 subtype_info += 1;
11356 }
d2e4a39e 11357 else
4c4b4cd2
PH
11358 {
11359 int ok;
5b4ee69b 11360
4c4b4cd2
PH
11361 strcpy (name_buf + prefix_len, "___L");
11362 L = get_int_var_value (name_buf, &ok);
11363 if (!ok)
11364 {
323e0a4a 11365 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11366 L = 1;
11367 }
11368 }
14f9c5c9 11369
d2e4a39e 11370 if (*subtype_info == 'U')
4c4b4cd2
PH
11371 {
11372 if (!ada_scan_number (bounds_str, n, &U, &n)
11373 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11374 return raw_type;
11375 }
d2e4a39e 11376 else
4c4b4cd2
PH
11377 {
11378 int ok;
5b4ee69b 11379
4c4b4cd2
PH
11380 strcpy (name_buf + prefix_len, "___U");
11381 U = get_int_var_value (name_buf, &ok);
11382 if (!ok)
11383 {
323e0a4a 11384 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11385 U = L;
11386 }
11387 }
14f9c5c9 11388
0c9c3474
SA
11389 type = create_static_range_type (alloc_type_copy (raw_type),
11390 base_type, L, U);
d2e4a39e 11391 TYPE_NAME (type) = name;
14f9c5c9
AS
11392 return type;
11393 }
11394}
11395
4c4b4cd2
PH
11396/* True iff NAME is the name of a range type. */
11397
14f9c5c9 11398int
d2e4a39e 11399ada_is_range_type_name (const char *name)
14f9c5c9
AS
11400{
11401 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11402}
14f9c5c9 11403\f
d2e4a39e 11404
4c4b4cd2
PH
11405 /* Modular types */
11406
11407/* True iff TYPE is an Ada modular type. */
14f9c5c9 11408
14f9c5c9 11409int
d2e4a39e 11410ada_is_modular_type (struct type *type)
14f9c5c9 11411{
18af8284 11412 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
11413
11414 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 11415 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 11416 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11417}
11418
4c4b4cd2
PH
11419/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11420
61ee279c 11421ULONGEST
0056e4d5 11422ada_modulus (struct type *type)
14f9c5c9 11423{
43bbcdc2 11424 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11425}
d2e4a39e 11426\f
f7f9143b
JB
11427
11428/* Ada exception catchpoint support:
11429 ---------------------------------
11430
11431 We support 3 kinds of exception catchpoints:
11432 . catchpoints on Ada exceptions
11433 . catchpoints on unhandled Ada exceptions
11434 . catchpoints on failed assertions
11435
11436 Exceptions raised during failed assertions, or unhandled exceptions
11437 could perfectly be caught with the general catchpoint on Ada exceptions.
11438 However, we can easily differentiate these two special cases, and having
11439 the option to distinguish these two cases from the rest can be useful
11440 to zero-in on certain situations.
11441
11442 Exception catchpoints are a specialized form of breakpoint,
11443 since they rely on inserting breakpoints inside known routines
11444 of the GNAT runtime. The implementation therefore uses a standard
11445 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11446 of breakpoint_ops.
11447
0259addd
JB
11448 Support in the runtime for exception catchpoints have been changed
11449 a few times already, and these changes affect the implementation
11450 of these catchpoints. In order to be able to support several
11451 variants of the runtime, we use a sniffer that will determine
28010a5d 11452 the runtime variant used by the program being debugged. */
f7f9143b 11453
82eacd52
JB
11454/* Ada's standard exceptions.
11455
11456 The Ada 83 standard also defined Numeric_Error. But there so many
11457 situations where it was unclear from the Ada 83 Reference Manual
11458 (RM) whether Constraint_Error or Numeric_Error should be raised,
11459 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11460 Interpretation saying that anytime the RM says that Numeric_Error
11461 should be raised, the implementation may raise Constraint_Error.
11462 Ada 95 went one step further and pretty much removed Numeric_Error
11463 from the list of standard exceptions (it made it a renaming of
11464 Constraint_Error, to help preserve compatibility when compiling
11465 an Ada83 compiler). As such, we do not include Numeric_Error from
11466 this list of standard exceptions. */
3d0b0fa3
JB
11467
11468static char *standard_exc[] = {
11469 "constraint_error",
11470 "program_error",
11471 "storage_error",
11472 "tasking_error"
11473};
11474
0259addd
JB
11475typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11476
11477/* A structure that describes how to support exception catchpoints
11478 for a given executable. */
11479
11480struct exception_support_info
11481{
11482 /* The name of the symbol to break on in order to insert
11483 a catchpoint on exceptions. */
11484 const char *catch_exception_sym;
11485
11486 /* The name of the symbol to break on in order to insert
11487 a catchpoint on unhandled exceptions. */
11488 const char *catch_exception_unhandled_sym;
11489
11490 /* The name of the symbol to break on in order to insert
11491 a catchpoint on failed assertions. */
11492 const char *catch_assert_sym;
11493
11494 /* Assuming that the inferior just triggered an unhandled exception
11495 catchpoint, this function is responsible for returning the address
11496 in inferior memory where the name of that exception is stored.
11497 Return zero if the address could not be computed. */
11498 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11499};
11500
11501static CORE_ADDR ada_unhandled_exception_name_addr (void);
11502static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11503
11504/* The following exception support info structure describes how to
11505 implement exception catchpoints with the latest version of the
11506 Ada runtime (as of 2007-03-06). */
11507
11508static const struct exception_support_info default_exception_support_info =
11509{
11510 "__gnat_debug_raise_exception", /* catch_exception_sym */
11511 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11512 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11513 ada_unhandled_exception_name_addr
11514};
11515
11516/* The following exception support info structure describes how to
11517 implement exception catchpoints with a slightly older version
11518 of the Ada runtime. */
11519
11520static const struct exception_support_info exception_support_info_fallback =
11521{
11522 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11523 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11524 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11525 ada_unhandled_exception_name_addr_from_raise
11526};
11527
f17011e0
JB
11528/* Return nonzero if we can detect the exception support routines
11529 described in EINFO.
11530
11531 This function errors out if an abnormal situation is detected
11532 (for instance, if we find the exception support routines, but
11533 that support is found to be incomplete). */
11534
11535static int
11536ada_has_this_exception_support (const struct exception_support_info *einfo)
11537{
11538 struct symbol *sym;
11539
11540 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11541 that should be compiled with debugging information. As a result, we
11542 expect to find that symbol in the symtabs. */
11543
11544 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11545 if (sym == NULL)
a6af7abe
JB
11546 {
11547 /* Perhaps we did not find our symbol because the Ada runtime was
11548 compiled without debugging info, or simply stripped of it.
11549 It happens on some GNU/Linux distributions for instance, where
11550 users have to install a separate debug package in order to get
11551 the runtime's debugging info. In that situation, let the user
11552 know why we cannot insert an Ada exception catchpoint.
11553
11554 Note: Just for the purpose of inserting our Ada exception
11555 catchpoint, we could rely purely on the associated minimal symbol.
11556 But we would be operating in degraded mode anyway, since we are
11557 still lacking the debugging info needed later on to extract
11558 the name of the exception being raised (this name is printed in
11559 the catchpoint message, and is also used when trying to catch
11560 a specific exception). We do not handle this case for now. */
3b7344d5 11561 struct bound_minimal_symbol msym
1c8e84b0
JB
11562 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11563
3b7344d5 11564 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11565 error (_("Your Ada runtime appears to be missing some debugging "
11566 "information.\nCannot insert Ada exception catchpoint "
11567 "in this configuration."));
11568
11569 return 0;
11570 }
f17011e0
JB
11571
11572 /* Make sure that the symbol we found corresponds to a function. */
11573
11574 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11575 error (_("Symbol \"%s\" is not a function (class = %d)"),
11576 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11577
11578 return 1;
11579}
11580
0259addd
JB
11581/* Inspect the Ada runtime and determine which exception info structure
11582 should be used to provide support for exception catchpoints.
11583
3eecfa55
JB
11584 This function will always set the per-inferior exception_info,
11585 or raise an error. */
0259addd
JB
11586
11587static void
11588ada_exception_support_info_sniffer (void)
11589{
3eecfa55 11590 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11591
11592 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11593 if (data->exception_info != NULL)
0259addd
JB
11594 return;
11595
11596 /* Check the latest (default) exception support info. */
f17011e0 11597 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11598 {
3eecfa55 11599 data->exception_info = &default_exception_support_info;
0259addd
JB
11600 return;
11601 }
11602
11603 /* Try our fallback exception suport info. */
f17011e0 11604 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11605 {
3eecfa55 11606 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11607 return;
11608 }
11609
11610 /* Sometimes, it is normal for us to not be able to find the routine
11611 we are looking for. This happens when the program is linked with
11612 the shared version of the GNAT runtime, and the program has not been
11613 started yet. Inform the user of these two possible causes if
11614 applicable. */
11615
ccefe4c4 11616 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11617 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11618
11619 /* If the symbol does not exist, then check that the program is
11620 already started, to make sure that shared libraries have been
11621 loaded. If it is not started, this may mean that the symbol is
11622 in a shared library. */
11623
11624 if (ptid_get_pid (inferior_ptid) == 0)
11625 error (_("Unable to insert catchpoint. Try to start the program first."));
11626
11627 /* At this point, we know that we are debugging an Ada program and
11628 that the inferior has been started, but we still are not able to
0963b4bd 11629 find the run-time symbols. That can mean that we are in
0259addd
JB
11630 configurable run time mode, or that a-except as been optimized
11631 out by the linker... In any case, at this point it is not worth
11632 supporting this feature. */
11633
7dda8cff 11634 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11635}
11636
f7f9143b
JB
11637/* True iff FRAME is very likely to be that of a function that is
11638 part of the runtime system. This is all very heuristic, but is
11639 intended to be used as advice as to what frames are uninteresting
11640 to most users. */
11641
11642static int
11643is_known_support_routine (struct frame_info *frame)
11644{
4ed6b5be 11645 struct symtab_and_line sal;
55b87a52 11646 char *func_name;
692465f1 11647 enum language func_lang;
f7f9143b 11648 int i;
f35a17b5 11649 const char *fullname;
f7f9143b 11650
4ed6b5be
JB
11651 /* If this code does not have any debugging information (no symtab),
11652 This cannot be any user code. */
f7f9143b 11653
4ed6b5be 11654 find_frame_sal (frame, &sal);
f7f9143b
JB
11655 if (sal.symtab == NULL)
11656 return 1;
11657
4ed6b5be
JB
11658 /* If there is a symtab, but the associated source file cannot be
11659 located, then assume this is not user code: Selecting a frame
11660 for which we cannot display the code would not be very helpful
11661 for the user. This should also take care of case such as VxWorks
11662 where the kernel has some debugging info provided for a few units. */
f7f9143b 11663
f35a17b5
JK
11664 fullname = symtab_to_fullname (sal.symtab);
11665 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11666 return 1;
11667
4ed6b5be
JB
11668 /* Check the unit filename againt the Ada runtime file naming.
11669 We also check the name of the objfile against the name of some
11670 known system libraries that sometimes come with debugging info
11671 too. */
11672
f7f9143b
JB
11673 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11674 {
11675 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11676 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 11677 return 1;
eb822aa6
DE
11678 if (SYMTAB_OBJFILE (sal.symtab) != NULL
11679 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
4ed6b5be 11680 return 1;
f7f9143b
JB
11681 }
11682
4ed6b5be 11683 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11684
e9e07ba6 11685 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
11686 if (func_name == NULL)
11687 return 1;
11688
11689 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11690 {
11691 re_comp (known_auxiliary_function_name_patterns[i]);
11692 if (re_exec (func_name))
55b87a52
KS
11693 {
11694 xfree (func_name);
11695 return 1;
11696 }
f7f9143b
JB
11697 }
11698
55b87a52 11699 xfree (func_name);
f7f9143b
JB
11700 return 0;
11701}
11702
11703/* Find the first frame that contains debugging information and that is not
11704 part of the Ada run-time, starting from FI and moving upward. */
11705
0ef643c8 11706void
f7f9143b
JB
11707ada_find_printable_frame (struct frame_info *fi)
11708{
11709 for (; fi != NULL; fi = get_prev_frame (fi))
11710 {
11711 if (!is_known_support_routine (fi))
11712 {
11713 select_frame (fi);
11714 break;
11715 }
11716 }
11717
11718}
11719
11720/* Assuming that the inferior just triggered an unhandled exception
11721 catchpoint, return the address in inferior memory where the name
11722 of the exception is stored.
11723
11724 Return zero if the address could not be computed. */
11725
11726static CORE_ADDR
11727ada_unhandled_exception_name_addr (void)
0259addd
JB
11728{
11729 return parse_and_eval_address ("e.full_name");
11730}
11731
11732/* Same as ada_unhandled_exception_name_addr, except that this function
11733 should be used when the inferior uses an older version of the runtime,
11734 where the exception name needs to be extracted from a specific frame
11735 several frames up in the callstack. */
11736
11737static CORE_ADDR
11738ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11739{
11740 int frame_level;
11741 struct frame_info *fi;
3eecfa55 11742 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
55b87a52 11743 struct cleanup *old_chain;
f7f9143b
JB
11744
11745 /* To determine the name of this exception, we need to select
11746 the frame corresponding to RAISE_SYM_NAME. This frame is
11747 at least 3 levels up, so we simply skip the first 3 frames
11748 without checking the name of their associated function. */
11749 fi = get_current_frame ();
11750 for (frame_level = 0; frame_level < 3; frame_level += 1)
11751 if (fi != NULL)
11752 fi = get_prev_frame (fi);
11753
55b87a52 11754 old_chain = make_cleanup (null_cleanup, NULL);
f7f9143b
JB
11755 while (fi != NULL)
11756 {
55b87a52 11757 char *func_name;
692465f1
JB
11758 enum language func_lang;
11759
e9e07ba6 11760 find_frame_funname (fi, &func_name, &func_lang, NULL);
55b87a52
KS
11761 if (func_name != NULL)
11762 {
11763 make_cleanup (xfree, func_name);
11764
11765 if (strcmp (func_name,
11766 data->exception_info->catch_exception_sym) == 0)
11767 break; /* We found the frame we were looking for... */
11768 fi = get_prev_frame (fi);
11769 }
f7f9143b 11770 }
55b87a52 11771 do_cleanups (old_chain);
f7f9143b
JB
11772
11773 if (fi == NULL)
11774 return 0;
11775
11776 select_frame (fi);
11777 return parse_and_eval_address ("id.full_name");
11778}
11779
11780/* Assuming the inferior just triggered an Ada exception catchpoint
11781 (of any type), return the address in inferior memory where the name
11782 of the exception is stored, if applicable.
11783
11784 Return zero if the address could not be computed, or if not relevant. */
11785
11786static CORE_ADDR
761269c8 11787ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11788 struct breakpoint *b)
11789{
3eecfa55
JB
11790 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11791
f7f9143b
JB
11792 switch (ex)
11793 {
761269c8 11794 case ada_catch_exception:
f7f9143b
JB
11795 return (parse_and_eval_address ("e.full_name"));
11796 break;
11797
761269c8 11798 case ada_catch_exception_unhandled:
3eecfa55 11799 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
11800 break;
11801
761269c8 11802 case ada_catch_assert:
f7f9143b
JB
11803 return 0; /* Exception name is not relevant in this case. */
11804 break;
11805
11806 default:
11807 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11808 break;
11809 }
11810
11811 return 0; /* Should never be reached. */
11812}
11813
11814/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11815 any error that ada_exception_name_addr_1 might cause to be thrown.
11816 When an error is intercepted, a warning with the error message is printed,
11817 and zero is returned. */
11818
11819static CORE_ADDR
761269c8 11820ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11821 struct breakpoint *b)
11822{
bfd189b1 11823 volatile struct gdb_exception e;
f7f9143b
JB
11824 CORE_ADDR result = 0;
11825
11826 TRY_CATCH (e, RETURN_MASK_ERROR)
11827 {
11828 result = ada_exception_name_addr_1 (ex, b);
11829 }
11830
11831 if (e.reason < 0)
11832 {
11833 warning (_("failed to get exception name: %s"), e.message);
11834 return 0;
11835 }
11836
11837 return result;
11838}
11839
28010a5d
PA
11840static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11841
11842/* Ada catchpoints.
11843
11844 In the case of catchpoints on Ada exceptions, the catchpoint will
11845 stop the target on every exception the program throws. When a user
11846 specifies the name of a specific exception, we translate this
11847 request into a condition expression (in text form), and then parse
11848 it into an expression stored in each of the catchpoint's locations.
11849 We then use this condition to check whether the exception that was
11850 raised is the one the user is interested in. If not, then the
11851 target is resumed again. We store the name of the requested
11852 exception, in order to be able to re-set the condition expression
11853 when symbols change. */
11854
11855/* An instance of this type is used to represent an Ada catchpoint
11856 breakpoint location. It includes a "struct bp_location" as a kind
11857 of base class; users downcast to "struct bp_location *" when
11858 needed. */
11859
11860struct ada_catchpoint_location
11861{
11862 /* The base class. */
11863 struct bp_location base;
11864
11865 /* The condition that checks whether the exception that was raised
11866 is the specific exception the user specified on catchpoint
11867 creation. */
11868 struct expression *excep_cond_expr;
11869};
11870
11871/* Implement the DTOR method in the bp_location_ops structure for all
11872 Ada exception catchpoint kinds. */
11873
11874static void
11875ada_catchpoint_location_dtor (struct bp_location *bl)
11876{
11877 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11878
11879 xfree (al->excep_cond_expr);
11880}
11881
11882/* The vtable to be used in Ada catchpoint locations. */
11883
11884static const struct bp_location_ops ada_catchpoint_location_ops =
11885{
11886 ada_catchpoint_location_dtor
11887};
11888
11889/* An instance of this type is used to represent an Ada catchpoint.
11890 It includes a "struct breakpoint" as a kind of base class; users
11891 downcast to "struct breakpoint *" when needed. */
11892
11893struct ada_catchpoint
11894{
11895 /* The base class. */
11896 struct breakpoint base;
11897
11898 /* The name of the specific exception the user specified. */
11899 char *excep_string;
11900};
11901
11902/* Parse the exception condition string in the context of each of the
11903 catchpoint's locations, and store them for later evaluation. */
11904
11905static void
11906create_excep_cond_exprs (struct ada_catchpoint *c)
11907{
11908 struct cleanup *old_chain;
11909 struct bp_location *bl;
11910 char *cond_string;
11911
11912 /* Nothing to do if there's no specific exception to catch. */
11913 if (c->excep_string == NULL)
11914 return;
11915
11916 /* Same if there are no locations... */
11917 if (c->base.loc == NULL)
11918 return;
11919
11920 /* Compute the condition expression in text form, from the specific
11921 expection we want to catch. */
11922 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11923 old_chain = make_cleanup (xfree, cond_string);
11924
11925 /* Iterate over all the catchpoint's locations, and parse an
11926 expression for each. */
11927 for (bl = c->base.loc; bl != NULL; bl = bl->next)
11928 {
11929 struct ada_catchpoint_location *ada_loc
11930 = (struct ada_catchpoint_location *) bl;
11931 struct expression *exp = NULL;
11932
11933 if (!bl->shlib_disabled)
11934 {
11935 volatile struct gdb_exception e;
bbc13ae3 11936 const char *s;
28010a5d
PA
11937
11938 s = cond_string;
11939 TRY_CATCH (e, RETURN_MASK_ERROR)
11940 {
1bb9788d
TT
11941 exp = parse_exp_1 (&s, bl->address,
11942 block_for_pc (bl->address), 0);
28010a5d
PA
11943 }
11944 if (e.reason < 0)
849f2b52
JB
11945 {
11946 warning (_("failed to reevaluate internal exception condition "
11947 "for catchpoint %d: %s"),
11948 c->base.number, e.message);
11949 /* There is a bug in GCC on sparc-solaris when building with
11950 optimization which causes EXP to change unexpectedly
11951 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11952 The problem should be fixed starting with GCC 4.9.
11953 In the meantime, work around it by forcing EXP back
11954 to NULL. */
11955 exp = NULL;
11956 }
28010a5d
PA
11957 }
11958
11959 ada_loc->excep_cond_expr = exp;
11960 }
11961
11962 do_cleanups (old_chain);
11963}
11964
11965/* Implement the DTOR method in the breakpoint_ops structure for all
11966 exception catchpoint kinds. */
11967
11968static void
761269c8 11969dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11970{
11971 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11972
11973 xfree (c->excep_string);
348d480f 11974
2060206e 11975 bkpt_breakpoint_ops.dtor (b);
28010a5d
PA
11976}
11977
11978/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11979 structure for all exception catchpoint kinds. */
11980
11981static struct bp_location *
761269c8 11982allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
11983 struct breakpoint *self)
11984{
11985 struct ada_catchpoint_location *loc;
11986
11987 loc = XNEW (struct ada_catchpoint_location);
11988 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11989 loc->excep_cond_expr = NULL;
11990 return &loc->base;
11991}
11992
11993/* Implement the RE_SET method in the breakpoint_ops structure for all
11994 exception catchpoint kinds. */
11995
11996static void
761269c8 11997re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11998{
11999 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12000
12001 /* Call the base class's method. This updates the catchpoint's
12002 locations. */
2060206e 12003 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12004
12005 /* Reparse the exception conditional expressions. One for each
12006 location. */
12007 create_excep_cond_exprs (c);
12008}
12009
12010/* Returns true if we should stop for this breakpoint hit. If the
12011 user specified a specific exception, we only want to cause a stop
12012 if the program thrown that exception. */
12013
12014static int
12015should_stop_exception (const struct bp_location *bl)
12016{
12017 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12018 const struct ada_catchpoint_location *ada_loc
12019 = (const struct ada_catchpoint_location *) bl;
12020 volatile struct gdb_exception ex;
12021 int stop;
12022
12023 /* With no specific exception, should always stop. */
12024 if (c->excep_string == NULL)
12025 return 1;
12026
12027 if (ada_loc->excep_cond_expr == NULL)
12028 {
12029 /* We will have a NULL expression if back when we were creating
12030 the expressions, this location's had failed to parse. */
12031 return 1;
12032 }
12033
12034 stop = 1;
12035 TRY_CATCH (ex, RETURN_MASK_ALL)
12036 {
12037 struct value *mark;
12038
12039 mark = value_mark ();
12040 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12041 value_free_to_mark (mark);
12042 }
12043 if (ex.reason < 0)
12044 exception_fprintf (gdb_stderr, ex,
12045 _("Error in testing exception condition:\n"));
12046 return stop;
12047}
12048
12049/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12050 for all exception catchpoint kinds. */
12051
12052static void
761269c8 12053check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
12054{
12055 bs->stop = should_stop_exception (bs->bp_location_at);
12056}
12057
f7f9143b
JB
12058/* Implement the PRINT_IT method in the breakpoint_ops structure
12059 for all exception catchpoint kinds. */
12060
12061static enum print_stop_action
761269c8 12062print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 12063{
79a45e25 12064 struct ui_out *uiout = current_uiout;
348d480f
PA
12065 struct breakpoint *b = bs->breakpoint_at;
12066
956a9fb9 12067 annotate_catchpoint (b->number);
f7f9143b 12068
956a9fb9 12069 if (ui_out_is_mi_like_p (uiout))
f7f9143b 12070 {
956a9fb9
JB
12071 ui_out_field_string (uiout, "reason",
12072 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12073 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
f7f9143b
JB
12074 }
12075
00eb2c4a
JB
12076 ui_out_text (uiout,
12077 b->disposition == disp_del ? "\nTemporary catchpoint "
12078 : "\nCatchpoint ");
956a9fb9
JB
12079 ui_out_field_int (uiout, "bkptno", b->number);
12080 ui_out_text (uiout, ", ");
f7f9143b 12081
f7f9143b
JB
12082 switch (ex)
12083 {
761269c8
JB
12084 case ada_catch_exception:
12085 case ada_catch_exception_unhandled:
956a9fb9
JB
12086 {
12087 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12088 char exception_name[256];
12089
12090 if (addr != 0)
12091 {
c714b426
PA
12092 read_memory (addr, (gdb_byte *) exception_name,
12093 sizeof (exception_name) - 1);
956a9fb9
JB
12094 exception_name [sizeof (exception_name) - 1] = '\0';
12095 }
12096 else
12097 {
12098 /* For some reason, we were unable to read the exception
12099 name. This could happen if the Runtime was compiled
12100 without debugging info, for instance. In that case,
12101 just replace the exception name by the generic string
12102 "exception" - it will read as "an exception" in the
12103 notification we are about to print. */
967cff16 12104 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12105 }
12106 /* In the case of unhandled exception breakpoints, we print
12107 the exception name as "unhandled EXCEPTION_NAME", to make
12108 it clearer to the user which kind of catchpoint just got
12109 hit. We used ui_out_text to make sure that this extra
12110 info does not pollute the exception name in the MI case. */
761269c8 12111 if (ex == ada_catch_exception_unhandled)
956a9fb9
JB
12112 ui_out_text (uiout, "unhandled ");
12113 ui_out_field_string (uiout, "exception-name", exception_name);
12114 }
12115 break;
761269c8 12116 case ada_catch_assert:
956a9fb9
JB
12117 /* In this case, the name of the exception is not really
12118 important. Just print "failed assertion" to make it clearer
12119 that his program just hit an assertion-failure catchpoint.
12120 We used ui_out_text because this info does not belong in
12121 the MI output. */
12122 ui_out_text (uiout, "failed assertion");
12123 break;
f7f9143b 12124 }
956a9fb9
JB
12125 ui_out_text (uiout, " at ");
12126 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12127
12128 return PRINT_SRC_AND_LOC;
12129}
12130
12131/* Implement the PRINT_ONE method in the breakpoint_ops structure
12132 for all exception catchpoint kinds. */
12133
12134static void
761269c8 12135print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 12136 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12137{
79a45e25 12138 struct ui_out *uiout = current_uiout;
28010a5d 12139 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12140 struct value_print_options opts;
12141
12142 get_user_print_options (&opts);
12143 if (opts.addressprint)
f7f9143b
JB
12144 {
12145 annotate_field (4);
5af949e3 12146 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
12147 }
12148
12149 annotate_field (5);
a6d9a66e 12150 *last_loc = b->loc;
f7f9143b
JB
12151 switch (ex)
12152 {
761269c8 12153 case ada_catch_exception:
28010a5d 12154 if (c->excep_string != NULL)
f7f9143b 12155 {
28010a5d
PA
12156 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12157
f7f9143b
JB
12158 ui_out_field_string (uiout, "what", msg);
12159 xfree (msg);
12160 }
12161 else
12162 ui_out_field_string (uiout, "what", "all Ada exceptions");
12163
12164 break;
12165
761269c8 12166 case ada_catch_exception_unhandled:
f7f9143b
JB
12167 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12168 break;
12169
761269c8 12170 case ada_catch_assert:
f7f9143b
JB
12171 ui_out_field_string (uiout, "what", "failed Ada assertions");
12172 break;
12173
12174 default:
12175 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12176 break;
12177 }
12178}
12179
12180/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12181 for all exception catchpoint kinds. */
12182
12183static void
761269c8 12184print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12185 struct breakpoint *b)
12186{
28010a5d 12187 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12188 struct ui_out *uiout = current_uiout;
28010a5d 12189
00eb2c4a
JB
12190 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12191 : _("Catchpoint "));
12192 ui_out_field_int (uiout, "bkptno", b->number);
12193 ui_out_text (uiout, ": ");
12194
f7f9143b
JB
12195 switch (ex)
12196 {
761269c8 12197 case ada_catch_exception:
28010a5d 12198 if (c->excep_string != NULL)
00eb2c4a
JB
12199 {
12200 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12201 struct cleanup *old_chain = make_cleanup (xfree, info);
12202
12203 ui_out_text (uiout, info);
12204 do_cleanups (old_chain);
12205 }
f7f9143b 12206 else
00eb2c4a 12207 ui_out_text (uiout, _("all Ada exceptions"));
f7f9143b
JB
12208 break;
12209
761269c8 12210 case ada_catch_exception_unhandled:
00eb2c4a 12211 ui_out_text (uiout, _("unhandled Ada exceptions"));
f7f9143b
JB
12212 break;
12213
761269c8 12214 case ada_catch_assert:
00eb2c4a 12215 ui_out_text (uiout, _("failed Ada assertions"));
f7f9143b
JB
12216 break;
12217
12218 default:
12219 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12220 break;
12221 }
12222}
12223
6149aea9
PA
12224/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12225 for all exception catchpoint kinds. */
12226
12227static void
761269c8 12228print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
12229 struct breakpoint *b, struct ui_file *fp)
12230{
28010a5d
PA
12231 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12232
6149aea9
PA
12233 switch (ex)
12234 {
761269c8 12235 case ada_catch_exception:
6149aea9 12236 fprintf_filtered (fp, "catch exception");
28010a5d
PA
12237 if (c->excep_string != NULL)
12238 fprintf_filtered (fp, " %s", c->excep_string);
6149aea9
PA
12239 break;
12240
761269c8 12241 case ada_catch_exception_unhandled:
78076abc 12242 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12243 break;
12244
761269c8 12245 case ada_catch_assert:
6149aea9
PA
12246 fprintf_filtered (fp, "catch assert");
12247 break;
12248
12249 default:
12250 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12251 }
d9b3f62e 12252 print_recreate_thread (b, fp);
6149aea9
PA
12253}
12254
f7f9143b
JB
12255/* Virtual table for "catch exception" breakpoints. */
12256
28010a5d
PA
12257static void
12258dtor_catch_exception (struct breakpoint *b)
12259{
761269c8 12260 dtor_exception (ada_catch_exception, b);
28010a5d
PA
12261}
12262
12263static struct bp_location *
12264allocate_location_catch_exception (struct breakpoint *self)
12265{
761269c8 12266 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
12267}
12268
12269static void
12270re_set_catch_exception (struct breakpoint *b)
12271{
761269c8 12272 re_set_exception (ada_catch_exception, b);
28010a5d
PA
12273}
12274
12275static void
12276check_status_catch_exception (bpstat bs)
12277{
761269c8 12278 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
12279}
12280
f7f9143b 12281static enum print_stop_action
348d480f 12282print_it_catch_exception (bpstat bs)
f7f9143b 12283{
761269c8 12284 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
12285}
12286
12287static void
a6d9a66e 12288print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12289{
761269c8 12290 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
12291}
12292
12293static void
12294print_mention_catch_exception (struct breakpoint *b)
12295{
761269c8 12296 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
12297}
12298
6149aea9
PA
12299static void
12300print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12301{
761269c8 12302 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
12303}
12304
2060206e 12305static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
12306
12307/* Virtual table for "catch exception unhandled" breakpoints. */
12308
28010a5d
PA
12309static void
12310dtor_catch_exception_unhandled (struct breakpoint *b)
12311{
761269c8 12312 dtor_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12313}
12314
12315static struct bp_location *
12316allocate_location_catch_exception_unhandled (struct breakpoint *self)
12317{
761269c8 12318 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
12319}
12320
12321static void
12322re_set_catch_exception_unhandled (struct breakpoint *b)
12323{
761269c8 12324 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12325}
12326
12327static void
12328check_status_catch_exception_unhandled (bpstat bs)
12329{
761269c8 12330 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
12331}
12332
f7f9143b 12333static enum print_stop_action
348d480f 12334print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 12335{
761269c8 12336 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
12337}
12338
12339static void
a6d9a66e
UW
12340print_one_catch_exception_unhandled (struct breakpoint *b,
12341 struct bp_location **last_loc)
f7f9143b 12342{
761269c8 12343 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
12344}
12345
12346static void
12347print_mention_catch_exception_unhandled (struct breakpoint *b)
12348{
761269c8 12349 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
12350}
12351
6149aea9
PA
12352static void
12353print_recreate_catch_exception_unhandled (struct breakpoint *b,
12354 struct ui_file *fp)
12355{
761269c8 12356 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
12357}
12358
2060206e 12359static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
12360
12361/* Virtual table for "catch assert" breakpoints. */
12362
28010a5d
PA
12363static void
12364dtor_catch_assert (struct breakpoint *b)
12365{
761269c8 12366 dtor_exception (ada_catch_assert, b);
28010a5d
PA
12367}
12368
12369static struct bp_location *
12370allocate_location_catch_assert (struct breakpoint *self)
12371{
761269c8 12372 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
12373}
12374
12375static void
12376re_set_catch_assert (struct breakpoint *b)
12377{
761269c8 12378 re_set_exception (ada_catch_assert, b);
28010a5d
PA
12379}
12380
12381static void
12382check_status_catch_assert (bpstat bs)
12383{
761269c8 12384 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
12385}
12386
f7f9143b 12387static enum print_stop_action
348d480f 12388print_it_catch_assert (bpstat bs)
f7f9143b 12389{
761269c8 12390 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
12391}
12392
12393static void
a6d9a66e 12394print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12395{
761269c8 12396 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
12397}
12398
12399static void
12400print_mention_catch_assert (struct breakpoint *b)
12401{
761269c8 12402 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
12403}
12404
6149aea9
PA
12405static void
12406print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12407{
761269c8 12408 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
12409}
12410
2060206e 12411static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 12412
f7f9143b
JB
12413/* Return a newly allocated copy of the first space-separated token
12414 in ARGSP, and then adjust ARGSP to point immediately after that
12415 token.
12416
12417 Return NULL if ARGPS does not contain any more tokens. */
12418
12419static char *
12420ada_get_next_arg (char **argsp)
12421{
12422 char *args = *argsp;
12423 char *end;
12424 char *result;
12425
0fcd72ba 12426 args = skip_spaces (args);
f7f9143b
JB
12427 if (args[0] == '\0')
12428 return NULL; /* No more arguments. */
12429
12430 /* Find the end of the current argument. */
12431
0fcd72ba 12432 end = skip_to_space (args);
f7f9143b
JB
12433
12434 /* Adjust ARGSP to point to the start of the next argument. */
12435
12436 *argsp = end;
12437
12438 /* Make a copy of the current argument and return it. */
12439
12440 result = xmalloc (end - args + 1);
12441 strncpy (result, args, end - args);
12442 result[end - args] = '\0';
12443
12444 return result;
12445}
12446
12447/* Split the arguments specified in a "catch exception" command.
12448 Set EX to the appropriate catchpoint type.
28010a5d 12449 Set EXCEP_STRING to the name of the specific exception if
5845583d
JB
12450 specified by the user.
12451 If a condition is found at the end of the arguments, the condition
12452 expression is stored in COND_STRING (memory must be deallocated
12453 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12454
12455static void
12456catch_ada_exception_command_split (char *args,
761269c8 12457 enum ada_exception_catchpoint_kind *ex,
5845583d
JB
12458 char **excep_string,
12459 char **cond_string)
f7f9143b
JB
12460{
12461 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12462 char *exception_name;
5845583d 12463 char *cond = NULL;
f7f9143b
JB
12464
12465 exception_name = ada_get_next_arg (&args);
5845583d
JB
12466 if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12467 {
12468 /* This is not an exception name; this is the start of a condition
12469 expression for a catchpoint on all exceptions. So, "un-get"
12470 this token, and set exception_name to NULL. */
12471 xfree (exception_name);
12472 exception_name = NULL;
12473 args -= 2;
12474 }
f7f9143b
JB
12475 make_cleanup (xfree, exception_name);
12476
5845583d 12477 /* Check to see if we have a condition. */
f7f9143b 12478
0fcd72ba 12479 args = skip_spaces (args);
5845583d
JB
12480 if (strncmp (args, "if", 2) == 0
12481 && (isspace (args[2]) || args[2] == '\0'))
12482 {
12483 args += 2;
12484 args = skip_spaces (args);
12485
12486 if (args[0] == '\0')
12487 error (_("Condition missing after `if' keyword"));
12488 cond = xstrdup (args);
12489 make_cleanup (xfree, cond);
12490
12491 args += strlen (args);
12492 }
12493
12494 /* Check that we do not have any more arguments. Anything else
12495 is unexpected. */
f7f9143b
JB
12496
12497 if (args[0] != '\0')
12498 error (_("Junk at end of expression"));
12499
12500 discard_cleanups (old_chain);
12501
12502 if (exception_name == NULL)
12503 {
12504 /* Catch all exceptions. */
761269c8 12505 *ex = ada_catch_exception;
28010a5d 12506 *excep_string = NULL;
f7f9143b
JB
12507 }
12508 else if (strcmp (exception_name, "unhandled") == 0)
12509 {
12510 /* Catch unhandled exceptions. */
761269c8 12511 *ex = ada_catch_exception_unhandled;
28010a5d 12512 *excep_string = NULL;
f7f9143b
JB
12513 }
12514 else
12515 {
12516 /* Catch a specific exception. */
761269c8 12517 *ex = ada_catch_exception;
28010a5d 12518 *excep_string = exception_name;
f7f9143b 12519 }
5845583d 12520 *cond_string = cond;
f7f9143b
JB
12521}
12522
12523/* Return the name of the symbol on which we should break in order to
12524 implement a catchpoint of the EX kind. */
12525
12526static const char *
761269c8 12527ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12528{
3eecfa55
JB
12529 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12530
12531 gdb_assert (data->exception_info != NULL);
0259addd 12532
f7f9143b
JB
12533 switch (ex)
12534 {
761269c8 12535 case ada_catch_exception:
3eecfa55 12536 return (data->exception_info->catch_exception_sym);
f7f9143b 12537 break;
761269c8 12538 case ada_catch_exception_unhandled:
3eecfa55 12539 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 12540 break;
761269c8 12541 case ada_catch_assert:
3eecfa55 12542 return (data->exception_info->catch_assert_sym);
f7f9143b
JB
12543 break;
12544 default:
12545 internal_error (__FILE__, __LINE__,
12546 _("unexpected catchpoint kind (%d)"), ex);
12547 }
12548}
12549
12550/* Return the breakpoint ops "virtual table" used for catchpoints
12551 of the EX kind. */
12552
c0a91b2b 12553static const struct breakpoint_ops *
761269c8 12554ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12555{
12556 switch (ex)
12557 {
761269c8 12558 case ada_catch_exception:
f7f9143b
JB
12559 return (&catch_exception_breakpoint_ops);
12560 break;
761269c8 12561 case ada_catch_exception_unhandled:
f7f9143b
JB
12562 return (&catch_exception_unhandled_breakpoint_ops);
12563 break;
761269c8 12564 case ada_catch_assert:
f7f9143b
JB
12565 return (&catch_assert_breakpoint_ops);
12566 break;
12567 default:
12568 internal_error (__FILE__, __LINE__,
12569 _("unexpected catchpoint kind (%d)"), ex);
12570 }
12571}
12572
12573/* Return the condition that will be used to match the current exception
12574 being raised with the exception that the user wants to catch. This
12575 assumes that this condition is used when the inferior just triggered
12576 an exception catchpoint.
12577
12578 The string returned is a newly allocated string that needs to be
12579 deallocated later. */
12580
12581static char *
28010a5d 12582ada_exception_catchpoint_cond_string (const char *excep_string)
f7f9143b 12583{
3d0b0fa3
JB
12584 int i;
12585
0963b4bd 12586 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12587 runtime units that have been compiled without debugging info; if
28010a5d 12588 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12589 exception (e.g. "constraint_error") then, during the evaluation
12590 of the condition expression, the symbol lookup on this name would
0963b4bd 12591 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12592 may then be set only on user-defined exceptions which have the
12593 same not-fully-qualified name (e.g. my_package.constraint_error).
12594
12595 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12596 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12597 exception constraint_error" is rewritten into "catch exception
12598 standard.constraint_error".
12599
12600 If an exception named contraint_error is defined in another package of
12601 the inferior program, then the only way to specify this exception as a
12602 breakpoint condition is to use its fully-qualified named:
12603 e.g. my_package.constraint_error. */
12604
12605 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12606 {
28010a5d 12607 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3
JB
12608 {
12609 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
28010a5d 12610 excep_string);
3d0b0fa3
JB
12611 }
12612 }
28010a5d 12613 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
f7f9143b
JB
12614}
12615
12616/* Return the symtab_and_line that should be used to insert an exception
12617 catchpoint of the TYPE kind.
12618
28010a5d
PA
12619 EXCEP_STRING should contain the name of a specific exception that
12620 the catchpoint should catch, or NULL otherwise.
f7f9143b 12621
28010a5d
PA
12622 ADDR_STRING returns the name of the function where the real
12623 breakpoint that implements the catchpoints is set, depending on the
12624 type of catchpoint we need to create. */
f7f9143b
JB
12625
12626static struct symtab_and_line
761269c8 12627ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
c0a91b2b 12628 char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12629{
12630 const char *sym_name;
12631 struct symbol *sym;
f7f9143b 12632
0259addd
JB
12633 /* First, find out which exception support info to use. */
12634 ada_exception_support_info_sniffer ();
12635
12636 /* Then lookup the function on which we will break in order to catch
f7f9143b 12637 the Ada exceptions requested by the user. */
f7f9143b
JB
12638 sym_name = ada_exception_sym_name (ex);
12639 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12640
f17011e0
JB
12641 /* We can assume that SYM is not NULL at this stage. If the symbol
12642 did not exist, ada_exception_support_info_sniffer would have
12643 raised an exception.
f7f9143b 12644
f17011e0
JB
12645 Also, ada_exception_support_info_sniffer should have already
12646 verified that SYM is a function symbol. */
12647 gdb_assert (sym != NULL);
12648 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
f7f9143b
JB
12649
12650 /* Set ADDR_STRING. */
f7f9143b
JB
12651 *addr_string = xstrdup (sym_name);
12652
f7f9143b 12653 /* Set OPS. */
4b9eee8c 12654 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12655
f17011e0 12656 return find_function_start_sal (sym, 1);
f7f9143b
JB
12657}
12658
b4a5b78b 12659/* Create an Ada exception catchpoint.
f7f9143b 12660
b4a5b78b 12661 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12662
2df4d1d5
JB
12663 If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12664 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12665 of the exception to which this catchpoint applies. When not NULL,
12666 the string must be allocated on the heap, and its deallocation
12667 is no longer the responsibility of the caller.
12668
12669 COND_STRING, if not NULL, is the catchpoint condition. This string
12670 must be allocated on the heap, and its deallocation is no longer
12671 the responsibility of the caller.
f7f9143b 12672
b4a5b78b
JB
12673 TEMPFLAG, if nonzero, means that the underlying breakpoint
12674 should be temporary.
28010a5d 12675
b4a5b78b 12676 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12677
349774ef 12678void
28010a5d 12679create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12680 enum ada_exception_catchpoint_kind ex_kind,
28010a5d 12681 char *excep_string,
5845583d 12682 char *cond_string,
28010a5d 12683 int tempflag,
349774ef 12684 int disabled,
28010a5d
PA
12685 int from_tty)
12686{
12687 struct ada_catchpoint *c;
b4a5b78b
JB
12688 char *addr_string = NULL;
12689 const struct breakpoint_ops *ops = NULL;
12690 struct symtab_and_line sal
12691 = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
28010a5d
PA
12692
12693 c = XNEW (struct ada_catchpoint);
12694 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
349774ef 12695 ops, tempflag, disabled, from_tty);
28010a5d
PA
12696 c->excep_string = excep_string;
12697 create_excep_cond_exprs (c);
5845583d
JB
12698 if (cond_string != NULL)
12699 set_breakpoint_condition (&c->base, cond_string, from_tty);
3ea46bff 12700 install_breakpoint (0, &c->base, 1);
f7f9143b
JB
12701}
12702
9ac4176b
PA
12703/* Implement the "catch exception" command. */
12704
12705static void
12706catch_ada_exception_command (char *arg, int from_tty,
12707 struct cmd_list_element *command)
12708{
12709 struct gdbarch *gdbarch = get_current_arch ();
12710 int tempflag;
761269c8 12711 enum ada_exception_catchpoint_kind ex_kind;
28010a5d 12712 char *excep_string = NULL;
5845583d 12713 char *cond_string = NULL;
9ac4176b
PA
12714
12715 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12716
12717 if (!arg)
12718 arg = "";
b4a5b78b
JB
12719 catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12720 &cond_string);
12721 create_ada_exception_catchpoint (gdbarch, ex_kind,
12722 excep_string, cond_string,
349774ef
JB
12723 tempflag, 1 /* enabled */,
12724 from_tty);
9ac4176b
PA
12725}
12726
b4a5b78b 12727/* Split the arguments specified in a "catch assert" command.
5845583d 12728
b4a5b78b
JB
12729 ARGS contains the command's arguments (or the empty string if
12730 no arguments were passed).
5845583d
JB
12731
12732 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12733 (the memory needs to be deallocated after use). */
5845583d 12734
b4a5b78b
JB
12735static void
12736catch_ada_assert_command_split (char *args, char **cond_string)
f7f9143b 12737{
5845583d 12738 args = skip_spaces (args);
f7f9143b 12739
5845583d
JB
12740 /* Check whether a condition was provided. */
12741 if (strncmp (args, "if", 2) == 0
12742 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12743 {
5845583d 12744 args += 2;
0fcd72ba 12745 args = skip_spaces (args);
5845583d
JB
12746 if (args[0] == '\0')
12747 error (_("condition missing after `if' keyword"));
12748 *cond_string = xstrdup (args);
f7f9143b
JB
12749 }
12750
5845583d
JB
12751 /* Otherwise, there should be no other argument at the end of
12752 the command. */
12753 else if (args[0] != '\0')
12754 error (_("Junk at end of arguments."));
f7f9143b
JB
12755}
12756
9ac4176b
PA
12757/* Implement the "catch assert" command. */
12758
12759static void
12760catch_assert_command (char *arg, int from_tty,
12761 struct cmd_list_element *command)
12762{
12763 struct gdbarch *gdbarch = get_current_arch ();
12764 int tempflag;
5845583d 12765 char *cond_string = NULL;
9ac4176b
PA
12766
12767 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12768
12769 if (!arg)
12770 arg = "";
b4a5b78b 12771 catch_ada_assert_command_split (arg, &cond_string);
761269c8 12772 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
b4a5b78b 12773 NULL, cond_string,
349774ef
JB
12774 tempflag, 1 /* enabled */,
12775 from_tty);
9ac4176b 12776}
778865d3
JB
12777
12778/* Return non-zero if the symbol SYM is an Ada exception object. */
12779
12780static int
12781ada_is_exception_sym (struct symbol *sym)
12782{
12783 const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12784
12785 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12786 && SYMBOL_CLASS (sym) != LOC_BLOCK
12787 && SYMBOL_CLASS (sym) != LOC_CONST
12788 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12789 && type_name != NULL && strcmp (type_name, "exception") == 0);
12790}
12791
12792/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12793 Ada exception object. This matches all exceptions except the ones
12794 defined by the Ada language. */
12795
12796static int
12797ada_is_non_standard_exception_sym (struct symbol *sym)
12798{
12799 int i;
12800
12801 if (!ada_is_exception_sym (sym))
12802 return 0;
12803
12804 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12805 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12806 return 0; /* A standard exception. */
12807
12808 /* Numeric_Error is also a standard exception, so exclude it.
12809 See the STANDARD_EXC description for more details as to why
12810 this exception is not listed in that array. */
12811 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12812 return 0;
12813
12814 return 1;
12815}
12816
12817/* A helper function for qsort, comparing two struct ada_exc_info
12818 objects.
12819
12820 The comparison is determined first by exception name, and then
12821 by exception address. */
12822
12823static int
12824compare_ada_exception_info (const void *a, const void *b)
12825{
12826 const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12827 const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12828 int result;
12829
12830 result = strcmp (exc_a->name, exc_b->name);
12831 if (result != 0)
12832 return result;
12833
12834 if (exc_a->addr < exc_b->addr)
12835 return -1;
12836 if (exc_a->addr > exc_b->addr)
12837 return 1;
12838
12839 return 0;
12840}
12841
12842/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12843 routine, but keeping the first SKIP elements untouched.
12844
12845 All duplicates are also removed. */
12846
12847static void
12848sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12849 int skip)
12850{
12851 struct ada_exc_info *to_sort
12852 = VEC_address (ada_exc_info, *exceptions) + skip;
12853 int to_sort_len
12854 = VEC_length (ada_exc_info, *exceptions) - skip;
12855 int i, j;
12856
12857 qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12858 compare_ada_exception_info);
12859
12860 for (i = 1, j = 1; i < to_sort_len; i++)
12861 if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12862 to_sort[j++] = to_sort[i];
12863 to_sort_len = j;
12864 VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12865}
12866
12867/* A function intended as the "name_matcher" callback in the struct
12868 quick_symbol_functions' expand_symtabs_matching method.
12869
12870 SEARCH_NAME is the symbol's search name.
12871
12872 If USER_DATA is not NULL, it is a pointer to a regext_t object
12873 used to match the symbol (by natural name). Otherwise, when USER_DATA
12874 is null, no filtering is performed, and all symbols are a positive
12875 match. */
12876
12877static int
12878ada_exc_search_name_matches (const char *search_name, void *user_data)
12879{
12880 regex_t *preg = user_data;
12881
12882 if (preg == NULL)
12883 return 1;
12884
12885 /* In Ada, the symbol "search name" is a linkage name, whereas
12886 the regular expression used to do the matching refers to
12887 the natural name. So match against the decoded name. */
12888 return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12889}
12890
12891/* Add all exceptions defined by the Ada standard whose name match
12892 a regular expression.
12893
12894 If PREG is not NULL, then this regexp_t object is used to
12895 perform the symbol name matching. Otherwise, no name-based
12896 filtering is performed.
12897
12898 EXCEPTIONS is a vector of exceptions to which matching exceptions
12899 gets pushed. */
12900
12901static void
12902ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12903{
12904 int i;
12905
12906 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12907 {
12908 if (preg == NULL
12909 || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12910 {
12911 struct bound_minimal_symbol msymbol
12912 = ada_lookup_simple_minsym (standard_exc[i]);
12913
12914 if (msymbol.minsym != NULL)
12915 {
12916 struct ada_exc_info info
77e371c0 12917 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3
JB
12918
12919 VEC_safe_push (ada_exc_info, *exceptions, &info);
12920 }
12921 }
12922 }
12923}
12924
12925/* Add all Ada exceptions defined locally and accessible from the given
12926 FRAME.
12927
12928 If PREG is not NULL, then this regexp_t object is used to
12929 perform the symbol name matching. Otherwise, no name-based
12930 filtering is performed.
12931
12932 EXCEPTIONS is a vector of exceptions to which matching exceptions
12933 gets pushed. */
12934
12935static void
12936ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12937 VEC(ada_exc_info) **exceptions)
12938{
3977b71f 12939 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
12940
12941 while (block != 0)
12942 {
12943 struct block_iterator iter;
12944 struct symbol *sym;
12945
12946 ALL_BLOCK_SYMBOLS (block, iter, sym)
12947 {
12948 switch (SYMBOL_CLASS (sym))
12949 {
12950 case LOC_TYPEDEF:
12951 case LOC_BLOCK:
12952 case LOC_CONST:
12953 break;
12954 default:
12955 if (ada_is_exception_sym (sym))
12956 {
12957 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12958 SYMBOL_VALUE_ADDRESS (sym)};
12959
12960 VEC_safe_push (ada_exc_info, *exceptions, &info);
12961 }
12962 }
12963 }
12964 if (BLOCK_FUNCTION (block) != NULL)
12965 break;
12966 block = BLOCK_SUPERBLOCK (block);
12967 }
12968}
12969
12970/* Add all exceptions defined globally whose name name match
12971 a regular expression, excluding standard exceptions.
12972
12973 The reason we exclude standard exceptions is that they need
12974 to be handled separately: Standard exceptions are defined inside
12975 a runtime unit which is normally not compiled with debugging info,
12976 and thus usually do not show up in our symbol search. However,
12977 if the unit was in fact built with debugging info, we need to
12978 exclude them because they would duplicate the entry we found
12979 during the special loop that specifically searches for those
12980 standard exceptions.
12981
12982 If PREG is not NULL, then this regexp_t object is used to
12983 perform the symbol name matching. Otherwise, no name-based
12984 filtering is performed.
12985
12986 EXCEPTIONS is a vector of exceptions to which matching exceptions
12987 gets pushed. */
12988
12989static void
12990ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12991{
12992 struct objfile *objfile;
43f3e411 12993 struct compunit_symtab *s;
778865d3 12994
276d885b 12995 expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
bb4142cf 12996 VARIABLES_DOMAIN, preg);
778865d3 12997
43f3e411 12998 ALL_COMPUNITS (objfile, s)
778865d3 12999 {
43f3e411 13000 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
778865d3
JB
13001 int i;
13002
13003 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13004 {
13005 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13006 struct block_iterator iter;
13007 struct symbol *sym;
13008
13009 ALL_BLOCK_SYMBOLS (b, iter, sym)
13010 if (ada_is_non_standard_exception_sym (sym)
13011 && (preg == NULL
13012 || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13013 0, NULL, 0) == 0))
13014 {
13015 struct ada_exc_info info
13016 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13017
13018 VEC_safe_push (ada_exc_info, *exceptions, &info);
13019 }
13020 }
13021 }
13022}
13023
13024/* Implements ada_exceptions_list with the regular expression passed
13025 as a regex_t, rather than a string.
13026
13027 If not NULL, PREG is used to filter out exceptions whose names
13028 do not match. Otherwise, all exceptions are listed. */
13029
13030static VEC(ada_exc_info) *
13031ada_exceptions_list_1 (regex_t *preg)
13032{
13033 VEC(ada_exc_info) *result = NULL;
13034 struct cleanup *old_chain
13035 = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13036 int prev_len;
13037
13038 /* First, list the known standard exceptions. These exceptions
13039 need to be handled separately, as they are usually defined in
13040 runtime units that have been compiled without debugging info. */
13041
13042 ada_add_standard_exceptions (preg, &result);
13043
13044 /* Next, find all exceptions whose scope is local and accessible
13045 from the currently selected frame. */
13046
13047 if (has_stack_frames ())
13048 {
13049 prev_len = VEC_length (ada_exc_info, result);
13050 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13051 &result);
13052 if (VEC_length (ada_exc_info, result) > prev_len)
13053 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13054 }
13055
13056 /* Add all exceptions whose scope is global. */
13057
13058 prev_len = VEC_length (ada_exc_info, result);
13059 ada_add_global_exceptions (preg, &result);
13060 if (VEC_length (ada_exc_info, result) > prev_len)
13061 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13062
13063 discard_cleanups (old_chain);
13064 return result;
13065}
13066
13067/* Return a vector of ada_exc_info.
13068
13069 If REGEXP is NULL, all exceptions are included in the result.
13070 Otherwise, it should contain a valid regular expression,
13071 and only the exceptions whose names match that regular expression
13072 are included in the result.
13073
13074 The exceptions are sorted in the following order:
13075 - Standard exceptions (defined by the Ada language), in
13076 alphabetical order;
13077 - Exceptions only visible from the current frame, in
13078 alphabetical order;
13079 - Exceptions whose scope is global, in alphabetical order. */
13080
13081VEC(ada_exc_info) *
13082ada_exceptions_list (const char *regexp)
13083{
13084 VEC(ada_exc_info) *result = NULL;
13085 struct cleanup *old_chain = NULL;
13086 regex_t reg;
13087
13088 if (regexp != NULL)
13089 old_chain = compile_rx_or_error (&reg, regexp,
13090 _("invalid regular expression"));
13091
13092 result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13093
13094 if (old_chain != NULL)
13095 do_cleanups (old_chain);
13096 return result;
13097}
13098
13099/* Implement the "info exceptions" command. */
13100
13101static void
13102info_exceptions_command (char *regexp, int from_tty)
13103{
13104 VEC(ada_exc_info) *exceptions;
13105 struct cleanup *cleanup;
13106 struct gdbarch *gdbarch = get_current_arch ();
13107 int ix;
13108 struct ada_exc_info *info;
13109
13110 exceptions = ada_exceptions_list (regexp);
13111 cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13112
13113 if (regexp != NULL)
13114 printf_filtered
13115 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13116 else
13117 printf_filtered (_("All defined Ada exceptions:\n"));
13118
13119 for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13120 printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13121
13122 do_cleanups (cleanup);
13123}
13124
4c4b4cd2
PH
13125 /* Operators */
13126/* Information about operators given special treatment in functions
13127 below. */
13128/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13129
13130#define ADA_OPERATORS \
13131 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13132 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13133 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13134 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13135 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13136 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13137 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13138 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13139 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13140 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13141 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13142 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13143 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13144 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13145 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13146 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13147 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13148 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13149 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13150
13151static void
554794dc
SDJ
13152ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13153 int *argsp)
4c4b4cd2
PH
13154{
13155 switch (exp->elts[pc - 1].opcode)
13156 {
76a01679 13157 default:
4c4b4cd2
PH
13158 operator_length_standard (exp, pc, oplenp, argsp);
13159 break;
13160
13161#define OP_DEFN(op, len, args, binop) \
13162 case op: *oplenp = len; *argsp = args; break;
13163 ADA_OPERATORS;
13164#undef OP_DEFN
52ce6436
PH
13165
13166 case OP_AGGREGATE:
13167 *oplenp = 3;
13168 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13169 break;
13170
13171 case OP_CHOICES:
13172 *oplenp = 3;
13173 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13174 break;
4c4b4cd2
PH
13175 }
13176}
13177
c0201579
JK
13178/* Implementation of the exp_descriptor method operator_check. */
13179
13180static int
13181ada_operator_check (struct expression *exp, int pos,
13182 int (*objfile_func) (struct objfile *objfile, void *data),
13183 void *data)
13184{
13185 const union exp_element *const elts = exp->elts;
13186 struct type *type = NULL;
13187
13188 switch (elts[pos].opcode)
13189 {
13190 case UNOP_IN_RANGE:
13191 case UNOP_QUAL:
13192 type = elts[pos + 1].type;
13193 break;
13194
13195 default:
13196 return operator_check_standard (exp, pos, objfile_func, data);
13197 }
13198
13199 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13200
13201 if (type && TYPE_OBJFILE (type)
13202 && (*objfile_func) (TYPE_OBJFILE (type), data))
13203 return 1;
13204
13205 return 0;
13206}
13207
4c4b4cd2
PH
13208static char *
13209ada_op_name (enum exp_opcode opcode)
13210{
13211 switch (opcode)
13212 {
76a01679 13213 default:
4c4b4cd2 13214 return op_name_standard (opcode);
52ce6436 13215
4c4b4cd2
PH
13216#define OP_DEFN(op, len, args, binop) case op: return #op;
13217 ADA_OPERATORS;
13218#undef OP_DEFN
52ce6436
PH
13219
13220 case OP_AGGREGATE:
13221 return "OP_AGGREGATE";
13222 case OP_CHOICES:
13223 return "OP_CHOICES";
13224 case OP_NAME:
13225 return "OP_NAME";
4c4b4cd2
PH
13226 }
13227}
13228
13229/* As for operator_length, but assumes PC is pointing at the first
13230 element of the operator, and gives meaningful results only for the
52ce6436 13231 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13232
13233static void
76a01679
JB
13234ada_forward_operator_length (struct expression *exp, int pc,
13235 int *oplenp, int *argsp)
4c4b4cd2 13236{
76a01679 13237 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13238 {
13239 default:
13240 *oplenp = *argsp = 0;
13241 break;
52ce6436 13242
4c4b4cd2
PH
13243#define OP_DEFN(op, len, args, binop) \
13244 case op: *oplenp = len; *argsp = args; break;
13245 ADA_OPERATORS;
13246#undef OP_DEFN
52ce6436
PH
13247
13248 case OP_AGGREGATE:
13249 *oplenp = 3;
13250 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13251 break;
13252
13253 case OP_CHOICES:
13254 *oplenp = 3;
13255 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13256 break;
13257
13258 case OP_STRING:
13259 case OP_NAME:
13260 {
13261 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13262
52ce6436
PH
13263 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13264 *argsp = 0;
13265 break;
13266 }
4c4b4cd2
PH
13267 }
13268}
13269
13270static int
13271ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13272{
13273 enum exp_opcode op = exp->elts[elt].opcode;
13274 int oplen, nargs;
13275 int pc = elt;
13276 int i;
76a01679 13277
4c4b4cd2
PH
13278 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13279
76a01679 13280 switch (op)
4c4b4cd2 13281 {
76a01679 13282 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13283 case OP_ATR_FIRST:
13284 case OP_ATR_LAST:
13285 case OP_ATR_LENGTH:
13286 case OP_ATR_IMAGE:
13287 case OP_ATR_MAX:
13288 case OP_ATR_MIN:
13289 case OP_ATR_MODULUS:
13290 case OP_ATR_POS:
13291 case OP_ATR_SIZE:
13292 case OP_ATR_TAG:
13293 case OP_ATR_VAL:
13294 break;
13295
13296 case UNOP_IN_RANGE:
13297 case UNOP_QUAL:
323e0a4a
AC
13298 /* XXX: gdb_sprint_host_address, type_sprint */
13299 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13300 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13301 fprintf_filtered (stream, " (");
13302 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13303 fprintf_filtered (stream, ")");
13304 break;
13305 case BINOP_IN_BOUNDS:
52ce6436
PH
13306 fprintf_filtered (stream, " (%d)",
13307 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13308 break;
13309 case TERNOP_IN_RANGE:
13310 break;
13311
52ce6436
PH
13312 case OP_AGGREGATE:
13313 case OP_OTHERS:
13314 case OP_DISCRETE_RANGE:
13315 case OP_POSITIONAL:
13316 case OP_CHOICES:
13317 break;
13318
13319 case OP_NAME:
13320 case OP_STRING:
13321 {
13322 char *name = &exp->elts[elt + 2].string;
13323 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13324
52ce6436
PH
13325 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13326 break;
13327 }
13328
4c4b4cd2
PH
13329 default:
13330 return dump_subexp_body_standard (exp, stream, elt);
13331 }
13332
13333 elt += oplen;
13334 for (i = 0; i < nargs; i += 1)
13335 elt = dump_subexp (exp, stream, elt);
13336
13337 return elt;
13338}
13339
13340/* The Ada extension of print_subexp (q.v.). */
13341
76a01679
JB
13342static void
13343ada_print_subexp (struct expression *exp, int *pos,
13344 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13345{
52ce6436 13346 int oplen, nargs, i;
4c4b4cd2
PH
13347 int pc = *pos;
13348 enum exp_opcode op = exp->elts[pc].opcode;
13349
13350 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13351
52ce6436 13352 *pos += oplen;
4c4b4cd2
PH
13353 switch (op)
13354 {
13355 default:
52ce6436 13356 *pos -= oplen;
4c4b4cd2
PH
13357 print_subexp_standard (exp, pos, stream, prec);
13358 return;
13359
13360 case OP_VAR_VALUE:
4c4b4cd2
PH
13361 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13362 return;
13363
13364 case BINOP_IN_BOUNDS:
323e0a4a 13365 /* XXX: sprint_subexp */
4c4b4cd2 13366 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13367 fputs_filtered (" in ", stream);
4c4b4cd2 13368 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13369 fputs_filtered ("'range", stream);
4c4b4cd2 13370 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13371 fprintf_filtered (stream, "(%ld)",
13372 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13373 return;
13374
13375 case TERNOP_IN_RANGE:
4c4b4cd2 13376 if (prec >= PREC_EQUAL)
76a01679 13377 fputs_filtered ("(", stream);
323e0a4a 13378 /* XXX: sprint_subexp */
4c4b4cd2 13379 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13380 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13381 print_subexp (exp, pos, stream, PREC_EQUAL);
13382 fputs_filtered (" .. ", stream);
13383 print_subexp (exp, pos, stream, PREC_EQUAL);
13384 if (prec >= PREC_EQUAL)
76a01679
JB
13385 fputs_filtered (")", stream);
13386 return;
4c4b4cd2
PH
13387
13388 case OP_ATR_FIRST:
13389 case OP_ATR_LAST:
13390 case OP_ATR_LENGTH:
13391 case OP_ATR_IMAGE:
13392 case OP_ATR_MAX:
13393 case OP_ATR_MIN:
13394 case OP_ATR_MODULUS:
13395 case OP_ATR_POS:
13396 case OP_ATR_SIZE:
13397 case OP_ATR_TAG:
13398 case OP_ATR_VAL:
4c4b4cd2 13399 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
13400 {
13401 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
13402 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13403 &type_print_raw_options);
76a01679
JB
13404 *pos += 3;
13405 }
4c4b4cd2 13406 else
76a01679 13407 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13408 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13409 if (nargs > 1)
76a01679
JB
13410 {
13411 int tem;
5b4ee69b 13412
76a01679
JB
13413 for (tem = 1; tem < nargs; tem += 1)
13414 {
13415 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13416 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13417 }
13418 fputs_filtered (")", stream);
13419 }
4c4b4cd2 13420 return;
14f9c5c9 13421
4c4b4cd2 13422 case UNOP_QUAL:
4c4b4cd2
PH
13423 type_print (exp->elts[pc + 1].type, "", stream, 0);
13424 fputs_filtered ("'(", stream);
13425 print_subexp (exp, pos, stream, PREC_PREFIX);
13426 fputs_filtered (")", stream);
13427 return;
14f9c5c9 13428
4c4b4cd2 13429 case UNOP_IN_RANGE:
323e0a4a 13430 /* XXX: sprint_subexp */
4c4b4cd2 13431 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13432 fputs_filtered (" in ", stream);
79d43c61
TT
13433 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13434 &type_print_raw_options);
4c4b4cd2 13435 return;
52ce6436
PH
13436
13437 case OP_DISCRETE_RANGE:
13438 print_subexp (exp, pos, stream, PREC_SUFFIX);
13439 fputs_filtered ("..", stream);
13440 print_subexp (exp, pos, stream, PREC_SUFFIX);
13441 return;
13442
13443 case OP_OTHERS:
13444 fputs_filtered ("others => ", stream);
13445 print_subexp (exp, pos, stream, PREC_SUFFIX);
13446 return;
13447
13448 case OP_CHOICES:
13449 for (i = 0; i < nargs-1; i += 1)
13450 {
13451 if (i > 0)
13452 fputs_filtered ("|", stream);
13453 print_subexp (exp, pos, stream, PREC_SUFFIX);
13454 }
13455 fputs_filtered (" => ", stream);
13456 print_subexp (exp, pos, stream, PREC_SUFFIX);
13457 return;
13458
13459 case OP_POSITIONAL:
13460 print_subexp (exp, pos, stream, PREC_SUFFIX);
13461 return;
13462
13463 case OP_AGGREGATE:
13464 fputs_filtered ("(", stream);
13465 for (i = 0; i < nargs; i += 1)
13466 {
13467 if (i > 0)
13468 fputs_filtered (", ", stream);
13469 print_subexp (exp, pos, stream, PREC_SUFFIX);
13470 }
13471 fputs_filtered (")", stream);
13472 return;
4c4b4cd2
PH
13473 }
13474}
14f9c5c9
AS
13475
13476/* Table mapping opcodes into strings for printing operators
13477 and precedences of the operators. */
13478
d2e4a39e
AS
13479static const struct op_print ada_op_print_tab[] = {
13480 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13481 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13482 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13483 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13484 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13485 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13486 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13487 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13488 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13489 {">=", BINOP_GEQ, PREC_ORDER, 0},
13490 {">", BINOP_GTR, PREC_ORDER, 0},
13491 {"<", BINOP_LESS, PREC_ORDER, 0},
13492 {">>", BINOP_RSH, PREC_SHIFT, 0},
13493 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13494 {"+", BINOP_ADD, PREC_ADD, 0},
13495 {"-", BINOP_SUB, PREC_ADD, 0},
13496 {"&", BINOP_CONCAT, PREC_ADD, 0},
13497 {"*", BINOP_MUL, PREC_MUL, 0},
13498 {"/", BINOP_DIV, PREC_MUL, 0},
13499 {"rem", BINOP_REM, PREC_MUL, 0},
13500 {"mod", BINOP_MOD, PREC_MUL, 0},
13501 {"**", BINOP_EXP, PREC_REPEAT, 0},
13502 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13503 {"-", UNOP_NEG, PREC_PREFIX, 0},
13504 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13505 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13506 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13507 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13508 {".all", UNOP_IND, PREC_SUFFIX, 1},
13509 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13510 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
d2e4a39e 13511 {NULL, 0, 0, 0}
14f9c5c9
AS
13512};
13513\f
72d5681a
PH
13514enum ada_primitive_types {
13515 ada_primitive_type_int,
13516 ada_primitive_type_long,
13517 ada_primitive_type_short,
13518 ada_primitive_type_char,
13519 ada_primitive_type_float,
13520 ada_primitive_type_double,
13521 ada_primitive_type_void,
13522 ada_primitive_type_long_long,
13523 ada_primitive_type_long_double,
13524 ada_primitive_type_natural,
13525 ada_primitive_type_positive,
13526 ada_primitive_type_system_address,
13527 nr_ada_primitive_types
13528};
6c038f32
PH
13529
13530static void
d4a9a881 13531ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
13532 struct language_arch_info *lai)
13533{
d4a9a881 13534 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 13535
72d5681a 13536 lai->primitive_type_vector
d4a9a881 13537 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 13538 struct type *);
e9bb382b
UW
13539
13540 lai->primitive_type_vector [ada_primitive_type_int]
13541 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13542 0, "integer");
13543 lai->primitive_type_vector [ada_primitive_type_long]
13544 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13545 0, "long_integer");
13546 lai->primitive_type_vector [ada_primitive_type_short]
13547 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13548 0, "short_integer");
13549 lai->string_char_type
13550 = lai->primitive_type_vector [ada_primitive_type_char]
13551 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13552 lai->primitive_type_vector [ada_primitive_type_float]
13553 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13554 "float", NULL);
13555 lai->primitive_type_vector [ada_primitive_type_double]
13556 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13557 "long_float", NULL);
13558 lai->primitive_type_vector [ada_primitive_type_long_long]
13559 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13560 0, "long_long_integer");
13561 lai->primitive_type_vector [ada_primitive_type_long_double]
13562 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13563 "long_long_float", NULL);
13564 lai->primitive_type_vector [ada_primitive_type_natural]
13565 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13566 0, "natural");
13567 lai->primitive_type_vector [ada_primitive_type_positive]
13568 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13569 0, "positive");
13570 lai->primitive_type_vector [ada_primitive_type_void]
13571 = builtin->builtin_void;
13572
13573 lai->primitive_type_vector [ada_primitive_type_system_address]
13574 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
13575 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13576 = "system__address";
fbb06eb1 13577
47e729a8 13578 lai->bool_type_symbol = NULL;
fbb06eb1 13579 lai->bool_type_default = builtin->builtin_bool;
6c038f32 13580}
6c038f32
PH
13581\f
13582 /* Language vector */
13583
13584/* Not really used, but needed in the ada_language_defn. */
13585
13586static void
6c7a06a3 13587emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 13588{
6c7a06a3 13589 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
13590}
13591
13592static int
410a0ff2 13593parse (struct parser_state *ps)
6c038f32
PH
13594{
13595 warnings_issued = 0;
410a0ff2 13596 return ada_parse (ps);
6c038f32
PH
13597}
13598
13599static const struct exp_descriptor ada_exp_descriptor = {
13600 ada_print_subexp,
13601 ada_operator_length,
c0201579 13602 ada_operator_check,
6c038f32
PH
13603 ada_op_name,
13604 ada_dump_subexp_body,
13605 ada_evaluate_subexp
13606};
13607
1a119f36 13608/* Implement the "la_get_symbol_name_cmp" language_defn method
74ccd7f5
JB
13609 for Ada. */
13610
1a119f36
JB
13611static symbol_name_cmp_ftype
13612ada_get_symbol_name_cmp (const char *lookup_name)
74ccd7f5
JB
13613{
13614 if (should_use_wild_match (lookup_name))
13615 return wild_match;
13616 else
13617 return compare_names;
13618}
13619
a5ee536b
JB
13620/* Implement the "la_read_var_value" language_defn method for Ada. */
13621
13622static struct value *
13623ada_read_var_value (struct symbol *var, struct frame_info *frame)
13624{
3977b71f 13625 const struct block *frame_block = NULL;
a5ee536b
JB
13626 struct symbol *renaming_sym = NULL;
13627
13628 /* The only case where default_read_var_value is not sufficient
13629 is when VAR is a renaming... */
13630 if (frame)
13631 frame_block = get_frame_block (frame, NULL);
13632 if (frame_block)
13633 renaming_sym = ada_find_renaming_symbol (var, frame_block);
13634 if (renaming_sym != NULL)
13635 return ada_read_renaming_var_value (renaming_sym, frame_block);
13636
13637 /* This is a typical case where we expect the default_read_var_value
13638 function to work. */
13639 return default_read_var_value (var, frame);
13640}
13641
6c038f32
PH
13642const struct language_defn ada_language_defn = {
13643 "ada", /* Language name */
6abde28f 13644 "Ada",
6c038f32 13645 language_ada,
6c038f32 13646 range_check_off,
6c038f32
PH
13647 case_sensitive_on, /* Yes, Ada is case-insensitive, but
13648 that's not quite what this means. */
6c038f32 13649 array_row_major,
9a044a89 13650 macro_expansion_no,
6c038f32
PH
13651 &ada_exp_descriptor,
13652 parse,
13653 ada_error,
13654 resolve,
13655 ada_printchar, /* Print a character constant */
13656 ada_printstr, /* Function to print string constant */
13657 emit_char, /* Function to print single char (not used) */
6c038f32 13658 ada_print_type, /* Print a type using appropriate syntax */
be942545 13659 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
13660 ada_val_print, /* Print a value using appropriate syntax */
13661 ada_value_print, /* Print a top-level value */
a5ee536b 13662 ada_read_var_value, /* la_read_var_value */
6c038f32 13663 NULL, /* Language specific skip_trampoline */
2b2d9e11 13664 NULL, /* name_of_this */
6c038f32
PH
13665 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
13666 basic_lookup_transparent_type, /* lookup_transparent_type */
13667 ada_la_decode, /* Language specific symbol demangler */
0963b4bd
MS
13668 NULL, /* Language specific
13669 class_name_from_physname */
6c038f32
PH
13670 ada_op_print_tab, /* expression operators for printing */
13671 0, /* c-style arrays */
13672 1, /* String lower bound */
6c038f32 13673 ada_get_gdb_completer_word_break_characters,
41d27058 13674 ada_make_symbol_completion_list,
72d5681a 13675 ada_language_arch_info,
e79af960 13676 ada_print_array_index,
41f1b697 13677 default_pass_by_reference,
ae6a3a4c 13678 c_get_string,
1a119f36 13679 ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */
f8eba3c6 13680 ada_iterate_over_symbols,
a53b64ea 13681 &ada_varobj_ops,
bb2ec1b3
TT
13682 NULL,
13683 NULL,
6c038f32
PH
13684 LANG_MAGIC
13685};
13686
2c0b251b
PA
13687/* Provide a prototype to silence -Wmissing-prototypes. */
13688extern initialize_file_ftype _initialize_ada_language;
13689
5bf03f13
JB
13690/* Command-list for the "set/show ada" prefix command. */
13691static struct cmd_list_element *set_ada_list;
13692static struct cmd_list_element *show_ada_list;
13693
13694/* Implement the "set ada" prefix command. */
13695
13696static void
13697set_ada_command (char *arg, int from_tty)
13698{
13699 printf_unfiltered (_(\
13700"\"set ada\" must be followed by the name of a setting.\n"));
635c7e8a 13701 help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
5bf03f13
JB
13702}
13703
13704/* Implement the "show ada" prefix command. */
13705
13706static void
13707show_ada_command (char *args, int from_tty)
13708{
13709 cmd_show_list (show_ada_list, from_tty, "");
13710}
13711
2060206e
PA
13712static void
13713initialize_ada_catchpoint_ops (void)
13714{
13715 struct breakpoint_ops *ops;
13716
13717 initialize_breakpoint_ops ();
13718
13719 ops = &catch_exception_breakpoint_ops;
13720 *ops = bkpt_breakpoint_ops;
13721 ops->dtor = dtor_catch_exception;
13722 ops->allocate_location = allocate_location_catch_exception;
13723 ops->re_set = re_set_catch_exception;
13724 ops->check_status = check_status_catch_exception;
13725 ops->print_it = print_it_catch_exception;
13726 ops->print_one = print_one_catch_exception;
13727 ops->print_mention = print_mention_catch_exception;
13728 ops->print_recreate = print_recreate_catch_exception;
13729
13730 ops = &catch_exception_unhandled_breakpoint_ops;
13731 *ops = bkpt_breakpoint_ops;
13732 ops->dtor = dtor_catch_exception_unhandled;
13733 ops->allocate_location = allocate_location_catch_exception_unhandled;
13734 ops->re_set = re_set_catch_exception_unhandled;
13735 ops->check_status = check_status_catch_exception_unhandled;
13736 ops->print_it = print_it_catch_exception_unhandled;
13737 ops->print_one = print_one_catch_exception_unhandled;
13738 ops->print_mention = print_mention_catch_exception_unhandled;
13739 ops->print_recreate = print_recreate_catch_exception_unhandled;
13740
13741 ops = &catch_assert_breakpoint_ops;
13742 *ops = bkpt_breakpoint_ops;
13743 ops->dtor = dtor_catch_assert;
13744 ops->allocate_location = allocate_location_catch_assert;
13745 ops->re_set = re_set_catch_assert;
13746 ops->check_status = check_status_catch_assert;
13747 ops->print_it = print_it_catch_assert;
13748 ops->print_one = print_one_catch_assert;
13749 ops->print_mention = print_mention_catch_assert;
13750 ops->print_recreate = print_recreate_catch_assert;
13751}
13752
3d9434b5
JB
13753/* This module's 'new_objfile' observer. */
13754
13755static void
13756ada_new_objfile_observer (struct objfile *objfile)
13757{
13758 ada_clear_symbol_cache ();
13759}
13760
13761/* This module's 'free_objfile' observer. */
13762
13763static void
13764ada_free_objfile_observer (struct objfile *objfile)
13765{
13766 ada_clear_symbol_cache ();
13767}
13768
d2e4a39e 13769void
6c038f32 13770_initialize_ada_language (void)
14f9c5c9 13771{
6c038f32
PH
13772 add_language (&ada_language_defn);
13773
2060206e
PA
13774 initialize_ada_catchpoint_ops ();
13775
5bf03f13
JB
13776 add_prefix_cmd ("ada", no_class, set_ada_command,
13777 _("Prefix command for changing Ada-specfic settings"),
13778 &set_ada_list, "set ada ", 0, &setlist);
13779
13780 add_prefix_cmd ("ada", no_class, show_ada_command,
13781 _("Generic command for showing Ada-specific settings."),
13782 &show_ada_list, "show ada ", 0, &showlist);
13783
13784 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13785 &trust_pad_over_xvs, _("\
13786Enable or disable an optimization trusting PAD types over XVS types"), _("\
13787Show whether an optimization trusting PAD types over XVS types is activated"),
13788 _("\
13789This is related to the encoding used by the GNAT compiler. The debugger\n\
13790should normally trust the contents of PAD types, but certain older versions\n\
13791of GNAT have a bug that sometimes causes the information in the PAD type\n\
13792to be incorrect. Turning this setting \"off\" allows the debugger to\n\
13793work around this bug. It is always safe to turn this option \"off\", but\n\
13794this incurs a slight performance penalty, so it is recommended to NOT change\n\
13795this option to \"off\" unless necessary."),
13796 NULL, NULL, &set_ada_list, &show_ada_list);
13797
9ac4176b
PA
13798 add_catch_command ("exception", _("\
13799Catch Ada exceptions, when raised.\n\
13800With an argument, catch only exceptions with the given name."),
13801 catch_ada_exception_command,
13802 NULL,
13803 CATCH_PERMANENT,
13804 CATCH_TEMPORARY);
13805 add_catch_command ("assert", _("\
13806Catch failed Ada assertions, when raised.\n\
13807With an argument, catch only exceptions with the given name."),
13808 catch_assert_command,
13809 NULL,
13810 CATCH_PERMANENT,
13811 CATCH_TEMPORARY);
13812
6c038f32 13813 varsize_limit = 65536;
6c038f32 13814
778865d3
JB
13815 add_info ("exceptions", info_exceptions_command,
13816 _("\
13817List all Ada exception names.\n\
13818If a regular expression is passed as an argument, only those matching\n\
13819the regular expression are listed."));
13820
c6044dd1
JB
13821 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13822 _("Set Ada maintenance-related variables."),
13823 &maint_set_ada_cmdlist, "maintenance set ada ",
13824 0/*allow-unknown*/, &maintenance_set_cmdlist);
13825
13826 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13827 _("Show Ada maintenance-related variables"),
13828 &maint_show_ada_cmdlist, "maintenance show ada ",
13829 0/*allow-unknown*/, &maintenance_show_cmdlist);
13830
13831 add_setshow_boolean_cmd
13832 ("ignore-descriptive-types", class_maintenance,
13833 &ada_ignore_descriptive_types_p,
13834 _("Set whether descriptive types generated by GNAT should be ignored."),
13835 _("Show whether descriptive types generated by GNAT should be ignored."),
13836 _("\
13837When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13838DWARF attribute."),
13839 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13840
6c038f32
PH
13841 obstack_init (&symbol_list_obstack);
13842
13843 decoded_names_store = htab_create_alloc
13844 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13845 NULL, xcalloc, xfree);
6b69afc4 13846
3d9434b5
JB
13847 /* The ada-lang observers. */
13848 observer_attach_new_objfile (ada_new_objfile_observer);
13849 observer_attach_free_objfile (ada_free_objfile_observer);
e802dbe0 13850 observer_attach_inferior_exit (ada_inferior_exit);
ee01b665
JB
13851
13852 /* Setup various context-specific data. */
e802dbe0 13853 ada_inferior_data
8e260fc0 13854 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
ee01b665
JB
13855 ada_pspace_data_handle
13856 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14f9c5c9 13857}