]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
Build failure in sim/rx/gdb-if.c on windows
[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
2931 index_type_desc = ada_find_parallel_type (type, "___XA");
28c85d6c 2932 ada_fixup_array_indexes_type (index_type_desc);
262452ec 2933 if (index_type_desc != NULL)
28c85d6c
JB
2934 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2935 NULL);
262452ec 2936 else
8a48ac95
JB
2937 {
2938 struct type *elt_type = check_typedef (type);
2939
2940 for (i = 1; i < n; i++)
2941 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2942
2943 index_type = TYPE_INDEX_TYPE (elt_type);
2944 }
262452ec 2945
43bbcdc2
PH
2946 return
2947 (LONGEST) (which == 0
2948 ? ada_discrete_type_low_bound (index_type)
2949 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2950}
2951
2952/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
2953 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2954 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 2955 supplied by run-time quantities other than discriminants. */
14f9c5c9 2956
1eea4ebd 2957static LONGEST
4dc81987 2958ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 2959{
eb479039
JB
2960 struct type *arr_type;
2961
2962 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2963 arr = value_ind (arr);
2964 arr_type = value_enclosing_type (arr);
14f9c5c9 2965
ad82864c
JB
2966 if (ada_is_constrained_packed_array_type (arr_type))
2967 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 2968 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 2969 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 2970 else
1eea4ebd 2971 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
2972}
2973
2974/* Given that arr is an array value, returns the length of the
2975 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
2976 supplied by run-time quantities other than discriminants.
2977 Does not work for arrays indexed by enumeration types with representation
2978 clauses at the moment. */
14f9c5c9 2979
1eea4ebd 2980static LONGEST
d2e4a39e 2981ada_array_length (struct value *arr, int n)
14f9c5c9 2982{
eb479039
JB
2983 struct type *arr_type;
2984
2985 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
2986 arr = value_ind (arr);
2987 arr_type = value_enclosing_type (arr);
14f9c5c9 2988
ad82864c
JB
2989 if (ada_is_constrained_packed_array_type (arr_type))
2990 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 2991
4c4b4cd2 2992 if (ada_is_simple_array_type (arr_type))
1eea4ebd
UW
2993 return (ada_array_bound_from_type (arr_type, n, 1)
2994 - ada_array_bound_from_type (arr_type, n, 0) + 1);
14f9c5c9 2995 else
1eea4ebd
UW
2996 return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2997 - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
4c4b4cd2
PH
2998}
2999
3000/* An empty array whose type is that of ARR_TYPE (an array type),
3001 with bounds LOW to LOW-1. */
3002
3003static struct value *
3004empty_array (struct type *arr_type, int low)
3005{
b0dd7688 3006 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3007 struct type *index_type
3008 = create_static_range_type
3009 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, low - 1);
b0dd7688 3010 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3011
0b5d8877 3012 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3013}
14f9c5c9 3014\f
d2e4a39e 3015
4c4b4cd2 3016 /* Name resolution */
14f9c5c9 3017
4c4b4cd2
PH
3018/* The "decoded" name for the user-definable Ada operator corresponding
3019 to OP. */
14f9c5c9 3020
d2e4a39e 3021static const char *
4c4b4cd2 3022ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3023{
3024 int i;
3025
4c4b4cd2 3026 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3027 {
3028 if (ada_opname_table[i].op == op)
4c4b4cd2 3029 return ada_opname_table[i].decoded;
14f9c5c9 3030 }
323e0a4a 3031 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3032}
3033
3034
4c4b4cd2
PH
3035/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3036 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3037 undefined namespace) and converts operators that are
3038 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
3039 non-null, it provides a preferred result type [at the moment, only
3040 type void has any effect---causing procedures to be preferred over
3041 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 3042 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3043
4c4b4cd2
PH
3044static void
3045resolve (struct expression **expp, int void_context_p)
14f9c5c9 3046{
30b15541
UW
3047 struct type *context_type = NULL;
3048 int pc = 0;
3049
3050 if (void_context_p)
3051 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3052
3053 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
3054}
3055
4c4b4cd2
PH
3056/* Resolve the operator of the subexpression beginning at
3057 position *POS of *EXPP. "Resolving" consists of replacing
3058 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3059 with their resolutions, replacing built-in operators with
3060 function calls to user-defined operators, where appropriate, and,
3061 when DEPROCEDURE_P is non-zero, converting function-valued variables
3062 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3063 are as in ada_resolve, above. */
14f9c5c9 3064
d2e4a39e 3065static struct value *
4c4b4cd2 3066resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 3067 struct type *context_type)
14f9c5c9
AS
3068{
3069 int pc = *pos;
3070 int i;
4c4b4cd2 3071 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 3072 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
3073 struct value **argvec; /* Vector of operand types (alloca'ed). */
3074 int nargs; /* Number of operands. */
52ce6436 3075 int oplen;
14f9c5c9
AS
3076
3077 argvec = NULL;
3078 nargs = 0;
3079 exp = *expp;
3080
52ce6436
PH
3081 /* Pass one: resolve operands, saving their types and updating *pos,
3082 if needed. */
14f9c5c9
AS
3083 switch (op)
3084 {
4c4b4cd2
PH
3085 case OP_FUNCALL:
3086 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
3087 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3088 *pos += 7;
4c4b4cd2
PH
3089 else
3090 {
3091 *pos += 3;
3092 resolve_subexp (expp, pos, 0, NULL);
3093 }
3094 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
3095 break;
3096
14f9c5c9 3097 case UNOP_ADDR:
4c4b4cd2
PH
3098 *pos += 1;
3099 resolve_subexp (expp, pos, 0, NULL);
3100 break;
3101
52ce6436
PH
3102 case UNOP_QUAL:
3103 *pos += 3;
17466c1a 3104 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
3105 break;
3106
52ce6436 3107 case OP_ATR_MODULUS:
4c4b4cd2
PH
3108 case OP_ATR_SIZE:
3109 case OP_ATR_TAG:
4c4b4cd2
PH
3110 case OP_ATR_FIRST:
3111 case OP_ATR_LAST:
3112 case OP_ATR_LENGTH:
3113 case OP_ATR_POS:
3114 case OP_ATR_VAL:
4c4b4cd2
PH
3115 case OP_ATR_MIN:
3116 case OP_ATR_MAX:
52ce6436
PH
3117 case TERNOP_IN_RANGE:
3118 case BINOP_IN_BOUNDS:
3119 case UNOP_IN_RANGE:
3120 case OP_AGGREGATE:
3121 case OP_OTHERS:
3122 case OP_CHOICES:
3123 case OP_POSITIONAL:
3124 case OP_DISCRETE_RANGE:
3125 case OP_NAME:
3126 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3127 *pos += oplen;
14f9c5c9
AS
3128 break;
3129
3130 case BINOP_ASSIGN:
3131 {
4c4b4cd2
PH
3132 struct value *arg1;
3133
3134 *pos += 1;
3135 arg1 = resolve_subexp (expp, pos, 0, NULL);
3136 if (arg1 == NULL)
3137 resolve_subexp (expp, pos, 1, NULL);
3138 else
df407dfe 3139 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 3140 break;
14f9c5c9
AS
3141 }
3142
4c4b4cd2 3143 case UNOP_CAST:
4c4b4cd2
PH
3144 *pos += 3;
3145 nargs = 1;
3146 break;
14f9c5c9 3147
4c4b4cd2
PH
3148 case BINOP_ADD:
3149 case BINOP_SUB:
3150 case BINOP_MUL:
3151 case BINOP_DIV:
3152 case BINOP_REM:
3153 case BINOP_MOD:
3154 case BINOP_EXP:
3155 case BINOP_CONCAT:
3156 case BINOP_LOGICAL_AND:
3157 case BINOP_LOGICAL_OR:
3158 case BINOP_BITWISE_AND:
3159 case BINOP_BITWISE_IOR:
3160 case BINOP_BITWISE_XOR:
14f9c5c9 3161
4c4b4cd2
PH
3162 case BINOP_EQUAL:
3163 case BINOP_NOTEQUAL:
3164 case BINOP_LESS:
3165 case BINOP_GTR:
3166 case BINOP_LEQ:
3167 case BINOP_GEQ:
14f9c5c9 3168
4c4b4cd2
PH
3169 case BINOP_REPEAT:
3170 case BINOP_SUBSCRIPT:
3171 case BINOP_COMMA:
40c8aaa9
JB
3172 *pos += 1;
3173 nargs = 2;
3174 break;
14f9c5c9 3175
4c4b4cd2
PH
3176 case UNOP_NEG:
3177 case UNOP_PLUS:
3178 case UNOP_LOGICAL_NOT:
3179 case UNOP_ABS:
3180 case UNOP_IND:
3181 *pos += 1;
3182 nargs = 1;
3183 break;
14f9c5c9 3184
4c4b4cd2
PH
3185 case OP_LONG:
3186 case OP_DOUBLE:
3187 case OP_VAR_VALUE:
3188 *pos += 4;
3189 break;
14f9c5c9 3190
4c4b4cd2
PH
3191 case OP_TYPE:
3192 case OP_BOOL:
3193 case OP_LAST:
4c4b4cd2
PH
3194 case OP_INTERNALVAR:
3195 *pos += 3;
3196 break;
14f9c5c9 3197
4c4b4cd2
PH
3198 case UNOP_MEMVAL:
3199 *pos += 3;
3200 nargs = 1;
3201 break;
3202
67f3407f
DJ
3203 case OP_REGISTER:
3204 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3205 break;
3206
4c4b4cd2
PH
3207 case STRUCTOP_STRUCT:
3208 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3209 nargs = 1;
3210 break;
3211
4c4b4cd2 3212 case TERNOP_SLICE:
4c4b4cd2
PH
3213 *pos += 1;
3214 nargs = 3;
3215 break;
3216
52ce6436 3217 case OP_STRING:
14f9c5c9 3218 break;
4c4b4cd2
PH
3219
3220 default:
323e0a4a 3221 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3222 }
3223
76a01679 3224 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
4c4b4cd2
PH
3225 for (i = 0; i < nargs; i += 1)
3226 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3227 argvec[i] = NULL;
3228 exp = *expp;
3229
3230 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3231 switch (op)
3232 {
3233 default:
3234 break;
3235
14f9c5c9 3236 case OP_VAR_VALUE:
4c4b4cd2 3237 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
3238 {
3239 struct ada_symbol_info *candidates;
3240 int n_candidates;
3241
3242 n_candidates =
3243 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3244 (exp->elts[pc + 2].symbol),
3245 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3246 &candidates);
76a01679
JB
3247
3248 if (n_candidates > 1)
3249 {
3250 /* Types tend to get re-introduced locally, so if there
3251 are any local symbols that are not types, first filter
3252 out all types. */
3253 int j;
3254 for (j = 0; j < n_candidates; j += 1)
3255 switch (SYMBOL_CLASS (candidates[j].sym))
3256 {
3257 case LOC_REGISTER:
3258 case LOC_ARG:
3259 case LOC_REF_ARG:
76a01679
JB
3260 case LOC_REGPARM_ADDR:
3261 case LOC_LOCAL:
76a01679 3262 case LOC_COMPUTED:
76a01679
JB
3263 goto FoundNonType;
3264 default:
3265 break;
3266 }
3267 FoundNonType:
3268 if (j < n_candidates)
3269 {
3270 j = 0;
3271 while (j < n_candidates)
3272 {
3273 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3274 {
3275 candidates[j] = candidates[n_candidates - 1];
3276 n_candidates -= 1;
3277 }
3278 else
3279 j += 1;
3280 }
3281 }
3282 }
3283
3284 if (n_candidates == 0)
323e0a4a 3285 error (_("No definition found for %s"),
76a01679
JB
3286 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3287 else if (n_candidates == 1)
3288 i = 0;
3289 else if (deprocedure_p
3290 && !is_nonfunction (candidates, n_candidates))
3291 {
06d5cf63
JB
3292 i = ada_resolve_function
3293 (candidates, n_candidates, NULL, 0,
3294 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3295 context_type);
76a01679 3296 if (i < 0)
323e0a4a 3297 error (_("Could not find a match for %s"),
76a01679
JB
3298 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3299 }
3300 else
3301 {
323e0a4a 3302 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3303 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3304 user_select_syms (candidates, n_candidates, 1);
3305 i = 0;
3306 }
3307
3308 exp->elts[pc + 1].block = candidates[i].block;
3309 exp->elts[pc + 2].symbol = candidates[i].sym;
1265e4aa
JB
3310 if (innermost_block == NULL
3311 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3312 innermost_block = candidates[i].block;
3313 }
3314
3315 if (deprocedure_p
3316 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3317 == TYPE_CODE_FUNC))
3318 {
3319 replace_operator_with_call (expp, pc, 0, 0,
3320 exp->elts[pc + 2].symbol,
3321 exp->elts[pc + 1].block);
3322 exp = *expp;
3323 }
14f9c5c9
AS
3324 break;
3325
3326 case OP_FUNCALL:
3327 {
4c4b4cd2 3328 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3329 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2
PH
3330 {
3331 struct ada_symbol_info *candidates;
3332 int n_candidates;
3333
3334 n_candidates =
76a01679
JB
3335 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3336 (exp->elts[pc + 5].symbol),
3337 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3338 &candidates);
4c4b4cd2
PH
3339 if (n_candidates == 1)
3340 i = 0;
3341 else
3342 {
06d5cf63
JB
3343 i = ada_resolve_function
3344 (candidates, n_candidates,
3345 argvec, nargs,
3346 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3347 context_type);
4c4b4cd2 3348 if (i < 0)
323e0a4a 3349 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3350 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3351 }
3352
3353 exp->elts[pc + 4].block = candidates[i].block;
3354 exp->elts[pc + 5].symbol = candidates[i].sym;
1265e4aa
JB
3355 if (innermost_block == NULL
3356 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3357 innermost_block = candidates[i].block;
3358 }
14f9c5c9
AS
3359 }
3360 break;
3361 case BINOP_ADD:
3362 case BINOP_SUB:
3363 case BINOP_MUL:
3364 case BINOP_DIV:
3365 case BINOP_REM:
3366 case BINOP_MOD:
3367 case BINOP_CONCAT:
3368 case BINOP_BITWISE_AND:
3369 case BINOP_BITWISE_IOR:
3370 case BINOP_BITWISE_XOR:
3371 case BINOP_EQUAL:
3372 case BINOP_NOTEQUAL:
3373 case BINOP_LESS:
3374 case BINOP_GTR:
3375 case BINOP_LEQ:
3376 case BINOP_GEQ:
3377 case BINOP_EXP:
3378 case UNOP_NEG:
3379 case UNOP_PLUS:
3380 case UNOP_LOGICAL_NOT:
3381 case UNOP_ABS:
3382 if (possible_user_operator_p (op, argvec))
4c4b4cd2
PH
3383 {
3384 struct ada_symbol_info *candidates;
3385 int n_candidates;
3386
3387 n_candidates =
3388 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3389 (struct block *) NULL, VAR_DOMAIN,
4eeaa230 3390 &candidates);
4c4b4cd2 3391 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3392 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3393 if (i < 0)
3394 break;
3395
76a01679
JB
3396 replace_operator_with_call (expp, pc, nargs, 1,
3397 candidates[i].sym, candidates[i].block);
4c4b4cd2
PH
3398 exp = *expp;
3399 }
14f9c5c9 3400 break;
4c4b4cd2
PH
3401
3402 case OP_TYPE:
b3dbf008 3403 case OP_REGISTER:
4c4b4cd2 3404 return NULL;
14f9c5c9
AS
3405 }
3406
3407 *pos = pc;
3408 return evaluate_subexp_type (exp, pos);
3409}
3410
3411/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3412 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3413 a non-pointer. */
14f9c5c9 3414/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3415 liberal. */
14f9c5c9
AS
3416
3417static int
4dc81987 3418ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3419{
61ee279c
PH
3420 ftype = ada_check_typedef (ftype);
3421 atype = ada_check_typedef (atype);
14f9c5c9
AS
3422
3423 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3424 ftype = TYPE_TARGET_TYPE (ftype);
3425 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3426 atype = TYPE_TARGET_TYPE (atype);
3427
d2e4a39e 3428 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3429 {
3430 default:
5b3d5b7d 3431 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3432 case TYPE_CODE_PTR:
3433 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3434 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3435 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3436 else
1265e4aa
JB
3437 return (may_deref
3438 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3439 case TYPE_CODE_INT:
3440 case TYPE_CODE_ENUM:
3441 case TYPE_CODE_RANGE:
3442 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3443 {
3444 case TYPE_CODE_INT:
3445 case TYPE_CODE_ENUM:
3446 case TYPE_CODE_RANGE:
3447 return 1;
3448 default:
3449 return 0;
3450 }
14f9c5c9
AS
3451
3452 case TYPE_CODE_ARRAY:
d2e4a39e 3453 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3454 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3455
3456 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3457 if (ada_is_array_descriptor_type (ftype))
3458 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3459 || ada_is_array_descriptor_type (atype));
14f9c5c9 3460 else
4c4b4cd2
PH
3461 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3462 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3463
3464 case TYPE_CODE_UNION:
3465 case TYPE_CODE_FLT:
3466 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3467 }
3468}
3469
3470/* Return non-zero if the formals of FUNC "sufficiently match" the
3471 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3472 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3473 argument function. */
14f9c5c9
AS
3474
3475static int
d2e4a39e 3476ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3477{
3478 int i;
d2e4a39e 3479 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3480
1265e4aa
JB
3481 if (SYMBOL_CLASS (func) == LOC_CONST
3482 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3483 return (n_actuals == 0);
3484 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3485 return 0;
3486
3487 if (TYPE_NFIELDS (func_type) != n_actuals)
3488 return 0;
3489
3490 for (i = 0; i < n_actuals; i += 1)
3491 {
4c4b4cd2 3492 if (actuals[i] == NULL)
76a01679
JB
3493 return 0;
3494 else
3495 {
5b4ee69b
MS
3496 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3497 i));
df407dfe 3498 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3499
76a01679
JB
3500 if (!ada_type_match (ftype, atype, 1))
3501 return 0;
3502 }
14f9c5c9
AS
3503 }
3504 return 1;
3505}
3506
3507/* False iff function type FUNC_TYPE definitely does not produce a value
3508 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3509 FUNC_TYPE is not a valid function type with a non-null return type
3510 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3511
3512static int
d2e4a39e 3513return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3514{
d2e4a39e 3515 struct type *return_type;
14f9c5c9
AS
3516
3517 if (func_type == NULL)
3518 return 1;
3519
4c4b4cd2 3520 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3521 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3522 else
18af8284 3523 return_type = get_base_type (func_type);
14f9c5c9
AS
3524 if (return_type == NULL)
3525 return 1;
3526
18af8284 3527 context_type = get_base_type (context_type);
14f9c5c9
AS
3528
3529 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3530 return context_type == NULL || return_type == context_type;
3531 else if (context_type == NULL)
3532 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3533 else
3534 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3535}
3536
3537
4c4b4cd2 3538/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3539 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3540 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3541 that returns that type, then eliminate matches that don't. If
3542 CONTEXT_TYPE is void and there is at least one match that does not
3543 return void, eliminate all matches that do.
3544
14f9c5c9
AS
3545 Asks the user if there is more than one match remaining. Returns -1
3546 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3547 solely for messages. May re-arrange and modify SYMS in
3548 the process; the index returned is for the modified vector. */
14f9c5c9 3549
4c4b4cd2
PH
3550static int
3551ada_resolve_function (struct ada_symbol_info syms[],
3552 int nsyms, struct value **args, int nargs,
3553 const char *name, struct type *context_type)
14f9c5c9 3554{
30b15541 3555 int fallback;
14f9c5c9 3556 int k;
4c4b4cd2 3557 int m; /* Number of hits */
14f9c5c9 3558
d2e4a39e 3559 m = 0;
30b15541
UW
3560 /* In the first pass of the loop, we only accept functions matching
3561 context_type. If none are found, we add a second pass of the loop
3562 where every function is accepted. */
3563 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3564 {
3565 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3566 {
61ee279c 3567 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
4c4b4cd2
PH
3568
3569 if (ada_args_match (syms[k].sym, args, nargs)
30b15541 3570 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3571 {
3572 syms[m] = syms[k];
3573 m += 1;
3574 }
3575 }
14f9c5c9
AS
3576 }
3577
3578 if (m == 0)
3579 return -1;
3580 else if (m > 1)
3581 {
323e0a4a 3582 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3583 user_select_syms (syms, m, 1);
14f9c5c9
AS
3584 return 0;
3585 }
3586 return 0;
3587}
3588
4c4b4cd2
PH
3589/* Returns true (non-zero) iff decoded name N0 should appear before N1
3590 in a listing of choices during disambiguation (see sort_choices, below).
3591 The idea is that overloadings of a subprogram name from the
3592 same package should sort in their source order. We settle for ordering
3593 such symbols by their trailing number (__N or $N). */
3594
14f9c5c9 3595static int
0d5cff50 3596encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3597{
3598 if (N1 == NULL)
3599 return 0;
3600 else if (N0 == NULL)
3601 return 1;
3602 else
3603 {
3604 int k0, k1;
5b4ee69b 3605
d2e4a39e 3606 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3607 ;
d2e4a39e 3608 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3609 ;
d2e4a39e 3610 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3611 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3612 {
3613 int n0, n1;
5b4ee69b 3614
4c4b4cd2
PH
3615 n0 = k0;
3616 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3617 n0 -= 1;
3618 n1 = k1;
3619 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3620 n1 -= 1;
3621 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3622 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3623 }
14f9c5c9
AS
3624 return (strcmp (N0, N1) < 0);
3625 }
3626}
d2e4a39e 3627
4c4b4cd2
PH
3628/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3629 encoded names. */
3630
d2e4a39e 3631static void
4c4b4cd2 3632sort_choices (struct ada_symbol_info syms[], int nsyms)
14f9c5c9 3633{
4c4b4cd2 3634 int i;
5b4ee69b 3635
d2e4a39e 3636 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3637 {
4c4b4cd2 3638 struct ada_symbol_info sym = syms[i];
14f9c5c9
AS
3639 int j;
3640
d2e4a39e 3641 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2
PH
3642 {
3643 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3644 SYMBOL_LINKAGE_NAME (sym.sym)))
3645 break;
3646 syms[j + 1] = syms[j];
3647 }
d2e4a39e 3648 syms[j + 1] = sym;
14f9c5c9
AS
3649 }
3650}
3651
4c4b4cd2
PH
3652/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3653 by asking the user (if necessary), returning the number selected,
3654 and setting the first elements of SYMS items. Error if no symbols
3655 selected. */
14f9c5c9
AS
3656
3657/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3658 to be re-integrated one of these days. */
14f9c5c9
AS
3659
3660int
4c4b4cd2 3661user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
14f9c5c9
AS
3662{
3663 int i;
d2e4a39e 3664 int *chosen = (int *) alloca (sizeof (int) * nsyms);
14f9c5c9
AS
3665 int n_chosen;
3666 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3667 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3668
3669 if (max_results < 1)
323e0a4a 3670 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3671 if (nsyms <= 1)
3672 return nsyms;
3673
717d2f5a
JB
3674 if (select_mode == multiple_symbols_cancel)
3675 error (_("\
3676canceled because the command is ambiguous\n\
3677See set/show multiple-symbol."));
3678
3679 /* If select_mode is "all", then return all possible symbols.
3680 Only do that if more than one symbol can be selected, of course.
3681 Otherwise, display the menu as usual. */
3682 if (select_mode == multiple_symbols_all && max_results > 1)
3683 return nsyms;
3684
323e0a4a 3685 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3686 if (max_results > 1)
323e0a4a 3687 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3688
4c4b4cd2 3689 sort_choices (syms, nsyms);
14f9c5c9
AS
3690
3691 for (i = 0; i < nsyms; i += 1)
3692 {
4c4b4cd2
PH
3693 if (syms[i].sym == NULL)
3694 continue;
3695
3696 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3697 {
76a01679
JB
3698 struct symtab_and_line sal =
3699 find_function_start_sal (syms[i].sym, 1);
5b4ee69b 3700
323e0a4a
AC
3701 if (sal.symtab == NULL)
3702 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3703 i + first_choice,
3704 SYMBOL_PRINT_NAME (syms[i].sym),
3705 sal.line);
3706 else
3707 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3708 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3709 symtab_to_filename_for_display (sal.symtab),
3710 sal.line);
4c4b4cd2
PH
3711 continue;
3712 }
d2e4a39e 3713 else
4c4b4cd2
PH
3714 {
3715 int is_enumeral =
3716 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3717 && SYMBOL_TYPE (syms[i].sym) != NULL
3718 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
1994afbf
DE
3719 struct symtab *symtab = NULL;
3720
3721 if (SYMBOL_OBJFILE_OWNED (syms[i].sym))
3722 symtab = symbol_symtab (syms[i].sym);
4c4b4cd2
PH
3723
3724 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
323e0a4a 3725 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2
PH
3726 i + first_choice,
3727 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3728 symtab_to_filename_for_display (symtab),
3729 SYMBOL_LINE (syms[i].sym));
76a01679
JB
3730 else if (is_enumeral
3731 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
4c4b4cd2 3732 {
a3f17187 3733 printf_unfiltered (("[%d] "), i + first_choice);
76a01679 3734 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
79d43c61 3735 gdb_stdout, -1, 0, &type_print_raw_options);
323e0a4a 3736 printf_unfiltered (_("'(%s) (enumeral)\n"),
4c4b4cd2
PH
3737 SYMBOL_PRINT_NAME (syms[i].sym));
3738 }
3739 else if (symtab != NULL)
3740 printf_unfiltered (is_enumeral
323e0a4a
AC
3741 ? _("[%d] %s in %s (enumeral)\n")
3742 : _("[%d] %s at %s:?\n"),
4c4b4cd2
PH
3743 i + first_choice,
3744 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821 3745 symtab_to_filename_for_display (symtab));
4c4b4cd2
PH
3746 else
3747 printf_unfiltered (is_enumeral
323e0a4a
AC
3748 ? _("[%d] %s (enumeral)\n")
3749 : _("[%d] %s at ?\n"),
4c4b4cd2
PH
3750 i + first_choice,
3751 SYMBOL_PRINT_NAME (syms[i].sym));
3752 }
14f9c5c9 3753 }
d2e4a39e 3754
14f9c5c9 3755 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3756 "overload-choice");
14f9c5c9
AS
3757
3758 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3759 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3760
3761 return n_chosen;
3762}
3763
3764/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3765 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3766 order in CHOICES[0 .. N-1], and return N.
3767
3768 The user types choices as a sequence of numbers on one line
3769 separated by blanks, encoding them as follows:
3770
4c4b4cd2 3771 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3772 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3773 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3774
4c4b4cd2 3775 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3776
3777 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3778 prompts (for use with the -f switch). */
14f9c5c9
AS
3779
3780int
d2e4a39e 3781get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3782 int is_all_choice, char *annotation_suffix)
14f9c5c9 3783{
d2e4a39e 3784 char *args;
0bcd0149 3785 char *prompt;
14f9c5c9
AS
3786 int n_chosen;
3787 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3788
14f9c5c9
AS
3789 prompt = getenv ("PS2");
3790 if (prompt == NULL)
0bcd0149 3791 prompt = "> ";
14f9c5c9 3792
0bcd0149 3793 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3794
14f9c5c9 3795 if (args == NULL)
323e0a4a 3796 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3797
3798 n_chosen = 0;
76a01679 3799
4c4b4cd2
PH
3800 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3801 order, as given in args. Choices are validated. */
14f9c5c9
AS
3802 while (1)
3803 {
d2e4a39e 3804 char *args2;
14f9c5c9
AS
3805 int choice, j;
3806
0fcd72ba 3807 args = skip_spaces (args);
14f9c5c9 3808 if (*args == '\0' && n_chosen == 0)
323e0a4a 3809 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3810 else if (*args == '\0')
4c4b4cd2 3811 break;
14f9c5c9
AS
3812
3813 choice = strtol (args, &args2, 10);
d2e4a39e 3814 if (args == args2 || choice < 0
4c4b4cd2 3815 || choice > n_choices + first_choice - 1)
323e0a4a 3816 error (_("Argument must be choice number"));
14f9c5c9
AS
3817 args = args2;
3818
d2e4a39e 3819 if (choice == 0)
323e0a4a 3820 error (_("cancelled"));
14f9c5c9
AS
3821
3822 if (choice < first_choice)
4c4b4cd2
PH
3823 {
3824 n_chosen = n_choices;
3825 for (j = 0; j < n_choices; j += 1)
3826 choices[j] = j;
3827 break;
3828 }
14f9c5c9
AS
3829 choice -= first_choice;
3830
d2e4a39e 3831 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3832 {
3833 }
14f9c5c9
AS
3834
3835 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3836 {
3837 int k;
5b4ee69b 3838
4c4b4cd2
PH
3839 for (k = n_chosen - 1; k > j; k -= 1)
3840 choices[k + 1] = choices[k];
3841 choices[j + 1] = choice;
3842 n_chosen += 1;
3843 }
14f9c5c9
AS
3844 }
3845
3846 if (n_chosen > max_results)
323e0a4a 3847 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3848
14f9c5c9
AS
3849 return n_chosen;
3850}
3851
4c4b4cd2
PH
3852/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3853 on the function identified by SYM and BLOCK, and taking NARGS
3854 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3855
3856static void
d2e4a39e 3857replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2 3858 int oplen, struct symbol *sym,
270140bd 3859 const struct block *block)
14f9c5c9
AS
3860{
3861 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 3862 symbol, -oplen for operator being replaced). */
d2e4a39e 3863 struct expression *newexp = (struct expression *)
8c1a34e7 3864 xzalloc (sizeof (struct expression)
4c4b4cd2 3865 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 3866 struct expression *exp = *expp;
14f9c5c9
AS
3867
3868 newexp->nelts = exp->nelts + 7 - oplen;
3869 newexp->language_defn = exp->language_defn;
3489610d 3870 newexp->gdbarch = exp->gdbarch;
14f9c5c9 3871 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 3872 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 3873 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
3874
3875 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3876 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3877
3878 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3879 newexp->elts[pc + 4].block = block;
3880 newexp->elts[pc + 5].symbol = sym;
3881
3882 *expp = newexp;
aacb1f0a 3883 xfree (exp);
d2e4a39e 3884}
14f9c5c9
AS
3885
3886/* Type-class predicates */
3887
4c4b4cd2
PH
3888/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3889 or FLOAT). */
14f9c5c9
AS
3890
3891static int
d2e4a39e 3892numeric_type_p (struct type *type)
14f9c5c9
AS
3893{
3894 if (type == NULL)
3895 return 0;
d2e4a39e
AS
3896 else
3897 {
3898 switch (TYPE_CODE (type))
4c4b4cd2
PH
3899 {
3900 case TYPE_CODE_INT:
3901 case TYPE_CODE_FLT:
3902 return 1;
3903 case TYPE_CODE_RANGE:
3904 return (type == TYPE_TARGET_TYPE (type)
3905 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3906 default:
3907 return 0;
3908 }
d2e4a39e 3909 }
14f9c5c9
AS
3910}
3911
4c4b4cd2 3912/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
3913
3914static int
d2e4a39e 3915integer_type_p (struct type *type)
14f9c5c9
AS
3916{
3917 if (type == NULL)
3918 return 0;
d2e4a39e
AS
3919 else
3920 {
3921 switch (TYPE_CODE (type))
4c4b4cd2
PH
3922 {
3923 case TYPE_CODE_INT:
3924 return 1;
3925 case TYPE_CODE_RANGE:
3926 return (type == TYPE_TARGET_TYPE (type)
3927 || integer_type_p (TYPE_TARGET_TYPE (type)));
3928 default:
3929 return 0;
3930 }
d2e4a39e 3931 }
14f9c5c9
AS
3932}
3933
4c4b4cd2 3934/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
3935
3936static int
d2e4a39e 3937scalar_type_p (struct type *type)
14f9c5c9
AS
3938{
3939 if (type == NULL)
3940 return 0;
d2e4a39e
AS
3941 else
3942 {
3943 switch (TYPE_CODE (type))
4c4b4cd2
PH
3944 {
3945 case TYPE_CODE_INT:
3946 case TYPE_CODE_RANGE:
3947 case TYPE_CODE_ENUM:
3948 case TYPE_CODE_FLT:
3949 return 1;
3950 default:
3951 return 0;
3952 }
d2e4a39e 3953 }
14f9c5c9
AS
3954}
3955
4c4b4cd2 3956/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
3957
3958static int
d2e4a39e 3959discrete_type_p (struct type *type)
14f9c5c9
AS
3960{
3961 if (type == NULL)
3962 return 0;
d2e4a39e
AS
3963 else
3964 {
3965 switch (TYPE_CODE (type))
4c4b4cd2
PH
3966 {
3967 case TYPE_CODE_INT:
3968 case TYPE_CODE_RANGE:
3969 case TYPE_CODE_ENUM:
872f0337 3970 case TYPE_CODE_BOOL:
4c4b4cd2
PH
3971 return 1;
3972 default:
3973 return 0;
3974 }
d2e4a39e 3975 }
14f9c5c9
AS
3976}
3977
4c4b4cd2
PH
3978/* Returns non-zero if OP with operands in the vector ARGS could be
3979 a user-defined function. Errs on the side of pre-defined operators
3980 (i.e., result 0). */
14f9c5c9
AS
3981
3982static int
d2e4a39e 3983possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 3984{
76a01679 3985 struct type *type0 =
df407dfe 3986 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 3987 struct type *type1 =
df407dfe 3988 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 3989
4c4b4cd2
PH
3990 if (type0 == NULL)
3991 return 0;
3992
14f9c5c9
AS
3993 switch (op)
3994 {
3995 default:
3996 return 0;
3997
3998 case BINOP_ADD:
3999 case BINOP_SUB:
4000 case BINOP_MUL:
4001 case BINOP_DIV:
d2e4a39e 4002 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4003
4004 case BINOP_REM:
4005 case BINOP_MOD:
4006 case BINOP_BITWISE_AND:
4007 case BINOP_BITWISE_IOR:
4008 case BINOP_BITWISE_XOR:
d2e4a39e 4009 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4010
4011 case BINOP_EQUAL:
4012 case BINOP_NOTEQUAL:
4013 case BINOP_LESS:
4014 case BINOP_GTR:
4015 case BINOP_LEQ:
4016 case BINOP_GEQ:
d2e4a39e 4017 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4018
4019 case BINOP_CONCAT:
ee90b9ab 4020 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4021
4022 case BINOP_EXP:
d2e4a39e 4023 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4024
4025 case UNOP_NEG:
4026 case UNOP_PLUS:
4027 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4028 case UNOP_ABS:
4029 return (!numeric_type_p (type0));
14f9c5c9
AS
4030
4031 }
4032}
4033\f
4c4b4cd2 4034 /* Renaming */
14f9c5c9 4035
aeb5907d
JB
4036/* NOTES:
4037
4038 1. In the following, we assume that a renaming type's name may
4039 have an ___XD suffix. It would be nice if this went away at some
4040 point.
4041 2. We handle both the (old) purely type-based representation of
4042 renamings and the (new) variable-based encoding. At some point,
4043 it is devoutly to be hoped that the former goes away
4044 (FIXME: hilfinger-2007-07-09).
4045 3. Subprogram renamings are not implemented, although the XRS
4046 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4047
4048/* If SYM encodes a renaming,
4049
4050 <renaming> renames <renamed entity>,
4051
4052 sets *LEN to the length of the renamed entity's name,
4053 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4054 the string describing the subcomponent selected from the renamed
0963b4bd 4055 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4056 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4057 are undefined). Otherwise, returns a value indicating the category
4058 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4059 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4060 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4061 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4062 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4063 may be NULL, in which case they are not assigned.
4064
4065 [Currently, however, GCC does not generate subprogram renamings.] */
4066
4067enum ada_renaming_category
4068ada_parse_renaming (struct symbol *sym,
4069 const char **renamed_entity, int *len,
4070 const char **renaming_expr)
4071{
4072 enum ada_renaming_category kind;
4073 const char *info;
4074 const char *suffix;
4075
4076 if (sym == NULL)
4077 return ADA_NOT_RENAMING;
4078 switch (SYMBOL_CLASS (sym))
14f9c5c9 4079 {
aeb5907d
JB
4080 default:
4081 return ADA_NOT_RENAMING;
4082 case LOC_TYPEDEF:
4083 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4084 renamed_entity, len, renaming_expr);
4085 case LOC_LOCAL:
4086 case LOC_STATIC:
4087 case LOC_COMPUTED:
4088 case LOC_OPTIMIZED_OUT:
4089 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4090 if (info == NULL)
4091 return ADA_NOT_RENAMING;
4092 switch (info[5])
4093 {
4094 case '_':
4095 kind = ADA_OBJECT_RENAMING;
4096 info += 6;
4097 break;
4098 case 'E':
4099 kind = ADA_EXCEPTION_RENAMING;
4100 info += 7;
4101 break;
4102 case 'P':
4103 kind = ADA_PACKAGE_RENAMING;
4104 info += 7;
4105 break;
4106 case 'S':
4107 kind = ADA_SUBPROGRAM_RENAMING;
4108 info += 7;
4109 break;
4110 default:
4111 return ADA_NOT_RENAMING;
4112 }
14f9c5c9 4113 }
4c4b4cd2 4114
aeb5907d
JB
4115 if (renamed_entity != NULL)
4116 *renamed_entity = info;
4117 suffix = strstr (info, "___XE");
4118 if (suffix == NULL || suffix == info)
4119 return ADA_NOT_RENAMING;
4120 if (len != NULL)
4121 *len = strlen (info) - strlen (suffix);
4122 suffix += 5;
4123 if (renaming_expr != NULL)
4124 *renaming_expr = suffix;
4125 return kind;
4126}
4127
4128/* Assuming TYPE encodes a renaming according to the old encoding in
4129 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4130 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4131 ADA_NOT_RENAMING otherwise. */
4132static enum ada_renaming_category
4133parse_old_style_renaming (struct type *type,
4134 const char **renamed_entity, int *len,
4135 const char **renaming_expr)
4136{
4137 enum ada_renaming_category kind;
4138 const char *name;
4139 const char *info;
4140 const char *suffix;
14f9c5c9 4141
aeb5907d
JB
4142 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4143 || TYPE_NFIELDS (type) != 1)
4144 return ADA_NOT_RENAMING;
14f9c5c9 4145
aeb5907d
JB
4146 name = type_name_no_tag (type);
4147 if (name == NULL)
4148 return ADA_NOT_RENAMING;
4149
4150 name = strstr (name, "___XR");
4151 if (name == NULL)
4152 return ADA_NOT_RENAMING;
4153 switch (name[5])
4154 {
4155 case '\0':
4156 case '_':
4157 kind = ADA_OBJECT_RENAMING;
4158 break;
4159 case 'E':
4160 kind = ADA_EXCEPTION_RENAMING;
4161 break;
4162 case 'P':
4163 kind = ADA_PACKAGE_RENAMING;
4164 break;
4165 case 'S':
4166 kind = ADA_SUBPROGRAM_RENAMING;
4167 break;
4168 default:
4169 return ADA_NOT_RENAMING;
4170 }
14f9c5c9 4171
aeb5907d
JB
4172 info = TYPE_FIELD_NAME (type, 0);
4173 if (info == NULL)
4174 return ADA_NOT_RENAMING;
4175 if (renamed_entity != NULL)
4176 *renamed_entity = info;
4177 suffix = strstr (info, "___XE");
4178 if (renaming_expr != NULL)
4179 *renaming_expr = suffix + 5;
4180 if (suffix == NULL || suffix == info)
4181 return ADA_NOT_RENAMING;
4182 if (len != NULL)
4183 *len = suffix - info;
4184 return kind;
a5ee536b
JB
4185}
4186
4187/* Compute the value of the given RENAMING_SYM, which is expected to
4188 be a symbol encoding a renaming expression. BLOCK is the block
4189 used to evaluate the renaming. */
52ce6436 4190
a5ee536b
JB
4191static struct value *
4192ada_read_renaming_var_value (struct symbol *renaming_sym,
3977b71f 4193 const struct block *block)
a5ee536b 4194{
bbc13ae3 4195 const char *sym_name;
a5ee536b
JB
4196 struct expression *expr;
4197 struct value *value;
4198 struct cleanup *old_chain = NULL;
4199
bbc13ae3 4200 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
1bb9788d 4201 expr = parse_exp_1 (&sym_name, 0, block, 0);
bbc13ae3 4202 old_chain = make_cleanup (free_current_contents, &expr);
a5ee536b
JB
4203 value = evaluate_expression (expr);
4204
4205 do_cleanups (old_chain);
4206 return value;
4207}
14f9c5c9 4208\f
d2e4a39e 4209
4c4b4cd2 4210 /* Evaluation: Function Calls */
14f9c5c9 4211
4c4b4cd2 4212/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4213 lvalues, and otherwise has the side-effect of allocating memory
4214 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4215
d2e4a39e 4216static struct value *
40bc484c 4217ensure_lval (struct value *val)
14f9c5c9 4218{
40bc484c
JB
4219 if (VALUE_LVAL (val) == not_lval
4220 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4221 {
df407dfe 4222 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4223 const CORE_ADDR addr =
4224 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4225
40bc484c 4226 set_value_address (val, addr);
a84a8a0d 4227 VALUE_LVAL (val) = lval_memory;
40bc484c 4228 write_memory (addr, value_contents (val), len);
c3e5cd34 4229 }
14f9c5c9
AS
4230
4231 return val;
4232}
4233
4234/* Return the value ACTUAL, converted to be an appropriate value for a
4235 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4236 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4237 values not residing in memory, updating it as needed. */
14f9c5c9 4238
a93c0eb6 4239struct value *
40bc484c 4240ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4241{
df407dfe 4242 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4243 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4244 struct type *formal_target =
4245 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4246 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4247 struct type *actual_target =
4248 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4249 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4250
4c4b4cd2 4251 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4252 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4253 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4254 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4255 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4256 {
a84a8a0d 4257 struct value *result;
5b4ee69b 4258
14f9c5c9 4259 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4260 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4261 result = desc_data (actual);
14f9c5c9 4262 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4263 {
4264 if (VALUE_LVAL (actual) != lval_memory)
4265 {
4266 struct value *val;
5b4ee69b 4267
df407dfe 4268 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4269 val = allocate_value (actual_type);
990a07ab 4270 memcpy ((char *) value_contents_raw (val),
0fd88904 4271 (char *) value_contents (actual),
4c4b4cd2 4272 TYPE_LENGTH (actual_type));
40bc484c 4273 actual = ensure_lval (val);
4c4b4cd2 4274 }
a84a8a0d 4275 result = value_addr (actual);
4c4b4cd2 4276 }
a84a8a0d
JB
4277 else
4278 return actual;
b1af9e97 4279 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4280 }
4281 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4282 return ada_value_ind (actual);
4283
4284 return actual;
4285}
4286
438c98a1
JB
4287/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4288 type TYPE. This is usually an inefficient no-op except on some targets
4289 (such as AVR) where the representation of a pointer and an address
4290 differs. */
4291
4292static CORE_ADDR
4293value_pointer (struct value *value, struct type *type)
4294{
4295 struct gdbarch *gdbarch = get_type_arch (type);
4296 unsigned len = TYPE_LENGTH (type);
4297 gdb_byte *buf = alloca (len);
4298 CORE_ADDR addr;
4299
4300 addr = value_address (value);
4301 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4302 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4303 return addr;
4304}
4305
14f9c5c9 4306
4c4b4cd2
PH
4307/* Push a descriptor of type TYPE for array value ARR on the stack at
4308 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4309 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4310 to-descriptor type rather than a descriptor type), a struct value *
4311 representing a pointer to this descriptor. */
14f9c5c9 4312
d2e4a39e 4313static struct value *
40bc484c 4314make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4315{
d2e4a39e
AS
4316 struct type *bounds_type = desc_bounds_type (type);
4317 struct type *desc_type = desc_base_type (type);
4318 struct value *descriptor = allocate_value (desc_type);
4319 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4320 int i;
d2e4a39e 4321
0963b4bd
MS
4322 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4323 i > 0; i -= 1)
14f9c5c9 4324 {
19f220c3
JK
4325 modify_field (value_type (bounds), value_contents_writeable (bounds),
4326 ada_array_bound (arr, i, 0),
4327 desc_bound_bitpos (bounds_type, i, 0),
4328 desc_bound_bitsize (bounds_type, i, 0));
4329 modify_field (value_type (bounds), value_contents_writeable (bounds),
4330 ada_array_bound (arr, i, 1),
4331 desc_bound_bitpos (bounds_type, i, 1),
4332 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4333 }
d2e4a39e 4334
40bc484c 4335 bounds = ensure_lval (bounds);
d2e4a39e 4336
19f220c3
JK
4337 modify_field (value_type (descriptor),
4338 value_contents_writeable (descriptor),
4339 value_pointer (ensure_lval (arr),
4340 TYPE_FIELD_TYPE (desc_type, 0)),
4341 fat_pntr_data_bitpos (desc_type),
4342 fat_pntr_data_bitsize (desc_type));
4343
4344 modify_field (value_type (descriptor),
4345 value_contents_writeable (descriptor),
4346 value_pointer (bounds,
4347 TYPE_FIELD_TYPE (desc_type, 1)),
4348 fat_pntr_bounds_bitpos (desc_type),
4349 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4350
40bc484c 4351 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4352
4353 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4354 return value_addr (descriptor);
4355 else
4356 return descriptor;
4357}
14f9c5c9 4358\f
3d9434b5
JB
4359 /* Symbol Cache Module */
4360
3d9434b5 4361/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4362 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4363 on the type of entity being printed, the cache can make it as much
4364 as an order of magnitude faster than without it.
4365
4366 The descriptive type DWARF extension has significantly reduced
4367 the need for this cache, at least when DWARF is being used. However,
4368 even in this case, some expensive name-based symbol searches are still
4369 sometimes necessary - to find an XVZ variable, mostly. */
4370
ee01b665 4371/* Initialize the contents of SYM_CACHE. */
3d9434b5 4372
ee01b665
JB
4373static void
4374ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4375{
4376 obstack_init (&sym_cache->cache_space);
4377 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4378}
3d9434b5 4379
ee01b665
JB
4380/* Free the memory used by SYM_CACHE. */
4381
4382static void
4383ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4384{
ee01b665
JB
4385 obstack_free (&sym_cache->cache_space, NULL);
4386 xfree (sym_cache);
4387}
3d9434b5 4388
ee01b665
JB
4389/* Return the symbol cache associated to the given program space PSPACE.
4390 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4391
ee01b665
JB
4392static struct ada_symbol_cache *
4393ada_get_symbol_cache (struct program_space *pspace)
4394{
4395 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4396 struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4397
4398 if (sym_cache == NULL)
4399 {
4400 sym_cache = XCNEW (struct ada_symbol_cache);
4401 ada_init_symbol_cache (sym_cache);
4402 }
4403
4404 return sym_cache;
4405}
3d9434b5
JB
4406
4407/* Clear all entries from the symbol cache. */
4408
4409static void
4410ada_clear_symbol_cache (void)
4411{
ee01b665
JB
4412 struct ada_symbol_cache *sym_cache
4413 = ada_get_symbol_cache (current_program_space);
4414
4415 obstack_free (&sym_cache->cache_space, NULL);
4416 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4417}
4418
4419/* Search our cache for an entry matching NAME and NAMESPACE.
4420 Return it if found, or NULL otherwise. */
4421
4422static struct cache_entry **
4423find_entry (const char *name, domain_enum namespace)
4424{
ee01b665
JB
4425 struct ada_symbol_cache *sym_cache
4426 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4427 int h = msymbol_hash (name) % HASH_SIZE;
4428 struct cache_entry **e;
4429
ee01b665 4430 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5
JB
4431 {
4432 if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4433 return e;
4434 }
4435 return NULL;
4436}
4437
4438/* Search the symbol cache for an entry matching NAME and NAMESPACE.
4439 Return 1 if found, 0 otherwise.
4440
4441 If an entry was found and SYM is not NULL, set *SYM to the entry's
4442 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4443
96d887e8
PH
4444static int
4445lookup_cached_symbol (const char *name, domain_enum namespace,
f0c5f9b2 4446 struct symbol **sym, const struct block **block)
96d887e8 4447{
3d9434b5
JB
4448 struct cache_entry **e = find_entry (name, namespace);
4449
4450 if (e == NULL)
4451 return 0;
4452 if (sym != NULL)
4453 *sym = (*e)->sym;
4454 if (block != NULL)
4455 *block = (*e)->block;
4456 return 1;
96d887e8
PH
4457}
4458
3d9434b5
JB
4459/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4460 in domain NAMESPACE, save this result in our symbol cache. */
4461
96d887e8
PH
4462static void
4463cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
270140bd 4464 const struct block *block)
96d887e8 4465{
ee01b665
JB
4466 struct ada_symbol_cache *sym_cache
4467 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4468 int h;
4469 char *copy;
4470 struct cache_entry *e;
4471
1994afbf
DE
4472 /* Symbols for builtin types don't have a block.
4473 For now don't cache such symbols. */
4474 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4475 return;
4476
3d9434b5
JB
4477 /* If the symbol is a local symbol, then do not cache it, as a search
4478 for that symbol depends on the context. To determine whether
4479 the symbol is local or not, we check the block where we found it
4480 against the global and static blocks of its associated symtab. */
4481 if (sym
08be3fe3 4482 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4483 GLOBAL_BLOCK) != block
08be3fe3 4484 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4485 STATIC_BLOCK) != block)
3d9434b5
JB
4486 return;
4487
4488 h = msymbol_hash (name) % HASH_SIZE;
ee01b665
JB
4489 e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4490 sizeof (*e));
4491 e->next = sym_cache->root[h];
4492 sym_cache->root[h] = e;
4493 e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
3d9434b5
JB
4494 strcpy (copy, name);
4495 e->sym = sym;
4496 e->namespace = namespace;
4497 e->block = block;
96d887e8 4498}
4c4b4cd2
PH
4499\f
4500 /* Symbol Lookup */
4501
c0431670
JB
4502/* Return nonzero if wild matching should be used when searching for
4503 all symbols matching LOOKUP_NAME.
4504
4505 LOOKUP_NAME is expected to be a symbol name after transformation
4506 for Ada lookups (see ada_name_for_lookup). */
4507
4508static int
4509should_use_wild_match (const char *lookup_name)
4510{
4511 return (strstr (lookup_name, "__") == NULL);
4512}
4513
4c4b4cd2
PH
4514/* Return the result of a standard (literal, C-like) lookup of NAME in
4515 given DOMAIN, visible from lexical block BLOCK. */
4516
4517static struct symbol *
4518standard_lookup (const char *name, const struct block *block,
4519 domain_enum domain)
4520{
acbd605d
MGD
4521 /* Initialize it just to avoid a GCC false warning. */
4522 struct symbol *sym = NULL;
4c4b4cd2 4523
2570f2b7 4524 if (lookup_cached_symbol (name, domain, &sym, NULL))
4c4b4cd2 4525 return sym;
2570f2b7
UW
4526 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4527 cache_symbol (name, domain, sym, block_found);
4c4b4cd2
PH
4528 return sym;
4529}
4530
4531
4532/* Non-zero iff there is at least one non-function/non-enumeral symbol
4533 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4534 since they contend in overloading in the same way. */
4535static int
4536is_nonfunction (struct ada_symbol_info syms[], int n)
4537{
4538 int i;
4539
4540 for (i = 0; i < n; i += 1)
4541 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4542 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4543 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
14f9c5c9
AS
4544 return 1;
4545
4546 return 0;
4547}
4548
4549/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4550 struct types. Otherwise, they may not. */
14f9c5c9
AS
4551
4552static int
d2e4a39e 4553equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4554{
d2e4a39e 4555 if (type0 == type1)
14f9c5c9 4556 return 1;
d2e4a39e 4557 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4558 || TYPE_CODE (type0) != TYPE_CODE (type1))
4559 return 0;
d2e4a39e 4560 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4561 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4562 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4563 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4564 return 1;
d2e4a39e 4565
14f9c5c9
AS
4566 return 0;
4567}
4568
4569/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4570 no more defined than that of SYM1. */
14f9c5c9
AS
4571
4572static int
d2e4a39e 4573lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4574{
4575 if (sym0 == sym1)
4576 return 1;
176620f1 4577 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4578 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4579 return 0;
4580
d2e4a39e 4581 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4582 {
4583 case LOC_UNDEF:
4584 return 1;
4585 case LOC_TYPEDEF:
4586 {
4c4b4cd2
PH
4587 struct type *type0 = SYMBOL_TYPE (sym0);
4588 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4589 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4590 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4591 int len0 = strlen (name0);
5b4ee69b 4592
4c4b4cd2
PH
4593 return
4594 TYPE_CODE (type0) == TYPE_CODE (type1)
4595 && (equiv_types (type0, type1)
4596 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4597 && strncmp (name1 + len0, "___XV", 5) == 0));
14f9c5c9
AS
4598 }
4599 case LOC_CONST:
4600 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4601 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4602 default:
4603 return 0;
14f9c5c9
AS
4604 }
4605}
4606
4c4b4cd2
PH
4607/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4608 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4609
4610static void
76a01679
JB
4611add_defn_to_vec (struct obstack *obstackp,
4612 struct symbol *sym,
f0c5f9b2 4613 const struct block *block)
14f9c5c9
AS
4614{
4615 int i;
4c4b4cd2 4616 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4617
529cad9c
PH
4618 /* Do not try to complete stub types, as the debugger is probably
4619 already scanning all symbols matching a certain name at the
4620 time when this function is called. Trying to replace the stub
4621 type by its associated full type will cause us to restart a scan
4622 which may lead to an infinite recursion. Instead, the client
4623 collecting the matching symbols will end up collecting several
4624 matches, with at least one of them complete. It can then filter
4625 out the stub ones if needed. */
4626
4c4b4cd2
PH
4627 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4628 {
4629 if (lesseq_defined_than (sym, prevDefns[i].sym))
4630 return;
4631 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4632 {
4633 prevDefns[i].sym = sym;
4634 prevDefns[i].block = block;
4c4b4cd2 4635 return;
76a01679 4636 }
4c4b4cd2
PH
4637 }
4638
4639 {
4640 struct ada_symbol_info info;
4641
4642 info.sym = sym;
4643 info.block = block;
4c4b4cd2
PH
4644 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4645 }
4646}
4647
4648/* Number of ada_symbol_info structures currently collected in
4649 current vector in *OBSTACKP. */
4650
76a01679
JB
4651static int
4652num_defns_collected (struct obstack *obstackp)
4c4b4cd2
PH
4653{
4654 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4655}
4656
4657/* Vector of ada_symbol_info structures currently collected in current
4658 vector in *OBSTACKP. If FINISH, close off the vector and return
4659 its final address. */
4660
76a01679 4661static struct ada_symbol_info *
4c4b4cd2
PH
4662defns_collected (struct obstack *obstackp, int finish)
4663{
4664 if (finish)
4665 return obstack_finish (obstackp);
4666 else
4667 return (struct ada_symbol_info *) obstack_base (obstackp);
4668}
4669
7c7b6655
TT
4670/* Return a bound minimal symbol matching NAME according to Ada
4671 decoding rules. Returns an invalid symbol if there is no such
4672 minimal symbol. Names prefixed with "standard__" are handled
4673 specially: "standard__" is first stripped off, and only static and
4674 global symbols are searched. */
4c4b4cd2 4675
7c7b6655 4676struct bound_minimal_symbol
96d887e8 4677ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4678{
7c7b6655 4679 struct bound_minimal_symbol result;
4c4b4cd2 4680 struct objfile *objfile;
96d887e8 4681 struct minimal_symbol *msymbol;
dc4024cd 4682 const int wild_match_p = should_use_wild_match (name);
4c4b4cd2 4683
7c7b6655
TT
4684 memset (&result, 0, sizeof (result));
4685
c0431670
JB
4686 /* Special case: If the user specifies a symbol name inside package
4687 Standard, do a non-wild matching of the symbol name without
4688 the "standard__" prefix. This was primarily introduced in order
4689 to allow the user to specifically access the standard exceptions
4690 using, for instance, Standard.Constraint_Error when Constraint_Error
4691 is ambiguous (due to the user defining its own Constraint_Error
4692 entity inside its program). */
96d887e8 4693 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
c0431670 4694 name += sizeof ("standard__") - 1;
4c4b4cd2 4695
96d887e8
PH
4696 ALL_MSYMBOLS (objfile, msymbol)
4697 {
efd66ac6 4698 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
96d887e8 4699 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
7c7b6655
TT
4700 {
4701 result.minsym = msymbol;
4702 result.objfile = objfile;
4703 break;
4704 }
96d887e8 4705 }
4c4b4cd2 4706
7c7b6655 4707 return result;
96d887e8 4708}
4c4b4cd2 4709
96d887e8
PH
4710/* For all subprograms that statically enclose the subprogram of the
4711 selected frame, add symbols matching identifier NAME in DOMAIN
4712 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4713 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4714 with a wildcard prefix. */
4c4b4cd2 4715
96d887e8
PH
4716static void
4717add_symbols_from_enclosing_procs (struct obstack *obstackp,
76a01679 4718 const char *name, domain_enum namespace,
48b78332 4719 int wild_match_p)
96d887e8 4720{
96d887e8 4721}
14f9c5c9 4722
96d887e8
PH
4723/* True if TYPE is definitely an artificial type supplied to a symbol
4724 for which no debugging information was given in the symbol file. */
14f9c5c9 4725
96d887e8
PH
4726static int
4727is_nondebugging_type (struct type *type)
4728{
0d5cff50 4729 const char *name = ada_type_name (type);
5b4ee69b 4730
96d887e8
PH
4731 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4732}
4c4b4cd2 4733
8f17729f
JB
4734/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4735 that are deemed "identical" for practical purposes.
4736
4737 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4738 types and that their number of enumerals is identical (in other
4739 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4740
4741static int
4742ada_identical_enum_types_p (struct type *type1, struct type *type2)
4743{
4744 int i;
4745
4746 /* The heuristic we use here is fairly conservative. We consider
4747 that 2 enumerate types are identical if they have the same
4748 number of enumerals and that all enumerals have the same
4749 underlying value and name. */
4750
4751 /* All enums in the type should have an identical underlying value. */
4752 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 4753 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4754 return 0;
4755
4756 /* All enumerals should also have the same name (modulo any numerical
4757 suffix). */
4758 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4759 {
0d5cff50
DE
4760 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4761 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4762 int len_1 = strlen (name_1);
4763 int len_2 = strlen (name_2);
4764
4765 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4766 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4767 if (len_1 != len_2
4768 || strncmp (TYPE_FIELD_NAME (type1, i),
4769 TYPE_FIELD_NAME (type2, i),
4770 len_1) != 0)
4771 return 0;
4772 }
4773
4774 return 1;
4775}
4776
4777/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4778 that are deemed "identical" for practical purposes. Sometimes,
4779 enumerals are not strictly identical, but their types are so similar
4780 that they can be considered identical.
4781
4782 For instance, consider the following code:
4783
4784 type Color is (Black, Red, Green, Blue, White);
4785 type RGB_Color is new Color range Red .. Blue;
4786
4787 Type RGB_Color is a subrange of an implicit type which is a copy
4788 of type Color. If we call that implicit type RGB_ColorB ("B" is
4789 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4790 As a result, when an expression references any of the enumeral
4791 by name (Eg. "print green"), the expression is technically
4792 ambiguous and the user should be asked to disambiguate. But
4793 doing so would only hinder the user, since it wouldn't matter
4794 what choice he makes, the outcome would always be the same.
4795 So, for practical purposes, we consider them as the same. */
4796
4797static int
4798symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4799{
4800 int i;
4801
4802 /* Before performing a thorough comparison check of each type,
4803 we perform a series of inexpensive checks. We expect that these
4804 checks will quickly fail in the vast majority of cases, and thus
4805 help prevent the unnecessary use of a more expensive comparison.
4806 Said comparison also expects us to make some of these checks
4807 (see ada_identical_enum_types_p). */
4808
4809 /* Quick check: All symbols should have an enum type. */
4810 for (i = 0; i < nsyms; i++)
4811 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4812 return 0;
4813
4814 /* Quick check: They should all have the same value. */
4815 for (i = 1; i < nsyms; i++)
4816 if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4817 return 0;
4818
4819 /* Quick check: They should all have the same number of enumerals. */
4820 for (i = 1; i < nsyms; i++)
4821 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4822 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4823 return 0;
4824
4825 /* All the sanity checks passed, so we might have a set of
4826 identical enumeration types. Perform a more complete
4827 comparison of the type of each symbol. */
4828 for (i = 1; i < nsyms; i++)
4829 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4830 SYMBOL_TYPE (syms[0].sym)))
4831 return 0;
4832
4833 return 1;
4834}
4835
96d887e8
PH
4836/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4837 duplicate other symbols in the list (The only case I know of where
4838 this happens is when object files containing stabs-in-ecoff are
4839 linked with files containing ordinary ecoff debugging symbols (or no
4840 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4841 Returns the number of items in the modified list. */
4c4b4cd2 4842
96d887e8
PH
4843static int
4844remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4845{
4846 int i, j;
4c4b4cd2 4847
8f17729f
JB
4848 /* We should never be called with less than 2 symbols, as there
4849 cannot be any extra symbol in that case. But it's easy to
4850 handle, since we have nothing to do in that case. */
4851 if (nsyms < 2)
4852 return nsyms;
4853
96d887e8
PH
4854 i = 0;
4855 while (i < nsyms)
4856 {
a35ddb44 4857 int remove_p = 0;
339c13b6
JB
4858
4859 /* If two symbols have the same name and one of them is a stub type,
4860 the get rid of the stub. */
4861
4862 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4863 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4864 {
4865 for (j = 0; j < nsyms; j++)
4866 {
4867 if (j != i
4868 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4869 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4870 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4871 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
a35ddb44 4872 remove_p = 1;
339c13b6
JB
4873 }
4874 }
4875
4876 /* Two symbols with the same name, same class and same address
4877 should be identical. */
4878
4879 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
96d887e8
PH
4880 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4881 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4882 {
4883 for (j = 0; j < nsyms; j += 1)
4884 {
4885 if (i != j
4886 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4887 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
76a01679 4888 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
96d887e8
PH
4889 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4890 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4891 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
a35ddb44 4892 remove_p = 1;
4c4b4cd2 4893 }
4c4b4cd2 4894 }
339c13b6 4895
a35ddb44 4896 if (remove_p)
339c13b6
JB
4897 {
4898 for (j = i + 1; j < nsyms; j += 1)
4899 syms[j - 1] = syms[j];
4900 nsyms -= 1;
4901 }
4902
96d887e8 4903 i += 1;
14f9c5c9 4904 }
8f17729f
JB
4905
4906 /* If all the remaining symbols are identical enumerals, then
4907 just keep the first one and discard the rest.
4908
4909 Unlike what we did previously, we do not discard any entry
4910 unless they are ALL identical. This is because the symbol
4911 comparison is not a strict comparison, but rather a practical
4912 comparison. If all symbols are considered identical, then
4913 we can just go ahead and use the first one and discard the rest.
4914 But if we cannot reduce the list to a single element, we have
4915 to ask the user to disambiguate anyways. And if we have to
4916 present a multiple-choice menu, it's less confusing if the list
4917 isn't missing some choices that were identical and yet distinct. */
4918 if (symbols_are_identical_enums (syms, nsyms))
4919 nsyms = 1;
4920
96d887e8 4921 return nsyms;
14f9c5c9
AS
4922}
4923
96d887e8
PH
4924/* Given a type that corresponds to a renaming entity, use the type name
4925 to extract the scope (package name or function name, fully qualified,
4926 and following the GNAT encoding convention) where this renaming has been
4927 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 4928
96d887e8
PH
4929static char *
4930xget_renaming_scope (struct type *renaming_type)
14f9c5c9 4931{
96d887e8 4932 /* The renaming types adhere to the following convention:
0963b4bd 4933 <scope>__<rename>___<XR extension>.
96d887e8
PH
4934 So, to extract the scope, we search for the "___XR" extension,
4935 and then backtrack until we find the first "__". */
76a01679 4936
96d887e8
PH
4937 const char *name = type_name_no_tag (renaming_type);
4938 char *suffix = strstr (name, "___XR");
4939 char *last;
4940 int scope_len;
4941 char *scope;
14f9c5c9 4942
96d887e8
PH
4943 /* Now, backtrack a bit until we find the first "__". Start looking
4944 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 4945
96d887e8
PH
4946 for (last = suffix - 3; last > name; last--)
4947 if (last[0] == '_' && last[1] == '_')
4948 break;
76a01679 4949
96d887e8 4950 /* Make a copy of scope and return it. */
14f9c5c9 4951
96d887e8
PH
4952 scope_len = last - name;
4953 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 4954
96d887e8
PH
4955 strncpy (scope, name, scope_len);
4956 scope[scope_len] = '\0';
4c4b4cd2 4957
96d887e8 4958 return scope;
4c4b4cd2
PH
4959}
4960
96d887e8 4961/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 4962
96d887e8
PH
4963static int
4964is_package_name (const char *name)
4c4b4cd2 4965{
96d887e8
PH
4966 /* Here, We take advantage of the fact that no symbols are generated
4967 for packages, while symbols are generated for each function.
4968 So the condition for NAME represent a package becomes equivalent
4969 to NAME not existing in our list of symbols. There is only one
4970 small complication with library-level functions (see below). */
4c4b4cd2 4971
96d887e8 4972 char *fun_name;
76a01679 4973
96d887e8
PH
4974 /* If it is a function that has not been defined at library level,
4975 then we should be able to look it up in the symbols. */
4976 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4977 return 0;
14f9c5c9 4978
96d887e8
PH
4979 /* Library-level function names start with "_ada_". See if function
4980 "_ada_" followed by NAME can be found. */
14f9c5c9 4981
96d887e8 4982 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 4983 functions names cannot contain "__" in them. */
96d887e8
PH
4984 if (strstr (name, "__") != NULL)
4985 return 0;
4c4b4cd2 4986
b435e160 4987 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 4988
96d887e8
PH
4989 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4990}
14f9c5c9 4991
96d887e8 4992/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 4993 not visible from FUNCTION_NAME. */
14f9c5c9 4994
96d887e8 4995static int
0d5cff50 4996old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 4997{
aeb5907d 4998 char *scope;
1509e573 4999 struct cleanup *old_chain;
aeb5907d
JB
5000
5001 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5002 return 0;
5003
5004 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
1509e573 5005 old_chain = make_cleanup (xfree, scope);
14f9c5c9 5006
96d887e8
PH
5007 /* If the rename has been defined in a package, then it is visible. */
5008 if (is_package_name (scope))
1509e573
JB
5009 {
5010 do_cleanups (old_chain);
5011 return 0;
5012 }
14f9c5c9 5013
96d887e8
PH
5014 /* Check that the rename is in the current function scope by checking
5015 that its name starts with SCOPE. */
76a01679 5016
96d887e8
PH
5017 /* If the function name starts with "_ada_", it means that it is
5018 a library-level function. Strip this prefix before doing the
5019 comparison, as the encoding for the renaming does not contain
5020 this prefix. */
5021 if (strncmp (function_name, "_ada_", 5) == 0)
5022 function_name += 5;
f26caa11 5023
1509e573
JB
5024 {
5025 int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
5026
5027 do_cleanups (old_chain);
5028 return is_invisible;
5029 }
f26caa11
PH
5030}
5031
aeb5907d
JB
5032/* Remove entries from SYMS that corresponds to a renaming entity that
5033 is not visible from the function associated with CURRENT_BLOCK or
5034 that is superfluous due to the presence of more specific renaming
5035 information. Places surviving symbols in the initial entries of
5036 SYMS and returns the number of surviving symbols.
96d887e8
PH
5037
5038 Rationale:
aeb5907d
JB
5039 First, in cases where an object renaming is implemented as a
5040 reference variable, GNAT may produce both the actual reference
5041 variable and the renaming encoding. In this case, we discard the
5042 latter.
5043
5044 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5045 entity. Unfortunately, STABS currently does not support the definition
5046 of types that are local to a given lexical block, so all renamings types
5047 are emitted at library level. As a consequence, if an application
5048 contains two renaming entities using the same name, and a user tries to
5049 print the value of one of these entities, the result of the ada symbol
5050 lookup will also contain the wrong renaming type.
f26caa11 5051
96d887e8
PH
5052 This function partially covers for this limitation by attempting to
5053 remove from the SYMS list renaming symbols that should be visible
5054 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5055 method with the current information available. The implementation
5056 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5057
5058 - When the user tries to print a rename in a function while there
5059 is another rename entity defined in a package: Normally, the
5060 rename in the function has precedence over the rename in the
5061 package, so the latter should be removed from the list. This is
5062 currently not the case.
5063
5064 - This function will incorrectly remove valid renames if
5065 the CURRENT_BLOCK corresponds to a function which symbol name
5066 has been changed by an "Export" pragma. As a consequence,
5067 the user will be unable to print such rename entities. */
4c4b4cd2 5068
14f9c5c9 5069static int
aeb5907d
JB
5070remove_irrelevant_renamings (struct ada_symbol_info *syms,
5071 int nsyms, const struct block *current_block)
4c4b4cd2
PH
5072{
5073 struct symbol *current_function;
0d5cff50 5074 const char *current_function_name;
4c4b4cd2 5075 int i;
aeb5907d
JB
5076 int is_new_style_renaming;
5077
5078 /* If there is both a renaming foo___XR... encoded as a variable and
5079 a simple variable foo in the same block, discard the latter.
0963b4bd 5080 First, zero out such symbols, then compress. */
aeb5907d
JB
5081 is_new_style_renaming = 0;
5082 for (i = 0; i < nsyms; i += 1)
5083 {
5084 struct symbol *sym = syms[i].sym;
270140bd 5085 const struct block *block = syms[i].block;
aeb5907d
JB
5086 const char *name;
5087 const char *suffix;
5088
5089 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5090 continue;
5091 name = SYMBOL_LINKAGE_NAME (sym);
5092 suffix = strstr (name, "___XR");
5093
5094 if (suffix != NULL)
5095 {
5096 int name_len = suffix - name;
5097 int j;
5b4ee69b 5098
aeb5907d
JB
5099 is_new_style_renaming = 1;
5100 for (j = 0; j < nsyms; j += 1)
5101 if (i != j && syms[j].sym != NULL
5102 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5103 name_len) == 0
5104 && block == syms[j].block)
5105 syms[j].sym = NULL;
5106 }
5107 }
5108 if (is_new_style_renaming)
5109 {
5110 int j, k;
5111
5112 for (j = k = 0; j < nsyms; j += 1)
5113 if (syms[j].sym != NULL)
5114 {
5115 syms[k] = syms[j];
5116 k += 1;
5117 }
5118 return k;
5119 }
4c4b4cd2
PH
5120
5121 /* Extract the function name associated to CURRENT_BLOCK.
5122 Abort if unable to do so. */
76a01679 5123
4c4b4cd2
PH
5124 if (current_block == NULL)
5125 return nsyms;
76a01679 5126
7f0df278 5127 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
5128 if (current_function == NULL)
5129 return nsyms;
5130
5131 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5132 if (current_function_name == NULL)
5133 return nsyms;
5134
5135 /* Check each of the symbols, and remove it from the list if it is
5136 a type corresponding to a renaming that is out of the scope of
5137 the current block. */
5138
5139 i = 0;
5140 while (i < nsyms)
5141 {
aeb5907d
JB
5142 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5143 == ADA_OBJECT_RENAMING
5144 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4c4b4cd2
PH
5145 {
5146 int j;
5b4ee69b 5147
aeb5907d 5148 for (j = i + 1; j < nsyms; j += 1)
76a01679 5149 syms[j - 1] = syms[j];
4c4b4cd2
PH
5150 nsyms -= 1;
5151 }
5152 else
5153 i += 1;
5154 }
5155
5156 return nsyms;
5157}
5158
339c13b6
JB
5159/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5160 whose name and domain match NAME and DOMAIN respectively.
5161 If no match was found, then extend the search to "enclosing"
5162 routines (in other words, if we're inside a nested function,
5163 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5164 If WILD_MATCH_P is nonzero, perform the naming matching in
5165 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5166
5167 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5168
5169static void
5170ada_add_local_symbols (struct obstack *obstackp, const char *name,
f0c5f9b2 5171 const struct block *block, domain_enum domain,
d0a8ab18 5172 int wild_match_p)
339c13b6
JB
5173{
5174 int block_depth = 0;
5175
5176 while (block != NULL)
5177 {
5178 block_depth += 1;
d0a8ab18
JB
5179 ada_add_block_symbols (obstackp, block, name, domain, NULL,
5180 wild_match_p);
339c13b6
JB
5181
5182 /* If we found a non-function match, assume that's the one. */
5183 if (is_nonfunction (defns_collected (obstackp, 0),
5184 num_defns_collected (obstackp)))
5185 return;
5186
5187 block = BLOCK_SUPERBLOCK (block);
5188 }
5189
5190 /* If no luck so far, try to find NAME as a local symbol in some lexically
5191 enclosing subprogram. */
5192 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
d0a8ab18 5193 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
339c13b6
JB
5194}
5195
ccefe4c4 5196/* An object of this type is used as the user_data argument when
40658b94 5197 calling the map_matching_symbols method. */
ccefe4c4 5198
40658b94 5199struct match_data
ccefe4c4 5200{
40658b94 5201 struct objfile *objfile;
ccefe4c4 5202 struct obstack *obstackp;
40658b94
PH
5203 struct symbol *arg_sym;
5204 int found_sym;
ccefe4c4
TT
5205};
5206
40658b94
PH
5207/* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5208 to a list of symbols. DATA0 is a pointer to a struct match_data *
5209 containing the obstack that collects the symbol list, the file that SYM
5210 must come from, a flag indicating whether a non-argument symbol has
5211 been found in the current block, and the last argument symbol
5212 passed in SYM within the current block (if any). When SYM is null,
5213 marking the end of a block, the argument symbol is added if no
5214 other has been found. */
ccefe4c4 5215
40658b94
PH
5216static int
5217aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 5218{
40658b94
PH
5219 struct match_data *data = (struct match_data *) data0;
5220
5221 if (sym == NULL)
5222 {
5223 if (!data->found_sym && data->arg_sym != NULL)
5224 add_defn_to_vec (data->obstackp,
5225 fixup_symbol_section (data->arg_sym, data->objfile),
5226 block);
5227 data->found_sym = 0;
5228 data->arg_sym = NULL;
5229 }
5230 else
5231 {
5232 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5233 return 0;
5234 else if (SYMBOL_IS_ARGUMENT (sym))
5235 data->arg_sym = sym;
5236 else
5237 {
5238 data->found_sym = 1;
5239 add_defn_to_vec (data->obstackp,
5240 fixup_symbol_section (sym, data->objfile),
5241 block);
5242 }
5243 }
5244 return 0;
5245}
5246
db230ce3
JB
5247/* Implements compare_names, but only applying the comparision using
5248 the given CASING. */
5b4ee69b 5249
40658b94 5250static int
db230ce3
JB
5251compare_names_with_case (const char *string1, const char *string2,
5252 enum case_sensitivity casing)
40658b94
PH
5253{
5254 while (*string1 != '\0' && *string2 != '\0')
5255 {
db230ce3
JB
5256 char c1, c2;
5257
40658b94
PH
5258 if (isspace (*string1) || isspace (*string2))
5259 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5260
5261 if (casing == case_sensitive_off)
5262 {
5263 c1 = tolower (*string1);
5264 c2 = tolower (*string2);
5265 }
5266 else
5267 {
5268 c1 = *string1;
5269 c2 = *string2;
5270 }
5271 if (c1 != c2)
40658b94 5272 break;
db230ce3 5273
40658b94
PH
5274 string1 += 1;
5275 string2 += 1;
5276 }
db230ce3 5277
40658b94
PH
5278 switch (*string1)
5279 {
5280 case '(':
5281 return strcmp_iw_ordered (string1, string2);
5282 case '_':
5283 if (*string2 == '\0')
5284 {
052874e8 5285 if (is_name_suffix (string1))
40658b94
PH
5286 return 0;
5287 else
1a1d5513 5288 return 1;
40658b94 5289 }
dbb8534f 5290 /* FALLTHROUGH */
40658b94
PH
5291 default:
5292 if (*string2 == '(')
5293 return strcmp_iw_ordered (string1, string2);
5294 else
db230ce3
JB
5295 {
5296 if (casing == case_sensitive_off)
5297 return tolower (*string1) - tolower (*string2);
5298 else
5299 return *string1 - *string2;
5300 }
40658b94 5301 }
ccefe4c4
TT
5302}
5303
db230ce3
JB
5304/* Compare STRING1 to STRING2, with results as for strcmp.
5305 Compatible with strcmp_iw_ordered in that...
5306
5307 strcmp_iw_ordered (STRING1, STRING2) <= 0
5308
5309 ... implies...
5310
5311 compare_names (STRING1, STRING2) <= 0
5312
5313 (they may differ as to what symbols compare equal). */
5314
5315static int
5316compare_names (const char *string1, const char *string2)
5317{
5318 int result;
5319
5320 /* Similar to what strcmp_iw_ordered does, we need to perform
5321 a case-insensitive comparison first, and only resort to
5322 a second, case-sensitive, comparison if the first one was
5323 not sufficient to differentiate the two strings. */
5324
5325 result = compare_names_with_case (string1, string2, case_sensitive_off);
5326 if (result == 0)
5327 result = compare_names_with_case (string1, string2, case_sensitive_on);
5328
5329 return result;
5330}
5331
339c13b6
JB
5332/* Add to OBSTACKP all non-local symbols whose name and domain match
5333 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
5334 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
5335
5336static void
40658b94
PH
5337add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5338 domain_enum domain, int global,
5339 int is_wild_match)
339c13b6
JB
5340{
5341 struct objfile *objfile;
40658b94 5342 struct match_data data;
339c13b6 5343
6475f2fe 5344 memset (&data, 0, sizeof data);
ccefe4c4 5345 data.obstackp = obstackp;
339c13b6 5346
ccefe4c4 5347 ALL_OBJFILES (objfile)
40658b94
PH
5348 {
5349 data.objfile = objfile;
5350
5351 if (is_wild_match)
4186eb54
KS
5352 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5353 aux_add_nonlocal_symbols, &data,
5354 wild_match, NULL);
40658b94 5355 else
4186eb54
KS
5356 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5357 aux_add_nonlocal_symbols, &data,
5358 full_match, compare_names);
40658b94
PH
5359 }
5360
5361 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5362 {
5363 ALL_OBJFILES (objfile)
5364 {
5365 char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5366 strcpy (name1, "_ada_");
5367 strcpy (name1 + sizeof ("_ada_") - 1, name);
5368 data.objfile = objfile;
ade7ed9e
DE
5369 objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5370 global,
0963b4bd
MS
5371 aux_add_nonlocal_symbols,
5372 &data,
40658b94
PH
5373 full_match, compare_names);
5374 }
5375 }
339c13b6
JB
5376}
5377
4eeaa230
DE
5378/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5379 non-zero, enclosing scope and in global scopes, returning the number of
5380 matches.
9f88c959 5381 Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4c4b4cd2 5382 indicating the symbols found and the blocks and symbol tables (if
4eeaa230
DE
5383 any) in which they were found. This vector is transient---good only to
5384 the next call of ada_lookup_symbol_list.
5385
5386 When full_search is non-zero, any non-function/non-enumeral
4c4b4cd2
PH
5387 symbol match within the nest of blocks whose innermost member is BLOCK0,
5388 is the one match returned (no other matches in that or
d9680e73 5389 enclosing blocks is returned). If there are any matches in or
4eeaa230
DE
5390 surrounding BLOCK0, then these alone are returned.
5391
9f88c959 5392 Names prefixed with "standard__" are handled specially: "standard__"
4c4b4cd2 5393 is first stripped off, and only static and global symbols are searched. */
14f9c5c9 5394
4eeaa230
DE
5395static int
5396ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5397 domain_enum namespace,
5398 struct ada_symbol_info **results,
5399 int full_search)
14f9c5c9
AS
5400{
5401 struct symbol *sym;
f0c5f9b2 5402 const struct block *block;
4c4b4cd2 5403 const char *name;
82ccd55e 5404 const int wild_match_p = should_use_wild_match (name0);
14f9c5c9 5405 int cacheIfUnique;
4c4b4cd2 5406 int ndefns;
14f9c5c9 5407
4c4b4cd2
PH
5408 obstack_free (&symbol_list_obstack, NULL);
5409 obstack_init (&symbol_list_obstack);
14f9c5c9 5410
14f9c5c9
AS
5411 cacheIfUnique = 0;
5412
5413 /* Search specified block and its superiors. */
5414
4c4b4cd2 5415 name = name0;
f0c5f9b2 5416 block = block0;
339c13b6
JB
5417
5418 /* Special case: If the user specifies a symbol name inside package
5419 Standard, do a non-wild matching of the symbol name without
5420 the "standard__" prefix. This was primarily introduced in order
5421 to allow the user to specifically access the standard exceptions
5422 using, for instance, Standard.Constraint_Error when Constraint_Error
5423 is ambiguous (due to the user defining its own Constraint_Error
5424 entity inside its program). */
4c4b4cd2
PH
5425 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5426 {
4c4b4cd2
PH
5427 block = NULL;
5428 name = name0 + sizeof ("standard__") - 1;
5429 }
5430
339c13b6 5431 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5432
4eeaa230
DE
5433 if (block != NULL)
5434 {
5435 if (full_search)
5436 {
5437 ada_add_local_symbols (&symbol_list_obstack, name, block,
5438 namespace, wild_match_p);
5439 }
5440 else
5441 {
5442 /* In the !full_search case we're are being called by
5443 ada_iterate_over_symbols, and we don't want to search
5444 superblocks. */
5445 ada_add_block_symbols (&symbol_list_obstack, block, name,
5446 namespace, NULL, wild_match_p);
5447 }
5448 if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5449 goto done;
5450 }
d2e4a39e 5451
339c13b6
JB
5452 /* No non-global symbols found. Check our cache to see if we have
5453 already performed this search before. If we have, then return
5454 the same result. */
5455
14f9c5c9 5456 cacheIfUnique = 1;
2570f2b7 5457 if (lookup_cached_symbol (name0, namespace, &sym, &block))
4c4b4cd2
PH
5458 {
5459 if (sym != NULL)
2570f2b7 5460 add_defn_to_vec (&symbol_list_obstack, sym, block);
4c4b4cd2
PH
5461 goto done;
5462 }
14f9c5c9 5463
339c13b6
JB
5464 /* Search symbols from all global blocks. */
5465
40658b94 5466 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
82ccd55e 5467 wild_match_p);
d2e4a39e 5468
4c4b4cd2 5469 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5470 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5471
4c4b4cd2 5472 if (num_defns_collected (&symbol_list_obstack) == 0)
40658b94 5473 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
82ccd55e 5474 wild_match_p);
14f9c5c9 5475
4c4b4cd2
PH
5476done:
5477 ndefns = num_defns_collected (&symbol_list_obstack);
5478 *results = defns_collected (&symbol_list_obstack, 1);
5479
5480 ndefns = remove_extra_symbols (*results, ndefns);
5481
2ad01556 5482 if (ndefns == 0 && full_search)
2570f2b7 5483 cache_symbol (name0, namespace, NULL, NULL);
14f9c5c9 5484
2ad01556 5485 if (ndefns == 1 && full_search && cacheIfUnique)
2570f2b7 5486 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
14f9c5c9 5487
aeb5907d 5488 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
14f9c5c9 5489
14f9c5c9
AS
5490 return ndefns;
5491}
5492
4eeaa230
DE
5493/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5494 in global scopes, returning the number of matches, and setting *RESULTS
5495 to a vector of (SYM,BLOCK) tuples.
5496 See ada_lookup_symbol_list_worker for further details. */
5497
5498int
5499ada_lookup_symbol_list (const char *name0, const struct block *block0,
5500 domain_enum domain, struct ada_symbol_info **results)
5501{
5502 return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5503}
5504
5505/* Implementation of the la_iterate_over_symbols method. */
5506
5507static void
5508ada_iterate_over_symbols (const struct block *block,
5509 const char *name, domain_enum domain,
5510 symbol_found_callback_ftype *callback,
5511 void *data)
5512{
5513 int ndefs, i;
5514 struct ada_symbol_info *results;
5515
5516 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5517 for (i = 0; i < ndefs; ++i)
5518 {
5519 if (! (*callback) (results[i].sym, data))
5520 break;
5521 }
5522}
5523
f8eba3c6
TT
5524/* If NAME is the name of an entity, return a string that should
5525 be used to look that entity up in Ada units. This string should
5526 be deallocated after use using xfree.
5527
5528 NAME can have any form that the "break" or "print" commands might
5529 recognize. In other words, it does not have to be the "natural"
5530 name, or the "encoded" name. */
5531
5532char *
5533ada_name_for_lookup (const char *name)
5534{
5535 char *canon;
5536 int nlen = strlen (name);
5537
5538 if (name[0] == '<' && name[nlen - 1] == '>')
5539 {
5540 canon = xmalloc (nlen - 1);
5541 memcpy (canon, name + 1, nlen - 2);
5542 canon[nlen - 2] = '\0';
5543 }
5544 else
5545 canon = xstrdup (ada_encode (ada_fold_name (name)));
5546 return canon;
5547}
5548
4e5c77fe
JB
5549/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5550 to 1, but choosing the first symbol found if there are multiple
5551 choices.
5552
5e2336be
JB
5553 The result is stored in *INFO, which must be non-NULL.
5554 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5555
5556void
5557ada_lookup_encoded_symbol (const char *name, const struct block *block,
5558 domain_enum namespace,
5e2336be 5559 struct ada_symbol_info *info)
14f9c5c9 5560{
4c4b4cd2 5561 struct ada_symbol_info *candidates;
14f9c5c9
AS
5562 int n_candidates;
5563
5e2336be
JB
5564 gdb_assert (info != NULL);
5565 memset (info, 0, sizeof (struct ada_symbol_info));
4e5c77fe 5566
4eeaa230 5567 n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
14f9c5c9 5568 if (n_candidates == 0)
4e5c77fe 5569 return;
4c4b4cd2 5570
5e2336be
JB
5571 *info = candidates[0];
5572 info->sym = fixup_symbol_section (info->sym, NULL);
4e5c77fe 5573}
aeb5907d
JB
5574
5575/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5576 scope and in global scopes, or NULL if none. NAME is folded and
5577 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5578 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5579 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5580
aeb5907d
JB
5581struct symbol *
5582ada_lookup_symbol (const char *name, const struct block *block0,
21b556f4 5583 domain_enum namespace, int *is_a_field_of_this)
aeb5907d 5584{
5e2336be 5585 struct ada_symbol_info info;
4e5c77fe 5586
aeb5907d
JB
5587 if (is_a_field_of_this != NULL)
5588 *is_a_field_of_this = 0;
5589
4e5c77fe 5590 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5e2336be
JB
5591 block0, namespace, &info);
5592 return info.sym;
4c4b4cd2 5593}
14f9c5c9 5594
4c4b4cd2 5595static struct symbol *
f606139a
DE
5596ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5597 const char *name,
76a01679 5598 const struct block *block,
21b556f4 5599 const domain_enum domain)
4c4b4cd2 5600{
04dccad0
JB
5601 struct symbol *sym;
5602
5603 sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
5604 if (sym != NULL)
5605 return sym;
5606
5607 /* If we haven't found a match at this point, try the primitive
5608 types. In other languages, this search is performed before
5609 searching for global symbols in order to short-circuit that
5610 global-symbol search if it happens that the name corresponds
5611 to a primitive type. But we cannot do the same in Ada, because
5612 it is perfectly legitimate for a program to declare a type which
5613 has the same name as a standard type. If looking up a type in
5614 that situation, we have traditionally ignored the primitive type
5615 in favor of user-defined types. This is why, unlike most other
5616 languages, we search the primitive types this late and only after
5617 having searched the global symbols without success. */
5618
5619 if (domain == VAR_DOMAIN)
5620 {
5621 struct gdbarch *gdbarch;
5622
5623 if (block == NULL)
5624 gdbarch = target_gdbarch ();
5625 else
5626 gdbarch = block_gdbarch (block);
5627 sym = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5628 if (sym != NULL)
5629 return sym;
5630 }
5631
5632 return NULL;
14f9c5c9
AS
5633}
5634
5635
4c4b4cd2
PH
5636/* True iff STR is a possible encoded suffix of a normal Ada name
5637 that is to be ignored for matching purposes. Suffixes of parallel
5638 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5639 are given by any of the regular expressions:
4c4b4cd2 5640
babe1480
JB
5641 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5642 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5643 TKB [subprogram suffix for task bodies]
babe1480 5644 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5645 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5646
5647 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5648 match is performed. This sequence is used to differentiate homonyms,
5649 is an optional part of a valid name suffix. */
4c4b4cd2 5650
14f9c5c9 5651static int
d2e4a39e 5652is_name_suffix (const char *str)
14f9c5c9
AS
5653{
5654 int k;
4c4b4cd2
PH
5655 const char *matching;
5656 const int len = strlen (str);
5657
babe1480
JB
5658 /* Skip optional leading __[0-9]+. */
5659
4c4b4cd2
PH
5660 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5661 {
babe1480
JB
5662 str += 3;
5663 while (isdigit (str[0]))
5664 str += 1;
4c4b4cd2 5665 }
babe1480
JB
5666
5667 /* [.$][0-9]+ */
4c4b4cd2 5668
babe1480 5669 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5670 {
babe1480 5671 matching = str + 1;
4c4b4cd2
PH
5672 while (isdigit (matching[0]))
5673 matching += 1;
5674 if (matching[0] == '\0')
5675 return 1;
5676 }
5677
5678 /* ___[0-9]+ */
babe1480 5679
4c4b4cd2
PH
5680 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5681 {
5682 matching = str + 3;
5683 while (isdigit (matching[0]))
5684 matching += 1;
5685 if (matching[0] == '\0')
5686 return 1;
5687 }
5688
9ac7f98e
JB
5689 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5690
5691 if (strcmp (str, "TKB") == 0)
5692 return 1;
5693
529cad9c
PH
5694#if 0
5695 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5696 with a N at the end. Unfortunately, the compiler uses the same
5697 convention for other internal types it creates. So treating
529cad9c 5698 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5699 some regressions. For instance, consider the case of an enumerated
5700 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5701 name ends with N.
5702 Having a single character like this as a suffix carrying some
0963b4bd 5703 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5704 to be something like "_N" instead. In the meantime, do not do
5705 the following check. */
5706 /* Protected Object Subprograms */
5707 if (len == 1 && str [0] == 'N')
5708 return 1;
5709#endif
5710
5711 /* _E[0-9]+[bs]$ */
5712 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5713 {
5714 matching = str + 3;
5715 while (isdigit (matching[0]))
5716 matching += 1;
5717 if ((matching[0] == 'b' || matching[0] == 's')
5718 && matching [1] == '\0')
5719 return 1;
5720 }
5721
4c4b4cd2
PH
5722 /* ??? We should not modify STR directly, as we are doing below. This
5723 is fine in this case, but may become problematic later if we find
5724 that this alternative did not work, and want to try matching
5725 another one from the begining of STR. Since we modified it, we
5726 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5727 if (str[0] == 'X')
5728 {
5729 str += 1;
d2e4a39e 5730 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
5731 {
5732 if (str[0] != 'n' && str[0] != 'b')
5733 return 0;
5734 str += 1;
5735 }
14f9c5c9 5736 }
babe1480 5737
14f9c5c9
AS
5738 if (str[0] == '\000')
5739 return 1;
babe1480 5740
d2e4a39e 5741 if (str[0] == '_')
14f9c5c9
AS
5742 {
5743 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 5744 return 0;
d2e4a39e 5745 if (str[2] == '_')
4c4b4cd2 5746 {
61ee279c
PH
5747 if (strcmp (str + 3, "JM") == 0)
5748 return 1;
5749 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5750 the LJM suffix in favor of the JM one. But we will
5751 still accept LJM as a valid suffix for a reasonable
5752 amount of time, just to allow ourselves to debug programs
5753 compiled using an older version of GNAT. */
4c4b4cd2
PH
5754 if (strcmp (str + 3, "LJM") == 0)
5755 return 1;
5756 if (str[3] != 'X')
5757 return 0;
1265e4aa
JB
5758 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5759 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
5760 return 1;
5761 if (str[4] == 'R' && str[5] != 'T')
5762 return 1;
5763 return 0;
5764 }
5765 if (!isdigit (str[2]))
5766 return 0;
5767 for (k = 3; str[k] != '\0'; k += 1)
5768 if (!isdigit (str[k]) && str[k] != '_')
5769 return 0;
14f9c5c9
AS
5770 return 1;
5771 }
4c4b4cd2 5772 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5773 {
4c4b4cd2
PH
5774 for (k = 2; str[k] != '\0'; k += 1)
5775 if (!isdigit (str[k]) && str[k] != '_')
5776 return 0;
14f9c5c9
AS
5777 return 1;
5778 }
5779 return 0;
5780}
d2e4a39e 5781
aeb5907d
JB
5782/* Return non-zero if the string starting at NAME and ending before
5783 NAME_END contains no capital letters. */
529cad9c
PH
5784
5785static int
5786is_valid_name_for_wild_match (const char *name0)
5787{
5788 const char *decoded_name = ada_decode (name0);
5789 int i;
5790
5823c3ef
JB
5791 /* If the decoded name starts with an angle bracket, it means that
5792 NAME0 does not follow the GNAT encoding format. It should then
5793 not be allowed as a possible wild match. */
5794 if (decoded_name[0] == '<')
5795 return 0;
5796
529cad9c
PH
5797 for (i=0; decoded_name[i] != '\0'; i++)
5798 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5799 return 0;
5800
5801 return 1;
5802}
5803
73589123
PH
5804/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5805 that could start a simple name. Assumes that *NAMEP points into
5806 the string beginning at NAME0. */
4c4b4cd2 5807
14f9c5c9 5808static int
73589123 5809advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 5810{
73589123 5811 const char *name = *namep;
5b4ee69b 5812
5823c3ef 5813 while (1)
14f9c5c9 5814 {
aa27d0b3 5815 int t0, t1;
73589123
PH
5816
5817 t0 = *name;
5818 if (t0 == '_')
5819 {
5820 t1 = name[1];
5821 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5822 {
5823 name += 1;
5824 if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5825 break;
5826 else
5827 name += 1;
5828 }
aa27d0b3
JB
5829 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5830 || name[2] == target0))
73589123
PH
5831 {
5832 name += 2;
5833 break;
5834 }
5835 else
5836 return 0;
5837 }
5838 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5839 name += 1;
5840 else
5823c3ef 5841 return 0;
73589123
PH
5842 }
5843
5844 *namep = name;
5845 return 1;
5846}
5847
5848/* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
5849 informational suffixes of NAME (i.e., for which is_name_suffix is
5850 true). Assumes that PATN is a lower-cased Ada simple name. */
5851
5852static int
5853wild_match (const char *name, const char *patn)
5854{
22e048c9 5855 const char *p;
73589123
PH
5856 const char *name0 = name;
5857
5858 while (1)
5859 {
5860 const char *match = name;
5861
5862 if (*name == *patn)
5863 {
5864 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5865 if (*p != *name)
5866 break;
5867 if (*p == '\0' && is_name_suffix (name))
5868 return match != name0 && !is_valid_name_for_wild_match (name0);
5869
5870 if (name[-1] == '_')
5871 name -= 1;
5872 }
5873 if (!advance_wild_match (&name, name0, *patn))
5874 return 1;
96d887e8 5875 }
96d887e8
PH
5876}
5877
40658b94
PH
5878/* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5879 informational suffix. */
5880
c4d840bd
PH
5881static int
5882full_match (const char *sym_name, const char *search_name)
5883{
40658b94 5884 return !match_name (sym_name, search_name, 0);
c4d840bd
PH
5885}
5886
5887
96d887e8
PH
5888/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5889 vector *defn_symbols, updating the list of symbols in OBSTACKP
0963b4bd 5890 (if necessary). If WILD, treat as NAME with a wildcard prefix.
4eeaa230 5891 OBJFILE is the section containing BLOCK. */
96d887e8
PH
5892
5893static void
5894ada_add_block_symbols (struct obstack *obstackp,
f0c5f9b2 5895 const struct block *block, const char *name,
96d887e8 5896 domain_enum domain, struct objfile *objfile,
2570f2b7 5897 int wild)
96d887e8 5898{
8157b174 5899 struct block_iterator iter;
96d887e8
PH
5900 int name_len = strlen (name);
5901 /* A matching argument symbol, if any. */
5902 struct symbol *arg_sym;
5903 /* Set true when we find a matching non-argument symbol. */
5904 int found_sym;
5905 struct symbol *sym;
5906
5907 arg_sym = NULL;
5908 found_sym = 0;
5909 if (wild)
5910 {
8157b174
TT
5911 for (sym = block_iter_match_first (block, name, wild_match, &iter);
5912 sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
76a01679 5913 {
4186eb54
KS
5914 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5915 SYMBOL_DOMAIN (sym), domain)
73589123 5916 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
76a01679 5917 {
2a2d4dc3
AS
5918 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5919 continue;
5920 else if (SYMBOL_IS_ARGUMENT (sym))
5921 arg_sym = sym;
5922 else
5923 {
76a01679
JB
5924 found_sym = 1;
5925 add_defn_to_vec (obstackp,
5926 fixup_symbol_section (sym, objfile),
2570f2b7 5927 block);
76a01679
JB
5928 }
5929 }
5930 }
96d887e8
PH
5931 }
5932 else
5933 {
8157b174
TT
5934 for (sym = block_iter_match_first (block, name, full_match, &iter);
5935 sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
76a01679 5936 {
4186eb54
KS
5937 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5938 SYMBOL_DOMAIN (sym), domain))
76a01679 5939 {
c4d840bd
PH
5940 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5941 {
5942 if (SYMBOL_IS_ARGUMENT (sym))
5943 arg_sym = sym;
5944 else
2a2d4dc3 5945 {
c4d840bd
PH
5946 found_sym = 1;
5947 add_defn_to_vec (obstackp,
5948 fixup_symbol_section (sym, objfile),
5949 block);
2a2d4dc3 5950 }
c4d840bd 5951 }
76a01679
JB
5952 }
5953 }
96d887e8
PH
5954 }
5955
5956 if (!found_sym && arg_sym != NULL)
5957 {
76a01679
JB
5958 add_defn_to_vec (obstackp,
5959 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5960 block);
96d887e8
PH
5961 }
5962
5963 if (!wild)
5964 {
5965 arg_sym = NULL;
5966 found_sym = 0;
5967
5968 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5969 {
4186eb54
KS
5970 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5971 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
5972 {
5973 int cmp;
5974
5975 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5976 if (cmp == 0)
5977 {
5978 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5979 if (cmp == 0)
5980 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5981 name_len);
5982 }
5983
5984 if (cmp == 0
5985 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5986 {
2a2d4dc3
AS
5987 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5988 {
5989 if (SYMBOL_IS_ARGUMENT (sym))
5990 arg_sym = sym;
5991 else
5992 {
5993 found_sym = 1;
5994 add_defn_to_vec (obstackp,
5995 fixup_symbol_section (sym, objfile),
5996 block);
5997 }
5998 }
76a01679
JB
5999 }
6000 }
76a01679 6001 }
96d887e8
PH
6002
6003 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6004 They aren't parameters, right? */
6005 if (!found_sym && arg_sym != NULL)
6006 {
6007 add_defn_to_vec (obstackp,
76a01679 6008 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6009 block);
96d887e8
PH
6010 }
6011 }
6012}
6013\f
41d27058
JB
6014
6015 /* Symbol Completion */
6016
6017/* If SYM_NAME is a completion candidate for TEXT, return this symbol
6018 name in a form that's appropriate for the completion. The result
6019 does not need to be deallocated, but is only good until the next call.
6020
6021 TEXT_LEN is equal to the length of TEXT.
e701b3c0 6022 Perform a wild match if WILD_MATCH_P is set.
6ea35997 6023 ENCODED_P should be set if TEXT represents the start of a symbol name
41d27058
JB
6024 in its encoded form. */
6025
6026static const char *
6027symbol_completion_match (const char *sym_name,
6028 const char *text, int text_len,
6ea35997 6029 int wild_match_p, int encoded_p)
41d27058 6030{
41d27058
JB
6031 const int verbatim_match = (text[0] == '<');
6032 int match = 0;
6033
6034 if (verbatim_match)
6035 {
6036 /* Strip the leading angle bracket. */
6037 text = text + 1;
6038 text_len--;
6039 }
6040
6041 /* First, test against the fully qualified name of the symbol. */
6042
6043 if (strncmp (sym_name, text, text_len) == 0)
6044 match = 1;
6045
6ea35997 6046 if (match && !encoded_p)
41d27058
JB
6047 {
6048 /* One needed check before declaring a positive match is to verify
6049 that iff we are doing a verbatim match, the decoded version
6050 of the symbol name starts with '<'. Otherwise, this symbol name
6051 is not a suitable completion. */
6052 const char *sym_name_copy = sym_name;
6053 int has_angle_bracket;
6054
6055 sym_name = ada_decode (sym_name);
6056 has_angle_bracket = (sym_name[0] == '<');
6057 match = (has_angle_bracket == verbatim_match);
6058 sym_name = sym_name_copy;
6059 }
6060
6061 if (match && !verbatim_match)
6062 {
6063 /* When doing non-verbatim match, another check that needs to
6064 be done is to verify that the potentially matching symbol name
6065 does not include capital letters, because the ada-mode would
6066 not be able to understand these symbol names without the
6067 angle bracket notation. */
6068 const char *tmp;
6069
6070 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6071 if (*tmp != '\0')
6072 match = 0;
6073 }
6074
6075 /* Second: Try wild matching... */
6076
e701b3c0 6077 if (!match && wild_match_p)
41d27058
JB
6078 {
6079 /* Since we are doing wild matching, this means that TEXT
6080 may represent an unqualified symbol name. We therefore must
6081 also compare TEXT against the unqualified name of the symbol. */
6082 sym_name = ada_unqualified_name (ada_decode (sym_name));
6083
6084 if (strncmp (sym_name, text, text_len) == 0)
6085 match = 1;
6086 }
6087
6088 /* Finally: If we found a mach, prepare the result to return. */
6089
6090 if (!match)
6091 return NULL;
6092
6093 if (verbatim_match)
6094 sym_name = add_angle_brackets (sym_name);
6095
6ea35997 6096 if (!encoded_p)
41d27058
JB
6097 sym_name = ada_decode (sym_name);
6098
6099 return sym_name;
6100}
6101
6102/* A companion function to ada_make_symbol_completion_list().
6103 Check if SYM_NAME represents a symbol which name would be suitable
6104 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6105 it is appended at the end of the given string vector SV.
6106
6107 ORIG_TEXT is the string original string from the user command
6108 that needs to be completed. WORD is the entire command on which
6109 completion should be performed. These two parameters are used to
6110 determine which part of the symbol name should be added to the
6111 completion vector.
c0af1706 6112 if WILD_MATCH_P is set, then wild matching is performed.
cb8e9b97 6113 ENCODED_P should be set if TEXT represents a symbol name in its
41d27058
JB
6114 encoded formed (in which case the completion should also be
6115 encoded). */
6116
6117static void
d6565258 6118symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
6119 const char *sym_name,
6120 const char *text, int text_len,
6121 const char *orig_text, const char *word,
cb8e9b97 6122 int wild_match_p, int encoded_p)
41d27058
JB
6123{
6124 const char *match = symbol_completion_match (sym_name, text, text_len,
cb8e9b97 6125 wild_match_p, encoded_p);
41d27058
JB
6126 char *completion;
6127
6128 if (match == NULL)
6129 return;
6130
6131 /* We found a match, so add the appropriate completion to the given
6132 string vector. */
6133
6134 if (word == orig_text)
6135 {
6136 completion = xmalloc (strlen (match) + 5);
6137 strcpy (completion, match);
6138 }
6139 else if (word > orig_text)
6140 {
6141 /* Return some portion of sym_name. */
6142 completion = xmalloc (strlen (match) + 5);
6143 strcpy (completion, match + (word - orig_text));
6144 }
6145 else
6146 {
6147 /* Return some of ORIG_TEXT plus sym_name. */
6148 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6149 strncpy (completion, word, orig_text - word);
6150 completion[orig_text - word] = '\0';
6151 strcat (completion, match);
6152 }
6153
d6565258 6154 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
6155}
6156
ccefe4c4 6157/* An object of this type is passed as the user_data argument to the
bb4142cf 6158 expand_symtabs_matching method. */
ccefe4c4
TT
6159struct add_partial_datum
6160{
6161 VEC(char_ptr) **completions;
6f937416 6162 const char *text;
ccefe4c4 6163 int text_len;
6f937416
PA
6164 const char *text0;
6165 const char *word;
ccefe4c4
TT
6166 int wild_match;
6167 int encoded;
6168};
6169
bb4142cf
DE
6170/* A callback for expand_symtabs_matching. */
6171
7b08b9eb 6172static int
bb4142cf 6173ada_complete_symbol_matcher (const char *name, void *user_data)
ccefe4c4
TT
6174{
6175 struct add_partial_datum *data = user_data;
7b08b9eb
JK
6176
6177 return symbol_completion_match (name, data->text, data->text_len,
6178 data->wild_match, data->encoded) != NULL;
ccefe4c4
TT
6179}
6180
49c4e619
TT
6181/* Return a list of possible symbol names completing TEXT0. WORD is
6182 the entire command on which completion is made. */
41d27058 6183
49c4e619 6184static VEC (char_ptr) *
6f937416
PA
6185ada_make_symbol_completion_list (const char *text0, const char *word,
6186 enum type_code code)
41d27058
JB
6187{
6188 char *text;
6189 int text_len;
b1ed564a
JB
6190 int wild_match_p;
6191 int encoded_p;
2ba95b9b 6192 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058 6193 struct symbol *sym;
43f3e411 6194 struct compunit_symtab *s;
41d27058
JB
6195 struct minimal_symbol *msymbol;
6196 struct objfile *objfile;
3977b71f 6197 const struct block *b, *surrounding_static_block = 0;
41d27058 6198 int i;
8157b174 6199 struct block_iterator iter;
b8fea896 6200 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
41d27058 6201
2f68a895
TT
6202 gdb_assert (code == TYPE_CODE_UNDEF);
6203
41d27058
JB
6204 if (text0[0] == '<')
6205 {
6206 text = xstrdup (text0);
6207 make_cleanup (xfree, text);
6208 text_len = strlen (text);
b1ed564a
JB
6209 wild_match_p = 0;
6210 encoded_p = 1;
41d27058
JB
6211 }
6212 else
6213 {
6214 text = xstrdup (ada_encode (text0));
6215 make_cleanup (xfree, text);
6216 text_len = strlen (text);
6217 for (i = 0; i < text_len; i++)
6218 text[i] = tolower (text[i]);
6219
b1ed564a 6220 encoded_p = (strstr (text0, "__") != NULL);
41d27058
JB
6221 /* If the name contains a ".", then the user is entering a fully
6222 qualified entity name, and the match must not be done in wild
6223 mode. Similarly, if the user wants to complete what looks like
6224 an encoded name, the match must not be done in wild mode. */
b1ed564a 6225 wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
41d27058
JB
6226 }
6227
6228 /* First, look at the partial symtab symbols. */
41d27058 6229 {
ccefe4c4
TT
6230 struct add_partial_datum data;
6231
6232 data.completions = &completions;
6233 data.text = text;
6234 data.text_len = text_len;
6235 data.text0 = text0;
6236 data.word = word;
b1ed564a
JB
6237 data.wild_match = wild_match_p;
6238 data.encoded = encoded_p;
bb4142cf
DE
6239 expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6240 &data);
41d27058
JB
6241 }
6242
6243 /* At this point scan through the misc symbol vectors and add each
6244 symbol you find to the list. Eventually we want to ignore
6245 anything that isn't a text symbol (everything else will be
6246 handled by the psymtab code above). */
6247
6248 ALL_MSYMBOLS (objfile, msymbol)
6249 {
6250 QUIT;
efd66ac6 6251 symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
b1ed564a
JB
6252 text, text_len, text0, word, wild_match_p,
6253 encoded_p);
41d27058
JB
6254 }
6255
6256 /* Search upwards from currently selected frame (so that we can
6257 complete on local vars. */
6258
6259 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6260 {
6261 if (!BLOCK_SUPERBLOCK (b))
6262 surrounding_static_block = b; /* For elmin of dups */
6263
6264 ALL_BLOCK_SYMBOLS (b, iter, sym)
6265 {
d6565258 6266 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6267 text, text_len, text0, word,
b1ed564a 6268 wild_match_p, encoded_p);
41d27058
JB
6269 }
6270 }
6271
6272 /* Go through the symtabs and check the externs and statics for
43f3e411 6273 symbols which match. */
41d27058 6274
43f3e411 6275 ALL_COMPUNITS (objfile, s)
41d27058
JB
6276 {
6277 QUIT;
43f3e411 6278 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
41d27058
JB
6279 ALL_BLOCK_SYMBOLS (b, iter, sym)
6280 {
d6565258 6281 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6282 text, text_len, text0, word,
b1ed564a 6283 wild_match_p, encoded_p);
41d27058
JB
6284 }
6285 }
6286
43f3e411 6287 ALL_COMPUNITS (objfile, s)
41d27058
JB
6288 {
6289 QUIT;
43f3e411 6290 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
41d27058
JB
6291 /* Don't do this block twice. */
6292 if (b == surrounding_static_block)
6293 continue;
6294 ALL_BLOCK_SYMBOLS (b, iter, sym)
6295 {
d6565258 6296 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6297 text, text_len, text0, word,
b1ed564a 6298 wild_match_p, encoded_p);
41d27058
JB
6299 }
6300 }
6301
b8fea896 6302 do_cleanups (old_chain);
49c4e619 6303 return completions;
41d27058
JB
6304}
6305
963a6417 6306 /* Field Access */
96d887e8 6307
73fb9985
JB
6308/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6309 for tagged types. */
6310
6311static int
6312ada_is_dispatch_table_ptr_type (struct type *type)
6313{
0d5cff50 6314 const char *name;
73fb9985
JB
6315
6316 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6317 return 0;
6318
6319 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6320 if (name == NULL)
6321 return 0;
6322
6323 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6324}
6325
ac4a2da4
JG
6326/* Return non-zero if TYPE is an interface tag. */
6327
6328static int
6329ada_is_interface_tag (struct type *type)
6330{
6331 const char *name = TYPE_NAME (type);
6332
6333 if (name == NULL)
6334 return 0;
6335
6336 return (strcmp (name, "ada__tags__interface_tag") == 0);
6337}
6338
963a6417
PH
6339/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6340 to be invisible to users. */
96d887e8 6341
963a6417
PH
6342int
6343ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6344{
963a6417
PH
6345 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6346 return 1;
ffde82bf 6347
73fb9985
JB
6348 /* Check the name of that field. */
6349 {
6350 const char *name = TYPE_FIELD_NAME (type, field_num);
6351
6352 /* Anonymous field names should not be printed.
6353 brobecker/2007-02-20: I don't think this can actually happen
6354 but we don't want to print the value of annonymous fields anyway. */
6355 if (name == NULL)
6356 return 1;
6357
ffde82bf
JB
6358 /* Normally, fields whose name start with an underscore ("_")
6359 are fields that have been internally generated by the compiler,
6360 and thus should not be printed. The "_parent" field is special,
6361 however: This is a field internally generated by the compiler
6362 for tagged types, and it contains the components inherited from
6363 the parent type. This field should not be printed as is, but
6364 should not be ignored either. */
73fb9985
JB
6365 if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6366 return 1;
6367 }
6368
ac4a2da4
JG
6369 /* If this is the dispatch table of a tagged type or an interface tag,
6370 then ignore. */
73fb9985 6371 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6372 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6373 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6374 return 1;
6375
6376 /* Not a special field, so it should not be ignored. */
6377 return 0;
963a6417 6378}
96d887e8 6379
963a6417 6380/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6381 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6382
963a6417
PH
6383int
6384ada_is_tagged_type (struct type *type, int refok)
6385{
6386 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6387}
96d887e8 6388
963a6417 6389/* True iff TYPE represents the type of X'Tag */
96d887e8 6390
963a6417
PH
6391int
6392ada_is_tag_type (struct type *type)
6393{
6394 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6395 return 0;
6396 else
96d887e8 6397 {
963a6417 6398 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6399
963a6417
PH
6400 return (name != NULL
6401 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6402 }
96d887e8
PH
6403}
6404
963a6417 6405/* The type of the tag on VAL. */
76a01679 6406
963a6417
PH
6407struct type *
6408ada_tag_type (struct value *val)
96d887e8 6409{
df407dfe 6410 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 6411}
96d887e8 6412
b50d69b5
JG
6413/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6414 retired at Ada 05). */
6415
6416static int
6417is_ada95_tag (struct value *tag)
6418{
6419 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6420}
6421
963a6417 6422/* The value of the tag on VAL. */
96d887e8 6423
963a6417
PH
6424struct value *
6425ada_value_tag (struct value *val)
6426{
03ee6b2e 6427 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6428}
6429
963a6417
PH
6430/* The value of the tag on the object of type TYPE whose contents are
6431 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6432 ADDRESS. */
96d887e8 6433
963a6417 6434static struct value *
10a2c479 6435value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6436 const gdb_byte *valaddr,
963a6417 6437 CORE_ADDR address)
96d887e8 6438{
b5385fc0 6439 int tag_byte_offset;
963a6417 6440 struct type *tag_type;
5b4ee69b 6441
963a6417 6442 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6443 NULL, NULL, NULL))
96d887e8 6444 {
fc1a4b47 6445 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6446 ? NULL
6447 : valaddr + tag_byte_offset);
963a6417 6448 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6449
963a6417 6450 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6451 }
963a6417
PH
6452 return NULL;
6453}
96d887e8 6454
963a6417
PH
6455static struct type *
6456type_from_tag (struct value *tag)
6457{
6458 const char *type_name = ada_tag_name (tag);
5b4ee69b 6459
963a6417
PH
6460 if (type_name != NULL)
6461 return ada_find_any_type (ada_encode (type_name));
6462 return NULL;
6463}
96d887e8 6464
b50d69b5
JG
6465/* Given a value OBJ of a tagged type, return a value of this
6466 type at the base address of the object. The base address, as
6467 defined in Ada.Tags, it is the address of the primary tag of
6468 the object, and therefore where the field values of its full
6469 view can be fetched. */
6470
6471struct value *
6472ada_tag_value_at_base_address (struct value *obj)
6473{
6474 volatile struct gdb_exception e;
6475 struct value *val;
6476 LONGEST offset_to_top = 0;
6477 struct type *ptr_type, *obj_type;
6478 struct value *tag;
6479 CORE_ADDR base_address;
6480
6481 obj_type = value_type (obj);
6482
6483 /* It is the responsability of the caller to deref pointers. */
6484
6485 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6486 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6487 return obj;
6488
6489 tag = ada_value_tag (obj);
6490 if (!tag)
6491 return obj;
6492
6493 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6494
6495 if (is_ada95_tag (tag))
6496 return obj;
6497
6498 ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6499 ptr_type = lookup_pointer_type (ptr_type);
6500 val = value_cast (ptr_type, tag);
6501 if (!val)
6502 return obj;
6503
6504 /* It is perfectly possible that an exception be raised while
6505 trying to determine the base address, just like for the tag;
6506 see ada_tag_name for more details. We do not print the error
6507 message for the same reason. */
6508
6509 TRY_CATCH (e, RETURN_MASK_ERROR)
6510 {
6511 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6512 }
6513
6514 if (e.reason < 0)
6515 return obj;
6516
6517 /* If offset is null, nothing to do. */
6518
6519 if (offset_to_top == 0)
6520 return obj;
6521
6522 /* -1 is a special case in Ada.Tags; however, what should be done
6523 is not quite clear from the documentation. So do nothing for
6524 now. */
6525
6526 if (offset_to_top == -1)
6527 return obj;
6528
6529 base_address = value_address (obj) - offset_to_top;
6530 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6531
6532 /* Make sure that we have a proper tag at the new address.
6533 Otherwise, offset_to_top is bogus (which can happen when
6534 the object is not initialized yet). */
6535
6536 if (!tag)
6537 return obj;
6538
6539 obj_type = type_from_tag (tag);
6540
6541 if (!obj_type)
6542 return obj;
6543
6544 return value_from_contents_and_address (obj_type, NULL, base_address);
6545}
6546
1b611343
JB
6547/* Return the "ada__tags__type_specific_data" type. */
6548
6549static struct type *
6550ada_get_tsd_type (struct inferior *inf)
963a6417 6551{
1b611343 6552 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6553
1b611343
JB
6554 if (data->tsd_type == 0)
6555 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6556 return data->tsd_type;
6557}
529cad9c 6558
1b611343
JB
6559/* Return the TSD (type-specific data) associated to the given TAG.
6560 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6561
1b611343 6562 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6563
1b611343
JB
6564static struct value *
6565ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6566{
4c4b4cd2 6567 struct value *val;
1b611343 6568 struct type *type;
5b4ee69b 6569
1b611343
JB
6570 /* First option: The TSD is simply stored as a field of our TAG.
6571 Only older versions of GNAT would use this format, but we have
6572 to test it first, because there are no visible markers for
6573 the current approach except the absence of that field. */
529cad9c 6574
1b611343
JB
6575 val = ada_value_struct_elt (tag, "tsd", 1);
6576 if (val)
6577 return val;
e802dbe0 6578
1b611343
JB
6579 /* Try the second representation for the dispatch table (in which
6580 there is no explicit 'tsd' field in the referent of the tag pointer,
6581 and instead the tsd pointer is stored just before the dispatch
6582 table. */
e802dbe0 6583
1b611343
JB
6584 type = ada_get_tsd_type (current_inferior());
6585 if (type == NULL)
6586 return NULL;
6587 type = lookup_pointer_type (lookup_pointer_type (type));
6588 val = value_cast (type, tag);
6589 if (val == NULL)
6590 return NULL;
6591 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6592}
6593
1b611343
JB
6594/* Given the TSD of a tag (type-specific data), return a string
6595 containing the name of the associated type.
6596
6597 The returned value is good until the next call. May return NULL
6598 if we are unable to determine the tag name. */
6599
6600static char *
6601ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6602{
529cad9c
PH
6603 static char name[1024];
6604 char *p;
1b611343 6605 struct value *val;
529cad9c 6606
1b611343 6607 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6608 if (val == NULL)
1b611343 6609 return NULL;
4c4b4cd2
PH
6610 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6611 for (p = name; *p != '\0'; p += 1)
6612 if (isalpha (*p))
6613 *p = tolower (*p);
1b611343 6614 return name;
4c4b4cd2
PH
6615}
6616
6617/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6618 a C string.
6619
6620 Return NULL if the TAG is not an Ada tag, or if we were unable to
6621 determine the name of that tag. The result is good until the next
6622 call. */
4c4b4cd2
PH
6623
6624const char *
6625ada_tag_name (struct value *tag)
6626{
1b611343
JB
6627 volatile struct gdb_exception e;
6628 char *name = NULL;
5b4ee69b 6629
df407dfe 6630 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6631 return NULL;
1b611343
JB
6632
6633 /* It is perfectly possible that an exception be raised while trying
6634 to determine the TAG's name, even under normal circumstances:
6635 The associated variable may be uninitialized or corrupted, for
6636 instance. We do not let any exception propagate past this point.
6637 instead we return NULL.
6638
6639 We also do not print the error message either (which often is very
6640 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6641 the caller print a more meaningful message if necessary. */
6642 TRY_CATCH (e, RETURN_MASK_ERROR)
6643 {
6644 struct value *tsd = ada_get_tsd_from_tag (tag);
6645
6646 if (tsd != NULL)
6647 name = ada_tag_name_from_tsd (tsd);
6648 }
6649
6650 return name;
4c4b4cd2
PH
6651}
6652
6653/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6654
d2e4a39e 6655struct type *
ebf56fd3 6656ada_parent_type (struct type *type)
14f9c5c9
AS
6657{
6658 int i;
6659
61ee279c 6660 type = ada_check_typedef (type);
14f9c5c9
AS
6661
6662 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6663 return NULL;
6664
6665 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6666 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6667 {
6668 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6669
6670 /* If the _parent field is a pointer, then dereference it. */
6671 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6672 parent_type = TYPE_TARGET_TYPE (parent_type);
6673 /* If there is a parallel XVS type, get the actual base type. */
6674 parent_type = ada_get_base_type (parent_type);
6675
6676 return ada_check_typedef (parent_type);
6677 }
14f9c5c9
AS
6678
6679 return NULL;
6680}
6681
4c4b4cd2
PH
6682/* True iff field number FIELD_NUM of structure type TYPE contains the
6683 parent-type (inherited) fields of a derived type. Assumes TYPE is
6684 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6685
6686int
ebf56fd3 6687ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6688{
61ee279c 6689 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6690
4c4b4cd2
PH
6691 return (name != NULL
6692 && (strncmp (name, "PARENT", 6) == 0
6693 || strncmp (name, "_parent", 7) == 0));
14f9c5c9
AS
6694}
6695
4c4b4cd2 6696/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6697 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6698 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6699 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6700 structures. */
14f9c5c9
AS
6701
6702int
ebf56fd3 6703ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6704{
d2e4a39e 6705 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6706
d2e4a39e 6707 return (name != NULL
4c4b4cd2
PH
6708 && (strncmp (name, "PARENT", 6) == 0
6709 || strcmp (name, "REP") == 0
6710 || strncmp (name, "_parent", 7) == 0
6711 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6712}
6713
4c4b4cd2
PH
6714/* True iff field number FIELD_NUM of structure or union type TYPE
6715 is a variant wrapper. Assumes TYPE is a structure type with at least
6716 FIELD_NUM+1 fields. */
14f9c5c9
AS
6717
6718int
ebf56fd3 6719ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6720{
d2e4a39e 6721 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6722
14f9c5c9 6723 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 6724 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
6725 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6726 == TYPE_CODE_UNION)));
14f9c5c9
AS
6727}
6728
6729/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6730 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6731 returns the type of the controlling discriminant for the variant.
6732 May return NULL if the type could not be found. */
14f9c5c9 6733
d2e4a39e 6734struct type *
ebf56fd3 6735ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6736{
d2e4a39e 6737 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6738
7c964f07 6739 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
6740}
6741
4c4b4cd2 6742/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6743 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6744 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
6745
6746int
ebf56fd3 6747ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6748{
d2e4a39e 6749 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6750
14f9c5c9
AS
6751 return (name != NULL && name[0] == 'O');
6752}
6753
6754/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6755 returns the name of the discriminant controlling the variant.
6756 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6757
d2e4a39e 6758char *
ebf56fd3 6759ada_variant_discrim_name (struct type *type0)
14f9c5c9 6760{
d2e4a39e 6761 static char *result = NULL;
14f9c5c9 6762 static size_t result_len = 0;
d2e4a39e
AS
6763 struct type *type;
6764 const char *name;
6765 const char *discrim_end;
6766 const char *discrim_start;
14f9c5c9
AS
6767
6768 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6769 type = TYPE_TARGET_TYPE (type0);
6770 else
6771 type = type0;
6772
6773 name = ada_type_name (type);
6774
6775 if (name == NULL || name[0] == '\000')
6776 return "";
6777
6778 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6779 discrim_end -= 1)
6780 {
4c4b4cd2
PH
6781 if (strncmp (discrim_end, "___XVN", 6) == 0)
6782 break;
14f9c5c9
AS
6783 }
6784 if (discrim_end == name)
6785 return "";
6786
d2e4a39e 6787 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6788 discrim_start -= 1)
6789 {
d2e4a39e 6790 if (discrim_start == name + 1)
4c4b4cd2 6791 return "";
76a01679 6792 if ((discrim_start > name + 3
4c4b4cd2
PH
6793 && strncmp (discrim_start - 3, "___", 3) == 0)
6794 || discrim_start[-1] == '.')
6795 break;
14f9c5c9
AS
6796 }
6797
6798 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6799 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 6800 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
6801 return result;
6802}
6803
4c4b4cd2
PH
6804/* Scan STR for a subtype-encoded number, beginning at position K.
6805 Put the position of the character just past the number scanned in
6806 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6807 Return 1 if there was a valid number at the given position, and 0
6808 otherwise. A "subtype-encoded" number consists of the absolute value
6809 in decimal, followed by the letter 'm' to indicate a negative number.
6810 Assumes 0m does not occur. */
14f9c5c9
AS
6811
6812int
d2e4a39e 6813ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6814{
6815 ULONGEST RU;
6816
d2e4a39e 6817 if (!isdigit (str[k]))
14f9c5c9
AS
6818 return 0;
6819
4c4b4cd2 6820 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6821 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6822 LONGEST. */
14f9c5c9
AS
6823 RU = 0;
6824 while (isdigit (str[k]))
6825 {
d2e4a39e 6826 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6827 k += 1;
6828 }
6829
d2e4a39e 6830 if (str[k] == 'm')
14f9c5c9
AS
6831 {
6832 if (R != NULL)
4c4b4cd2 6833 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6834 k += 1;
6835 }
6836 else if (R != NULL)
6837 *R = (LONGEST) RU;
6838
4c4b4cd2 6839 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6840 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6841 number representable as a LONGEST (although either would probably work
6842 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6843 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6844
6845 if (new_k != NULL)
6846 *new_k = k;
6847 return 1;
6848}
6849
4c4b4cd2
PH
6850/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6851 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6852 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6853
d2e4a39e 6854int
ebf56fd3 6855ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6856{
d2e4a39e 6857 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6858 int p;
6859
6860 p = 0;
6861 while (1)
6862 {
d2e4a39e 6863 switch (name[p])
4c4b4cd2
PH
6864 {
6865 case '\0':
6866 return 0;
6867 case 'S':
6868 {
6869 LONGEST W;
5b4ee69b 6870
4c4b4cd2
PH
6871 if (!ada_scan_number (name, p + 1, &W, &p))
6872 return 0;
6873 if (val == W)
6874 return 1;
6875 break;
6876 }
6877 case 'R':
6878 {
6879 LONGEST L, U;
5b4ee69b 6880
4c4b4cd2
PH
6881 if (!ada_scan_number (name, p + 1, &L, &p)
6882 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6883 return 0;
6884 if (val >= L && val <= U)
6885 return 1;
6886 break;
6887 }
6888 case 'O':
6889 return 1;
6890 default:
6891 return 0;
6892 }
6893 }
6894}
6895
0963b4bd 6896/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6897
6898/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6899 ARG_TYPE, extract and return the value of one of its (non-static)
6900 fields. FIELDNO says which field. Differs from value_primitive_field
6901 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6902
4c4b4cd2 6903static struct value *
d2e4a39e 6904ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 6905 struct type *arg_type)
14f9c5c9 6906{
14f9c5c9
AS
6907 struct type *type;
6908
61ee279c 6909 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
6910 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6911
4c4b4cd2 6912 /* Handle packed fields. */
14f9c5c9
AS
6913
6914 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6915 {
6916 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6917 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6918
0fd88904 6919 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
6920 offset + bit_pos / 8,
6921 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6922 }
6923 else
6924 return value_primitive_field (arg1, offset, fieldno, arg_type);
6925}
6926
52ce6436
PH
6927/* Find field with name NAME in object of type TYPE. If found,
6928 set the following for each argument that is non-null:
6929 - *FIELD_TYPE_P to the field's type;
6930 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6931 an object of that type;
6932 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6933 - *BIT_SIZE_P to its size in bits if the field is packed, and
6934 0 otherwise;
6935 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6936 fields up to but not including the desired field, or by the total
6937 number of fields if not found. A NULL value of NAME never
6938 matches; the function just counts visible fields in this case.
6939
0963b4bd 6940 Returns 1 if found, 0 otherwise. */
52ce6436 6941
4c4b4cd2 6942static int
0d5cff50 6943find_struct_field (const char *name, struct type *type, int offset,
76a01679 6944 struct type **field_type_p,
52ce6436
PH
6945 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6946 int *index_p)
4c4b4cd2
PH
6947{
6948 int i;
6949
61ee279c 6950 type = ada_check_typedef (type);
76a01679 6951
52ce6436
PH
6952 if (field_type_p != NULL)
6953 *field_type_p = NULL;
6954 if (byte_offset_p != NULL)
d5d6fca5 6955 *byte_offset_p = 0;
52ce6436
PH
6956 if (bit_offset_p != NULL)
6957 *bit_offset_p = 0;
6958 if (bit_size_p != NULL)
6959 *bit_size_p = 0;
6960
6961 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
6962 {
6963 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6964 int fld_offset = offset + bit_pos / 8;
0d5cff50 6965 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6966
4c4b4cd2
PH
6967 if (t_field_name == NULL)
6968 continue;
6969
52ce6436 6970 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
6971 {
6972 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6973
52ce6436
PH
6974 if (field_type_p != NULL)
6975 *field_type_p = TYPE_FIELD_TYPE (type, i);
6976 if (byte_offset_p != NULL)
6977 *byte_offset_p = fld_offset;
6978 if (bit_offset_p != NULL)
6979 *bit_offset_p = bit_pos % 8;
6980 if (bit_size_p != NULL)
6981 *bit_size_p = bit_size;
76a01679
JB
6982 return 1;
6983 }
4c4b4cd2
PH
6984 else if (ada_is_wrapper_field (type, i))
6985 {
52ce6436
PH
6986 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6987 field_type_p, byte_offset_p, bit_offset_p,
6988 bit_size_p, index_p))
76a01679
JB
6989 return 1;
6990 }
4c4b4cd2
PH
6991 else if (ada_is_variant_part (type, i))
6992 {
52ce6436
PH
6993 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6994 fixed type?? */
4c4b4cd2 6995 int j;
52ce6436
PH
6996 struct type *field_type
6997 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 6998
52ce6436 6999 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7000 {
76a01679
JB
7001 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7002 fld_offset
7003 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7004 field_type_p, byte_offset_p,
52ce6436 7005 bit_offset_p, bit_size_p, index_p))
76a01679 7006 return 1;
4c4b4cd2
PH
7007 }
7008 }
52ce6436
PH
7009 else if (index_p != NULL)
7010 *index_p += 1;
4c4b4cd2
PH
7011 }
7012 return 0;
7013}
7014
0963b4bd 7015/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7016
52ce6436
PH
7017static int
7018num_visible_fields (struct type *type)
7019{
7020 int n;
5b4ee69b 7021
52ce6436
PH
7022 n = 0;
7023 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7024 return n;
7025}
14f9c5c9 7026
4c4b4cd2 7027/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7028 and search in it assuming it has (class) type TYPE.
7029 If found, return value, else return NULL.
7030
4c4b4cd2 7031 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 7032
4c4b4cd2 7033static struct value *
d2e4a39e 7034ada_search_struct_field (char *name, struct value *arg, int offset,
4c4b4cd2 7035 struct type *type)
14f9c5c9
AS
7036{
7037 int i;
14f9c5c9 7038
5b4ee69b 7039 type = ada_check_typedef (type);
52ce6436 7040 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 7041 {
0d5cff50 7042 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7043
7044 if (t_field_name == NULL)
4c4b4cd2 7045 continue;
14f9c5c9
AS
7046
7047 else if (field_name_match (t_field_name, name))
4c4b4cd2 7048 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7049
7050 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7051 {
0963b4bd 7052 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
7053 ada_search_struct_field (name, arg,
7054 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7055 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7056
4c4b4cd2
PH
7057 if (v != NULL)
7058 return v;
7059 }
14f9c5c9
AS
7060
7061 else if (ada_is_variant_part (type, i))
4c4b4cd2 7062 {
0963b4bd 7063 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7064 int j;
5b4ee69b
MS
7065 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7066 i));
4c4b4cd2
PH
7067 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7068
52ce6436 7069 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7070 {
0963b4bd
MS
7071 struct value *v = ada_search_struct_field /* Force line
7072 break. */
06d5cf63
JB
7073 (name, arg,
7074 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7075 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7076
4c4b4cd2
PH
7077 if (v != NULL)
7078 return v;
7079 }
7080 }
14f9c5c9
AS
7081 }
7082 return NULL;
7083}
d2e4a39e 7084
52ce6436
PH
7085static struct value *ada_index_struct_field_1 (int *, struct value *,
7086 int, struct type *);
7087
7088
7089/* Return field #INDEX in ARG, where the index is that returned by
7090 * find_struct_field through its INDEX_P argument. Adjust the address
7091 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7092 * If found, return value, else return NULL. */
52ce6436
PH
7093
7094static struct value *
7095ada_index_struct_field (int index, struct value *arg, int offset,
7096 struct type *type)
7097{
7098 return ada_index_struct_field_1 (&index, arg, offset, type);
7099}
7100
7101
7102/* Auxiliary function for ada_index_struct_field. Like
7103 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7104 * *INDEX_P. */
52ce6436
PH
7105
7106static struct value *
7107ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7108 struct type *type)
7109{
7110 int i;
7111 type = ada_check_typedef (type);
7112
7113 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7114 {
7115 if (TYPE_FIELD_NAME (type, i) == NULL)
7116 continue;
7117 else if (ada_is_wrapper_field (type, i))
7118 {
0963b4bd 7119 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7120 ada_index_struct_field_1 (index_p, arg,
7121 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7122 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7123
52ce6436
PH
7124 if (v != NULL)
7125 return v;
7126 }
7127
7128 else if (ada_is_variant_part (type, i))
7129 {
7130 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7131 find_struct_field. */
52ce6436
PH
7132 error (_("Cannot assign this kind of variant record"));
7133 }
7134 else if (*index_p == 0)
7135 return ada_value_primitive_field (arg, offset, i, type);
7136 else
7137 *index_p -= 1;
7138 }
7139 return NULL;
7140}
7141
4c4b4cd2
PH
7142/* Given ARG, a value of type (pointer or reference to a)*
7143 structure/union, extract the component named NAME from the ultimate
7144 target structure/union and return it as a value with its
f5938064 7145 appropriate type.
14f9c5c9 7146
4c4b4cd2
PH
7147 The routine searches for NAME among all members of the structure itself
7148 and (recursively) among all members of any wrapper members
14f9c5c9
AS
7149 (e.g., '_parent').
7150
03ee6b2e
PH
7151 If NO_ERR, then simply return NULL in case of error, rather than
7152 calling error. */
14f9c5c9 7153
d2e4a39e 7154struct value *
03ee6b2e 7155ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 7156{
4c4b4cd2 7157 struct type *t, *t1;
d2e4a39e 7158 struct value *v;
14f9c5c9 7159
4c4b4cd2 7160 v = NULL;
df407dfe 7161 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
7162 if (TYPE_CODE (t) == TYPE_CODE_REF)
7163 {
7164 t1 = TYPE_TARGET_TYPE (t);
7165 if (t1 == NULL)
03ee6b2e 7166 goto BadValue;
61ee279c 7167 t1 = ada_check_typedef (t1);
4c4b4cd2 7168 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 7169 {
994b9211 7170 arg = coerce_ref (arg);
76a01679
JB
7171 t = t1;
7172 }
4c4b4cd2 7173 }
14f9c5c9 7174
4c4b4cd2
PH
7175 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7176 {
7177 t1 = TYPE_TARGET_TYPE (t);
7178 if (t1 == NULL)
03ee6b2e 7179 goto BadValue;
61ee279c 7180 t1 = ada_check_typedef (t1);
4c4b4cd2 7181 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
7182 {
7183 arg = value_ind (arg);
7184 t = t1;
7185 }
4c4b4cd2 7186 else
76a01679 7187 break;
4c4b4cd2 7188 }
14f9c5c9 7189
4c4b4cd2 7190 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 7191 goto BadValue;
14f9c5c9 7192
4c4b4cd2
PH
7193 if (t1 == t)
7194 v = ada_search_struct_field (name, arg, 0, t);
7195 else
7196 {
7197 int bit_offset, bit_size, byte_offset;
7198 struct type *field_type;
7199 CORE_ADDR address;
7200
76a01679 7201 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 7202 address = value_address (ada_value_ind (arg));
4c4b4cd2 7203 else
b50d69b5 7204 address = value_address (ada_coerce_ref (arg));
14f9c5c9 7205
1ed6ede0 7206 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
7207 if (find_struct_field (name, t1, 0,
7208 &field_type, &byte_offset, &bit_offset,
52ce6436 7209 &bit_size, NULL))
76a01679
JB
7210 {
7211 if (bit_size != 0)
7212 {
714e53ab
PH
7213 if (TYPE_CODE (t) == TYPE_CODE_REF)
7214 arg = ada_coerce_ref (arg);
7215 else
7216 arg = ada_value_ind (arg);
76a01679
JB
7217 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7218 bit_offset, bit_size,
7219 field_type);
7220 }
7221 else
f5938064 7222 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
7223 }
7224 }
7225
03ee6b2e
PH
7226 if (v != NULL || no_err)
7227 return v;
7228 else
323e0a4a 7229 error (_("There is no member named %s."), name);
14f9c5c9 7230
03ee6b2e
PH
7231 BadValue:
7232 if (no_err)
7233 return NULL;
7234 else
0963b4bd
MS
7235 error (_("Attempt to extract a component of "
7236 "a value that is not a record."));
14f9c5c9
AS
7237}
7238
7239/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7240 If DISPP is non-null, add its byte displacement from the beginning of a
7241 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7242 work for packed fields).
7243
7244 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7245 followed by "___".
14f9c5c9 7246
0963b4bd 7247 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7248 be a (pointer or reference)+ to a struct or union, and the
7249 ultimate target type will be searched.
14f9c5c9
AS
7250
7251 Looks recursively into variant clauses and parent types.
7252
4c4b4cd2
PH
7253 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7254 TYPE is not a type of the right kind. */
14f9c5c9 7255
4c4b4cd2 7256static struct type *
76a01679
JB
7257ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7258 int noerr, int *dispp)
14f9c5c9
AS
7259{
7260 int i;
7261
7262 if (name == NULL)
7263 goto BadName;
7264
76a01679 7265 if (refok && type != NULL)
4c4b4cd2
PH
7266 while (1)
7267 {
61ee279c 7268 type = ada_check_typedef (type);
76a01679
JB
7269 if (TYPE_CODE (type) != TYPE_CODE_PTR
7270 && TYPE_CODE (type) != TYPE_CODE_REF)
7271 break;
7272 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7273 }
14f9c5c9 7274
76a01679 7275 if (type == NULL
1265e4aa
JB
7276 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7277 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 7278 {
4c4b4cd2 7279 if (noerr)
76a01679 7280 return NULL;
4c4b4cd2 7281 else
76a01679
JB
7282 {
7283 target_terminal_ours ();
7284 gdb_flush (gdb_stdout);
323e0a4a
AC
7285 if (type == NULL)
7286 error (_("Type (null) is not a structure or union type"));
7287 else
7288 {
7289 /* XXX: type_sprint */
7290 fprintf_unfiltered (gdb_stderr, _("Type "));
7291 type_print (type, "", gdb_stderr, -1);
7292 error (_(" is not a structure or union type"));
7293 }
76a01679 7294 }
14f9c5c9
AS
7295 }
7296
7297 type = to_static_fixed_type (type);
7298
7299 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7300 {
0d5cff50 7301 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7302 struct type *t;
7303 int disp;
d2e4a39e 7304
14f9c5c9 7305 if (t_field_name == NULL)
4c4b4cd2 7306 continue;
14f9c5c9
AS
7307
7308 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
7309 {
7310 if (dispp != NULL)
7311 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
61ee279c 7312 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7313 }
14f9c5c9
AS
7314
7315 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
7316 {
7317 disp = 0;
7318 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7319 0, 1, &disp);
7320 if (t != NULL)
7321 {
7322 if (dispp != NULL)
7323 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7324 return t;
7325 }
7326 }
14f9c5c9
AS
7327
7328 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7329 {
7330 int j;
5b4ee69b
MS
7331 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7332 i));
4c4b4cd2
PH
7333
7334 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7335 {
b1f33ddd
JB
7336 /* FIXME pnh 2008/01/26: We check for a field that is
7337 NOT wrapped in a struct, since the compiler sometimes
7338 generates these for unchecked variant types. Revisit
0963b4bd 7339 if the compiler changes this practice. */
0d5cff50 7340 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 7341 disp = 0;
b1f33ddd
JB
7342 if (v_field_name != NULL
7343 && field_name_match (v_field_name, name))
7344 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7345 else
0963b4bd
MS
7346 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7347 j),
b1f33ddd
JB
7348 name, 0, 1, &disp);
7349
4c4b4cd2
PH
7350 if (t != NULL)
7351 {
7352 if (dispp != NULL)
7353 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7354 return t;
7355 }
7356 }
7357 }
14f9c5c9
AS
7358
7359 }
7360
7361BadName:
d2e4a39e 7362 if (!noerr)
14f9c5c9
AS
7363 {
7364 target_terminal_ours ();
7365 gdb_flush (gdb_stdout);
323e0a4a
AC
7366 if (name == NULL)
7367 {
7368 /* XXX: type_sprint */
7369 fprintf_unfiltered (gdb_stderr, _("Type "));
7370 type_print (type, "", gdb_stderr, -1);
7371 error (_(" has no component named <null>"));
7372 }
7373 else
7374 {
7375 /* XXX: type_sprint */
7376 fprintf_unfiltered (gdb_stderr, _("Type "));
7377 type_print (type, "", gdb_stderr, -1);
7378 error (_(" has no component named %s"), name);
7379 }
14f9c5c9
AS
7380 }
7381
7382 return NULL;
7383}
7384
b1f33ddd
JB
7385/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7386 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7387 represents an unchecked union (that is, the variant part of a
0963b4bd 7388 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7389
7390static int
7391is_unchecked_variant (struct type *var_type, struct type *outer_type)
7392{
7393 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7394
b1f33ddd
JB
7395 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7396 == NULL);
7397}
7398
7399
14f9c5c9
AS
7400/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7401 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7402 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7403 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7404
d2e4a39e 7405int
ebf56fd3 7406ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7407 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7408{
7409 int others_clause;
7410 int i;
d2e4a39e 7411 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7412 struct value *outer;
7413 struct value *discrim;
14f9c5c9
AS
7414 LONGEST discrim_val;
7415
012370f6
TT
7416 /* Using plain value_from_contents_and_address here causes problems
7417 because we will end up trying to resolve a type that is currently
7418 being constructed. */
7419 outer = value_from_contents_and_address_unresolved (outer_type,
7420 outer_valaddr, 0);
0c281816
JB
7421 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7422 if (discrim == NULL)
14f9c5c9 7423 return -1;
0c281816 7424 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7425
7426 others_clause = -1;
7427 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7428 {
7429 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7430 others_clause = i;
14f9c5c9 7431 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7432 return i;
14f9c5c9
AS
7433 }
7434
7435 return others_clause;
7436}
d2e4a39e 7437\f
14f9c5c9
AS
7438
7439
4c4b4cd2 7440 /* Dynamic-Sized Records */
14f9c5c9
AS
7441
7442/* Strategy: The type ostensibly attached to a value with dynamic size
7443 (i.e., a size that is not statically recorded in the debugging
7444 data) does not accurately reflect the size or layout of the value.
7445 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7446 conventional types that are constructed on the fly. */
14f9c5c9
AS
7447
7448/* There is a subtle and tricky problem here. In general, we cannot
7449 determine the size of dynamic records without its data. However,
7450 the 'struct value' data structure, which GDB uses to represent
7451 quantities in the inferior process (the target), requires the size
7452 of the type at the time of its allocation in order to reserve space
7453 for GDB's internal copy of the data. That's why the
7454 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7455 rather than struct value*s.
14f9c5c9
AS
7456
7457 However, GDB's internal history variables ($1, $2, etc.) are
7458 struct value*s containing internal copies of the data that are not, in
7459 general, the same as the data at their corresponding addresses in
7460 the target. Fortunately, the types we give to these values are all
7461 conventional, fixed-size types (as per the strategy described
7462 above), so that we don't usually have to perform the
7463 'to_fixed_xxx_type' conversions to look at their values.
7464 Unfortunately, there is one exception: if one of the internal
7465 history variables is an array whose elements are unconstrained
7466 records, then we will need to create distinct fixed types for each
7467 element selected. */
7468
7469/* The upshot of all of this is that many routines take a (type, host
7470 address, target address) triple as arguments to represent a value.
7471 The host address, if non-null, is supposed to contain an internal
7472 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7473 target at the target address. */
14f9c5c9
AS
7474
7475/* Assuming that VAL0 represents a pointer value, the result of
7476 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7477 dynamic-sized types. */
14f9c5c9 7478
d2e4a39e
AS
7479struct value *
7480ada_value_ind (struct value *val0)
14f9c5c9 7481{
c48db5ca 7482 struct value *val = value_ind (val0);
5b4ee69b 7483
b50d69b5
JG
7484 if (ada_is_tagged_type (value_type (val), 0))
7485 val = ada_tag_value_at_base_address (val);
7486
4c4b4cd2 7487 return ada_to_fixed_value (val);
14f9c5c9
AS
7488}
7489
7490/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7491 qualifiers on VAL0. */
7492
d2e4a39e
AS
7493static struct value *
7494ada_coerce_ref (struct value *val0)
7495{
df407dfe 7496 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7497 {
7498 struct value *val = val0;
5b4ee69b 7499
994b9211 7500 val = coerce_ref (val);
b50d69b5
JG
7501
7502 if (ada_is_tagged_type (value_type (val), 0))
7503 val = ada_tag_value_at_base_address (val);
7504
4c4b4cd2 7505 return ada_to_fixed_value (val);
d2e4a39e
AS
7506 }
7507 else
14f9c5c9
AS
7508 return val0;
7509}
7510
7511/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7512 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7513
7514static unsigned int
ebf56fd3 7515align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7516{
7517 return (off + alignment - 1) & ~(alignment - 1);
7518}
7519
4c4b4cd2 7520/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7521
7522static unsigned int
ebf56fd3 7523field_alignment (struct type *type, int f)
14f9c5c9 7524{
d2e4a39e 7525 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7526 int len;
14f9c5c9
AS
7527 int align_offset;
7528
64a1bf19
JB
7529 /* The field name should never be null, unless the debugging information
7530 is somehow malformed. In this case, we assume the field does not
7531 require any alignment. */
7532 if (name == NULL)
7533 return 1;
7534
7535 len = strlen (name);
7536
4c4b4cd2
PH
7537 if (!isdigit (name[len - 1]))
7538 return 1;
14f9c5c9 7539
d2e4a39e 7540 if (isdigit (name[len - 2]))
14f9c5c9
AS
7541 align_offset = len - 2;
7542 else
7543 align_offset = len - 1;
7544
4c4b4cd2 7545 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
14f9c5c9
AS
7546 return TARGET_CHAR_BIT;
7547
4c4b4cd2
PH
7548 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7549}
7550
852dff6c 7551/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7552
852dff6c
JB
7553static struct symbol *
7554ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7555{
7556 struct symbol *sym;
7557
7558 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7559 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7560 return sym;
7561
4186eb54
KS
7562 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7563 return sym;
14f9c5c9
AS
7564}
7565
dddfab26
UW
7566/* Find a type named NAME. Ignores ambiguity. This routine will look
7567 solely for types defined by debug info, it will not search the GDB
7568 primitive types. */
4c4b4cd2 7569
852dff6c 7570static struct type *
ebf56fd3 7571ada_find_any_type (const char *name)
14f9c5c9 7572{
852dff6c 7573 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7574
14f9c5c9 7575 if (sym != NULL)
dddfab26 7576 return SYMBOL_TYPE (sym);
14f9c5c9 7577
dddfab26 7578 return NULL;
14f9c5c9
AS
7579}
7580
739593e0
JB
7581/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7582 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7583 symbol, in which case it is returned. Otherwise, this looks for
7584 symbols whose name is that of NAME_SYM suffixed with "___XR".
7585 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
7586
7587struct symbol *
270140bd 7588ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 7589{
739593e0 7590 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
7591 struct symbol *sym;
7592
739593e0
JB
7593 if (strstr (name, "___XR") != NULL)
7594 return name_sym;
7595
aeb5907d
JB
7596 sym = find_old_style_renaming_symbol (name, block);
7597
7598 if (sym != NULL)
7599 return sym;
7600
0963b4bd 7601 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 7602 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
7603 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7604 return sym;
7605 else
7606 return NULL;
7607}
7608
7609static struct symbol *
270140bd 7610find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 7611{
7f0df278 7612 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
7613 char *rename;
7614
7615 if (function_sym != NULL)
7616 {
7617 /* If the symbol is defined inside a function, NAME is not fully
7618 qualified. This means we need to prepend the function name
7619 as well as adding the ``___XR'' suffix to build the name of
7620 the associated renaming symbol. */
0d5cff50 7621 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
7622 /* Function names sometimes contain suffixes used
7623 for instance to qualify nested subprograms. When building
7624 the XR type name, we need to make sure that this suffix is
7625 not included. So do not include any suffix in the function
7626 name length below. */
69fadcdf 7627 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
7628 const int rename_len = function_name_len + 2 /* "__" */
7629 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 7630
529cad9c 7631 /* Strip the suffix if necessary. */
69fadcdf
JB
7632 ada_remove_trailing_digits (function_name, &function_name_len);
7633 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7634 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 7635
4c4b4cd2
PH
7636 /* Library-level functions are a special case, as GNAT adds
7637 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 7638 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
7639 have this prefix, so we need to skip this prefix if present. */
7640 if (function_name_len > 5 /* "_ada_" */
7641 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
7642 {
7643 function_name += 5;
7644 function_name_len -= 5;
7645 }
4c4b4cd2
PH
7646
7647 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
7648 strncpy (rename, function_name, function_name_len);
7649 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7650 "__%s___XR", name);
4c4b4cd2
PH
7651 }
7652 else
7653 {
7654 const int rename_len = strlen (name) + 6;
5b4ee69b 7655
4c4b4cd2 7656 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 7657 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
7658 }
7659
852dff6c 7660 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
7661}
7662
14f9c5c9 7663/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7664 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7665 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7666 otherwise return 0. */
7667
14f9c5c9 7668int
d2e4a39e 7669ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7670{
7671 if (type1 == NULL)
7672 return 1;
7673 else if (type0 == NULL)
7674 return 0;
7675 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7676 return 1;
7677 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7678 return 0;
4c4b4cd2
PH
7679 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7680 return 1;
ad82864c 7681 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7682 return 1;
4c4b4cd2
PH
7683 else if (ada_is_array_descriptor_type (type0)
7684 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7685 return 1;
aeb5907d
JB
7686 else
7687 {
7688 const char *type0_name = type_name_no_tag (type0);
7689 const char *type1_name = type_name_no_tag (type1);
7690
7691 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7692 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7693 return 1;
7694 }
14f9c5c9
AS
7695 return 0;
7696}
7697
7698/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
7699 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7700
0d5cff50 7701const char *
d2e4a39e 7702ada_type_name (struct type *type)
14f9c5c9 7703{
d2e4a39e 7704 if (type == NULL)
14f9c5c9
AS
7705 return NULL;
7706 else if (TYPE_NAME (type) != NULL)
7707 return TYPE_NAME (type);
7708 else
7709 return TYPE_TAG_NAME (type);
7710}
7711
b4ba55a1
JB
7712/* Search the list of "descriptive" types associated to TYPE for a type
7713 whose name is NAME. */
7714
7715static struct type *
7716find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7717{
7718 struct type *result;
7719
c6044dd1
JB
7720 if (ada_ignore_descriptive_types_p)
7721 return NULL;
7722
b4ba55a1
JB
7723 /* If there no descriptive-type info, then there is no parallel type
7724 to be found. */
7725 if (!HAVE_GNAT_AUX_INFO (type))
7726 return NULL;
7727
7728 result = TYPE_DESCRIPTIVE_TYPE (type);
7729 while (result != NULL)
7730 {
0d5cff50 7731 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7732
7733 if (result_name == NULL)
7734 {
7735 warning (_("unexpected null name on descriptive type"));
7736 return NULL;
7737 }
7738
7739 /* If the names match, stop. */
7740 if (strcmp (result_name, name) == 0)
7741 break;
7742
7743 /* Otherwise, look at the next item on the list, if any. */
7744 if (HAVE_GNAT_AUX_INFO (result))
7745 result = TYPE_DESCRIPTIVE_TYPE (result);
7746 else
7747 result = NULL;
7748 }
7749
7750 /* If we didn't find a match, see whether this is a packed array. With
7751 older compilers, the descriptive type information is either absent or
7752 irrelevant when it comes to packed arrays so the above lookup fails.
7753 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7754 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7755 return ada_find_any_type (name);
7756
7757 return result;
7758}
7759
7760/* Find a parallel type to TYPE with the specified NAME, using the
7761 descriptive type taken from the debugging information, if available,
7762 and otherwise using the (slower) name-based method. */
7763
7764static struct type *
7765ada_find_parallel_type_with_name (struct type *type, const char *name)
7766{
7767 struct type *result = NULL;
7768
7769 if (HAVE_GNAT_AUX_INFO (type))
7770 result = find_parallel_type_by_descriptive_type (type, name);
7771 else
7772 result = ada_find_any_type (name);
7773
7774 return result;
7775}
7776
7777/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7778 SUFFIX to the name of TYPE. */
14f9c5c9 7779
d2e4a39e 7780struct type *
ebf56fd3 7781ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7782{
0d5cff50
DE
7783 char *name;
7784 const char *typename = ada_type_name (type);
14f9c5c9 7785 int len;
d2e4a39e 7786
14f9c5c9
AS
7787 if (typename == NULL)
7788 return NULL;
7789
7790 len = strlen (typename);
7791
b4ba55a1 7792 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9
AS
7793
7794 strcpy (name, typename);
7795 strcpy (name + len, suffix);
7796
b4ba55a1 7797 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7798}
7799
14f9c5c9 7800/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7801 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7802
d2e4a39e
AS
7803static struct type *
7804dynamic_template_type (struct type *type)
14f9c5c9 7805{
61ee279c 7806 type = ada_check_typedef (type);
14f9c5c9
AS
7807
7808 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 7809 || ada_type_name (type) == NULL)
14f9c5c9 7810 return NULL;
d2e4a39e 7811 else
14f9c5c9
AS
7812 {
7813 int len = strlen (ada_type_name (type));
5b4ee69b 7814
4c4b4cd2
PH
7815 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7816 return type;
14f9c5c9 7817 else
4c4b4cd2 7818 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7819 }
7820}
7821
7822/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7823 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7824
d2e4a39e
AS
7825static int
7826is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7827{
7828 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7829
d2e4a39e 7830 return name != NULL
14f9c5c9
AS
7831 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7832 && strstr (name, "___XVL") != NULL;
7833}
7834
4c4b4cd2
PH
7835/* The index of the variant field of TYPE, or -1 if TYPE does not
7836 represent a variant record type. */
14f9c5c9 7837
d2e4a39e 7838static int
4c4b4cd2 7839variant_field_index (struct type *type)
14f9c5c9
AS
7840{
7841 int f;
7842
4c4b4cd2
PH
7843 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7844 return -1;
7845
7846 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7847 {
7848 if (ada_is_variant_part (type, f))
7849 return f;
7850 }
7851 return -1;
14f9c5c9
AS
7852}
7853
4c4b4cd2
PH
7854/* A record type with no fields. */
7855
d2e4a39e 7856static struct type *
e9bb382b 7857empty_record (struct type *template)
14f9c5c9 7858{
e9bb382b 7859 struct type *type = alloc_type_copy (template);
5b4ee69b 7860
14f9c5c9
AS
7861 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7862 TYPE_NFIELDS (type) = 0;
7863 TYPE_FIELDS (type) = NULL;
b1f33ddd 7864 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
7865 TYPE_NAME (type) = "<empty>";
7866 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
7867 TYPE_LENGTH (type) = 0;
7868 return type;
7869}
7870
7871/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7872 the value of type TYPE at VALADDR or ADDRESS (see comments at
7873 the beginning of this section) VAL according to GNAT conventions.
7874 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7875 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7876 an outer-level type (i.e., as opposed to a branch of a variant.) A
7877 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7878 of the variant.
14f9c5c9 7879
4c4b4cd2
PH
7880 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7881 length are not statically known are discarded. As a consequence,
7882 VALADDR, ADDRESS and DVAL0 are ignored.
7883
7884 NOTE: Limitations: For now, we assume that dynamic fields and
7885 variants occupy whole numbers of bytes. However, they need not be
7886 byte-aligned. */
7887
7888struct type *
10a2c479 7889ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7890 const gdb_byte *valaddr,
4c4b4cd2
PH
7891 CORE_ADDR address, struct value *dval0,
7892 int keep_dynamic_fields)
14f9c5c9 7893{
d2e4a39e
AS
7894 struct value *mark = value_mark ();
7895 struct value *dval;
7896 struct type *rtype;
14f9c5c9 7897 int nfields, bit_len;
4c4b4cd2 7898 int variant_field;
14f9c5c9 7899 long off;
d94e4f4f 7900 int fld_bit_len;
14f9c5c9
AS
7901 int f;
7902
4c4b4cd2
PH
7903 /* Compute the number of fields in this record type that are going
7904 to be processed: unless keep_dynamic_fields, this includes only
7905 fields whose position and length are static will be processed. */
7906 if (keep_dynamic_fields)
7907 nfields = TYPE_NFIELDS (type);
7908 else
7909 {
7910 nfields = 0;
76a01679 7911 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
7912 && !ada_is_variant_part (type, nfields)
7913 && !is_dynamic_field (type, nfields))
7914 nfields++;
7915 }
7916
e9bb382b 7917 rtype = alloc_type_copy (type);
14f9c5c9
AS
7918 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7919 INIT_CPLUS_SPECIFIC (rtype);
7920 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 7921 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
7922 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7923 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7924 TYPE_NAME (rtype) = ada_type_name (type);
7925 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7926 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 7927
d2e4a39e
AS
7928 off = 0;
7929 bit_len = 0;
4c4b4cd2
PH
7930 variant_field = -1;
7931
14f9c5c9
AS
7932 for (f = 0; f < nfields; f += 1)
7933 {
6c038f32
PH
7934 off = align_value (off, field_alignment (type, f))
7935 + TYPE_FIELD_BITPOS (type, f);
945b3a32 7936 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 7937 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7938
d2e4a39e 7939 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
7940 {
7941 variant_field = f;
d94e4f4f 7942 fld_bit_len = 0;
4c4b4cd2 7943 }
14f9c5c9 7944 else if (is_dynamic_field (type, f))
4c4b4cd2 7945 {
284614f0
JB
7946 const gdb_byte *field_valaddr = valaddr;
7947 CORE_ADDR field_address = address;
7948 struct type *field_type =
7949 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7950
4c4b4cd2 7951 if (dval0 == NULL)
b5304971
JG
7952 {
7953 /* rtype's length is computed based on the run-time
7954 value of discriminants. If the discriminants are not
7955 initialized, the type size may be completely bogus and
0963b4bd 7956 GDB may fail to allocate a value for it. So check the
b5304971 7957 size first before creating the value. */
c1b5a1a6 7958 ada_ensure_varsize_limit (rtype);
012370f6
TT
7959 /* Using plain value_from_contents_and_address here
7960 causes problems because we will end up trying to
7961 resolve a type that is currently being
7962 constructed. */
7963 dval = value_from_contents_and_address_unresolved (rtype,
7964 valaddr,
7965 address);
9f1f738a 7966 rtype = value_type (dval);
b5304971 7967 }
4c4b4cd2
PH
7968 else
7969 dval = dval0;
7970
284614f0
JB
7971 /* If the type referenced by this field is an aligner type, we need
7972 to unwrap that aligner type, because its size might not be set.
7973 Keeping the aligner type would cause us to compute the wrong
7974 size for this field, impacting the offset of the all the fields
7975 that follow this one. */
7976 if (ada_is_aligner_type (field_type))
7977 {
7978 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7979
7980 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7981 field_address = cond_offset_target (field_address, field_offset);
7982 field_type = ada_aligned_type (field_type);
7983 }
7984
7985 field_valaddr = cond_offset_host (field_valaddr,
7986 off / TARGET_CHAR_BIT);
7987 field_address = cond_offset_target (field_address,
7988 off / TARGET_CHAR_BIT);
7989
7990 /* Get the fixed type of the field. Note that, in this case,
7991 we do not want to get the real type out of the tag: if
7992 the current field is the parent part of a tagged record,
7993 we will get the tag of the object. Clearly wrong: the real
7994 type of the parent is not the real type of the child. We
7995 would end up in an infinite loop. */
7996 field_type = ada_get_base_type (field_type);
7997 field_type = ada_to_fixed_type (field_type, field_valaddr,
7998 field_address, dval, 0);
27f2a97b
JB
7999 /* If the field size is already larger than the maximum
8000 object size, then the record itself will necessarily
8001 be larger than the maximum object size. We need to make
8002 this check now, because the size might be so ridiculously
8003 large (due to an uninitialized variable in the inferior)
8004 that it would cause an overflow when adding it to the
8005 record size. */
c1b5a1a6 8006 ada_ensure_varsize_limit (field_type);
284614f0
JB
8007
8008 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 8009 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
8010 /* The multiplication can potentially overflow. But because
8011 the field length has been size-checked just above, and
8012 assuming that the maximum size is a reasonable value,
8013 an overflow should not happen in practice. So rather than
8014 adding overflow recovery code to this already complex code,
8015 we just assume that it's not going to happen. */
d94e4f4f 8016 fld_bit_len =
4c4b4cd2
PH
8017 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8018 }
14f9c5c9 8019 else
4c4b4cd2 8020 {
5ded5331
JB
8021 /* Note: If this field's type is a typedef, it is important
8022 to preserve the typedef layer.
8023
8024 Otherwise, we might be transforming a typedef to a fat
8025 pointer (encoding a pointer to an unconstrained array),
8026 into a basic fat pointer (encoding an unconstrained
8027 array). As both types are implemented using the same
8028 structure, the typedef is the only clue which allows us
8029 to distinguish between the two options. Stripping it
8030 would prevent us from printing this field appropriately. */
8031 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
8032 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8033 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 8034 fld_bit_len =
4c4b4cd2
PH
8035 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8036 else
5ded5331
JB
8037 {
8038 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8039
8040 /* We need to be careful of typedefs when computing
8041 the length of our field. If this is a typedef,
8042 get the length of the target type, not the length
8043 of the typedef. */
8044 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8045 field_type = ada_typedef_target_type (field_type);
8046
8047 fld_bit_len =
8048 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8049 }
4c4b4cd2 8050 }
14f9c5c9 8051 if (off + fld_bit_len > bit_len)
4c4b4cd2 8052 bit_len = off + fld_bit_len;
d94e4f4f 8053 off += fld_bit_len;
4c4b4cd2
PH
8054 TYPE_LENGTH (rtype) =
8055 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 8056 }
4c4b4cd2
PH
8057
8058 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 8059 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
8060 the record. This can happen in the presence of representation
8061 clauses. */
8062 if (variant_field >= 0)
8063 {
8064 struct type *branch_type;
8065
8066 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8067
8068 if (dval0 == NULL)
9f1f738a 8069 {
012370f6
TT
8070 /* Using plain value_from_contents_and_address here causes
8071 problems because we will end up trying to resolve a type
8072 that is currently being constructed. */
8073 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8074 address);
9f1f738a
SA
8075 rtype = value_type (dval);
8076 }
4c4b4cd2
PH
8077 else
8078 dval = dval0;
8079
8080 branch_type =
8081 to_fixed_variant_branch_type
8082 (TYPE_FIELD_TYPE (type, variant_field),
8083 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8084 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8085 if (branch_type == NULL)
8086 {
8087 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8088 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8089 TYPE_NFIELDS (rtype) -= 1;
8090 }
8091 else
8092 {
8093 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8094 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8095 fld_bit_len =
8096 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8097 TARGET_CHAR_BIT;
8098 if (off + fld_bit_len > bit_len)
8099 bit_len = off + fld_bit_len;
8100 TYPE_LENGTH (rtype) =
8101 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8102 }
8103 }
8104
714e53ab
PH
8105 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8106 should contain the alignment of that record, which should be a strictly
8107 positive value. If null or negative, then something is wrong, most
8108 probably in the debug info. In that case, we don't round up the size
0963b4bd 8109 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8110 the current RTYPE length might be good enough for our purposes. */
8111 if (TYPE_LENGTH (type) <= 0)
8112 {
323e0a4a
AC
8113 if (TYPE_NAME (rtype))
8114 warning (_("Invalid type size for `%s' detected: %d."),
8115 TYPE_NAME (rtype), TYPE_LENGTH (type));
8116 else
8117 warning (_("Invalid type size for <unnamed> detected: %d."),
8118 TYPE_LENGTH (type));
714e53ab
PH
8119 }
8120 else
8121 {
8122 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8123 TYPE_LENGTH (type));
8124 }
14f9c5c9
AS
8125
8126 value_free_to_mark (mark);
d2e4a39e 8127 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8128 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8129 return rtype;
8130}
8131
4c4b4cd2
PH
8132/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8133 of 1. */
14f9c5c9 8134
d2e4a39e 8135static struct type *
fc1a4b47 8136template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8137 CORE_ADDR address, struct value *dval0)
8138{
8139 return ada_template_to_fixed_record_type_1 (type, valaddr,
8140 address, dval0, 1);
8141}
8142
8143/* An ordinary record type in which ___XVL-convention fields and
8144 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8145 static approximations, containing all possible fields. Uses
8146 no runtime values. Useless for use in values, but that's OK,
8147 since the results are used only for type determinations. Works on both
8148 structs and unions. Representation note: to save space, we memorize
8149 the result of this function in the TYPE_TARGET_TYPE of the
8150 template type. */
8151
8152static struct type *
8153template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8154{
8155 struct type *type;
8156 int nfields;
8157 int f;
8158
4c4b4cd2
PH
8159 if (TYPE_TARGET_TYPE (type0) != NULL)
8160 return TYPE_TARGET_TYPE (type0);
8161
8162 nfields = TYPE_NFIELDS (type0);
8163 type = type0;
14f9c5c9
AS
8164
8165 for (f = 0; f < nfields; f += 1)
8166 {
61ee279c 8167 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
4c4b4cd2 8168 struct type *new_type;
14f9c5c9 8169
4c4b4cd2
PH
8170 if (is_dynamic_field (type0, f))
8171 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
14f9c5c9 8172 else
f192137b 8173 new_type = static_unwrap_type (field_type);
4c4b4cd2
PH
8174 if (type == type0 && new_type != field_type)
8175 {
e9bb382b 8176 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
4c4b4cd2
PH
8177 TYPE_CODE (type) = TYPE_CODE (type0);
8178 INIT_CPLUS_SPECIFIC (type);
8179 TYPE_NFIELDS (type) = nfields;
8180 TYPE_FIELDS (type) = (struct field *)
8181 TYPE_ALLOC (type, nfields * sizeof (struct field));
8182 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8183 sizeof (struct field) * nfields);
8184 TYPE_NAME (type) = ada_type_name (type0);
8185 TYPE_TAG_NAME (type) = NULL;
876cecd0 8186 TYPE_FIXED_INSTANCE (type) = 1;
4c4b4cd2
PH
8187 TYPE_LENGTH (type) = 0;
8188 }
8189 TYPE_FIELD_TYPE (type, f) = new_type;
8190 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
14f9c5c9 8191 }
14f9c5c9
AS
8192 return type;
8193}
8194
4c4b4cd2 8195/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8196 whose address in memory is ADDRESS, returns a revision of TYPE,
8197 which should be a non-dynamic-sized record, in which the variant
8198 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8199 for discriminant values in DVAL0, which can be NULL if the record
8200 contains the necessary discriminant values. */
8201
d2e4a39e 8202static struct type *
fc1a4b47 8203to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8204 CORE_ADDR address, struct value *dval0)
14f9c5c9 8205{
d2e4a39e 8206 struct value *mark = value_mark ();
4c4b4cd2 8207 struct value *dval;
d2e4a39e 8208 struct type *rtype;
14f9c5c9
AS
8209 struct type *branch_type;
8210 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 8211 int variant_field = variant_field_index (type);
14f9c5c9 8212
4c4b4cd2 8213 if (variant_field == -1)
14f9c5c9
AS
8214 return type;
8215
4c4b4cd2 8216 if (dval0 == NULL)
9f1f738a
SA
8217 {
8218 dval = value_from_contents_and_address (type, valaddr, address);
8219 type = value_type (dval);
8220 }
4c4b4cd2
PH
8221 else
8222 dval = dval0;
8223
e9bb382b 8224 rtype = alloc_type_copy (type);
14f9c5c9 8225 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
8226 INIT_CPLUS_SPECIFIC (rtype);
8227 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
8228 TYPE_FIELDS (rtype) =
8229 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8230 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 8231 sizeof (struct field) * nfields);
14f9c5c9
AS
8232 TYPE_NAME (rtype) = ada_type_name (type);
8233 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 8234 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8235 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8236
4c4b4cd2
PH
8237 branch_type = to_fixed_variant_branch_type
8238 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8239 cond_offset_host (valaddr,
4c4b4cd2
PH
8240 TYPE_FIELD_BITPOS (type, variant_field)
8241 / TARGET_CHAR_BIT),
d2e4a39e 8242 cond_offset_target (address,
4c4b4cd2
PH
8243 TYPE_FIELD_BITPOS (type, variant_field)
8244 / TARGET_CHAR_BIT), dval);
d2e4a39e 8245 if (branch_type == NULL)
14f9c5c9 8246 {
4c4b4cd2 8247 int f;
5b4ee69b 8248
4c4b4cd2
PH
8249 for (f = variant_field + 1; f < nfields; f += 1)
8250 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 8251 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
8252 }
8253 else
8254 {
4c4b4cd2
PH
8255 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8256 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8257 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8258 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8259 }
4c4b4cd2 8260 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8261
4c4b4cd2 8262 value_free_to_mark (mark);
14f9c5c9
AS
8263 return rtype;
8264}
8265
8266/* An ordinary record type (with fixed-length fields) that describes
8267 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8268 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8269 should be in DVAL, a record value; it may be NULL if the object
8270 at ADDR itself contains any necessary discriminant values.
8271 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8272 values from the record are needed. Except in the case that DVAL,
8273 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8274 unchecked) is replaced by a particular branch of the variant.
8275
8276 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8277 is questionable and may be removed. It can arise during the
8278 processing of an unconstrained-array-of-record type where all the
8279 variant branches have exactly the same size. This is because in
8280 such cases, the compiler does not bother to use the XVS convention
8281 when encoding the record. I am currently dubious of this
8282 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8283
d2e4a39e 8284static struct type *
fc1a4b47 8285to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8286 CORE_ADDR address, struct value *dval)
14f9c5c9 8287{
d2e4a39e 8288 struct type *templ_type;
14f9c5c9 8289
876cecd0 8290 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8291 return type0;
8292
d2e4a39e 8293 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8294
8295 if (templ_type != NULL)
8296 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8297 else if (variant_field_index (type0) >= 0)
8298 {
8299 if (dval == NULL && valaddr == NULL && address == 0)
8300 return type0;
8301 return to_record_with_fixed_variant_part (type0, valaddr, address,
8302 dval);
8303 }
14f9c5c9
AS
8304 else
8305 {
876cecd0 8306 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8307 return type0;
8308 }
8309
8310}
8311
8312/* An ordinary record type (with fixed-length fields) that describes
8313 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8314 union type. Any necessary discriminants' values should be in DVAL,
8315 a record value. That is, this routine selects the appropriate
8316 branch of the union at ADDR according to the discriminant value
b1f33ddd 8317 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8318 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8319
d2e4a39e 8320static struct type *
fc1a4b47 8321to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8322 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8323{
8324 int which;
d2e4a39e
AS
8325 struct type *templ_type;
8326 struct type *var_type;
14f9c5c9
AS
8327
8328 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8329 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8330 else
14f9c5c9
AS
8331 var_type = var_type0;
8332
8333 templ_type = ada_find_parallel_type (var_type, "___XVU");
8334
8335 if (templ_type != NULL)
8336 var_type = templ_type;
8337
b1f33ddd
JB
8338 if (is_unchecked_variant (var_type, value_type (dval)))
8339 return var_type0;
d2e4a39e
AS
8340 which =
8341 ada_which_variant_applies (var_type,
0fd88904 8342 value_type (dval), value_contents (dval));
14f9c5c9
AS
8343
8344 if (which < 0)
e9bb382b 8345 return empty_record (var_type);
14f9c5c9 8346 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8347 return to_fixed_record_type
d2e4a39e
AS
8348 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8349 valaddr, address, dval);
4c4b4cd2 8350 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8351 return
8352 to_fixed_record_type
8353 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8354 else
8355 return TYPE_FIELD_TYPE (var_type, which);
8356}
8357
8908fca5
JB
8358/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8359 ENCODING_TYPE, a type following the GNAT conventions for discrete
8360 type encodings, only carries redundant information. */
8361
8362static int
8363ada_is_redundant_range_encoding (struct type *range_type,
8364 struct type *encoding_type)
8365{
8366 struct type *fixed_range_type;
8367 char *bounds_str;
8368 int n;
8369 LONGEST lo, hi;
8370
8371 gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8372
005e2509
JB
8373 if (TYPE_CODE (get_base_type (range_type))
8374 != TYPE_CODE (get_base_type (encoding_type)))
8375 {
8376 /* The compiler probably used a simple base type to describe
8377 the range type instead of the range's actual base type,
8378 expecting us to get the real base type from the encoding
8379 anyway. In this situation, the encoding cannot be ignored
8380 as redundant. */
8381 return 0;
8382 }
8383
8908fca5
JB
8384 if (is_dynamic_type (range_type))
8385 return 0;
8386
8387 if (TYPE_NAME (encoding_type) == NULL)
8388 return 0;
8389
8390 bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8391 if (bounds_str == NULL)
8392 return 0;
8393
8394 n = 8; /* Skip "___XDLU_". */
8395 if (!ada_scan_number (bounds_str, n, &lo, &n))
8396 return 0;
8397 if (TYPE_LOW_BOUND (range_type) != lo)
8398 return 0;
8399
8400 n += 2; /* Skip the "__" separator between the two bounds. */
8401 if (!ada_scan_number (bounds_str, n, &hi, &n))
8402 return 0;
8403 if (TYPE_HIGH_BOUND (range_type) != hi)
8404 return 0;
8405
8406 return 1;
8407}
8408
8409/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8410 a type following the GNAT encoding for describing array type
8411 indices, only carries redundant information. */
8412
8413static int
8414ada_is_redundant_index_type_desc (struct type *array_type,
8415 struct type *desc_type)
8416{
8417 struct type *this_layer = check_typedef (array_type);
8418 int i;
8419
8420 for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8421 {
8422 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8423 TYPE_FIELD_TYPE (desc_type, i)))
8424 return 0;
8425 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8426 }
8427
8428 return 1;
8429}
8430
14f9c5c9
AS
8431/* Assuming that TYPE0 is an array type describing the type of a value
8432 at ADDR, and that DVAL describes a record containing any
8433 discriminants used in TYPE0, returns a type for the value that
8434 contains no dynamic components (that is, no components whose sizes
8435 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8436 true, gives an error message if the resulting type's size is over
4c4b4cd2 8437 varsize_limit. */
14f9c5c9 8438
d2e4a39e
AS
8439static struct type *
8440to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8441 int ignore_too_big)
14f9c5c9 8442{
d2e4a39e
AS
8443 struct type *index_type_desc;
8444 struct type *result;
ad82864c 8445 int constrained_packed_array_p;
14f9c5c9 8446
b0dd7688 8447 type0 = ada_check_typedef (type0);
284614f0 8448 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8449 return type0;
14f9c5c9 8450
ad82864c
JB
8451 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8452 if (constrained_packed_array_p)
8453 type0 = decode_constrained_packed_array_type (type0);
284614f0 8454
14f9c5c9 8455 index_type_desc = ada_find_parallel_type (type0, "___XA");
28c85d6c 8456 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8457 if (index_type_desc != NULL
8458 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8459 {
8460 /* Ignore this ___XA parallel type, as it does not bring any
8461 useful information. This allows us to avoid creating fixed
8462 versions of the array's index types, which would be identical
8463 to the original ones. This, in turn, can also help avoid
8464 the creation of fixed versions of the array itself. */
8465 index_type_desc = NULL;
8466 }
8467
14f9c5c9
AS
8468 if (index_type_desc == NULL)
8469 {
61ee279c 8470 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8471
14f9c5c9 8472 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8473 depend on the contents of the array in properly constructed
8474 debugging data. */
529cad9c
PH
8475 /* Create a fixed version of the array element type.
8476 We're not providing the address of an element here,
e1d5a0d2 8477 and thus the actual object value cannot be inspected to do
529cad9c
PH
8478 the conversion. This should not be a problem, since arrays of
8479 unconstrained objects are not allowed. In particular, all
8480 the elements of an array of a tagged type should all be of
8481 the same type specified in the debugging info. No need to
8482 consult the object tag. */
1ed6ede0 8483 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8484
284614f0
JB
8485 /* Make sure we always create a new array type when dealing with
8486 packed array types, since we're going to fix-up the array
8487 type length and element bitsize a little further down. */
ad82864c 8488 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8489 result = type0;
14f9c5c9 8490 else
e9bb382b 8491 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8492 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8493 }
8494 else
8495 {
8496 int i;
8497 struct type *elt_type0;
8498
8499 elt_type0 = type0;
8500 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8501 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8502
8503 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8504 depend on the contents of the array in properly constructed
8505 debugging data. */
529cad9c
PH
8506 /* Create a fixed version of the array element type.
8507 We're not providing the address of an element here,
e1d5a0d2 8508 and thus the actual object value cannot be inspected to do
529cad9c
PH
8509 the conversion. This should not be a problem, since arrays of
8510 unconstrained objects are not allowed. In particular, all
8511 the elements of an array of a tagged type should all be of
8512 the same type specified in the debugging info. No need to
8513 consult the object tag. */
1ed6ede0
JB
8514 result =
8515 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8516
8517 elt_type0 = type0;
14f9c5c9 8518 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8519 {
8520 struct type *range_type =
28c85d6c 8521 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8522
e9bb382b 8523 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8524 result, range_type);
1ce677a4 8525 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8526 }
d2e4a39e 8527 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8528 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8529 }
8530
2e6fda7d
JB
8531 /* We want to preserve the type name. This can be useful when
8532 trying to get the type name of a value that has already been
8533 printed (for instance, if the user did "print VAR; whatis $". */
8534 TYPE_NAME (result) = TYPE_NAME (type0);
8535
ad82864c 8536 if (constrained_packed_array_p)
284614f0
JB
8537 {
8538 /* So far, the resulting type has been created as if the original
8539 type was a regular (non-packed) array type. As a result, the
8540 bitsize of the array elements needs to be set again, and the array
8541 length needs to be recomputed based on that bitsize. */
8542 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8543 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8544
8545 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8546 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8547 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8548 TYPE_LENGTH (result)++;
8549 }
8550
876cecd0 8551 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 8552 return result;
d2e4a39e 8553}
14f9c5c9
AS
8554
8555
8556/* A standard type (containing no dynamically sized components)
8557 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8558 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8559 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8560 ADDRESS or in VALADDR contains these discriminants.
8561
1ed6ede0
JB
8562 If CHECK_TAG is not null, in the case of tagged types, this function
8563 attempts to locate the object's tag and use it to compute the actual
8564 type. However, when ADDRESS is null, we cannot use it to determine the
8565 location of the tag, and therefore compute the tagged type's actual type.
8566 So we return the tagged type without consulting the tag. */
529cad9c 8567
f192137b
JB
8568static struct type *
8569ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 8570 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8571{
61ee279c 8572 type = ada_check_typedef (type);
d2e4a39e
AS
8573 switch (TYPE_CODE (type))
8574 {
8575 default:
14f9c5c9 8576 return type;
d2e4a39e 8577 case TYPE_CODE_STRUCT:
4c4b4cd2 8578 {
76a01679 8579 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
8580 struct type *fixed_record_type =
8581 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 8582
529cad9c
PH
8583 /* If STATIC_TYPE is a tagged type and we know the object's address,
8584 then we can determine its tag, and compute the object's actual
0963b4bd 8585 type from there. Note that we have to use the fixed record
1ed6ede0
JB
8586 type (the parent part of the record may have dynamic fields
8587 and the way the location of _tag is expressed may depend on
8588 them). */
529cad9c 8589
1ed6ede0 8590 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 8591 {
b50d69b5
JG
8592 struct value *tag =
8593 value_tag_from_contents_and_address
8594 (fixed_record_type,
8595 valaddr,
8596 address);
8597 struct type *real_type = type_from_tag (tag);
8598 struct value *obj =
8599 value_from_contents_and_address (fixed_record_type,
8600 valaddr,
8601 address);
9f1f738a 8602 fixed_record_type = value_type (obj);
76a01679 8603 if (real_type != NULL)
b50d69b5
JG
8604 return to_fixed_record_type
8605 (real_type, NULL,
8606 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 8607 }
4af88198
JB
8608
8609 /* Check to see if there is a parallel ___XVZ variable.
8610 If there is, then it provides the actual size of our type. */
8611 else if (ada_type_name (fixed_record_type) != NULL)
8612 {
0d5cff50 8613 const char *name = ada_type_name (fixed_record_type);
4af88198
JB
8614 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8615 int xvz_found = 0;
8616 LONGEST size;
8617
88c15c34 8618 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
8619 size = get_int_var_value (xvz_name, &xvz_found);
8620 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8621 {
8622 fixed_record_type = copy_type (fixed_record_type);
8623 TYPE_LENGTH (fixed_record_type) = size;
8624
8625 /* The FIXED_RECORD_TYPE may have be a stub. We have
8626 observed this when the debugging info is STABS, and
8627 apparently it is something that is hard to fix.
8628
8629 In practice, we don't need the actual type definition
8630 at all, because the presence of the XVZ variable allows us
8631 to assume that there must be a XVS type as well, which we
8632 should be able to use later, when we need the actual type
8633 definition.
8634
8635 In the meantime, pretend that the "fixed" type we are
8636 returning is NOT a stub, because this can cause trouble
8637 when using this type to create new types targeting it.
8638 Indeed, the associated creation routines often check
8639 whether the target type is a stub and will try to replace
0963b4bd 8640 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
8641 might cause the new type to have the wrong size too.
8642 Consider the case of an array, for instance, where the size
8643 of the array is computed from the number of elements in
8644 our array multiplied by the size of its element. */
8645 TYPE_STUB (fixed_record_type) = 0;
8646 }
8647 }
1ed6ede0 8648 return fixed_record_type;
4c4b4cd2 8649 }
d2e4a39e 8650 case TYPE_CODE_ARRAY:
4c4b4cd2 8651 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8652 case TYPE_CODE_UNION:
8653 if (dval == NULL)
4c4b4cd2 8654 return type;
d2e4a39e 8655 else
4c4b4cd2 8656 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8657 }
14f9c5c9
AS
8658}
8659
f192137b
JB
8660/* The same as ada_to_fixed_type_1, except that it preserves the type
8661 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8662
8663 The typedef layer needs be preserved in order to differentiate between
8664 arrays and array pointers when both types are implemented using the same
8665 fat pointer. In the array pointer case, the pointer is encoded as
8666 a typedef of the pointer type. For instance, considering:
8667
8668 type String_Access is access String;
8669 S1 : String_Access := null;
8670
8671 To the debugger, S1 is defined as a typedef of type String. But
8672 to the user, it is a pointer. So if the user tries to print S1,
8673 we should not dereference the array, but print the array address
8674 instead.
8675
8676 If we didn't preserve the typedef layer, we would lose the fact that
8677 the type is to be presented as a pointer (needs de-reference before
8678 being printed). And we would also use the source-level type name. */
f192137b
JB
8679
8680struct type *
8681ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8682 CORE_ADDR address, struct value *dval, int check_tag)
8683
8684{
8685 struct type *fixed_type =
8686 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8687
96dbd2c1
JB
8688 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8689 then preserve the typedef layer.
8690
8691 Implementation note: We can only check the main-type portion of
8692 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8693 from TYPE now returns a type that has the same instance flags
8694 as TYPE. For instance, if TYPE is a "typedef const", and its
8695 target type is a "struct", then the typedef elimination will return
8696 a "const" version of the target type. See check_typedef for more
8697 details about how the typedef layer elimination is done.
8698
8699 brobecker/2010-11-19: It seems to me that the only case where it is
8700 useful to preserve the typedef layer is when dealing with fat pointers.
8701 Perhaps, we could add a check for that and preserve the typedef layer
8702 only in that situation. But this seems unecessary so far, probably
8703 because we call check_typedef/ada_check_typedef pretty much everywhere.
8704 */
f192137b 8705 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 8706 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8707 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8708 return type;
8709
8710 return fixed_type;
8711}
8712
14f9c5c9 8713/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8714 TYPE0, but based on no runtime data. */
14f9c5c9 8715
d2e4a39e
AS
8716static struct type *
8717to_static_fixed_type (struct type *type0)
14f9c5c9 8718{
d2e4a39e 8719 struct type *type;
14f9c5c9
AS
8720
8721 if (type0 == NULL)
8722 return NULL;
8723
876cecd0 8724 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8725 return type0;
8726
61ee279c 8727 type0 = ada_check_typedef (type0);
d2e4a39e 8728
14f9c5c9
AS
8729 switch (TYPE_CODE (type0))
8730 {
8731 default:
8732 return type0;
8733 case TYPE_CODE_STRUCT:
8734 type = dynamic_template_type (type0);
d2e4a39e 8735 if (type != NULL)
4c4b4cd2
PH
8736 return template_to_static_fixed_type (type);
8737 else
8738 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8739 case TYPE_CODE_UNION:
8740 type = ada_find_parallel_type (type0, "___XVU");
8741 if (type != NULL)
4c4b4cd2
PH
8742 return template_to_static_fixed_type (type);
8743 else
8744 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8745 }
8746}
8747
4c4b4cd2
PH
8748/* A static approximation of TYPE with all type wrappers removed. */
8749
d2e4a39e
AS
8750static struct type *
8751static_unwrap_type (struct type *type)
14f9c5c9
AS
8752{
8753 if (ada_is_aligner_type (type))
8754 {
61ee279c 8755 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 8756 if (ada_type_name (type1) == NULL)
4c4b4cd2 8757 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
8758
8759 return static_unwrap_type (type1);
8760 }
d2e4a39e 8761 else
14f9c5c9 8762 {
d2e4a39e 8763 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8764
d2e4a39e 8765 if (raw_real_type == type)
4c4b4cd2 8766 return type;
14f9c5c9 8767 else
4c4b4cd2 8768 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8769 }
8770}
8771
8772/* In some cases, incomplete and private types require
4c4b4cd2 8773 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8774 type Foo;
8775 type FooP is access Foo;
8776 V: FooP;
8777 type Foo is array ...;
4c4b4cd2 8778 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8779 cross-references to such types, we instead substitute for FooP a
8780 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8781 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8782
8783/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8784 exists, otherwise TYPE. */
8785
d2e4a39e 8786struct type *
61ee279c 8787ada_check_typedef (struct type *type)
14f9c5c9 8788{
727e3d2e
JB
8789 if (type == NULL)
8790 return NULL;
8791
720d1a40
JB
8792 /* If our type is a typedef type of a fat pointer, then we're done.
8793 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8794 what allows us to distinguish between fat pointers that represent
8795 array types, and fat pointers that represent array access types
8796 (in both cases, the compiler implements them as fat pointers). */
8797 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8798 && is_thick_pntr (ada_typedef_target_type (type)))
8799 return type;
8800
14f9c5c9
AS
8801 CHECK_TYPEDEF (type);
8802 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 8803 || !TYPE_STUB (type)
14f9c5c9
AS
8804 || TYPE_TAG_NAME (type) == NULL)
8805 return type;
d2e4a39e 8806 else
14f9c5c9 8807 {
0d5cff50 8808 const char *name = TYPE_TAG_NAME (type);
d2e4a39e 8809 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8810
05e522ef
JB
8811 if (type1 == NULL)
8812 return type;
8813
8814 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8815 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8816 types, only for the typedef-to-array types). If that's the case,
8817 strip the typedef layer. */
8818 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8819 type1 = ada_check_typedef (type1);
8820
8821 return type1;
14f9c5c9
AS
8822 }
8823}
8824
8825/* A value representing the data at VALADDR/ADDRESS as described by
8826 type TYPE0, but with a standard (static-sized) type that correctly
8827 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8828 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8829 creation of struct values]. */
14f9c5c9 8830
4c4b4cd2
PH
8831static struct value *
8832ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8833 struct value *val0)
14f9c5c9 8834{
1ed6ede0 8835 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8836
14f9c5c9
AS
8837 if (type == type0 && val0 != NULL)
8838 return val0;
d2e4a39e 8839 else
4c4b4cd2
PH
8840 return value_from_contents_and_address (type, 0, address);
8841}
8842
8843/* A value representing VAL, but with a standard (static-sized) type
8844 that correctly describes it. Does not necessarily create a new
8845 value. */
8846
0c3acc09 8847struct value *
4c4b4cd2
PH
8848ada_to_fixed_value (struct value *val)
8849{
c48db5ca
JB
8850 val = unwrap_value (val);
8851 val = ada_to_fixed_value_create (value_type (val),
8852 value_address (val),
8853 val);
8854 return val;
14f9c5c9 8855}
d2e4a39e 8856\f
14f9c5c9 8857
14f9c5c9
AS
8858/* Attributes */
8859
4c4b4cd2
PH
8860/* Table mapping attribute numbers to names.
8861 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8862
d2e4a39e 8863static const char *attribute_names[] = {
14f9c5c9
AS
8864 "<?>",
8865
d2e4a39e 8866 "first",
14f9c5c9
AS
8867 "last",
8868 "length",
8869 "image",
14f9c5c9
AS
8870 "max",
8871 "min",
4c4b4cd2
PH
8872 "modulus",
8873 "pos",
8874 "size",
8875 "tag",
14f9c5c9 8876 "val",
14f9c5c9
AS
8877 0
8878};
8879
d2e4a39e 8880const char *
4c4b4cd2 8881ada_attribute_name (enum exp_opcode n)
14f9c5c9 8882{
4c4b4cd2
PH
8883 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8884 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8885 else
8886 return attribute_names[0];
8887}
8888
4c4b4cd2 8889/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8890
4c4b4cd2
PH
8891static LONGEST
8892pos_atr (struct value *arg)
14f9c5c9 8893{
24209737
PH
8894 struct value *val = coerce_ref (arg);
8895 struct type *type = value_type (val);
14f9c5c9 8896
d2e4a39e 8897 if (!discrete_type_p (type))
323e0a4a 8898 error (_("'POS only defined on discrete types"));
14f9c5c9
AS
8899
8900 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8901 {
8902 int i;
24209737 8903 LONGEST v = value_as_long (val);
14f9c5c9 8904
d2e4a39e 8905 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2 8906 {
14e75d8e 8907 if (v == TYPE_FIELD_ENUMVAL (type, i))
4c4b4cd2
PH
8908 return i;
8909 }
323e0a4a 8910 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9
AS
8911 }
8912 else
24209737 8913 return value_as_long (val);
4c4b4cd2
PH
8914}
8915
8916static struct value *
3cb382c9 8917value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8918{
3cb382c9 8919 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8920}
8921
4c4b4cd2 8922/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8923
d2e4a39e
AS
8924static struct value *
8925value_val_atr (struct type *type, struct value *arg)
14f9c5c9 8926{
d2e4a39e 8927 if (!discrete_type_p (type))
323e0a4a 8928 error (_("'VAL only defined on discrete types"));
df407dfe 8929 if (!integer_type_p (value_type (arg)))
323e0a4a 8930 error (_("'VAL requires integral argument"));
14f9c5c9
AS
8931
8932 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8933 {
8934 long pos = value_as_long (arg);
5b4ee69b 8935
14f9c5c9 8936 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 8937 error (_("argument to 'VAL out of range"));
14e75d8e 8938 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
8939 }
8940 else
8941 return value_from_longest (type, value_as_long (arg));
8942}
14f9c5c9 8943\f
d2e4a39e 8944
4c4b4cd2 8945 /* Evaluation */
14f9c5c9 8946
4c4b4cd2
PH
8947/* True if TYPE appears to be an Ada character type.
8948 [At the moment, this is true only for Character and Wide_Character;
8949 It is a heuristic test that could stand improvement]. */
14f9c5c9 8950
d2e4a39e
AS
8951int
8952ada_is_character_type (struct type *type)
14f9c5c9 8953{
7b9f71f2
JB
8954 const char *name;
8955
8956 /* If the type code says it's a character, then assume it really is,
8957 and don't check any further. */
8958 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8959 return 1;
8960
8961 /* Otherwise, assume it's a character type iff it is a discrete type
8962 with a known character type name. */
8963 name = ada_type_name (type);
8964 return (name != NULL
8965 && (TYPE_CODE (type) == TYPE_CODE_INT
8966 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8967 && (strcmp (name, "character") == 0
8968 || strcmp (name, "wide_character") == 0
5a517ebd 8969 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 8970 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8971}
8972
4c4b4cd2 8973/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
8974
8975int
ebf56fd3 8976ada_is_string_type (struct type *type)
14f9c5c9 8977{
61ee279c 8978 type = ada_check_typedef (type);
d2e4a39e 8979 if (type != NULL
14f9c5c9 8980 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
8981 && (ada_is_simple_array_type (type)
8982 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8983 && ada_array_arity (type) == 1)
8984 {
8985 struct type *elttype = ada_array_element_type (type, 1);
8986
8987 return ada_is_character_type (elttype);
8988 }
d2e4a39e 8989 else
14f9c5c9
AS
8990 return 0;
8991}
8992
5bf03f13
JB
8993/* The compiler sometimes provides a parallel XVS type for a given
8994 PAD type. Normally, it is safe to follow the PAD type directly,
8995 but older versions of the compiler have a bug that causes the offset
8996 of its "F" field to be wrong. Following that field in that case
8997 would lead to incorrect results, but this can be worked around
8998 by ignoring the PAD type and using the associated XVS type instead.
8999
9000 Set to True if the debugger should trust the contents of PAD types.
9001 Otherwise, ignore the PAD type if there is a parallel XVS type. */
9002static int trust_pad_over_xvs = 1;
14f9c5c9
AS
9003
9004/* True if TYPE is a struct type introduced by the compiler to force the
9005 alignment of a value. Such types have a single field with a
4c4b4cd2 9006 distinctive name. */
14f9c5c9
AS
9007
9008int
ebf56fd3 9009ada_is_aligner_type (struct type *type)
14f9c5c9 9010{
61ee279c 9011 type = ada_check_typedef (type);
714e53ab 9012
5bf03f13 9013 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
9014 return 0;
9015
14f9c5c9 9016 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
9017 && TYPE_NFIELDS (type) == 1
9018 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
9019}
9020
9021/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 9022 the parallel type. */
14f9c5c9 9023
d2e4a39e
AS
9024struct type *
9025ada_get_base_type (struct type *raw_type)
14f9c5c9 9026{
d2e4a39e
AS
9027 struct type *real_type_namer;
9028 struct type *raw_real_type;
14f9c5c9
AS
9029
9030 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9031 return raw_type;
9032
284614f0
JB
9033 if (ada_is_aligner_type (raw_type))
9034 /* The encoding specifies that we should always use the aligner type.
9035 So, even if this aligner type has an associated XVS type, we should
9036 simply ignore it.
9037
9038 According to the compiler gurus, an XVS type parallel to an aligner
9039 type may exist because of a stabs limitation. In stabs, aligner
9040 types are empty because the field has a variable-sized type, and
9041 thus cannot actually be used as an aligner type. As a result,
9042 we need the associated parallel XVS type to decode the type.
9043 Since the policy in the compiler is to not change the internal
9044 representation based on the debugging info format, we sometimes
9045 end up having a redundant XVS type parallel to the aligner type. */
9046 return raw_type;
9047
14f9c5c9 9048 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9049 if (real_type_namer == NULL
14f9c5c9
AS
9050 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9051 || TYPE_NFIELDS (real_type_namer) != 1)
9052 return raw_type;
9053
f80d3ff2
JB
9054 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9055 {
9056 /* This is an older encoding form where the base type needs to be
9057 looked up by name. We prefer the newer enconding because it is
9058 more efficient. */
9059 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9060 if (raw_real_type == NULL)
9061 return raw_type;
9062 else
9063 return raw_real_type;
9064 }
9065
9066 /* The field in our XVS type is a reference to the base type. */
9067 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 9068}
14f9c5c9 9069
4c4b4cd2 9070/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9071
d2e4a39e
AS
9072struct type *
9073ada_aligned_type (struct type *type)
14f9c5c9
AS
9074{
9075 if (ada_is_aligner_type (type))
9076 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9077 else
9078 return ada_get_base_type (type);
9079}
9080
9081
9082/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9083 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9084
fc1a4b47
AC
9085const gdb_byte *
9086ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9087{
d2e4a39e 9088 if (ada_is_aligner_type (type))
14f9c5c9 9089 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
9090 valaddr +
9091 TYPE_FIELD_BITPOS (type,
9092 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9093 else
9094 return valaddr;
9095}
9096
4c4b4cd2
PH
9097
9098
14f9c5c9 9099/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9100 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9101const char *
9102ada_enum_name (const char *name)
14f9c5c9 9103{
4c4b4cd2
PH
9104 static char *result;
9105 static size_t result_len = 0;
d2e4a39e 9106 char *tmp;
14f9c5c9 9107
4c4b4cd2
PH
9108 /* First, unqualify the enumeration name:
9109 1. Search for the last '.' character. If we find one, then skip
177b42fe 9110 all the preceding characters, the unqualified name starts
76a01679 9111 right after that dot.
4c4b4cd2 9112 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9113 translates dots into "__". Search forward for double underscores,
9114 but stop searching when we hit an overloading suffix, which is
9115 of the form "__" followed by digits. */
4c4b4cd2 9116
c3e5cd34
PH
9117 tmp = strrchr (name, '.');
9118 if (tmp != NULL)
4c4b4cd2
PH
9119 name = tmp + 1;
9120 else
14f9c5c9 9121 {
4c4b4cd2
PH
9122 while ((tmp = strstr (name, "__")) != NULL)
9123 {
9124 if (isdigit (tmp[2]))
9125 break;
9126 else
9127 name = tmp + 2;
9128 }
14f9c5c9
AS
9129 }
9130
9131 if (name[0] == 'Q')
9132 {
14f9c5c9 9133 int v;
5b4ee69b 9134
14f9c5c9 9135 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
9136 {
9137 if (sscanf (name + 2, "%x", &v) != 1)
9138 return name;
9139 }
14f9c5c9 9140 else
4c4b4cd2 9141 return name;
14f9c5c9 9142
4c4b4cd2 9143 GROW_VECT (result, result_len, 16);
14f9c5c9 9144 if (isascii (v) && isprint (v))
88c15c34 9145 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9146 else if (name[1] == 'U')
88c15c34 9147 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9148 else
88c15c34 9149 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9150
9151 return result;
9152 }
d2e4a39e 9153 else
4c4b4cd2 9154 {
c3e5cd34
PH
9155 tmp = strstr (name, "__");
9156 if (tmp == NULL)
9157 tmp = strstr (name, "$");
9158 if (tmp != NULL)
4c4b4cd2
PH
9159 {
9160 GROW_VECT (result, result_len, tmp - name + 1);
9161 strncpy (result, name, tmp - name);
9162 result[tmp - name] = '\0';
9163 return result;
9164 }
9165
9166 return name;
9167 }
14f9c5c9
AS
9168}
9169
14f9c5c9
AS
9170/* Evaluate the subexpression of EXP starting at *POS as for
9171 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9172 expression. */
14f9c5c9 9173
d2e4a39e
AS
9174static struct value *
9175evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9176{
4b27a620 9177 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9178}
9179
9180/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9181 value it wraps. */
14f9c5c9 9182
d2e4a39e
AS
9183static struct value *
9184unwrap_value (struct value *val)
14f9c5c9 9185{
df407dfe 9186 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9187
14f9c5c9
AS
9188 if (ada_is_aligner_type (type))
9189 {
de4d072f 9190 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9191 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9192
14f9c5c9 9193 if (ada_type_name (val_type) == NULL)
4c4b4cd2 9194 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
9195
9196 return unwrap_value (v);
9197 }
d2e4a39e 9198 else
14f9c5c9 9199 {
d2e4a39e 9200 struct type *raw_real_type =
61ee279c 9201 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9202
5bf03f13
JB
9203 /* If there is no parallel XVS or XVE type, then the value is
9204 already unwrapped. Return it without further modification. */
9205 if ((type == raw_real_type)
9206 && ada_find_parallel_type (type, "___XVE") == NULL)
9207 return val;
14f9c5c9 9208
d2e4a39e 9209 return
4c4b4cd2
PH
9210 coerce_unspec_val_to_type
9211 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9212 value_address (val),
1ed6ede0 9213 NULL, 1));
14f9c5c9
AS
9214 }
9215}
d2e4a39e
AS
9216
9217static struct value *
9218cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
9219{
9220 LONGEST val;
9221
df407dfe 9222 if (type == value_type (arg))
14f9c5c9 9223 return arg;
df407dfe 9224 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 9225 val = ada_float_to_fixed (type,
df407dfe 9226 ada_fixed_to_float (value_type (arg),
4c4b4cd2 9227 value_as_long (arg)));
d2e4a39e 9228 else
14f9c5c9 9229 {
a53b7a21 9230 DOUBLEST argd = value_as_double (arg);
5b4ee69b 9231
14f9c5c9
AS
9232 val = ada_float_to_fixed (type, argd);
9233 }
9234
9235 return value_from_longest (type, val);
9236}
9237
d2e4a39e 9238static struct value *
a53b7a21 9239cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9240{
df407dfe 9241 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 9242 value_as_long (arg));
5b4ee69b 9243
a53b7a21 9244 return value_from_double (type, val);
14f9c5c9
AS
9245}
9246
d99dcf51
JB
9247/* Given two array types T1 and T2, return nonzero iff both arrays
9248 contain the same number of elements. */
9249
9250static int
9251ada_same_array_size_p (struct type *t1, struct type *t2)
9252{
9253 LONGEST lo1, hi1, lo2, hi2;
9254
9255 /* Get the array bounds in order to verify that the size of
9256 the two arrays match. */
9257 if (!get_array_bounds (t1, &lo1, &hi1)
9258 || !get_array_bounds (t2, &lo2, &hi2))
9259 error (_("unable to determine array bounds"));
9260
9261 /* To make things easier for size comparison, normalize a bit
9262 the case of empty arrays by making sure that the difference
9263 between upper bound and lower bound is always -1. */
9264 if (lo1 > hi1)
9265 hi1 = lo1 - 1;
9266 if (lo2 > hi2)
9267 hi2 = lo2 - 1;
9268
9269 return (hi1 - lo1 == hi2 - lo2);
9270}
9271
9272/* Assuming that VAL is an array of integrals, and TYPE represents
9273 an array with the same number of elements, but with wider integral
9274 elements, return an array "casted" to TYPE. In practice, this
9275 means that the returned array is built by casting each element
9276 of the original array into TYPE's (wider) element type. */
9277
9278static struct value *
9279ada_promote_array_of_integrals (struct type *type, struct value *val)
9280{
9281 struct type *elt_type = TYPE_TARGET_TYPE (type);
9282 LONGEST lo, hi;
9283 struct value *res;
9284 LONGEST i;
9285
9286 /* Verify that both val and type are arrays of scalars, and
9287 that the size of val's elements is smaller than the size
9288 of type's element. */
9289 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9290 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9291 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9292 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9293 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9294 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9295
9296 if (!get_array_bounds (type, &lo, &hi))
9297 error (_("unable to determine array bounds"));
9298
9299 res = allocate_value (type);
9300
9301 /* Promote each array element. */
9302 for (i = 0; i < hi - lo + 1; i++)
9303 {
9304 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9305
9306 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9307 value_contents_all (elt), TYPE_LENGTH (elt_type));
9308 }
9309
9310 return res;
9311}
9312
4c4b4cd2
PH
9313/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9314 return the converted value. */
9315
d2e4a39e
AS
9316static struct value *
9317coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9318{
df407dfe 9319 struct type *type2 = value_type (val);
5b4ee69b 9320
14f9c5c9
AS
9321 if (type == type2)
9322 return val;
9323
61ee279c
PH
9324 type2 = ada_check_typedef (type2);
9325 type = ada_check_typedef (type);
14f9c5c9 9326
d2e4a39e
AS
9327 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9328 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
9329 {
9330 val = ada_value_ind (val);
df407dfe 9331 type2 = value_type (val);
14f9c5c9
AS
9332 }
9333
d2e4a39e 9334 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
9335 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9336 {
d99dcf51
JB
9337 if (!ada_same_array_size_p (type, type2))
9338 error (_("cannot assign arrays of different length"));
9339
9340 if (is_integral_type (TYPE_TARGET_TYPE (type))
9341 && is_integral_type (TYPE_TARGET_TYPE (type2))
9342 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9343 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9344 {
9345 /* Allow implicit promotion of the array elements to
9346 a wider type. */
9347 return ada_promote_array_of_integrals (type, val);
9348 }
9349
9350 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9351 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9352 error (_("Incompatible types in assignment"));
04624583 9353 deprecated_set_value_type (val, type);
14f9c5c9 9354 }
d2e4a39e 9355 return val;
14f9c5c9
AS
9356}
9357
4c4b4cd2
PH
9358static struct value *
9359ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9360{
9361 struct value *val;
9362 struct type *type1, *type2;
9363 LONGEST v, v1, v2;
9364
994b9211
AC
9365 arg1 = coerce_ref (arg1);
9366 arg2 = coerce_ref (arg2);
18af8284
JB
9367 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9368 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9369
76a01679
JB
9370 if (TYPE_CODE (type1) != TYPE_CODE_INT
9371 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
9372 return value_binop (arg1, arg2, op);
9373
76a01679 9374 switch (op)
4c4b4cd2
PH
9375 {
9376 case BINOP_MOD:
9377 case BINOP_DIV:
9378 case BINOP_REM:
9379 break;
9380 default:
9381 return value_binop (arg1, arg2, op);
9382 }
9383
9384 v2 = value_as_long (arg2);
9385 if (v2 == 0)
323e0a4a 9386 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9387
9388 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9389 return value_binop (arg1, arg2, op);
9390
9391 v1 = value_as_long (arg1);
9392 switch (op)
9393 {
9394 case BINOP_DIV:
9395 v = v1 / v2;
76a01679
JB
9396 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9397 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9398 break;
9399 case BINOP_REM:
9400 v = v1 % v2;
76a01679
JB
9401 if (v * v1 < 0)
9402 v -= v2;
4c4b4cd2
PH
9403 break;
9404 default:
9405 /* Should not reach this point. */
9406 v = 0;
9407 }
9408
9409 val = allocate_value (type1);
990a07ab 9410 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9411 TYPE_LENGTH (value_type (val)),
9412 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9413 return val;
9414}
9415
9416static int
9417ada_value_equal (struct value *arg1, struct value *arg2)
9418{
df407dfe
AC
9419 if (ada_is_direct_array_type (value_type (arg1))
9420 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9421 {
f58b38bf
JB
9422 /* Automatically dereference any array reference before
9423 we attempt to perform the comparison. */
9424 arg1 = ada_coerce_ref (arg1);
9425 arg2 = ada_coerce_ref (arg2);
9426
4c4b4cd2
PH
9427 arg1 = ada_coerce_to_simple_array (arg1);
9428 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
9429 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9430 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 9431 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9432 /* FIXME: The following works only for types whose
76a01679
JB
9433 representations use all bits (no padding or undefined bits)
9434 and do not have user-defined equality. */
9435 return
df407dfe 9436 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 9437 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 9438 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
9439 }
9440 return value_equal (arg1, arg2);
9441}
9442
52ce6436
PH
9443/* Total number of component associations in the aggregate starting at
9444 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9445 OP_AGGREGATE. */
52ce6436
PH
9446
9447static int
9448num_component_specs (struct expression *exp, int pc)
9449{
9450 int n, m, i;
5b4ee69b 9451
52ce6436
PH
9452 m = exp->elts[pc + 1].longconst;
9453 pc += 3;
9454 n = 0;
9455 for (i = 0; i < m; i += 1)
9456 {
9457 switch (exp->elts[pc].opcode)
9458 {
9459 default:
9460 n += 1;
9461 break;
9462 case OP_CHOICES:
9463 n += exp->elts[pc + 1].longconst;
9464 break;
9465 }
9466 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9467 }
9468 return n;
9469}
9470
9471/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9472 component of LHS (a simple array or a record), updating *POS past
9473 the expression, assuming that LHS is contained in CONTAINER. Does
9474 not modify the inferior's memory, nor does it modify LHS (unless
9475 LHS == CONTAINER). */
9476
9477static void
9478assign_component (struct value *container, struct value *lhs, LONGEST index,
9479 struct expression *exp, int *pos)
9480{
9481 struct value *mark = value_mark ();
9482 struct value *elt;
5b4ee69b 9483
52ce6436
PH
9484 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9485 {
22601c15
UW
9486 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9487 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9488
52ce6436
PH
9489 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9490 }
9491 else
9492 {
9493 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9494 elt = ada_to_fixed_value (elt);
52ce6436
PH
9495 }
9496
9497 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9498 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9499 else
9500 value_assign_to_component (container, elt,
9501 ada_evaluate_subexp (NULL, exp, pos,
9502 EVAL_NORMAL));
9503
9504 value_free_to_mark (mark);
9505}
9506
9507/* Assuming that LHS represents an lvalue having a record or array
9508 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9509 of that aggregate's value to LHS, advancing *POS past the
9510 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9511 lvalue containing LHS (possibly LHS itself). Does not modify
9512 the inferior's memory, nor does it modify the contents of
0963b4bd 9513 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9514
9515static struct value *
9516assign_aggregate (struct value *container,
9517 struct value *lhs, struct expression *exp,
9518 int *pos, enum noside noside)
9519{
9520 struct type *lhs_type;
9521 int n = exp->elts[*pos+1].longconst;
9522 LONGEST low_index, high_index;
9523 int num_specs;
9524 LONGEST *indices;
9525 int max_indices, num_indices;
52ce6436 9526 int i;
52ce6436
PH
9527
9528 *pos += 3;
9529 if (noside != EVAL_NORMAL)
9530 {
52ce6436
PH
9531 for (i = 0; i < n; i += 1)
9532 ada_evaluate_subexp (NULL, exp, pos, noside);
9533 return container;
9534 }
9535
9536 container = ada_coerce_ref (container);
9537 if (ada_is_direct_array_type (value_type (container)))
9538 container = ada_coerce_to_simple_array (container);
9539 lhs = ada_coerce_ref (lhs);
9540 if (!deprecated_value_modifiable (lhs))
9541 error (_("Left operand of assignment is not a modifiable lvalue."));
9542
9543 lhs_type = value_type (lhs);
9544 if (ada_is_direct_array_type (lhs_type))
9545 {
9546 lhs = ada_coerce_to_simple_array (lhs);
9547 lhs_type = value_type (lhs);
9548 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9549 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
9550 }
9551 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9552 {
9553 low_index = 0;
9554 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9555 }
9556 else
9557 error (_("Left-hand side must be array or record."));
9558
9559 num_specs = num_component_specs (exp, *pos - 3);
9560 max_indices = 4 * num_specs + 4;
9561 indices = alloca (max_indices * sizeof (indices[0]));
9562 indices[0] = indices[1] = low_index - 1;
9563 indices[2] = indices[3] = high_index + 1;
9564 num_indices = 4;
9565
9566 for (i = 0; i < n; i += 1)
9567 {
9568 switch (exp->elts[*pos].opcode)
9569 {
1fbf5ada
JB
9570 case OP_CHOICES:
9571 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9572 &num_indices, max_indices,
9573 low_index, high_index);
9574 break;
9575 case OP_POSITIONAL:
9576 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
9577 &num_indices, max_indices,
9578 low_index, high_index);
1fbf5ada
JB
9579 break;
9580 case OP_OTHERS:
9581 if (i != n-1)
9582 error (_("Misplaced 'others' clause"));
9583 aggregate_assign_others (container, lhs, exp, pos, indices,
9584 num_indices, low_index, high_index);
9585 break;
9586 default:
9587 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9588 }
9589 }
9590
9591 return container;
9592}
9593
9594/* Assign into the component of LHS indexed by the OP_POSITIONAL
9595 construct at *POS, updating *POS past the construct, given that
9596 the positions are relative to lower bound LOW, where HIGH is the
9597 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9598 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 9599 assign_aggregate. */
52ce6436
PH
9600static void
9601aggregate_assign_positional (struct value *container,
9602 struct value *lhs, struct expression *exp,
9603 int *pos, LONGEST *indices, int *num_indices,
9604 int max_indices, LONGEST low, LONGEST high)
9605{
9606 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9607
9608 if (ind - 1 == high)
e1d5a0d2 9609 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9610 if (ind <= high)
9611 {
9612 add_component_interval (ind, ind, indices, num_indices, max_indices);
9613 *pos += 3;
9614 assign_component (container, lhs, ind, exp, pos);
9615 }
9616 else
9617 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9618}
9619
9620/* Assign into the components of LHS indexed by the OP_CHOICES
9621 construct at *POS, updating *POS past the construct, given that
9622 the allowable indices are LOW..HIGH. Record the indices assigned
9623 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 9624 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9625static void
9626aggregate_assign_from_choices (struct value *container,
9627 struct value *lhs, struct expression *exp,
9628 int *pos, LONGEST *indices, int *num_indices,
9629 int max_indices, LONGEST low, LONGEST high)
9630{
9631 int j;
9632 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9633 int choice_pos, expr_pc;
9634 int is_array = ada_is_direct_array_type (value_type (lhs));
9635
9636 choice_pos = *pos += 3;
9637
9638 for (j = 0; j < n_choices; j += 1)
9639 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9640 expr_pc = *pos;
9641 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9642
9643 for (j = 0; j < n_choices; j += 1)
9644 {
9645 LONGEST lower, upper;
9646 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9647
52ce6436
PH
9648 if (op == OP_DISCRETE_RANGE)
9649 {
9650 choice_pos += 1;
9651 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9652 EVAL_NORMAL));
9653 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9654 EVAL_NORMAL));
9655 }
9656 else if (is_array)
9657 {
9658 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9659 EVAL_NORMAL));
9660 upper = lower;
9661 }
9662 else
9663 {
9664 int ind;
0d5cff50 9665 const char *name;
5b4ee69b 9666
52ce6436
PH
9667 switch (op)
9668 {
9669 case OP_NAME:
9670 name = &exp->elts[choice_pos + 2].string;
9671 break;
9672 case OP_VAR_VALUE:
9673 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9674 break;
9675 default:
9676 error (_("Invalid record component association."));
9677 }
9678 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9679 ind = 0;
9680 if (! find_struct_field (name, value_type (lhs), 0,
9681 NULL, NULL, NULL, NULL, &ind))
9682 error (_("Unknown component name: %s."), name);
9683 lower = upper = ind;
9684 }
9685
9686 if (lower <= upper && (lower < low || upper > high))
9687 error (_("Index in component association out of bounds."));
9688
9689 add_component_interval (lower, upper, indices, num_indices,
9690 max_indices);
9691 while (lower <= upper)
9692 {
9693 int pos1;
5b4ee69b 9694
52ce6436
PH
9695 pos1 = expr_pc;
9696 assign_component (container, lhs, lower, exp, &pos1);
9697 lower += 1;
9698 }
9699 }
9700}
9701
9702/* Assign the value of the expression in the OP_OTHERS construct in
9703 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9704 have not been previously assigned. The index intervals already assigned
9705 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 9706 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9707static void
9708aggregate_assign_others (struct value *container,
9709 struct value *lhs, struct expression *exp,
9710 int *pos, LONGEST *indices, int num_indices,
9711 LONGEST low, LONGEST high)
9712{
9713 int i;
5ce64950 9714 int expr_pc = *pos + 1;
52ce6436
PH
9715
9716 for (i = 0; i < num_indices - 2; i += 2)
9717 {
9718 LONGEST ind;
5b4ee69b 9719
52ce6436
PH
9720 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9721 {
5ce64950 9722 int localpos;
5b4ee69b 9723
5ce64950
MS
9724 localpos = expr_pc;
9725 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9726 }
9727 }
9728 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9729}
9730
9731/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9732 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9733 modifying *SIZE as needed. It is an error if *SIZE exceeds
9734 MAX_SIZE. The resulting intervals do not overlap. */
9735static void
9736add_component_interval (LONGEST low, LONGEST high,
9737 LONGEST* indices, int *size, int max_size)
9738{
9739 int i, j;
5b4ee69b 9740
52ce6436
PH
9741 for (i = 0; i < *size; i += 2) {
9742 if (high >= indices[i] && low <= indices[i + 1])
9743 {
9744 int kh;
5b4ee69b 9745
52ce6436
PH
9746 for (kh = i + 2; kh < *size; kh += 2)
9747 if (high < indices[kh])
9748 break;
9749 if (low < indices[i])
9750 indices[i] = low;
9751 indices[i + 1] = indices[kh - 1];
9752 if (high > indices[i + 1])
9753 indices[i + 1] = high;
9754 memcpy (indices + i + 2, indices + kh, *size - kh);
9755 *size -= kh - i - 2;
9756 return;
9757 }
9758 else if (high < indices[i])
9759 break;
9760 }
9761
9762 if (*size == max_size)
9763 error (_("Internal error: miscounted aggregate components."));
9764 *size += 2;
9765 for (j = *size-1; j >= i+2; j -= 1)
9766 indices[j] = indices[j - 2];
9767 indices[i] = low;
9768 indices[i + 1] = high;
9769}
9770
6e48bd2c
JB
9771/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9772 is different. */
9773
9774static struct value *
9775ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9776{
9777 if (type == ada_check_typedef (value_type (arg2)))
9778 return arg2;
9779
9780 if (ada_is_fixed_point_type (type))
9781 return (cast_to_fixed (type, arg2));
9782
9783 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 9784 return cast_from_fixed (type, arg2);
6e48bd2c
JB
9785
9786 return value_cast (type, arg2);
9787}
9788
284614f0
JB
9789/* Evaluating Ada expressions, and printing their result.
9790 ------------------------------------------------------
9791
21649b50
JB
9792 1. Introduction:
9793 ----------------
9794
284614f0
JB
9795 We usually evaluate an Ada expression in order to print its value.
9796 We also evaluate an expression in order to print its type, which
9797 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9798 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9799 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9800 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9801 similar.
9802
9803 Evaluating expressions is a little more complicated for Ada entities
9804 than it is for entities in languages such as C. The main reason for
9805 this is that Ada provides types whose definition might be dynamic.
9806 One example of such types is variant records. Or another example
9807 would be an array whose bounds can only be known at run time.
9808
9809 The following description is a general guide as to what should be
9810 done (and what should NOT be done) in order to evaluate an expression
9811 involving such types, and when. This does not cover how the semantic
9812 information is encoded by GNAT as this is covered separatly. For the
9813 document used as the reference for the GNAT encoding, see exp_dbug.ads
9814 in the GNAT sources.
9815
9816 Ideally, we should embed each part of this description next to its
9817 associated code. Unfortunately, the amount of code is so vast right
9818 now that it's hard to see whether the code handling a particular
9819 situation might be duplicated or not. One day, when the code is
9820 cleaned up, this guide might become redundant with the comments
9821 inserted in the code, and we might want to remove it.
9822
21649b50
JB
9823 2. ``Fixing'' an Entity, the Simple Case:
9824 -----------------------------------------
9825
284614f0
JB
9826 When evaluating Ada expressions, the tricky issue is that they may
9827 reference entities whose type contents and size are not statically
9828 known. Consider for instance a variant record:
9829
9830 type Rec (Empty : Boolean := True) is record
9831 case Empty is
9832 when True => null;
9833 when False => Value : Integer;
9834 end case;
9835 end record;
9836 Yes : Rec := (Empty => False, Value => 1);
9837 No : Rec := (empty => True);
9838
9839 The size and contents of that record depends on the value of the
9840 descriminant (Rec.Empty). At this point, neither the debugging
9841 information nor the associated type structure in GDB are able to
9842 express such dynamic types. So what the debugger does is to create
9843 "fixed" versions of the type that applies to the specific object.
9844 We also informally refer to this opperation as "fixing" an object,
9845 which means creating its associated fixed type.
9846
9847 Example: when printing the value of variable "Yes" above, its fixed
9848 type would look like this:
9849
9850 type Rec is record
9851 Empty : Boolean;
9852 Value : Integer;
9853 end record;
9854
9855 On the other hand, if we printed the value of "No", its fixed type
9856 would become:
9857
9858 type Rec is record
9859 Empty : Boolean;
9860 end record;
9861
9862 Things become a little more complicated when trying to fix an entity
9863 with a dynamic type that directly contains another dynamic type,
9864 such as an array of variant records, for instance. There are
9865 two possible cases: Arrays, and records.
9866
21649b50
JB
9867 3. ``Fixing'' Arrays:
9868 ---------------------
9869
9870 The type structure in GDB describes an array in terms of its bounds,
9871 and the type of its elements. By design, all elements in the array
9872 have the same type and we cannot represent an array of variant elements
9873 using the current type structure in GDB. When fixing an array,
9874 we cannot fix the array element, as we would potentially need one
9875 fixed type per element of the array. As a result, the best we can do
9876 when fixing an array is to produce an array whose bounds and size
9877 are correct (allowing us to read it from memory), but without having
9878 touched its element type. Fixing each element will be done later,
9879 when (if) necessary.
9880
9881 Arrays are a little simpler to handle than records, because the same
9882 amount of memory is allocated for each element of the array, even if
1b536f04 9883 the amount of space actually used by each element differs from element
21649b50 9884 to element. Consider for instance the following array of type Rec:
284614f0
JB
9885
9886 type Rec_Array is array (1 .. 2) of Rec;
9887
1b536f04
JB
9888 The actual amount of memory occupied by each element might be different
9889 from element to element, depending on the value of their discriminant.
21649b50 9890 But the amount of space reserved for each element in the array remains
1b536f04 9891 fixed regardless. So we simply need to compute that size using
21649b50
JB
9892 the debugging information available, from which we can then determine
9893 the array size (we multiply the number of elements of the array by
9894 the size of each element).
9895
9896 The simplest case is when we have an array of a constrained element
9897 type. For instance, consider the following type declarations:
9898
9899 type Bounded_String (Max_Size : Integer) is
9900 Length : Integer;
9901 Buffer : String (1 .. Max_Size);
9902 end record;
9903 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9904
9905 In this case, the compiler describes the array as an array of
9906 variable-size elements (identified by its XVS suffix) for which
9907 the size can be read in the parallel XVZ variable.
9908
9909 In the case of an array of an unconstrained element type, the compiler
9910 wraps the array element inside a private PAD type. This type should not
9911 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9912 that we also use the adjective "aligner" in our code to designate
9913 these wrapper types.
9914
1b536f04 9915 In some cases, the size allocated for each element is statically
21649b50
JB
9916 known. In that case, the PAD type already has the correct size,
9917 and the array element should remain unfixed.
9918
9919 But there are cases when this size is not statically known.
9920 For instance, assuming that "Five" is an integer variable:
284614f0
JB
9921
9922 type Dynamic is array (1 .. Five) of Integer;
9923 type Wrapper (Has_Length : Boolean := False) is record
9924 Data : Dynamic;
9925 case Has_Length is
9926 when True => Length : Integer;
9927 when False => null;
9928 end case;
9929 end record;
9930 type Wrapper_Array is array (1 .. 2) of Wrapper;
9931
9932 Hello : Wrapper_Array := (others => (Has_Length => True,
9933 Data => (others => 17),
9934 Length => 1));
9935
9936
9937 The debugging info would describe variable Hello as being an
9938 array of a PAD type. The size of that PAD type is not statically
9939 known, but can be determined using a parallel XVZ variable.
9940 In that case, a copy of the PAD type with the correct size should
9941 be used for the fixed array.
9942
21649b50
JB
9943 3. ``Fixing'' record type objects:
9944 ----------------------------------
9945
9946 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9947 record types. In this case, in order to compute the associated
9948 fixed type, we need to determine the size and offset of each of
9949 its components. This, in turn, requires us to compute the fixed
9950 type of each of these components.
9951
9952 Consider for instance the example:
9953
9954 type Bounded_String (Max_Size : Natural) is record
9955 Str : String (1 .. Max_Size);
9956 Length : Natural;
9957 end record;
9958 My_String : Bounded_String (Max_Size => 10);
9959
9960 In that case, the position of field "Length" depends on the size
9961 of field Str, which itself depends on the value of the Max_Size
21649b50 9962 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9963 we need to fix the type of field Str. Therefore, fixing a variant
9964 record requires us to fix each of its components.
9965
9966 However, if a component does not have a dynamic size, the component
9967 should not be fixed. In particular, fields that use a PAD type
9968 should not fixed. Here is an example where this might happen
9969 (assuming type Rec above):
9970
9971 type Container (Big : Boolean) is record
9972 First : Rec;
9973 After : Integer;
9974 case Big is
9975 when True => Another : Integer;
9976 when False => null;
9977 end case;
9978 end record;
9979 My_Container : Container := (Big => False,
9980 First => (Empty => True),
9981 After => 42);
9982
9983 In that example, the compiler creates a PAD type for component First,
9984 whose size is constant, and then positions the component After just
9985 right after it. The offset of component After is therefore constant
9986 in this case.
9987
9988 The debugger computes the position of each field based on an algorithm
9989 that uses, among other things, the actual position and size of the field
21649b50
JB
9990 preceding it. Let's now imagine that the user is trying to print
9991 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9992 end up computing the offset of field After based on the size of the
9993 fixed version of field First. And since in our example First has
9994 only one actual field, the size of the fixed type is actually smaller
9995 than the amount of space allocated to that field, and thus we would
9996 compute the wrong offset of field After.
9997
21649b50
JB
9998 To make things more complicated, we need to watch out for dynamic
9999 components of variant records (identified by the ___XVL suffix in
10000 the component name). Even if the target type is a PAD type, the size
10001 of that type might not be statically known. So the PAD type needs
10002 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10003 we might end up with the wrong size for our component. This can be
10004 observed with the following type declarations:
284614f0
JB
10005
10006 type Octal is new Integer range 0 .. 7;
10007 type Octal_Array is array (Positive range <>) of Octal;
10008 pragma Pack (Octal_Array);
10009
10010 type Octal_Buffer (Size : Positive) is record
10011 Buffer : Octal_Array (1 .. Size);
10012 Length : Integer;
10013 end record;
10014
10015 In that case, Buffer is a PAD type whose size is unset and needs
10016 to be computed by fixing the unwrapped type.
10017
21649b50
JB
10018 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10019 ----------------------------------------------------------
10020
10021 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
10022 thus far, be actually fixed?
10023
10024 The answer is: Only when referencing that element. For instance
10025 when selecting one component of a record, this specific component
10026 should be fixed at that point in time. Or when printing the value
10027 of a record, each component should be fixed before its value gets
10028 printed. Similarly for arrays, the element of the array should be
10029 fixed when printing each element of the array, or when extracting
10030 one element out of that array. On the other hand, fixing should
10031 not be performed on the elements when taking a slice of an array!
10032
10033 Note that one of the side-effects of miscomputing the offset and
10034 size of each field is that we end up also miscomputing the size
10035 of the containing type. This can have adverse results when computing
10036 the value of an entity. GDB fetches the value of an entity based
10037 on the size of its type, and thus a wrong size causes GDB to fetch
10038 the wrong amount of memory. In the case where the computed size is
10039 too small, GDB fetches too little data to print the value of our
10040 entiry. Results in this case as unpredicatble, as we usually read
10041 past the buffer containing the data =:-o. */
10042
10043/* Implement the evaluate_exp routine in the exp_descriptor structure
10044 for the Ada language. */
10045
52ce6436 10046static struct value *
ebf56fd3 10047ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 10048 int *pos, enum noside noside)
14f9c5c9
AS
10049{
10050 enum exp_opcode op;
b5385fc0 10051 int tem;
14f9c5c9 10052 int pc;
5ec18f2b 10053 int preeval_pos;
14f9c5c9
AS
10054 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10055 struct type *type;
52ce6436 10056 int nargs, oplen;
d2e4a39e 10057 struct value **argvec;
14f9c5c9 10058
d2e4a39e
AS
10059 pc = *pos;
10060 *pos += 1;
14f9c5c9
AS
10061 op = exp->elts[pc].opcode;
10062
d2e4a39e 10063 switch (op)
14f9c5c9
AS
10064 {
10065 default:
10066 *pos -= 1;
6e48bd2c 10067 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10068
10069 if (noside == EVAL_NORMAL)
10070 arg1 = unwrap_value (arg1);
6e48bd2c
JB
10071
10072 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10073 then we need to perform the conversion manually, because
10074 evaluate_subexp_standard doesn't do it. This conversion is
10075 necessary in Ada because the different kinds of float/fixed
10076 types in Ada have different representations.
10077
10078 Similarly, we need to perform the conversion from OP_LONG
10079 ourselves. */
10080 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10081 arg1 = ada_value_cast (expect_type, arg1, noside);
10082
10083 return arg1;
4c4b4cd2
PH
10084
10085 case OP_STRING:
10086 {
76a01679 10087 struct value *result;
5b4ee69b 10088
76a01679
JB
10089 *pos -= 1;
10090 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10091 /* The result type will have code OP_STRING, bashed there from
10092 OP_ARRAY. Bash it back. */
df407dfe
AC
10093 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10094 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 10095 return result;
4c4b4cd2 10096 }
14f9c5c9
AS
10097
10098 case UNOP_CAST:
10099 (*pos) += 2;
10100 type = exp->elts[pc + 1].type;
10101 arg1 = evaluate_subexp (type, exp, pos, noside);
10102 if (noside == EVAL_SKIP)
4c4b4cd2 10103 goto nosideret;
6e48bd2c 10104 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
10105 return arg1;
10106
4c4b4cd2
PH
10107 case UNOP_QUAL:
10108 (*pos) += 2;
10109 type = exp->elts[pc + 1].type;
10110 return ada_evaluate_subexp (type, exp, pos, noside);
10111
14f9c5c9
AS
10112 case BINOP_ASSIGN:
10113 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
10114 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10115 {
10116 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10117 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10118 return arg1;
10119 return ada_value_assign (arg1, arg1);
10120 }
003f3813
JB
10121 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10122 except if the lhs of our assignment is a convenience variable.
10123 In the case of assigning to a convenience variable, the lhs
10124 should be exactly the result of the evaluation of the rhs. */
10125 type = value_type (arg1);
10126 if (VALUE_LVAL (arg1) == lval_internalvar)
10127 type = NULL;
10128 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10129 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10130 return arg1;
df407dfe
AC
10131 if (ada_is_fixed_point_type (value_type (arg1)))
10132 arg2 = cast_to_fixed (value_type (arg1), arg2);
10133 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 10134 error
323e0a4a 10135 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 10136 else
df407dfe 10137 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10138 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10139
10140 case BINOP_ADD:
10141 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10142 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10143 if (noside == EVAL_SKIP)
4c4b4cd2 10144 goto nosideret;
2ac8a782
JB
10145 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10146 return (value_from_longest
10147 (value_type (arg1),
10148 value_as_long (arg1) + value_as_long (arg2)));
c40cc657
JB
10149 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10150 return (value_from_longest
10151 (value_type (arg2),
10152 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
10153 if ((ada_is_fixed_point_type (value_type (arg1))
10154 || ada_is_fixed_point_type (value_type (arg2)))
10155 && value_type (arg1) != value_type (arg2))
323e0a4a 10156 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10157 /* Do the addition, and cast the result to the type of the first
10158 argument. We cannot cast the result to a reference type, so if
10159 ARG1 is a reference type, find its underlying type. */
10160 type = value_type (arg1);
10161 while (TYPE_CODE (type) == TYPE_CODE_REF)
10162 type = TYPE_TARGET_TYPE (type);
f44316fa 10163 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10164 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10165
10166 case BINOP_SUB:
10167 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10168 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10169 if (noside == EVAL_SKIP)
4c4b4cd2 10170 goto nosideret;
2ac8a782
JB
10171 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10172 return (value_from_longest
10173 (value_type (arg1),
10174 value_as_long (arg1) - value_as_long (arg2)));
c40cc657
JB
10175 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10176 return (value_from_longest
10177 (value_type (arg2),
10178 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
10179 if ((ada_is_fixed_point_type (value_type (arg1))
10180 || ada_is_fixed_point_type (value_type (arg2)))
10181 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10182 error (_("Operands of fixed-point subtraction "
10183 "must have the same type"));
b7789565
JB
10184 /* Do the substraction, and cast the result to the type of the first
10185 argument. We cannot cast the result to a reference type, so if
10186 ARG1 is a reference type, find its underlying type. */
10187 type = value_type (arg1);
10188 while (TYPE_CODE (type) == TYPE_CODE_REF)
10189 type = TYPE_TARGET_TYPE (type);
f44316fa 10190 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10191 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10192
10193 case BINOP_MUL:
10194 case BINOP_DIV:
e1578042
JB
10195 case BINOP_REM:
10196 case BINOP_MOD:
14f9c5c9
AS
10197 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10198 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10199 if (noside == EVAL_SKIP)
4c4b4cd2 10200 goto nosideret;
e1578042 10201 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10202 {
10203 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10204 return value_zero (value_type (arg1), not_lval);
10205 }
14f9c5c9 10206 else
4c4b4cd2 10207 {
a53b7a21 10208 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 10209 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 10210 arg1 = cast_from_fixed (type, arg1);
df407dfe 10211 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10212 arg2 = cast_from_fixed (type, arg2);
f44316fa 10213 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10214 return ada_value_binop (arg1, arg2, op);
10215 }
10216
4c4b4cd2
PH
10217 case BINOP_EQUAL:
10218 case BINOP_NOTEQUAL:
14f9c5c9 10219 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10220 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10221 if (noside == EVAL_SKIP)
76a01679 10222 goto nosideret;
4c4b4cd2 10223 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10224 tem = 0;
4c4b4cd2 10225 else
f44316fa
UW
10226 {
10227 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10228 tem = ada_value_equal (arg1, arg2);
10229 }
4c4b4cd2 10230 if (op == BINOP_NOTEQUAL)
76a01679 10231 tem = !tem;
fbb06eb1
UW
10232 type = language_bool_type (exp->language_defn, exp->gdbarch);
10233 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10234
10235 case UNOP_NEG:
10236 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10237 if (noside == EVAL_SKIP)
10238 goto nosideret;
df407dfe
AC
10239 else if (ada_is_fixed_point_type (value_type (arg1)))
10240 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10241 else
f44316fa
UW
10242 {
10243 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10244 return value_neg (arg1);
10245 }
4c4b4cd2 10246
2330c6c6
JB
10247 case BINOP_LOGICAL_AND:
10248 case BINOP_LOGICAL_OR:
10249 case UNOP_LOGICAL_NOT:
000d5124
JB
10250 {
10251 struct value *val;
10252
10253 *pos -= 1;
10254 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10255 type = language_bool_type (exp->language_defn, exp->gdbarch);
10256 return value_cast (type, val);
000d5124 10257 }
2330c6c6
JB
10258
10259 case BINOP_BITWISE_AND:
10260 case BINOP_BITWISE_IOR:
10261 case BINOP_BITWISE_XOR:
000d5124
JB
10262 {
10263 struct value *val;
10264
10265 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10266 *pos = pc;
10267 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10268
10269 return value_cast (value_type (arg1), val);
10270 }
2330c6c6 10271
14f9c5c9
AS
10272 case OP_VAR_VALUE:
10273 *pos -= 1;
6799def4 10274
14f9c5c9 10275 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10276 {
10277 *pos += 4;
10278 goto nosideret;
10279 }
da5c522f
JB
10280
10281 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10282 /* Only encountered when an unresolved symbol occurs in a
10283 context other than a function call, in which case, it is
52ce6436 10284 invalid. */
323e0a4a 10285 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 10286 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
da5c522f
JB
10287
10288 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10289 {
0c1f74cf 10290 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10291 /* Check to see if this is a tagged type. We also need to handle
10292 the case where the type is a reference to a tagged type, but
10293 we have to be careful to exclude pointers to tagged types.
10294 The latter should be shown as usual (as a pointer), whereas
10295 a reference should mostly be transparent to the user. */
10296 if (ada_is_tagged_type (type, 0)
023db19c 10297 || (TYPE_CODE (type) == TYPE_CODE_REF
31dbc1c5 10298 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10299 {
10300 /* Tagged types are a little special in the fact that the real
10301 type is dynamic and can only be determined by inspecting the
10302 object's tag. This means that we need to get the object's
10303 value first (EVAL_NORMAL) and then extract the actual object
10304 type from its tag.
10305
10306 Note that we cannot skip the final step where we extract
10307 the object type from its tag, because the EVAL_NORMAL phase
10308 results in dynamic components being resolved into fixed ones.
10309 This can cause problems when trying to print the type
10310 description of tagged types whose parent has a dynamic size:
10311 We use the type name of the "_parent" component in order
10312 to print the name of the ancestor type in the type description.
10313 If that component had a dynamic size, the resolution into
10314 a fixed type would result in the loss of that type name,
10315 thus preventing us from printing the name of the ancestor
10316 type in the type description. */
10317 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10318
10319 if (TYPE_CODE (type) != TYPE_CODE_REF)
10320 {
10321 struct type *actual_type;
10322
10323 actual_type = type_from_tag (ada_value_tag (arg1));
10324 if (actual_type == NULL)
10325 /* If, for some reason, we were unable to determine
10326 the actual type from the tag, then use the static
10327 approximation that we just computed as a fallback.
10328 This can happen if the debugging information is
10329 incomplete, for instance. */
10330 actual_type = type;
10331 return value_zero (actual_type, not_lval);
10332 }
10333 else
10334 {
10335 /* In the case of a ref, ada_coerce_ref takes care
10336 of determining the actual type. But the evaluation
10337 should return a ref as it should be valid to ask
10338 for its address; so rebuild a ref after coerce. */
10339 arg1 = ada_coerce_ref (arg1);
10340 return value_ref (arg1);
10341 }
10342 }
0c1f74cf 10343
84754697
JB
10344 /* Records and unions for which GNAT encodings have been
10345 generated need to be statically fixed as well.
10346 Otherwise, non-static fixing produces a type where
10347 all dynamic properties are removed, which prevents "ptype"
10348 from being able to completely describe the type.
10349 For instance, a case statement in a variant record would be
10350 replaced by the relevant components based on the actual
10351 value of the discriminants. */
10352 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10353 && dynamic_template_type (type) != NULL)
10354 || (TYPE_CODE (type) == TYPE_CODE_UNION
10355 && ada_find_parallel_type (type, "___XVU") != NULL))
10356 {
10357 *pos += 4;
10358 return value_zero (to_static_fixed_type (type), not_lval);
10359 }
4c4b4cd2 10360 }
da5c522f
JB
10361
10362 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10363 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10364
10365 case OP_FUNCALL:
10366 (*pos) += 2;
10367
10368 /* Allocate arg vector, including space for the function to be
10369 called in argvec[0] and a terminating NULL. */
10370 nargs = longest_to_int (exp->elts[pc + 1].longconst);
10371 argvec =
10372 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10373
10374 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10375 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10376 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
10377 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10378 else
10379 {
10380 for (tem = 0; tem <= nargs; tem += 1)
10381 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10382 argvec[tem] = 0;
10383
10384 if (noside == EVAL_SKIP)
10385 goto nosideret;
10386 }
10387
ad82864c
JB
10388 if (ada_is_constrained_packed_array_type
10389 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10390 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
10391 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10392 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10393 /* This is a packed array that has already been fixed, and
10394 therefore already coerced to a simple array. Nothing further
10395 to do. */
10396 ;
df407dfe
AC
10397 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10398 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
76a01679 10399 && VALUE_LVAL (argvec[0]) == lval_memory))
4c4b4cd2
PH
10400 argvec[0] = value_addr (argvec[0]);
10401
df407dfe 10402 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10403
10404 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10405 them. So, if this is an array typedef (encoding use for array
10406 access types encoded as fat pointers), strip it now. */
720d1a40
JB
10407 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10408 type = ada_typedef_target_type (type);
10409
4c4b4cd2
PH
10410 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10411 {
61ee279c 10412 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
10413 {
10414 case TYPE_CODE_FUNC:
61ee279c 10415 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10416 break;
10417 case TYPE_CODE_ARRAY:
10418 break;
10419 case TYPE_CODE_STRUCT:
10420 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10421 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10422 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10423 break;
10424 default:
323e0a4a 10425 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10426 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10427 break;
10428 }
10429 }
10430
10431 switch (TYPE_CODE (type))
10432 {
10433 case TYPE_CODE_FUNC:
10434 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972
PH
10435 {
10436 struct type *rtype = TYPE_TARGET_TYPE (type);
10437
10438 if (TYPE_GNU_IFUNC (type))
10439 return allocate_value (TYPE_TARGET_TYPE (rtype));
10440 return allocate_value (rtype);
10441 }
4c4b4cd2 10442 return call_function_by_hand (argvec[0], nargs, argvec + 1);
c8ea1972
PH
10443 case TYPE_CODE_INTERNAL_FUNCTION:
10444 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10445 /* We don't know anything about what the internal
10446 function might return, but we have to return
10447 something. */
10448 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10449 not_lval);
10450 else
10451 return call_internal_function (exp->gdbarch, exp->language_defn,
10452 argvec[0], nargs, argvec + 1);
10453
4c4b4cd2
PH
10454 case TYPE_CODE_STRUCT:
10455 {
10456 int arity;
10457
4c4b4cd2
PH
10458 arity = ada_array_arity (type);
10459 type = ada_array_element_type (type, nargs);
10460 if (type == NULL)
323e0a4a 10461 error (_("cannot subscript or call a record"));
4c4b4cd2 10462 if (arity != nargs)
323e0a4a 10463 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 10464 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 10465 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10466 return
10467 unwrap_value (ada_value_subscript
10468 (argvec[0], nargs, argvec + 1));
10469 }
10470 case TYPE_CODE_ARRAY:
10471 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10472 {
10473 type = ada_array_element_type (type, nargs);
10474 if (type == NULL)
323e0a4a 10475 error (_("element type of array unknown"));
4c4b4cd2 10476 else
0a07e705 10477 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10478 }
10479 return
10480 unwrap_value (ada_value_subscript
10481 (ada_coerce_to_simple_array (argvec[0]),
10482 nargs, argvec + 1));
10483 case TYPE_CODE_PTR: /* Pointer to array */
4c4b4cd2
PH
10484 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10485 {
deede10c 10486 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
4c4b4cd2
PH
10487 type = ada_array_element_type (type, nargs);
10488 if (type == NULL)
323e0a4a 10489 error (_("element type of array unknown"));
4c4b4cd2 10490 else
0a07e705 10491 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10492 }
10493 return
deede10c
JB
10494 unwrap_value (ada_value_ptr_subscript (argvec[0],
10495 nargs, argvec + 1));
4c4b4cd2
PH
10496
10497 default:
e1d5a0d2
PH
10498 error (_("Attempt to index or call something other than an "
10499 "array or function"));
4c4b4cd2
PH
10500 }
10501
10502 case TERNOP_SLICE:
10503 {
10504 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10505 struct value *low_bound_val =
10506 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
10507 struct value *high_bound_val =
10508 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10509 LONGEST low_bound;
10510 LONGEST high_bound;
5b4ee69b 10511
994b9211
AC
10512 low_bound_val = coerce_ref (low_bound_val);
10513 high_bound_val = coerce_ref (high_bound_val);
714e53ab
PH
10514 low_bound = pos_atr (low_bound_val);
10515 high_bound = pos_atr (high_bound_val);
963a6417 10516
4c4b4cd2
PH
10517 if (noside == EVAL_SKIP)
10518 goto nosideret;
10519
4c4b4cd2
PH
10520 /* If this is a reference to an aligner type, then remove all
10521 the aligners. */
df407dfe
AC
10522 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10523 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10524 TYPE_TARGET_TYPE (value_type (array)) =
10525 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 10526
ad82864c 10527 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 10528 error (_("cannot slice a packed array"));
4c4b4cd2
PH
10529
10530 /* If this is a reference to an array or an array lvalue,
10531 convert to a pointer. */
df407dfe
AC
10532 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10533 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
10534 && VALUE_LVAL (array) == lval_memory))
10535 array = value_addr (array);
10536
1265e4aa 10537 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 10538 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 10539 (value_type (array))))
0b5d8877 10540 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
10541
10542 array = ada_coerce_to_simple_array_ptr (array);
10543
714e53ab
PH
10544 /* If we have more than one level of pointer indirection,
10545 dereference the value until we get only one level. */
df407dfe
AC
10546 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10547 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
10548 == TYPE_CODE_PTR))
10549 array = value_ind (array);
10550
10551 /* Make sure we really do have an array type before going further,
10552 to avoid a SEGV when trying to get the index type or the target
10553 type later down the road if the debug info generated by
10554 the compiler is incorrect or incomplete. */
df407dfe 10555 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 10556 error (_("cannot take slice of non-array"));
714e53ab 10557
828292f2
JB
10558 if (TYPE_CODE (ada_check_typedef (value_type (array)))
10559 == TYPE_CODE_PTR)
4c4b4cd2 10560 {
828292f2
JB
10561 struct type *type0 = ada_check_typedef (value_type (array));
10562
0b5d8877 10563 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 10564 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
10565 else
10566 {
10567 struct type *arr_type0 =
828292f2 10568 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 10569
f5938064
JG
10570 return ada_value_slice_from_ptr (array, arr_type0,
10571 longest_to_int (low_bound),
10572 longest_to_int (high_bound));
4c4b4cd2
PH
10573 }
10574 }
10575 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10576 return array;
10577 else if (high_bound < low_bound)
df407dfe 10578 return empty_array (value_type (array), low_bound);
4c4b4cd2 10579 else
529cad9c
PH
10580 return ada_value_slice (array, longest_to_int (low_bound),
10581 longest_to_int (high_bound));
4c4b4cd2 10582 }
14f9c5c9 10583
4c4b4cd2
PH
10584 case UNOP_IN_RANGE:
10585 (*pos) += 2;
10586 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 10587 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 10588
14f9c5c9 10589 if (noside == EVAL_SKIP)
4c4b4cd2 10590 goto nosideret;
14f9c5c9 10591
4c4b4cd2
PH
10592 switch (TYPE_CODE (type))
10593 {
10594 default:
e1d5a0d2
PH
10595 lim_warning (_("Membership test incompletely implemented; "
10596 "always returns true"));
fbb06eb1
UW
10597 type = language_bool_type (exp->language_defn, exp->gdbarch);
10598 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
10599
10600 case TYPE_CODE_RANGE:
030b4912
UW
10601 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10602 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
10603 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10604 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
10605 type = language_bool_type (exp->language_defn, exp->gdbarch);
10606 return
10607 value_from_longest (type,
4c4b4cd2
PH
10608 (value_less (arg1, arg3)
10609 || value_equal (arg1, arg3))
10610 && (value_less (arg2, arg1)
10611 || value_equal (arg2, arg1)));
10612 }
10613
10614 case BINOP_IN_BOUNDS:
14f9c5c9 10615 (*pos) += 2;
4c4b4cd2
PH
10616 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10617 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10618
4c4b4cd2
PH
10619 if (noside == EVAL_SKIP)
10620 goto nosideret;
14f9c5c9 10621
4c4b4cd2 10622 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
10623 {
10624 type = language_bool_type (exp->language_defn, exp->gdbarch);
10625 return value_zero (type, not_lval);
10626 }
14f9c5c9 10627
4c4b4cd2 10628 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10629
1eea4ebd
UW
10630 type = ada_index_type (value_type (arg2), tem, "range");
10631 if (!type)
10632 type = value_type (arg1);
14f9c5c9 10633
1eea4ebd
UW
10634 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10635 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 10636
f44316fa
UW
10637 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10638 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10639 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10640 return
fbb06eb1 10641 value_from_longest (type,
4c4b4cd2
PH
10642 (value_less (arg1, arg3)
10643 || value_equal (arg1, arg3))
10644 && (value_less (arg2, arg1)
10645 || value_equal (arg2, arg1)));
10646
10647 case TERNOP_IN_RANGE:
10648 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10649 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10650 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10651
10652 if (noside == EVAL_SKIP)
10653 goto nosideret;
10654
f44316fa
UW
10655 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10656 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10657 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10658 return
fbb06eb1 10659 value_from_longest (type,
4c4b4cd2
PH
10660 (value_less (arg1, arg3)
10661 || value_equal (arg1, arg3))
10662 && (value_less (arg2, arg1)
10663 || value_equal (arg2, arg1)));
10664
10665 case OP_ATR_FIRST:
10666 case OP_ATR_LAST:
10667 case OP_ATR_LENGTH:
10668 {
76a01679 10669 struct type *type_arg;
5b4ee69b 10670
76a01679
JB
10671 if (exp->elts[*pos].opcode == OP_TYPE)
10672 {
10673 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10674 arg1 = NULL;
5bc23cb3 10675 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
10676 }
10677 else
10678 {
10679 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10680 type_arg = NULL;
10681 }
10682
10683 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 10684 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
10685 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10686 *pos += 4;
10687
10688 if (noside == EVAL_SKIP)
10689 goto nosideret;
10690
10691 if (type_arg == NULL)
10692 {
10693 arg1 = ada_coerce_ref (arg1);
10694
ad82864c 10695 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
10696 arg1 = ada_coerce_to_simple_array (arg1);
10697
aa4fb036 10698 if (op == OP_ATR_LENGTH)
1eea4ebd 10699 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10700 else
10701 {
10702 type = ada_index_type (value_type (arg1), tem,
10703 ada_attribute_name (op));
10704 if (type == NULL)
10705 type = builtin_type (exp->gdbarch)->builtin_int;
10706 }
76a01679
JB
10707
10708 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 10709 return allocate_value (type);
76a01679
JB
10710
10711 switch (op)
10712 {
10713 default: /* Should never happen. */
323e0a4a 10714 error (_("unexpected attribute encountered"));
76a01679 10715 case OP_ATR_FIRST:
1eea4ebd
UW
10716 return value_from_longest
10717 (type, ada_array_bound (arg1, tem, 0));
76a01679 10718 case OP_ATR_LAST:
1eea4ebd
UW
10719 return value_from_longest
10720 (type, ada_array_bound (arg1, tem, 1));
76a01679 10721 case OP_ATR_LENGTH:
1eea4ebd
UW
10722 return value_from_longest
10723 (type, ada_array_length (arg1, tem));
76a01679
JB
10724 }
10725 }
10726 else if (discrete_type_p (type_arg))
10727 {
10728 struct type *range_type;
0d5cff50 10729 const char *name = ada_type_name (type_arg);
5b4ee69b 10730
76a01679
JB
10731 range_type = NULL;
10732 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 10733 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
10734 if (range_type == NULL)
10735 range_type = type_arg;
10736 switch (op)
10737 {
10738 default:
323e0a4a 10739 error (_("unexpected attribute encountered"));
76a01679 10740 case OP_ATR_FIRST:
690cc4eb 10741 return value_from_longest
43bbcdc2 10742 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 10743 case OP_ATR_LAST:
690cc4eb 10744 return value_from_longest
43bbcdc2 10745 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 10746 case OP_ATR_LENGTH:
323e0a4a 10747 error (_("the 'length attribute applies only to array types"));
76a01679
JB
10748 }
10749 }
10750 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 10751 error (_("unimplemented type attribute"));
76a01679
JB
10752 else
10753 {
10754 LONGEST low, high;
10755
ad82864c
JB
10756 if (ada_is_constrained_packed_array_type (type_arg))
10757 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 10758
aa4fb036 10759 if (op == OP_ATR_LENGTH)
1eea4ebd 10760 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10761 else
10762 {
10763 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10764 if (type == NULL)
10765 type = builtin_type (exp->gdbarch)->builtin_int;
10766 }
1eea4ebd 10767
76a01679
JB
10768 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10769 return allocate_value (type);
10770
10771 switch (op)
10772 {
10773 default:
323e0a4a 10774 error (_("unexpected attribute encountered"));
76a01679 10775 case OP_ATR_FIRST:
1eea4ebd 10776 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
10777 return value_from_longest (type, low);
10778 case OP_ATR_LAST:
1eea4ebd 10779 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10780 return value_from_longest (type, high);
10781 case OP_ATR_LENGTH:
1eea4ebd
UW
10782 low = ada_array_bound_from_type (type_arg, tem, 0);
10783 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10784 return value_from_longest (type, high - low + 1);
10785 }
10786 }
14f9c5c9
AS
10787 }
10788
4c4b4cd2
PH
10789 case OP_ATR_TAG:
10790 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10791 if (noside == EVAL_SKIP)
76a01679 10792 goto nosideret;
4c4b4cd2
PH
10793
10794 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10795 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
10796
10797 return ada_value_tag (arg1);
10798
10799 case OP_ATR_MIN:
10800 case OP_ATR_MAX:
10801 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10802 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10803 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10804 if (noside == EVAL_SKIP)
76a01679 10805 goto nosideret;
d2e4a39e 10806 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10807 return value_zero (value_type (arg1), not_lval);
14f9c5c9 10808 else
f44316fa
UW
10809 {
10810 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10811 return value_binop (arg1, arg2,
10812 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10813 }
14f9c5c9 10814
4c4b4cd2
PH
10815 case OP_ATR_MODULUS:
10816 {
31dedfee 10817 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10818
5b4ee69b 10819 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
10820 if (noside == EVAL_SKIP)
10821 goto nosideret;
4c4b4cd2 10822
76a01679 10823 if (!ada_is_modular_type (type_arg))
323e0a4a 10824 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10825
76a01679
JB
10826 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10827 ada_modulus (type_arg));
4c4b4cd2
PH
10828 }
10829
10830
10831 case OP_ATR_POS:
10832 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10833 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10834 if (noside == EVAL_SKIP)
76a01679 10835 goto nosideret;
3cb382c9
UW
10836 type = builtin_type (exp->gdbarch)->builtin_int;
10837 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10838 return value_zero (type, not_lval);
14f9c5c9 10839 else
3cb382c9 10840 return value_pos_atr (type, arg1);
14f9c5c9 10841
4c4b4cd2
PH
10842 case OP_ATR_SIZE:
10843 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
10844 type = value_type (arg1);
10845
10846 /* If the argument is a reference, then dereference its type, since
10847 the user is really asking for the size of the actual object,
10848 not the size of the pointer. */
10849 if (TYPE_CODE (type) == TYPE_CODE_REF)
10850 type = TYPE_TARGET_TYPE (type);
10851
4c4b4cd2 10852 if (noside == EVAL_SKIP)
76a01679 10853 goto nosideret;
4c4b4cd2 10854 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 10855 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 10856 else
22601c15 10857 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 10858 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
10859
10860 case OP_ATR_VAL:
10861 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 10862 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 10863 type = exp->elts[pc + 2].type;
14f9c5c9 10864 if (noside == EVAL_SKIP)
76a01679 10865 goto nosideret;
4c4b4cd2 10866 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10867 return value_zero (type, not_lval);
4c4b4cd2 10868 else
76a01679 10869 return value_val_atr (type, arg1);
4c4b4cd2
PH
10870
10871 case BINOP_EXP:
10872 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10873 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10874 if (noside == EVAL_SKIP)
10875 goto nosideret;
10876 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10877 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 10878 else
f44316fa
UW
10879 {
10880 /* For integer exponentiation operations,
10881 only promote the first argument. */
10882 if (is_integral_type (value_type (arg2)))
10883 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10884 else
10885 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10886
10887 return value_binop (arg1, arg2, op);
10888 }
4c4b4cd2
PH
10889
10890 case UNOP_PLUS:
10891 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10892 if (noside == EVAL_SKIP)
10893 goto nosideret;
10894 else
10895 return arg1;
10896
10897 case UNOP_ABS:
10898 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10899 if (noside == EVAL_SKIP)
10900 goto nosideret;
f44316fa 10901 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 10902 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 10903 return value_neg (arg1);
14f9c5c9 10904 else
4c4b4cd2 10905 return arg1;
14f9c5c9
AS
10906
10907 case UNOP_IND:
5ec18f2b 10908 preeval_pos = *pos;
6b0d7253 10909 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10910 if (noside == EVAL_SKIP)
4c4b4cd2 10911 goto nosideret;
df407dfe 10912 type = ada_check_typedef (value_type (arg1));
14f9c5c9 10913 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
10914 {
10915 if (ada_is_array_descriptor_type (type))
10916 /* GDB allows dereferencing GNAT array descriptors. */
10917 {
10918 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 10919
4c4b4cd2 10920 if (arrType == NULL)
323e0a4a 10921 error (_("Attempt to dereference null array pointer."));
00a4c844 10922 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
10923 }
10924 else if (TYPE_CODE (type) == TYPE_CODE_PTR
10925 || TYPE_CODE (type) == TYPE_CODE_REF
10926 /* In C you can dereference an array to get the 1st elt. */
10927 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab 10928 {
5ec18f2b
JG
10929 /* As mentioned in the OP_VAR_VALUE case, tagged types can
10930 only be determined by inspecting the object's tag.
10931 This means that we need to evaluate completely the
10932 expression in order to get its type. */
10933
023db19c
JB
10934 if ((TYPE_CODE (type) == TYPE_CODE_REF
10935 || TYPE_CODE (type) == TYPE_CODE_PTR)
5ec18f2b
JG
10936 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10937 {
10938 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10939 EVAL_NORMAL);
10940 type = value_type (ada_value_ind (arg1));
10941 }
10942 else
10943 {
10944 type = to_static_fixed_type
10945 (ada_aligned_type
10946 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10947 }
c1b5a1a6 10948 ada_ensure_varsize_limit (type);
714e53ab
PH
10949 return value_zero (type, lval_memory);
10950 }
4c4b4cd2 10951 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
10952 {
10953 /* GDB allows dereferencing an int. */
10954 if (expect_type == NULL)
10955 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10956 lval_memory);
10957 else
10958 {
10959 expect_type =
10960 to_static_fixed_type (ada_aligned_type (expect_type));
10961 return value_zero (expect_type, lval_memory);
10962 }
10963 }
4c4b4cd2 10964 else
323e0a4a 10965 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 10966 }
0963b4bd 10967 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 10968 type = ada_check_typedef (value_type (arg1));
d2e4a39e 10969
96967637
JB
10970 if (TYPE_CODE (type) == TYPE_CODE_INT)
10971 /* GDB allows dereferencing an int. If we were given
10972 the expect_type, then use that as the target type.
10973 Otherwise, assume that the target type is an int. */
10974 {
10975 if (expect_type != NULL)
10976 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10977 arg1));
10978 else
10979 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10980 (CORE_ADDR) value_as_address (arg1));
10981 }
6b0d7253 10982
4c4b4cd2
PH
10983 if (ada_is_array_descriptor_type (type))
10984 /* GDB allows dereferencing GNAT array descriptors. */
10985 return ada_coerce_to_simple_array (arg1);
14f9c5c9 10986 else
4c4b4cd2 10987 return ada_value_ind (arg1);
14f9c5c9
AS
10988
10989 case STRUCTOP_STRUCT:
10990 tem = longest_to_int (exp->elts[pc + 1].longconst);
10991 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 10992 preeval_pos = *pos;
14f9c5c9
AS
10993 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10994 if (noside == EVAL_SKIP)
4c4b4cd2 10995 goto nosideret;
14f9c5c9 10996 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10997 {
df407dfe 10998 struct type *type1 = value_type (arg1);
5b4ee69b 10999
76a01679
JB
11000 if (ada_is_tagged_type (type1, 1))
11001 {
11002 type = ada_lookup_struct_elt_type (type1,
11003 &exp->elts[pc + 2].string,
11004 1, 1, NULL);
5ec18f2b
JG
11005
11006 /* If the field is not found, check if it exists in the
11007 extension of this object's type. This means that we
11008 need to evaluate completely the expression. */
11009
76a01679 11010 if (type == NULL)
5ec18f2b
JG
11011 {
11012 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11013 EVAL_NORMAL);
11014 arg1 = ada_value_struct_elt (arg1,
11015 &exp->elts[pc + 2].string,
11016 0);
11017 arg1 = unwrap_value (arg1);
11018 type = value_type (ada_to_fixed_value (arg1));
11019 }
76a01679
JB
11020 }
11021 else
11022 type =
11023 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11024 0, NULL);
11025
11026 return value_zero (ada_aligned_type (type), lval_memory);
11027 }
14f9c5c9 11028 else
284614f0
JB
11029 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11030 arg1 = unwrap_value (arg1);
11031 return ada_to_fixed_value (arg1);
11032
14f9c5c9 11033 case OP_TYPE:
4c4b4cd2
PH
11034 /* The value is not supposed to be used. This is here to make it
11035 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11036 (*pos) += 2;
11037 if (noside == EVAL_SKIP)
4c4b4cd2 11038 goto nosideret;
14f9c5c9 11039 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 11040 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11041 else
323e0a4a 11042 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11043
11044 case OP_AGGREGATE:
11045 case OP_CHOICES:
11046 case OP_OTHERS:
11047 case OP_DISCRETE_RANGE:
11048 case OP_POSITIONAL:
11049 case OP_NAME:
11050 if (noside == EVAL_NORMAL)
11051 switch (op)
11052 {
11053 case OP_NAME:
11054 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11055 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11056 case OP_AGGREGATE:
11057 error (_("Aggregates only allowed on the right of an assignment"));
11058 default:
0963b4bd
MS
11059 internal_error (__FILE__, __LINE__,
11060 _("aggregate apparently mangled"));
52ce6436
PH
11061 }
11062
11063 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11064 *pos += oplen - 1;
11065 for (tem = 0; tem < nargs; tem += 1)
11066 ada_evaluate_subexp (NULL, exp, pos, noside);
11067 goto nosideret;
14f9c5c9
AS
11068 }
11069
11070nosideret:
22601c15 11071 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 11072}
14f9c5c9 11073\f
d2e4a39e 11074
4c4b4cd2 11075 /* Fixed point */
14f9c5c9
AS
11076
11077/* If TYPE encodes an Ada fixed-point type, return the suffix of the
11078 type name that encodes the 'small and 'delta information.
4c4b4cd2 11079 Otherwise, return NULL. */
14f9c5c9 11080
d2e4a39e 11081static const char *
ebf56fd3 11082fixed_type_info (struct type *type)
14f9c5c9 11083{
d2e4a39e 11084 const char *name = ada_type_name (type);
14f9c5c9
AS
11085 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11086
d2e4a39e
AS
11087 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11088 {
14f9c5c9 11089 const char *tail = strstr (name, "___XF_");
5b4ee69b 11090
14f9c5c9 11091 if (tail == NULL)
4c4b4cd2 11092 return NULL;
d2e4a39e 11093 else
4c4b4cd2 11094 return tail + 5;
14f9c5c9
AS
11095 }
11096 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11097 return fixed_type_info (TYPE_TARGET_TYPE (type));
11098 else
11099 return NULL;
11100}
11101
4c4b4cd2 11102/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
11103
11104int
ebf56fd3 11105ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
11106{
11107 return fixed_type_info (type) != NULL;
11108}
11109
4c4b4cd2
PH
11110/* Return non-zero iff TYPE represents a System.Address type. */
11111
11112int
11113ada_is_system_address_type (struct type *type)
11114{
11115 return (TYPE_NAME (type)
11116 && strcmp (TYPE_NAME (type), "system__address") == 0);
11117}
11118
14f9c5c9
AS
11119/* Assuming that TYPE is the representation of an Ada fixed-point
11120 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 11121 delta cannot be determined. */
14f9c5c9
AS
11122
11123DOUBLEST
ebf56fd3 11124ada_delta (struct type *type)
14f9c5c9
AS
11125{
11126 const char *encoding = fixed_type_info (type);
facc390f 11127 DOUBLEST num, den;
14f9c5c9 11128
facc390f
JB
11129 /* Strictly speaking, num and den are encoded as integer. However,
11130 they may not fit into a long, and they will have to be converted
11131 to DOUBLEST anyway. So scan them as DOUBLEST. */
11132 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11133 &num, &den) < 2)
14f9c5c9 11134 return -1.0;
d2e4a39e 11135 else
facc390f 11136 return num / den;
14f9c5c9
AS
11137}
11138
11139/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 11140 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
11141
11142static DOUBLEST
ebf56fd3 11143scaling_factor (struct type *type)
14f9c5c9
AS
11144{
11145 const char *encoding = fixed_type_info (type);
facc390f 11146 DOUBLEST num0, den0, num1, den1;
14f9c5c9 11147 int n;
d2e4a39e 11148
facc390f
JB
11149 /* Strictly speaking, num's and den's are encoded as integer. However,
11150 they may not fit into a long, and they will have to be converted
11151 to DOUBLEST anyway. So scan them as DOUBLEST. */
11152 n = sscanf (encoding,
11153 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11154 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11155 &num0, &den0, &num1, &den1);
14f9c5c9
AS
11156
11157 if (n < 2)
11158 return 1.0;
11159 else if (n == 4)
facc390f 11160 return num1 / den1;
d2e4a39e 11161 else
facc390f 11162 return num0 / den0;
14f9c5c9
AS
11163}
11164
11165
11166/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 11167 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
11168
11169DOUBLEST
ebf56fd3 11170ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 11171{
d2e4a39e 11172 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
11173}
11174
4c4b4cd2
PH
11175/* The representation of a fixed-point value of type TYPE
11176 corresponding to the value X. */
14f9c5c9
AS
11177
11178LONGEST
ebf56fd3 11179ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
11180{
11181 return (LONGEST) (x / scaling_factor (type) + 0.5);
11182}
11183
14f9c5c9 11184\f
d2e4a39e 11185
4c4b4cd2 11186 /* Range types */
14f9c5c9
AS
11187
11188/* Scan STR beginning at position K for a discriminant name, and
11189 return the value of that discriminant field of DVAL in *PX. If
11190 PNEW_K is not null, put the position of the character beyond the
11191 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11192 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11193
11194static int
07d8f827 11195scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
76a01679 11196 int *pnew_k)
14f9c5c9
AS
11197{
11198 static char *bound_buffer = NULL;
11199 static size_t bound_buffer_len = 0;
11200 char *bound;
11201 char *pend;
d2e4a39e 11202 struct value *bound_val;
14f9c5c9
AS
11203
11204 if (dval == NULL || str == NULL || str[k] == '\0')
11205 return 0;
11206
d2e4a39e 11207 pend = strstr (str + k, "__");
14f9c5c9
AS
11208 if (pend == NULL)
11209 {
d2e4a39e 11210 bound = str + k;
14f9c5c9
AS
11211 k += strlen (bound);
11212 }
d2e4a39e 11213 else
14f9c5c9 11214 {
d2e4a39e 11215 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
14f9c5c9 11216 bound = bound_buffer;
d2e4a39e
AS
11217 strncpy (bound_buffer, str + k, pend - (str + k));
11218 bound[pend - (str + k)] = '\0';
11219 k = pend - str;
14f9c5c9 11220 }
d2e4a39e 11221
df407dfe 11222 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11223 if (bound_val == NULL)
11224 return 0;
11225
11226 *px = value_as_long (bound_val);
11227 if (pnew_k != NULL)
11228 *pnew_k = k;
11229 return 1;
11230}
11231
11232/* Value of variable named NAME in the current environment. If
11233 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11234 otherwise causes an error with message ERR_MSG. */
11235
d2e4a39e
AS
11236static struct value *
11237get_var_value (char *name, char *err_msg)
14f9c5c9 11238{
4c4b4cd2 11239 struct ada_symbol_info *syms;
14f9c5c9
AS
11240 int nsyms;
11241
4c4b4cd2 11242 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
4eeaa230 11243 &syms);
14f9c5c9
AS
11244
11245 if (nsyms != 1)
11246 {
11247 if (err_msg == NULL)
4c4b4cd2 11248 return 0;
14f9c5c9 11249 else
8a3fe4f8 11250 error (("%s"), err_msg);
14f9c5c9
AS
11251 }
11252
4c4b4cd2 11253 return value_of_variable (syms[0].sym, syms[0].block);
14f9c5c9 11254}
d2e4a39e 11255
14f9c5c9 11256/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
11257 no such variable found, returns 0, and sets *FLAG to 0. If
11258 successful, sets *FLAG to 1. */
11259
14f9c5c9 11260LONGEST
4c4b4cd2 11261get_int_var_value (char *name, int *flag)
14f9c5c9 11262{
4c4b4cd2 11263 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11264
14f9c5c9
AS
11265 if (var_val == 0)
11266 {
11267 if (flag != NULL)
4c4b4cd2 11268 *flag = 0;
14f9c5c9
AS
11269 return 0;
11270 }
11271 else
11272 {
11273 if (flag != NULL)
4c4b4cd2 11274 *flag = 1;
14f9c5c9
AS
11275 return value_as_long (var_val);
11276 }
11277}
d2e4a39e 11278
14f9c5c9
AS
11279
11280/* Return a range type whose base type is that of the range type named
11281 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11282 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11283 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11284 corresponding range type from debug information; fall back to using it
11285 if symbol lookup fails. If a new type must be created, allocate it
11286 like ORIG_TYPE was. The bounds information, in general, is encoded
11287 in NAME, the base type given in the named range type. */
14f9c5c9 11288
d2e4a39e 11289static struct type *
28c85d6c 11290to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11291{
0d5cff50 11292 const char *name;
14f9c5c9 11293 struct type *base_type;
d2e4a39e 11294 char *subtype_info;
14f9c5c9 11295
28c85d6c
JB
11296 gdb_assert (raw_type != NULL);
11297 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 11298
1ce677a4 11299 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
11300 base_type = TYPE_TARGET_TYPE (raw_type);
11301 else
11302 base_type = raw_type;
11303
28c85d6c 11304 name = TYPE_NAME (raw_type);
14f9c5c9
AS
11305 subtype_info = strstr (name, "___XD");
11306 if (subtype_info == NULL)
690cc4eb 11307 {
43bbcdc2
PH
11308 LONGEST L = ada_discrete_type_low_bound (raw_type);
11309 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11310
690cc4eb
PH
11311 if (L < INT_MIN || U > INT_MAX)
11312 return raw_type;
11313 else
0c9c3474
SA
11314 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11315 L, U);
690cc4eb 11316 }
14f9c5c9
AS
11317 else
11318 {
11319 static char *name_buf = NULL;
11320 static size_t name_len = 0;
11321 int prefix_len = subtype_info - name;
11322 LONGEST L, U;
11323 struct type *type;
11324 char *bounds_str;
11325 int n;
11326
11327 GROW_VECT (name_buf, name_len, prefix_len + 5);
11328 strncpy (name_buf, name, prefix_len);
11329 name_buf[prefix_len] = '\0';
11330
11331 subtype_info += 5;
11332 bounds_str = strchr (subtype_info, '_');
11333 n = 1;
11334
d2e4a39e 11335 if (*subtype_info == 'L')
4c4b4cd2
PH
11336 {
11337 if (!ada_scan_number (bounds_str, n, &L, &n)
11338 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11339 return raw_type;
11340 if (bounds_str[n] == '_')
11341 n += 2;
0963b4bd 11342 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11343 n += 1;
11344 subtype_info += 1;
11345 }
d2e4a39e 11346 else
4c4b4cd2
PH
11347 {
11348 int ok;
5b4ee69b 11349
4c4b4cd2
PH
11350 strcpy (name_buf + prefix_len, "___L");
11351 L = get_int_var_value (name_buf, &ok);
11352 if (!ok)
11353 {
323e0a4a 11354 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11355 L = 1;
11356 }
11357 }
14f9c5c9 11358
d2e4a39e 11359 if (*subtype_info == 'U')
4c4b4cd2
PH
11360 {
11361 if (!ada_scan_number (bounds_str, n, &U, &n)
11362 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11363 return raw_type;
11364 }
d2e4a39e 11365 else
4c4b4cd2
PH
11366 {
11367 int ok;
5b4ee69b 11368
4c4b4cd2
PH
11369 strcpy (name_buf + prefix_len, "___U");
11370 U = get_int_var_value (name_buf, &ok);
11371 if (!ok)
11372 {
323e0a4a 11373 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11374 U = L;
11375 }
11376 }
14f9c5c9 11377
0c9c3474
SA
11378 type = create_static_range_type (alloc_type_copy (raw_type),
11379 base_type, L, U);
d2e4a39e 11380 TYPE_NAME (type) = name;
14f9c5c9
AS
11381 return type;
11382 }
11383}
11384
4c4b4cd2
PH
11385/* True iff NAME is the name of a range type. */
11386
14f9c5c9 11387int
d2e4a39e 11388ada_is_range_type_name (const char *name)
14f9c5c9
AS
11389{
11390 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11391}
14f9c5c9 11392\f
d2e4a39e 11393
4c4b4cd2
PH
11394 /* Modular types */
11395
11396/* True iff TYPE is an Ada modular type. */
14f9c5c9 11397
14f9c5c9 11398int
d2e4a39e 11399ada_is_modular_type (struct type *type)
14f9c5c9 11400{
18af8284 11401 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
11402
11403 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 11404 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 11405 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11406}
11407
4c4b4cd2
PH
11408/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11409
61ee279c 11410ULONGEST
0056e4d5 11411ada_modulus (struct type *type)
14f9c5c9 11412{
43bbcdc2 11413 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11414}
d2e4a39e 11415\f
f7f9143b
JB
11416
11417/* Ada exception catchpoint support:
11418 ---------------------------------
11419
11420 We support 3 kinds of exception catchpoints:
11421 . catchpoints on Ada exceptions
11422 . catchpoints on unhandled Ada exceptions
11423 . catchpoints on failed assertions
11424
11425 Exceptions raised during failed assertions, or unhandled exceptions
11426 could perfectly be caught with the general catchpoint on Ada exceptions.
11427 However, we can easily differentiate these two special cases, and having
11428 the option to distinguish these two cases from the rest can be useful
11429 to zero-in on certain situations.
11430
11431 Exception catchpoints are a specialized form of breakpoint,
11432 since they rely on inserting breakpoints inside known routines
11433 of the GNAT runtime. The implementation therefore uses a standard
11434 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11435 of breakpoint_ops.
11436
0259addd
JB
11437 Support in the runtime for exception catchpoints have been changed
11438 a few times already, and these changes affect the implementation
11439 of these catchpoints. In order to be able to support several
11440 variants of the runtime, we use a sniffer that will determine
28010a5d 11441 the runtime variant used by the program being debugged. */
f7f9143b 11442
82eacd52
JB
11443/* Ada's standard exceptions.
11444
11445 The Ada 83 standard also defined Numeric_Error. But there so many
11446 situations where it was unclear from the Ada 83 Reference Manual
11447 (RM) whether Constraint_Error or Numeric_Error should be raised,
11448 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11449 Interpretation saying that anytime the RM says that Numeric_Error
11450 should be raised, the implementation may raise Constraint_Error.
11451 Ada 95 went one step further and pretty much removed Numeric_Error
11452 from the list of standard exceptions (it made it a renaming of
11453 Constraint_Error, to help preserve compatibility when compiling
11454 an Ada83 compiler). As such, we do not include Numeric_Error from
11455 this list of standard exceptions. */
3d0b0fa3
JB
11456
11457static char *standard_exc[] = {
11458 "constraint_error",
11459 "program_error",
11460 "storage_error",
11461 "tasking_error"
11462};
11463
0259addd
JB
11464typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11465
11466/* A structure that describes how to support exception catchpoints
11467 for a given executable. */
11468
11469struct exception_support_info
11470{
11471 /* The name of the symbol to break on in order to insert
11472 a catchpoint on exceptions. */
11473 const char *catch_exception_sym;
11474
11475 /* The name of the symbol to break on in order to insert
11476 a catchpoint on unhandled exceptions. */
11477 const char *catch_exception_unhandled_sym;
11478
11479 /* The name of the symbol to break on in order to insert
11480 a catchpoint on failed assertions. */
11481 const char *catch_assert_sym;
11482
11483 /* Assuming that the inferior just triggered an unhandled exception
11484 catchpoint, this function is responsible for returning the address
11485 in inferior memory where the name of that exception is stored.
11486 Return zero if the address could not be computed. */
11487 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11488};
11489
11490static CORE_ADDR ada_unhandled_exception_name_addr (void);
11491static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11492
11493/* The following exception support info structure describes how to
11494 implement exception catchpoints with the latest version of the
11495 Ada runtime (as of 2007-03-06). */
11496
11497static const struct exception_support_info default_exception_support_info =
11498{
11499 "__gnat_debug_raise_exception", /* catch_exception_sym */
11500 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11501 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11502 ada_unhandled_exception_name_addr
11503};
11504
11505/* The following exception support info structure describes how to
11506 implement exception catchpoints with a slightly older version
11507 of the Ada runtime. */
11508
11509static const struct exception_support_info exception_support_info_fallback =
11510{
11511 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11512 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11513 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11514 ada_unhandled_exception_name_addr_from_raise
11515};
11516
f17011e0
JB
11517/* Return nonzero if we can detect the exception support routines
11518 described in EINFO.
11519
11520 This function errors out if an abnormal situation is detected
11521 (for instance, if we find the exception support routines, but
11522 that support is found to be incomplete). */
11523
11524static int
11525ada_has_this_exception_support (const struct exception_support_info *einfo)
11526{
11527 struct symbol *sym;
11528
11529 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11530 that should be compiled with debugging information. As a result, we
11531 expect to find that symbol in the symtabs. */
11532
11533 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11534 if (sym == NULL)
a6af7abe
JB
11535 {
11536 /* Perhaps we did not find our symbol because the Ada runtime was
11537 compiled without debugging info, or simply stripped of it.
11538 It happens on some GNU/Linux distributions for instance, where
11539 users have to install a separate debug package in order to get
11540 the runtime's debugging info. In that situation, let the user
11541 know why we cannot insert an Ada exception catchpoint.
11542
11543 Note: Just for the purpose of inserting our Ada exception
11544 catchpoint, we could rely purely on the associated minimal symbol.
11545 But we would be operating in degraded mode anyway, since we are
11546 still lacking the debugging info needed later on to extract
11547 the name of the exception being raised (this name is printed in
11548 the catchpoint message, and is also used when trying to catch
11549 a specific exception). We do not handle this case for now. */
3b7344d5 11550 struct bound_minimal_symbol msym
1c8e84b0
JB
11551 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11552
3b7344d5 11553 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11554 error (_("Your Ada runtime appears to be missing some debugging "
11555 "information.\nCannot insert Ada exception catchpoint "
11556 "in this configuration."));
11557
11558 return 0;
11559 }
f17011e0
JB
11560
11561 /* Make sure that the symbol we found corresponds to a function. */
11562
11563 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11564 error (_("Symbol \"%s\" is not a function (class = %d)"),
11565 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11566
11567 return 1;
11568}
11569
0259addd
JB
11570/* Inspect the Ada runtime and determine which exception info structure
11571 should be used to provide support for exception catchpoints.
11572
3eecfa55
JB
11573 This function will always set the per-inferior exception_info,
11574 or raise an error. */
0259addd
JB
11575
11576static void
11577ada_exception_support_info_sniffer (void)
11578{
3eecfa55 11579 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11580
11581 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11582 if (data->exception_info != NULL)
0259addd
JB
11583 return;
11584
11585 /* Check the latest (default) exception support info. */
f17011e0 11586 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11587 {
3eecfa55 11588 data->exception_info = &default_exception_support_info;
0259addd
JB
11589 return;
11590 }
11591
11592 /* Try our fallback exception suport info. */
f17011e0 11593 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11594 {
3eecfa55 11595 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11596 return;
11597 }
11598
11599 /* Sometimes, it is normal for us to not be able to find the routine
11600 we are looking for. This happens when the program is linked with
11601 the shared version of the GNAT runtime, and the program has not been
11602 started yet. Inform the user of these two possible causes if
11603 applicable. */
11604
ccefe4c4 11605 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11606 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11607
11608 /* If the symbol does not exist, then check that the program is
11609 already started, to make sure that shared libraries have been
11610 loaded. If it is not started, this may mean that the symbol is
11611 in a shared library. */
11612
11613 if (ptid_get_pid (inferior_ptid) == 0)
11614 error (_("Unable to insert catchpoint. Try to start the program first."));
11615
11616 /* At this point, we know that we are debugging an Ada program and
11617 that the inferior has been started, but we still are not able to
0963b4bd 11618 find the run-time symbols. That can mean that we are in
0259addd
JB
11619 configurable run time mode, or that a-except as been optimized
11620 out by the linker... In any case, at this point it is not worth
11621 supporting this feature. */
11622
7dda8cff 11623 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11624}
11625
f7f9143b
JB
11626/* True iff FRAME is very likely to be that of a function that is
11627 part of the runtime system. This is all very heuristic, but is
11628 intended to be used as advice as to what frames are uninteresting
11629 to most users. */
11630
11631static int
11632is_known_support_routine (struct frame_info *frame)
11633{
4ed6b5be 11634 struct symtab_and_line sal;
55b87a52 11635 char *func_name;
692465f1 11636 enum language func_lang;
f7f9143b 11637 int i;
f35a17b5 11638 const char *fullname;
f7f9143b 11639
4ed6b5be
JB
11640 /* If this code does not have any debugging information (no symtab),
11641 This cannot be any user code. */
f7f9143b 11642
4ed6b5be 11643 find_frame_sal (frame, &sal);
f7f9143b
JB
11644 if (sal.symtab == NULL)
11645 return 1;
11646
4ed6b5be
JB
11647 /* If there is a symtab, but the associated source file cannot be
11648 located, then assume this is not user code: Selecting a frame
11649 for which we cannot display the code would not be very helpful
11650 for the user. This should also take care of case such as VxWorks
11651 where the kernel has some debugging info provided for a few units. */
f7f9143b 11652
f35a17b5
JK
11653 fullname = symtab_to_fullname (sal.symtab);
11654 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11655 return 1;
11656
4ed6b5be
JB
11657 /* Check the unit filename againt the Ada runtime file naming.
11658 We also check the name of the objfile against the name of some
11659 known system libraries that sometimes come with debugging info
11660 too. */
11661
f7f9143b
JB
11662 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11663 {
11664 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11665 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 11666 return 1;
eb822aa6
DE
11667 if (SYMTAB_OBJFILE (sal.symtab) != NULL
11668 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
4ed6b5be 11669 return 1;
f7f9143b
JB
11670 }
11671
4ed6b5be 11672 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11673
e9e07ba6 11674 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
11675 if (func_name == NULL)
11676 return 1;
11677
11678 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11679 {
11680 re_comp (known_auxiliary_function_name_patterns[i]);
11681 if (re_exec (func_name))
55b87a52
KS
11682 {
11683 xfree (func_name);
11684 return 1;
11685 }
f7f9143b
JB
11686 }
11687
55b87a52 11688 xfree (func_name);
f7f9143b
JB
11689 return 0;
11690}
11691
11692/* Find the first frame that contains debugging information and that is not
11693 part of the Ada run-time, starting from FI and moving upward. */
11694
0ef643c8 11695void
f7f9143b
JB
11696ada_find_printable_frame (struct frame_info *fi)
11697{
11698 for (; fi != NULL; fi = get_prev_frame (fi))
11699 {
11700 if (!is_known_support_routine (fi))
11701 {
11702 select_frame (fi);
11703 break;
11704 }
11705 }
11706
11707}
11708
11709/* Assuming that the inferior just triggered an unhandled exception
11710 catchpoint, return the address in inferior memory where the name
11711 of the exception is stored.
11712
11713 Return zero if the address could not be computed. */
11714
11715static CORE_ADDR
11716ada_unhandled_exception_name_addr (void)
0259addd
JB
11717{
11718 return parse_and_eval_address ("e.full_name");
11719}
11720
11721/* Same as ada_unhandled_exception_name_addr, except that this function
11722 should be used when the inferior uses an older version of the runtime,
11723 where the exception name needs to be extracted from a specific frame
11724 several frames up in the callstack. */
11725
11726static CORE_ADDR
11727ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11728{
11729 int frame_level;
11730 struct frame_info *fi;
3eecfa55 11731 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
55b87a52 11732 struct cleanup *old_chain;
f7f9143b
JB
11733
11734 /* To determine the name of this exception, we need to select
11735 the frame corresponding to RAISE_SYM_NAME. This frame is
11736 at least 3 levels up, so we simply skip the first 3 frames
11737 without checking the name of their associated function. */
11738 fi = get_current_frame ();
11739 for (frame_level = 0; frame_level < 3; frame_level += 1)
11740 if (fi != NULL)
11741 fi = get_prev_frame (fi);
11742
55b87a52 11743 old_chain = make_cleanup (null_cleanup, NULL);
f7f9143b
JB
11744 while (fi != NULL)
11745 {
55b87a52 11746 char *func_name;
692465f1
JB
11747 enum language func_lang;
11748
e9e07ba6 11749 find_frame_funname (fi, &func_name, &func_lang, NULL);
55b87a52
KS
11750 if (func_name != NULL)
11751 {
11752 make_cleanup (xfree, func_name);
11753
11754 if (strcmp (func_name,
11755 data->exception_info->catch_exception_sym) == 0)
11756 break; /* We found the frame we were looking for... */
11757 fi = get_prev_frame (fi);
11758 }
f7f9143b 11759 }
55b87a52 11760 do_cleanups (old_chain);
f7f9143b
JB
11761
11762 if (fi == NULL)
11763 return 0;
11764
11765 select_frame (fi);
11766 return parse_and_eval_address ("id.full_name");
11767}
11768
11769/* Assuming the inferior just triggered an Ada exception catchpoint
11770 (of any type), return the address in inferior memory where the name
11771 of the exception is stored, if applicable.
11772
11773 Return zero if the address could not be computed, or if not relevant. */
11774
11775static CORE_ADDR
761269c8 11776ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11777 struct breakpoint *b)
11778{
3eecfa55
JB
11779 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11780
f7f9143b
JB
11781 switch (ex)
11782 {
761269c8 11783 case ada_catch_exception:
f7f9143b
JB
11784 return (parse_and_eval_address ("e.full_name"));
11785 break;
11786
761269c8 11787 case ada_catch_exception_unhandled:
3eecfa55 11788 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
11789 break;
11790
761269c8 11791 case ada_catch_assert:
f7f9143b
JB
11792 return 0; /* Exception name is not relevant in this case. */
11793 break;
11794
11795 default:
11796 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11797 break;
11798 }
11799
11800 return 0; /* Should never be reached. */
11801}
11802
11803/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11804 any error that ada_exception_name_addr_1 might cause to be thrown.
11805 When an error is intercepted, a warning with the error message is printed,
11806 and zero is returned. */
11807
11808static CORE_ADDR
761269c8 11809ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11810 struct breakpoint *b)
11811{
bfd189b1 11812 volatile struct gdb_exception e;
f7f9143b
JB
11813 CORE_ADDR result = 0;
11814
11815 TRY_CATCH (e, RETURN_MASK_ERROR)
11816 {
11817 result = ada_exception_name_addr_1 (ex, b);
11818 }
11819
11820 if (e.reason < 0)
11821 {
11822 warning (_("failed to get exception name: %s"), e.message);
11823 return 0;
11824 }
11825
11826 return result;
11827}
11828
28010a5d
PA
11829static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11830
11831/* Ada catchpoints.
11832
11833 In the case of catchpoints on Ada exceptions, the catchpoint will
11834 stop the target on every exception the program throws. When a user
11835 specifies the name of a specific exception, we translate this
11836 request into a condition expression (in text form), and then parse
11837 it into an expression stored in each of the catchpoint's locations.
11838 We then use this condition to check whether the exception that was
11839 raised is the one the user is interested in. If not, then the
11840 target is resumed again. We store the name of the requested
11841 exception, in order to be able to re-set the condition expression
11842 when symbols change. */
11843
11844/* An instance of this type is used to represent an Ada catchpoint
11845 breakpoint location. It includes a "struct bp_location" as a kind
11846 of base class; users downcast to "struct bp_location *" when
11847 needed. */
11848
11849struct ada_catchpoint_location
11850{
11851 /* The base class. */
11852 struct bp_location base;
11853
11854 /* The condition that checks whether the exception that was raised
11855 is the specific exception the user specified on catchpoint
11856 creation. */
11857 struct expression *excep_cond_expr;
11858};
11859
11860/* Implement the DTOR method in the bp_location_ops structure for all
11861 Ada exception catchpoint kinds. */
11862
11863static void
11864ada_catchpoint_location_dtor (struct bp_location *bl)
11865{
11866 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11867
11868 xfree (al->excep_cond_expr);
11869}
11870
11871/* The vtable to be used in Ada catchpoint locations. */
11872
11873static const struct bp_location_ops ada_catchpoint_location_ops =
11874{
11875 ada_catchpoint_location_dtor
11876};
11877
11878/* An instance of this type is used to represent an Ada catchpoint.
11879 It includes a "struct breakpoint" as a kind of base class; users
11880 downcast to "struct breakpoint *" when needed. */
11881
11882struct ada_catchpoint
11883{
11884 /* The base class. */
11885 struct breakpoint base;
11886
11887 /* The name of the specific exception the user specified. */
11888 char *excep_string;
11889};
11890
11891/* Parse the exception condition string in the context of each of the
11892 catchpoint's locations, and store them for later evaluation. */
11893
11894static void
11895create_excep_cond_exprs (struct ada_catchpoint *c)
11896{
11897 struct cleanup *old_chain;
11898 struct bp_location *bl;
11899 char *cond_string;
11900
11901 /* Nothing to do if there's no specific exception to catch. */
11902 if (c->excep_string == NULL)
11903 return;
11904
11905 /* Same if there are no locations... */
11906 if (c->base.loc == NULL)
11907 return;
11908
11909 /* Compute the condition expression in text form, from the specific
11910 expection we want to catch. */
11911 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11912 old_chain = make_cleanup (xfree, cond_string);
11913
11914 /* Iterate over all the catchpoint's locations, and parse an
11915 expression for each. */
11916 for (bl = c->base.loc; bl != NULL; bl = bl->next)
11917 {
11918 struct ada_catchpoint_location *ada_loc
11919 = (struct ada_catchpoint_location *) bl;
11920 struct expression *exp = NULL;
11921
11922 if (!bl->shlib_disabled)
11923 {
11924 volatile struct gdb_exception e;
bbc13ae3 11925 const char *s;
28010a5d
PA
11926
11927 s = cond_string;
11928 TRY_CATCH (e, RETURN_MASK_ERROR)
11929 {
1bb9788d
TT
11930 exp = parse_exp_1 (&s, bl->address,
11931 block_for_pc (bl->address), 0);
28010a5d
PA
11932 }
11933 if (e.reason < 0)
849f2b52
JB
11934 {
11935 warning (_("failed to reevaluate internal exception condition "
11936 "for catchpoint %d: %s"),
11937 c->base.number, e.message);
11938 /* There is a bug in GCC on sparc-solaris when building with
11939 optimization which causes EXP to change unexpectedly
11940 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11941 The problem should be fixed starting with GCC 4.9.
11942 In the meantime, work around it by forcing EXP back
11943 to NULL. */
11944 exp = NULL;
11945 }
28010a5d
PA
11946 }
11947
11948 ada_loc->excep_cond_expr = exp;
11949 }
11950
11951 do_cleanups (old_chain);
11952}
11953
11954/* Implement the DTOR method in the breakpoint_ops structure for all
11955 exception catchpoint kinds. */
11956
11957static void
761269c8 11958dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11959{
11960 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11961
11962 xfree (c->excep_string);
348d480f 11963
2060206e 11964 bkpt_breakpoint_ops.dtor (b);
28010a5d
PA
11965}
11966
11967/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11968 structure for all exception catchpoint kinds. */
11969
11970static struct bp_location *
761269c8 11971allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
11972 struct breakpoint *self)
11973{
11974 struct ada_catchpoint_location *loc;
11975
11976 loc = XNEW (struct ada_catchpoint_location);
11977 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11978 loc->excep_cond_expr = NULL;
11979 return &loc->base;
11980}
11981
11982/* Implement the RE_SET method in the breakpoint_ops structure for all
11983 exception catchpoint kinds. */
11984
11985static void
761269c8 11986re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11987{
11988 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11989
11990 /* Call the base class's method. This updates the catchpoint's
11991 locations. */
2060206e 11992 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
11993
11994 /* Reparse the exception conditional expressions. One for each
11995 location. */
11996 create_excep_cond_exprs (c);
11997}
11998
11999/* Returns true if we should stop for this breakpoint hit. If the
12000 user specified a specific exception, we only want to cause a stop
12001 if the program thrown that exception. */
12002
12003static int
12004should_stop_exception (const struct bp_location *bl)
12005{
12006 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12007 const struct ada_catchpoint_location *ada_loc
12008 = (const struct ada_catchpoint_location *) bl;
12009 volatile struct gdb_exception ex;
12010 int stop;
12011
12012 /* With no specific exception, should always stop. */
12013 if (c->excep_string == NULL)
12014 return 1;
12015
12016 if (ada_loc->excep_cond_expr == NULL)
12017 {
12018 /* We will have a NULL expression if back when we were creating
12019 the expressions, this location's had failed to parse. */
12020 return 1;
12021 }
12022
12023 stop = 1;
12024 TRY_CATCH (ex, RETURN_MASK_ALL)
12025 {
12026 struct value *mark;
12027
12028 mark = value_mark ();
12029 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12030 value_free_to_mark (mark);
12031 }
12032 if (ex.reason < 0)
12033 exception_fprintf (gdb_stderr, ex,
12034 _("Error in testing exception condition:\n"));
12035 return stop;
12036}
12037
12038/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12039 for all exception catchpoint kinds. */
12040
12041static void
761269c8 12042check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
12043{
12044 bs->stop = should_stop_exception (bs->bp_location_at);
12045}
12046
f7f9143b
JB
12047/* Implement the PRINT_IT method in the breakpoint_ops structure
12048 for all exception catchpoint kinds. */
12049
12050static enum print_stop_action
761269c8 12051print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 12052{
79a45e25 12053 struct ui_out *uiout = current_uiout;
348d480f
PA
12054 struct breakpoint *b = bs->breakpoint_at;
12055
956a9fb9 12056 annotate_catchpoint (b->number);
f7f9143b 12057
956a9fb9 12058 if (ui_out_is_mi_like_p (uiout))
f7f9143b 12059 {
956a9fb9
JB
12060 ui_out_field_string (uiout, "reason",
12061 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12062 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
f7f9143b
JB
12063 }
12064
00eb2c4a
JB
12065 ui_out_text (uiout,
12066 b->disposition == disp_del ? "\nTemporary catchpoint "
12067 : "\nCatchpoint ");
956a9fb9
JB
12068 ui_out_field_int (uiout, "bkptno", b->number);
12069 ui_out_text (uiout, ", ");
f7f9143b 12070
f7f9143b
JB
12071 switch (ex)
12072 {
761269c8
JB
12073 case ada_catch_exception:
12074 case ada_catch_exception_unhandled:
956a9fb9
JB
12075 {
12076 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12077 char exception_name[256];
12078
12079 if (addr != 0)
12080 {
c714b426
PA
12081 read_memory (addr, (gdb_byte *) exception_name,
12082 sizeof (exception_name) - 1);
956a9fb9
JB
12083 exception_name [sizeof (exception_name) - 1] = '\0';
12084 }
12085 else
12086 {
12087 /* For some reason, we were unable to read the exception
12088 name. This could happen if the Runtime was compiled
12089 without debugging info, for instance. In that case,
12090 just replace the exception name by the generic string
12091 "exception" - it will read as "an exception" in the
12092 notification we are about to print. */
967cff16 12093 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12094 }
12095 /* In the case of unhandled exception breakpoints, we print
12096 the exception name as "unhandled EXCEPTION_NAME", to make
12097 it clearer to the user which kind of catchpoint just got
12098 hit. We used ui_out_text to make sure that this extra
12099 info does not pollute the exception name in the MI case. */
761269c8 12100 if (ex == ada_catch_exception_unhandled)
956a9fb9
JB
12101 ui_out_text (uiout, "unhandled ");
12102 ui_out_field_string (uiout, "exception-name", exception_name);
12103 }
12104 break;
761269c8 12105 case ada_catch_assert:
956a9fb9
JB
12106 /* In this case, the name of the exception is not really
12107 important. Just print "failed assertion" to make it clearer
12108 that his program just hit an assertion-failure catchpoint.
12109 We used ui_out_text because this info does not belong in
12110 the MI output. */
12111 ui_out_text (uiout, "failed assertion");
12112 break;
f7f9143b 12113 }
956a9fb9
JB
12114 ui_out_text (uiout, " at ");
12115 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12116
12117 return PRINT_SRC_AND_LOC;
12118}
12119
12120/* Implement the PRINT_ONE method in the breakpoint_ops structure
12121 for all exception catchpoint kinds. */
12122
12123static void
761269c8 12124print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 12125 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12126{
79a45e25 12127 struct ui_out *uiout = current_uiout;
28010a5d 12128 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12129 struct value_print_options opts;
12130
12131 get_user_print_options (&opts);
12132 if (opts.addressprint)
f7f9143b
JB
12133 {
12134 annotate_field (4);
5af949e3 12135 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
12136 }
12137
12138 annotate_field (5);
a6d9a66e 12139 *last_loc = b->loc;
f7f9143b
JB
12140 switch (ex)
12141 {
761269c8 12142 case ada_catch_exception:
28010a5d 12143 if (c->excep_string != NULL)
f7f9143b 12144 {
28010a5d
PA
12145 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12146
f7f9143b
JB
12147 ui_out_field_string (uiout, "what", msg);
12148 xfree (msg);
12149 }
12150 else
12151 ui_out_field_string (uiout, "what", "all Ada exceptions");
12152
12153 break;
12154
761269c8 12155 case ada_catch_exception_unhandled:
f7f9143b
JB
12156 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12157 break;
12158
761269c8 12159 case ada_catch_assert:
f7f9143b
JB
12160 ui_out_field_string (uiout, "what", "failed Ada assertions");
12161 break;
12162
12163 default:
12164 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12165 break;
12166 }
12167}
12168
12169/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12170 for all exception catchpoint kinds. */
12171
12172static void
761269c8 12173print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12174 struct breakpoint *b)
12175{
28010a5d 12176 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12177 struct ui_out *uiout = current_uiout;
28010a5d 12178
00eb2c4a
JB
12179 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12180 : _("Catchpoint "));
12181 ui_out_field_int (uiout, "bkptno", b->number);
12182 ui_out_text (uiout, ": ");
12183
f7f9143b
JB
12184 switch (ex)
12185 {
761269c8 12186 case ada_catch_exception:
28010a5d 12187 if (c->excep_string != NULL)
00eb2c4a
JB
12188 {
12189 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12190 struct cleanup *old_chain = make_cleanup (xfree, info);
12191
12192 ui_out_text (uiout, info);
12193 do_cleanups (old_chain);
12194 }
f7f9143b 12195 else
00eb2c4a 12196 ui_out_text (uiout, _("all Ada exceptions"));
f7f9143b
JB
12197 break;
12198
761269c8 12199 case ada_catch_exception_unhandled:
00eb2c4a 12200 ui_out_text (uiout, _("unhandled Ada exceptions"));
f7f9143b
JB
12201 break;
12202
761269c8 12203 case ada_catch_assert:
00eb2c4a 12204 ui_out_text (uiout, _("failed Ada assertions"));
f7f9143b
JB
12205 break;
12206
12207 default:
12208 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12209 break;
12210 }
12211}
12212
6149aea9
PA
12213/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12214 for all exception catchpoint kinds. */
12215
12216static void
761269c8 12217print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
12218 struct breakpoint *b, struct ui_file *fp)
12219{
28010a5d
PA
12220 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12221
6149aea9
PA
12222 switch (ex)
12223 {
761269c8 12224 case ada_catch_exception:
6149aea9 12225 fprintf_filtered (fp, "catch exception");
28010a5d
PA
12226 if (c->excep_string != NULL)
12227 fprintf_filtered (fp, " %s", c->excep_string);
6149aea9
PA
12228 break;
12229
761269c8 12230 case ada_catch_exception_unhandled:
78076abc 12231 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12232 break;
12233
761269c8 12234 case ada_catch_assert:
6149aea9
PA
12235 fprintf_filtered (fp, "catch assert");
12236 break;
12237
12238 default:
12239 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12240 }
d9b3f62e 12241 print_recreate_thread (b, fp);
6149aea9
PA
12242}
12243
f7f9143b
JB
12244/* Virtual table for "catch exception" breakpoints. */
12245
28010a5d
PA
12246static void
12247dtor_catch_exception (struct breakpoint *b)
12248{
761269c8 12249 dtor_exception (ada_catch_exception, b);
28010a5d
PA
12250}
12251
12252static struct bp_location *
12253allocate_location_catch_exception (struct breakpoint *self)
12254{
761269c8 12255 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
12256}
12257
12258static void
12259re_set_catch_exception (struct breakpoint *b)
12260{
761269c8 12261 re_set_exception (ada_catch_exception, b);
28010a5d
PA
12262}
12263
12264static void
12265check_status_catch_exception (bpstat bs)
12266{
761269c8 12267 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
12268}
12269
f7f9143b 12270static enum print_stop_action
348d480f 12271print_it_catch_exception (bpstat bs)
f7f9143b 12272{
761269c8 12273 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
12274}
12275
12276static void
a6d9a66e 12277print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12278{
761269c8 12279 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
12280}
12281
12282static void
12283print_mention_catch_exception (struct breakpoint *b)
12284{
761269c8 12285 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
12286}
12287
6149aea9
PA
12288static void
12289print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12290{
761269c8 12291 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
12292}
12293
2060206e 12294static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
12295
12296/* Virtual table for "catch exception unhandled" breakpoints. */
12297
28010a5d
PA
12298static void
12299dtor_catch_exception_unhandled (struct breakpoint *b)
12300{
761269c8 12301 dtor_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12302}
12303
12304static struct bp_location *
12305allocate_location_catch_exception_unhandled (struct breakpoint *self)
12306{
761269c8 12307 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
12308}
12309
12310static void
12311re_set_catch_exception_unhandled (struct breakpoint *b)
12312{
761269c8 12313 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12314}
12315
12316static void
12317check_status_catch_exception_unhandled (bpstat bs)
12318{
761269c8 12319 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
12320}
12321
f7f9143b 12322static enum print_stop_action
348d480f 12323print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 12324{
761269c8 12325 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
12326}
12327
12328static void
a6d9a66e
UW
12329print_one_catch_exception_unhandled (struct breakpoint *b,
12330 struct bp_location **last_loc)
f7f9143b 12331{
761269c8 12332 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
12333}
12334
12335static void
12336print_mention_catch_exception_unhandled (struct breakpoint *b)
12337{
761269c8 12338 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
12339}
12340
6149aea9
PA
12341static void
12342print_recreate_catch_exception_unhandled (struct breakpoint *b,
12343 struct ui_file *fp)
12344{
761269c8 12345 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
12346}
12347
2060206e 12348static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
12349
12350/* Virtual table for "catch assert" breakpoints. */
12351
28010a5d
PA
12352static void
12353dtor_catch_assert (struct breakpoint *b)
12354{
761269c8 12355 dtor_exception (ada_catch_assert, b);
28010a5d
PA
12356}
12357
12358static struct bp_location *
12359allocate_location_catch_assert (struct breakpoint *self)
12360{
761269c8 12361 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
12362}
12363
12364static void
12365re_set_catch_assert (struct breakpoint *b)
12366{
761269c8 12367 re_set_exception (ada_catch_assert, b);
28010a5d
PA
12368}
12369
12370static void
12371check_status_catch_assert (bpstat bs)
12372{
761269c8 12373 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
12374}
12375
f7f9143b 12376static enum print_stop_action
348d480f 12377print_it_catch_assert (bpstat bs)
f7f9143b 12378{
761269c8 12379 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
12380}
12381
12382static void
a6d9a66e 12383print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12384{
761269c8 12385 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
12386}
12387
12388static void
12389print_mention_catch_assert (struct breakpoint *b)
12390{
761269c8 12391 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
12392}
12393
6149aea9
PA
12394static void
12395print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12396{
761269c8 12397 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
12398}
12399
2060206e 12400static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 12401
f7f9143b
JB
12402/* Return a newly allocated copy of the first space-separated token
12403 in ARGSP, and then adjust ARGSP to point immediately after that
12404 token.
12405
12406 Return NULL if ARGPS does not contain any more tokens. */
12407
12408static char *
12409ada_get_next_arg (char **argsp)
12410{
12411 char *args = *argsp;
12412 char *end;
12413 char *result;
12414
0fcd72ba 12415 args = skip_spaces (args);
f7f9143b
JB
12416 if (args[0] == '\0')
12417 return NULL; /* No more arguments. */
12418
12419 /* Find the end of the current argument. */
12420
0fcd72ba 12421 end = skip_to_space (args);
f7f9143b
JB
12422
12423 /* Adjust ARGSP to point to the start of the next argument. */
12424
12425 *argsp = end;
12426
12427 /* Make a copy of the current argument and return it. */
12428
12429 result = xmalloc (end - args + 1);
12430 strncpy (result, args, end - args);
12431 result[end - args] = '\0';
12432
12433 return result;
12434}
12435
12436/* Split the arguments specified in a "catch exception" command.
12437 Set EX to the appropriate catchpoint type.
28010a5d 12438 Set EXCEP_STRING to the name of the specific exception if
5845583d
JB
12439 specified by the user.
12440 If a condition is found at the end of the arguments, the condition
12441 expression is stored in COND_STRING (memory must be deallocated
12442 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12443
12444static void
12445catch_ada_exception_command_split (char *args,
761269c8 12446 enum ada_exception_catchpoint_kind *ex,
5845583d
JB
12447 char **excep_string,
12448 char **cond_string)
f7f9143b
JB
12449{
12450 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12451 char *exception_name;
5845583d 12452 char *cond = NULL;
f7f9143b
JB
12453
12454 exception_name = ada_get_next_arg (&args);
5845583d
JB
12455 if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12456 {
12457 /* This is not an exception name; this is the start of a condition
12458 expression for a catchpoint on all exceptions. So, "un-get"
12459 this token, and set exception_name to NULL. */
12460 xfree (exception_name);
12461 exception_name = NULL;
12462 args -= 2;
12463 }
f7f9143b
JB
12464 make_cleanup (xfree, exception_name);
12465
5845583d 12466 /* Check to see if we have a condition. */
f7f9143b 12467
0fcd72ba 12468 args = skip_spaces (args);
5845583d
JB
12469 if (strncmp (args, "if", 2) == 0
12470 && (isspace (args[2]) || args[2] == '\0'))
12471 {
12472 args += 2;
12473 args = skip_spaces (args);
12474
12475 if (args[0] == '\0')
12476 error (_("Condition missing after `if' keyword"));
12477 cond = xstrdup (args);
12478 make_cleanup (xfree, cond);
12479
12480 args += strlen (args);
12481 }
12482
12483 /* Check that we do not have any more arguments. Anything else
12484 is unexpected. */
f7f9143b
JB
12485
12486 if (args[0] != '\0')
12487 error (_("Junk at end of expression"));
12488
12489 discard_cleanups (old_chain);
12490
12491 if (exception_name == NULL)
12492 {
12493 /* Catch all exceptions. */
761269c8 12494 *ex = ada_catch_exception;
28010a5d 12495 *excep_string = NULL;
f7f9143b
JB
12496 }
12497 else if (strcmp (exception_name, "unhandled") == 0)
12498 {
12499 /* Catch unhandled exceptions. */
761269c8 12500 *ex = ada_catch_exception_unhandled;
28010a5d 12501 *excep_string = NULL;
f7f9143b
JB
12502 }
12503 else
12504 {
12505 /* Catch a specific exception. */
761269c8 12506 *ex = ada_catch_exception;
28010a5d 12507 *excep_string = exception_name;
f7f9143b 12508 }
5845583d 12509 *cond_string = cond;
f7f9143b
JB
12510}
12511
12512/* Return the name of the symbol on which we should break in order to
12513 implement a catchpoint of the EX kind. */
12514
12515static const char *
761269c8 12516ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12517{
3eecfa55
JB
12518 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12519
12520 gdb_assert (data->exception_info != NULL);
0259addd 12521
f7f9143b
JB
12522 switch (ex)
12523 {
761269c8 12524 case ada_catch_exception:
3eecfa55 12525 return (data->exception_info->catch_exception_sym);
f7f9143b 12526 break;
761269c8 12527 case ada_catch_exception_unhandled:
3eecfa55 12528 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 12529 break;
761269c8 12530 case ada_catch_assert:
3eecfa55 12531 return (data->exception_info->catch_assert_sym);
f7f9143b
JB
12532 break;
12533 default:
12534 internal_error (__FILE__, __LINE__,
12535 _("unexpected catchpoint kind (%d)"), ex);
12536 }
12537}
12538
12539/* Return the breakpoint ops "virtual table" used for catchpoints
12540 of the EX kind. */
12541
c0a91b2b 12542static const struct breakpoint_ops *
761269c8 12543ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12544{
12545 switch (ex)
12546 {
761269c8 12547 case ada_catch_exception:
f7f9143b
JB
12548 return (&catch_exception_breakpoint_ops);
12549 break;
761269c8 12550 case ada_catch_exception_unhandled:
f7f9143b
JB
12551 return (&catch_exception_unhandled_breakpoint_ops);
12552 break;
761269c8 12553 case ada_catch_assert:
f7f9143b
JB
12554 return (&catch_assert_breakpoint_ops);
12555 break;
12556 default:
12557 internal_error (__FILE__, __LINE__,
12558 _("unexpected catchpoint kind (%d)"), ex);
12559 }
12560}
12561
12562/* Return the condition that will be used to match the current exception
12563 being raised with the exception that the user wants to catch. This
12564 assumes that this condition is used when the inferior just triggered
12565 an exception catchpoint.
12566
12567 The string returned is a newly allocated string that needs to be
12568 deallocated later. */
12569
12570static char *
28010a5d 12571ada_exception_catchpoint_cond_string (const char *excep_string)
f7f9143b 12572{
3d0b0fa3
JB
12573 int i;
12574
0963b4bd 12575 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12576 runtime units that have been compiled without debugging info; if
28010a5d 12577 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12578 exception (e.g. "constraint_error") then, during the evaluation
12579 of the condition expression, the symbol lookup on this name would
0963b4bd 12580 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12581 may then be set only on user-defined exceptions which have the
12582 same not-fully-qualified name (e.g. my_package.constraint_error).
12583
12584 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12585 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12586 exception constraint_error" is rewritten into "catch exception
12587 standard.constraint_error".
12588
12589 If an exception named contraint_error is defined in another package of
12590 the inferior program, then the only way to specify this exception as a
12591 breakpoint condition is to use its fully-qualified named:
12592 e.g. my_package.constraint_error. */
12593
12594 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12595 {
28010a5d 12596 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3
JB
12597 {
12598 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
28010a5d 12599 excep_string);
3d0b0fa3
JB
12600 }
12601 }
28010a5d 12602 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
f7f9143b
JB
12603}
12604
12605/* Return the symtab_and_line that should be used to insert an exception
12606 catchpoint of the TYPE kind.
12607
28010a5d
PA
12608 EXCEP_STRING should contain the name of a specific exception that
12609 the catchpoint should catch, or NULL otherwise.
f7f9143b 12610
28010a5d
PA
12611 ADDR_STRING returns the name of the function where the real
12612 breakpoint that implements the catchpoints is set, depending on the
12613 type of catchpoint we need to create. */
f7f9143b
JB
12614
12615static struct symtab_and_line
761269c8 12616ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
c0a91b2b 12617 char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12618{
12619 const char *sym_name;
12620 struct symbol *sym;
f7f9143b 12621
0259addd
JB
12622 /* First, find out which exception support info to use. */
12623 ada_exception_support_info_sniffer ();
12624
12625 /* Then lookup the function on which we will break in order to catch
f7f9143b 12626 the Ada exceptions requested by the user. */
f7f9143b
JB
12627 sym_name = ada_exception_sym_name (ex);
12628 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12629
f17011e0
JB
12630 /* We can assume that SYM is not NULL at this stage. If the symbol
12631 did not exist, ada_exception_support_info_sniffer would have
12632 raised an exception.
f7f9143b 12633
f17011e0
JB
12634 Also, ada_exception_support_info_sniffer should have already
12635 verified that SYM is a function symbol. */
12636 gdb_assert (sym != NULL);
12637 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
f7f9143b
JB
12638
12639 /* Set ADDR_STRING. */
f7f9143b
JB
12640 *addr_string = xstrdup (sym_name);
12641
f7f9143b 12642 /* Set OPS. */
4b9eee8c 12643 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12644
f17011e0 12645 return find_function_start_sal (sym, 1);
f7f9143b
JB
12646}
12647
b4a5b78b 12648/* Create an Ada exception catchpoint.
f7f9143b 12649
b4a5b78b 12650 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12651
2df4d1d5
JB
12652 If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12653 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12654 of the exception to which this catchpoint applies. When not NULL,
12655 the string must be allocated on the heap, and its deallocation
12656 is no longer the responsibility of the caller.
12657
12658 COND_STRING, if not NULL, is the catchpoint condition. This string
12659 must be allocated on the heap, and its deallocation is no longer
12660 the responsibility of the caller.
f7f9143b 12661
b4a5b78b
JB
12662 TEMPFLAG, if nonzero, means that the underlying breakpoint
12663 should be temporary.
28010a5d 12664
b4a5b78b 12665 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12666
349774ef 12667void
28010a5d 12668create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12669 enum ada_exception_catchpoint_kind ex_kind,
28010a5d 12670 char *excep_string,
5845583d 12671 char *cond_string,
28010a5d 12672 int tempflag,
349774ef 12673 int disabled,
28010a5d
PA
12674 int from_tty)
12675{
12676 struct ada_catchpoint *c;
b4a5b78b
JB
12677 char *addr_string = NULL;
12678 const struct breakpoint_ops *ops = NULL;
12679 struct symtab_and_line sal
12680 = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
28010a5d
PA
12681
12682 c = XNEW (struct ada_catchpoint);
12683 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
349774ef 12684 ops, tempflag, disabled, from_tty);
28010a5d
PA
12685 c->excep_string = excep_string;
12686 create_excep_cond_exprs (c);
5845583d
JB
12687 if (cond_string != NULL)
12688 set_breakpoint_condition (&c->base, cond_string, from_tty);
3ea46bff 12689 install_breakpoint (0, &c->base, 1);
f7f9143b
JB
12690}
12691
9ac4176b
PA
12692/* Implement the "catch exception" command. */
12693
12694static void
12695catch_ada_exception_command (char *arg, int from_tty,
12696 struct cmd_list_element *command)
12697{
12698 struct gdbarch *gdbarch = get_current_arch ();
12699 int tempflag;
761269c8 12700 enum ada_exception_catchpoint_kind ex_kind;
28010a5d 12701 char *excep_string = NULL;
5845583d 12702 char *cond_string = NULL;
9ac4176b
PA
12703
12704 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12705
12706 if (!arg)
12707 arg = "";
b4a5b78b
JB
12708 catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12709 &cond_string);
12710 create_ada_exception_catchpoint (gdbarch, ex_kind,
12711 excep_string, cond_string,
349774ef
JB
12712 tempflag, 1 /* enabled */,
12713 from_tty);
9ac4176b
PA
12714}
12715
b4a5b78b 12716/* Split the arguments specified in a "catch assert" command.
5845583d 12717
b4a5b78b
JB
12718 ARGS contains the command's arguments (or the empty string if
12719 no arguments were passed).
5845583d
JB
12720
12721 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12722 (the memory needs to be deallocated after use). */
5845583d 12723
b4a5b78b
JB
12724static void
12725catch_ada_assert_command_split (char *args, char **cond_string)
f7f9143b 12726{
5845583d 12727 args = skip_spaces (args);
f7f9143b 12728
5845583d
JB
12729 /* Check whether a condition was provided. */
12730 if (strncmp (args, "if", 2) == 0
12731 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12732 {
5845583d 12733 args += 2;
0fcd72ba 12734 args = skip_spaces (args);
5845583d
JB
12735 if (args[0] == '\0')
12736 error (_("condition missing after `if' keyword"));
12737 *cond_string = xstrdup (args);
f7f9143b
JB
12738 }
12739
5845583d
JB
12740 /* Otherwise, there should be no other argument at the end of
12741 the command. */
12742 else if (args[0] != '\0')
12743 error (_("Junk at end of arguments."));
f7f9143b
JB
12744}
12745
9ac4176b
PA
12746/* Implement the "catch assert" command. */
12747
12748static void
12749catch_assert_command (char *arg, int from_tty,
12750 struct cmd_list_element *command)
12751{
12752 struct gdbarch *gdbarch = get_current_arch ();
12753 int tempflag;
5845583d 12754 char *cond_string = NULL;
9ac4176b
PA
12755
12756 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12757
12758 if (!arg)
12759 arg = "";
b4a5b78b 12760 catch_ada_assert_command_split (arg, &cond_string);
761269c8 12761 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
b4a5b78b 12762 NULL, cond_string,
349774ef
JB
12763 tempflag, 1 /* enabled */,
12764 from_tty);
9ac4176b 12765}
778865d3
JB
12766
12767/* Return non-zero if the symbol SYM is an Ada exception object. */
12768
12769static int
12770ada_is_exception_sym (struct symbol *sym)
12771{
12772 const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12773
12774 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12775 && SYMBOL_CLASS (sym) != LOC_BLOCK
12776 && SYMBOL_CLASS (sym) != LOC_CONST
12777 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12778 && type_name != NULL && strcmp (type_name, "exception") == 0);
12779}
12780
12781/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12782 Ada exception object. This matches all exceptions except the ones
12783 defined by the Ada language. */
12784
12785static int
12786ada_is_non_standard_exception_sym (struct symbol *sym)
12787{
12788 int i;
12789
12790 if (!ada_is_exception_sym (sym))
12791 return 0;
12792
12793 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12794 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12795 return 0; /* A standard exception. */
12796
12797 /* Numeric_Error is also a standard exception, so exclude it.
12798 See the STANDARD_EXC description for more details as to why
12799 this exception is not listed in that array. */
12800 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12801 return 0;
12802
12803 return 1;
12804}
12805
12806/* A helper function for qsort, comparing two struct ada_exc_info
12807 objects.
12808
12809 The comparison is determined first by exception name, and then
12810 by exception address. */
12811
12812static int
12813compare_ada_exception_info (const void *a, const void *b)
12814{
12815 const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12816 const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12817 int result;
12818
12819 result = strcmp (exc_a->name, exc_b->name);
12820 if (result != 0)
12821 return result;
12822
12823 if (exc_a->addr < exc_b->addr)
12824 return -1;
12825 if (exc_a->addr > exc_b->addr)
12826 return 1;
12827
12828 return 0;
12829}
12830
12831/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12832 routine, but keeping the first SKIP elements untouched.
12833
12834 All duplicates are also removed. */
12835
12836static void
12837sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12838 int skip)
12839{
12840 struct ada_exc_info *to_sort
12841 = VEC_address (ada_exc_info, *exceptions) + skip;
12842 int to_sort_len
12843 = VEC_length (ada_exc_info, *exceptions) - skip;
12844 int i, j;
12845
12846 qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12847 compare_ada_exception_info);
12848
12849 for (i = 1, j = 1; i < to_sort_len; i++)
12850 if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12851 to_sort[j++] = to_sort[i];
12852 to_sort_len = j;
12853 VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12854}
12855
12856/* A function intended as the "name_matcher" callback in the struct
12857 quick_symbol_functions' expand_symtabs_matching method.
12858
12859 SEARCH_NAME is the symbol's search name.
12860
12861 If USER_DATA is not NULL, it is a pointer to a regext_t object
12862 used to match the symbol (by natural name). Otherwise, when USER_DATA
12863 is null, no filtering is performed, and all symbols are a positive
12864 match. */
12865
12866static int
12867ada_exc_search_name_matches (const char *search_name, void *user_data)
12868{
12869 regex_t *preg = user_data;
12870
12871 if (preg == NULL)
12872 return 1;
12873
12874 /* In Ada, the symbol "search name" is a linkage name, whereas
12875 the regular expression used to do the matching refers to
12876 the natural name. So match against the decoded name. */
12877 return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12878}
12879
12880/* Add all exceptions defined by the Ada standard whose name match
12881 a regular expression.
12882
12883 If PREG is not NULL, then this regexp_t object is used to
12884 perform the symbol name matching. Otherwise, no name-based
12885 filtering is performed.
12886
12887 EXCEPTIONS is a vector of exceptions to which matching exceptions
12888 gets pushed. */
12889
12890static void
12891ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12892{
12893 int i;
12894
12895 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12896 {
12897 if (preg == NULL
12898 || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12899 {
12900 struct bound_minimal_symbol msymbol
12901 = ada_lookup_simple_minsym (standard_exc[i]);
12902
12903 if (msymbol.minsym != NULL)
12904 {
12905 struct ada_exc_info info
77e371c0 12906 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3
JB
12907
12908 VEC_safe_push (ada_exc_info, *exceptions, &info);
12909 }
12910 }
12911 }
12912}
12913
12914/* Add all Ada exceptions defined locally and accessible from the given
12915 FRAME.
12916
12917 If PREG is not NULL, then this regexp_t object is used to
12918 perform the symbol name matching. Otherwise, no name-based
12919 filtering is performed.
12920
12921 EXCEPTIONS is a vector of exceptions to which matching exceptions
12922 gets pushed. */
12923
12924static void
12925ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12926 VEC(ada_exc_info) **exceptions)
12927{
3977b71f 12928 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
12929
12930 while (block != 0)
12931 {
12932 struct block_iterator iter;
12933 struct symbol *sym;
12934
12935 ALL_BLOCK_SYMBOLS (block, iter, sym)
12936 {
12937 switch (SYMBOL_CLASS (sym))
12938 {
12939 case LOC_TYPEDEF:
12940 case LOC_BLOCK:
12941 case LOC_CONST:
12942 break;
12943 default:
12944 if (ada_is_exception_sym (sym))
12945 {
12946 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12947 SYMBOL_VALUE_ADDRESS (sym)};
12948
12949 VEC_safe_push (ada_exc_info, *exceptions, &info);
12950 }
12951 }
12952 }
12953 if (BLOCK_FUNCTION (block) != NULL)
12954 break;
12955 block = BLOCK_SUPERBLOCK (block);
12956 }
12957}
12958
12959/* Add all exceptions defined globally whose name name match
12960 a regular expression, excluding standard exceptions.
12961
12962 The reason we exclude standard exceptions is that they need
12963 to be handled separately: Standard exceptions are defined inside
12964 a runtime unit which is normally not compiled with debugging info,
12965 and thus usually do not show up in our symbol search. However,
12966 if the unit was in fact built with debugging info, we need to
12967 exclude them because they would duplicate the entry we found
12968 during the special loop that specifically searches for those
12969 standard exceptions.
12970
12971 If PREG is not NULL, then this regexp_t object is used to
12972 perform the symbol name matching. Otherwise, no name-based
12973 filtering is performed.
12974
12975 EXCEPTIONS is a vector of exceptions to which matching exceptions
12976 gets pushed. */
12977
12978static void
12979ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12980{
12981 struct objfile *objfile;
43f3e411 12982 struct compunit_symtab *s;
778865d3 12983
bb4142cf
DE
12984 expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12985 VARIABLES_DOMAIN, preg);
778865d3 12986
43f3e411 12987 ALL_COMPUNITS (objfile, s)
778865d3 12988 {
43f3e411 12989 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
778865d3
JB
12990 int i;
12991
12992 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12993 {
12994 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12995 struct block_iterator iter;
12996 struct symbol *sym;
12997
12998 ALL_BLOCK_SYMBOLS (b, iter, sym)
12999 if (ada_is_non_standard_exception_sym (sym)
13000 && (preg == NULL
13001 || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13002 0, NULL, 0) == 0))
13003 {
13004 struct ada_exc_info info
13005 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13006
13007 VEC_safe_push (ada_exc_info, *exceptions, &info);
13008 }
13009 }
13010 }
13011}
13012
13013/* Implements ada_exceptions_list with the regular expression passed
13014 as a regex_t, rather than a string.
13015
13016 If not NULL, PREG is used to filter out exceptions whose names
13017 do not match. Otherwise, all exceptions are listed. */
13018
13019static VEC(ada_exc_info) *
13020ada_exceptions_list_1 (regex_t *preg)
13021{
13022 VEC(ada_exc_info) *result = NULL;
13023 struct cleanup *old_chain
13024 = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13025 int prev_len;
13026
13027 /* First, list the known standard exceptions. These exceptions
13028 need to be handled separately, as they are usually defined in
13029 runtime units that have been compiled without debugging info. */
13030
13031 ada_add_standard_exceptions (preg, &result);
13032
13033 /* Next, find all exceptions whose scope is local and accessible
13034 from the currently selected frame. */
13035
13036 if (has_stack_frames ())
13037 {
13038 prev_len = VEC_length (ada_exc_info, result);
13039 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13040 &result);
13041 if (VEC_length (ada_exc_info, result) > prev_len)
13042 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13043 }
13044
13045 /* Add all exceptions whose scope is global. */
13046
13047 prev_len = VEC_length (ada_exc_info, result);
13048 ada_add_global_exceptions (preg, &result);
13049 if (VEC_length (ada_exc_info, result) > prev_len)
13050 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13051
13052 discard_cleanups (old_chain);
13053 return result;
13054}
13055
13056/* Return a vector of ada_exc_info.
13057
13058 If REGEXP is NULL, all exceptions are included in the result.
13059 Otherwise, it should contain a valid regular expression,
13060 and only the exceptions whose names match that regular expression
13061 are included in the result.
13062
13063 The exceptions are sorted in the following order:
13064 - Standard exceptions (defined by the Ada language), in
13065 alphabetical order;
13066 - Exceptions only visible from the current frame, in
13067 alphabetical order;
13068 - Exceptions whose scope is global, in alphabetical order. */
13069
13070VEC(ada_exc_info) *
13071ada_exceptions_list (const char *regexp)
13072{
13073 VEC(ada_exc_info) *result = NULL;
13074 struct cleanup *old_chain = NULL;
13075 regex_t reg;
13076
13077 if (regexp != NULL)
13078 old_chain = compile_rx_or_error (&reg, regexp,
13079 _("invalid regular expression"));
13080
13081 result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13082
13083 if (old_chain != NULL)
13084 do_cleanups (old_chain);
13085 return result;
13086}
13087
13088/* Implement the "info exceptions" command. */
13089
13090static void
13091info_exceptions_command (char *regexp, int from_tty)
13092{
13093 VEC(ada_exc_info) *exceptions;
13094 struct cleanup *cleanup;
13095 struct gdbarch *gdbarch = get_current_arch ();
13096 int ix;
13097 struct ada_exc_info *info;
13098
13099 exceptions = ada_exceptions_list (regexp);
13100 cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13101
13102 if (regexp != NULL)
13103 printf_filtered
13104 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13105 else
13106 printf_filtered (_("All defined Ada exceptions:\n"));
13107
13108 for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13109 printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13110
13111 do_cleanups (cleanup);
13112}
13113
4c4b4cd2
PH
13114 /* Operators */
13115/* Information about operators given special treatment in functions
13116 below. */
13117/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13118
13119#define ADA_OPERATORS \
13120 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13121 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13122 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13123 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13124 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13125 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13126 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13127 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13128 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13129 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13130 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13131 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13132 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13133 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13134 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13135 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13136 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13137 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13138 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13139
13140static void
554794dc
SDJ
13141ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13142 int *argsp)
4c4b4cd2
PH
13143{
13144 switch (exp->elts[pc - 1].opcode)
13145 {
76a01679 13146 default:
4c4b4cd2
PH
13147 operator_length_standard (exp, pc, oplenp, argsp);
13148 break;
13149
13150#define OP_DEFN(op, len, args, binop) \
13151 case op: *oplenp = len; *argsp = args; break;
13152 ADA_OPERATORS;
13153#undef OP_DEFN
52ce6436
PH
13154
13155 case OP_AGGREGATE:
13156 *oplenp = 3;
13157 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13158 break;
13159
13160 case OP_CHOICES:
13161 *oplenp = 3;
13162 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13163 break;
4c4b4cd2
PH
13164 }
13165}
13166
c0201579
JK
13167/* Implementation of the exp_descriptor method operator_check. */
13168
13169static int
13170ada_operator_check (struct expression *exp, int pos,
13171 int (*objfile_func) (struct objfile *objfile, void *data),
13172 void *data)
13173{
13174 const union exp_element *const elts = exp->elts;
13175 struct type *type = NULL;
13176
13177 switch (elts[pos].opcode)
13178 {
13179 case UNOP_IN_RANGE:
13180 case UNOP_QUAL:
13181 type = elts[pos + 1].type;
13182 break;
13183
13184 default:
13185 return operator_check_standard (exp, pos, objfile_func, data);
13186 }
13187
13188 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13189
13190 if (type && TYPE_OBJFILE (type)
13191 && (*objfile_func) (TYPE_OBJFILE (type), data))
13192 return 1;
13193
13194 return 0;
13195}
13196
4c4b4cd2
PH
13197static char *
13198ada_op_name (enum exp_opcode opcode)
13199{
13200 switch (opcode)
13201 {
76a01679 13202 default:
4c4b4cd2 13203 return op_name_standard (opcode);
52ce6436 13204
4c4b4cd2
PH
13205#define OP_DEFN(op, len, args, binop) case op: return #op;
13206 ADA_OPERATORS;
13207#undef OP_DEFN
52ce6436
PH
13208
13209 case OP_AGGREGATE:
13210 return "OP_AGGREGATE";
13211 case OP_CHOICES:
13212 return "OP_CHOICES";
13213 case OP_NAME:
13214 return "OP_NAME";
4c4b4cd2
PH
13215 }
13216}
13217
13218/* As for operator_length, but assumes PC is pointing at the first
13219 element of the operator, and gives meaningful results only for the
52ce6436 13220 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13221
13222static void
76a01679
JB
13223ada_forward_operator_length (struct expression *exp, int pc,
13224 int *oplenp, int *argsp)
4c4b4cd2 13225{
76a01679 13226 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13227 {
13228 default:
13229 *oplenp = *argsp = 0;
13230 break;
52ce6436 13231
4c4b4cd2
PH
13232#define OP_DEFN(op, len, args, binop) \
13233 case op: *oplenp = len; *argsp = args; break;
13234 ADA_OPERATORS;
13235#undef OP_DEFN
52ce6436
PH
13236
13237 case OP_AGGREGATE:
13238 *oplenp = 3;
13239 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13240 break;
13241
13242 case OP_CHOICES:
13243 *oplenp = 3;
13244 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13245 break;
13246
13247 case OP_STRING:
13248 case OP_NAME:
13249 {
13250 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13251
52ce6436
PH
13252 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13253 *argsp = 0;
13254 break;
13255 }
4c4b4cd2
PH
13256 }
13257}
13258
13259static int
13260ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13261{
13262 enum exp_opcode op = exp->elts[elt].opcode;
13263 int oplen, nargs;
13264 int pc = elt;
13265 int i;
76a01679 13266
4c4b4cd2
PH
13267 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13268
76a01679 13269 switch (op)
4c4b4cd2 13270 {
76a01679 13271 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13272 case OP_ATR_FIRST:
13273 case OP_ATR_LAST:
13274 case OP_ATR_LENGTH:
13275 case OP_ATR_IMAGE:
13276 case OP_ATR_MAX:
13277 case OP_ATR_MIN:
13278 case OP_ATR_MODULUS:
13279 case OP_ATR_POS:
13280 case OP_ATR_SIZE:
13281 case OP_ATR_TAG:
13282 case OP_ATR_VAL:
13283 break;
13284
13285 case UNOP_IN_RANGE:
13286 case UNOP_QUAL:
323e0a4a
AC
13287 /* XXX: gdb_sprint_host_address, type_sprint */
13288 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13289 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13290 fprintf_filtered (stream, " (");
13291 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13292 fprintf_filtered (stream, ")");
13293 break;
13294 case BINOP_IN_BOUNDS:
52ce6436
PH
13295 fprintf_filtered (stream, " (%d)",
13296 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13297 break;
13298 case TERNOP_IN_RANGE:
13299 break;
13300
52ce6436
PH
13301 case OP_AGGREGATE:
13302 case OP_OTHERS:
13303 case OP_DISCRETE_RANGE:
13304 case OP_POSITIONAL:
13305 case OP_CHOICES:
13306 break;
13307
13308 case OP_NAME:
13309 case OP_STRING:
13310 {
13311 char *name = &exp->elts[elt + 2].string;
13312 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13313
52ce6436
PH
13314 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13315 break;
13316 }
13317
4c4b4cd2
PH
13318 default:
13319 return dump_subexp_body_standard (exp, stream, elt);
13320 }
13321
13322 elt += oplen;
13323 for (i = 0; i < nargs; i += 1)
13324 elt = dump_subexp (exp, stream, elt);
13325
13326 return elt;
13327}
13328
13329/* The Ada extension of print_subexp (q.v.). */
13330
76a01679
JB
13331static void
13332ada_print_subexp (struct expression *exp, int *pos,
13333 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13334{
52ce6436 13335 int oplen, nargs, i;
4c4b4cd2
PH
13336 int pc = *pos;
13337 enum exp_opcode op = exp->elts[pc].opcode;
13338
13339 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13340
52ce6436 13341 *pos += oplen;
4c4b4cd2
PH
13342 switch (op)
13343 {
13344 default:
52ce6436 13345 *pos -= oplen;
4c4b4cd2
PH
13346 print_subexp_standard (exp, pos, stream, prec);
13347 return;
13348
13349 case OP_VAR_VALUE:
4c4b4cd2
PH
13350 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13351 return;
13352
13353 case BINOP_IN_BOUNDS:
323e0a4a 13354 /* XXX: sprint_subexp */
4c4b4cd2 13355 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13356 fputs_filtered (" in ", stream);
4c4b4cd2 13357 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13358 fputs_filtered ("'range", stream);
4c4b4cd2 13359 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13360 fprintf_filtered (stream, "(%ld)",
13361 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13362 return;
13363
13364 case TERNOP_IN_RANGE:
4c4b4cd2 13365 if (prec >= PREC_EQUAL)
76a01679 13366 fputs_filtered ("(", stream);
323e0a4a 13367 /* XXX: sprint_subexp */
4c4b4cd2 13368 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13369 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13370 print_subexp (exp, pos, stream, PREC_EQUAL);
13371 fputs_filtered (" .. ", stream);
13372 print_subexp (exp, pos, stream, PREC_EQUAL);
13373 if (prec >= PREC_EQUAL)
76a01679
JB
13374 fputs_filtered (")", stream);
13375 return;
4c4b4cd2
PH
13376
13377 case OP_ATR_FIRST:
13378 case OP_ATR_LAST:
13379 case OP_ATR_LENGTH:
13380 case OP_ATR_IMAGE:
13381 case OP_ATR_MAX:
13382 case OP_ATR_MIN:
13383 case OP_ATR_MODULUS:
13384 case OP_ATR_POS:
13385 case OP_ATR_SIZE:
13386 case OP_ATR_TAG:
13387 case OP_ATR_VAL:
4c4b4cd2 13388 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
13389 {
13390 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
13391 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13392 &type_print_raw_options);
76a01679
JB
13393 *pos += 3;
13394 }
4c4b4cd2 13395 else
76a01679 13396 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13397 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13398 if (nargs > 1)
76a01679
JB
13399 {
13400 int tem;
5b4ee69b 13401
76a01679
JB
13402 for (tem = 1; tem < nargs; tem += 1)
13403 {
13404 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13405 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13406 }
13407 fputs_filtered (")", stream);
13408 }
4c4b4cd2 13409 return;
14f9c5c9 13410
4c4b4cd2 13411 case UNOP_QUAL:
4c4b4cd2
PH
13412 type_print (exp->elts[pc + 1].type, "", stream, 0);
13413 fputs_filtered ("'(", stream);
13414 print_subexp (exp, pos, stream, PREC_PREFIX);
13415 fputs_filtered (")", stream);
13416 return;
14f9c5c9 13417
4c4b4cd2 13418 case UNOP_IN_RANGE:
323e0a4a 13419 /* XXX: sprint_subexp */
4c4b4cd2 13420 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13421 fputs_filtered (" in ", stream);
79d43c61
TT
13422 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13423 &type_print_raw_options);
4c4b4cd2 13424 return;
52ce6436
PH
13425
13426 case OP_DISCRETE_RANGE:
13427 print_subexp (exp, pos, stream, PREC_SUFFIX);
13428 fputs_filtered ("..", stream);
13429 print_subexp (exp, pos, stream, PREC_SUFFIX);
13430 return;
13431
13432 case OP_OTHERS:
13433 fputs_filtered ("others => ", stream);
13434 print_subexp (exp, pos, stream, PREC_SUFFIX);
13435 return;
13436
13437 case OP_CHOICES:
13438 for (i = 0; i < nargs-1; i += 1)
13439 {
13440 if (i > 0)
13441 fputs_filtered ("|", stream);
13442 print_subexp (exp, pos, stream, PREC_SUFFIX);
13443 }
13444 fputs_filtered (" => ", stream);
13445 print_subexp (exp, pos, stream, PREC_SUFFIX);
13446 return;
13447
13448 case OP_POSITIONAL:
13449 print_subexp (exp, pos, stream, PREC_SUFFIX);
13450 return;
13451
13452 case OP_AGGREGATE:
13453 fputs_filtered ("(", stream);
13454 for (i = 0; i < nargs; i += 1)
13455 {
13456 if (i > 0)
13457 fputs_filtered (", ", stream);
13458 print_subexp (exp, pos, stream, PREC_SUFFIX);
13459 }
13460 fputs_filtered (")", stream);
13461 return;
4c4b4cd2
PH
13462 }
13463}
14f9c5c9
AS
13464
13465/* Table mapping opcodes into strings for printing operators
13466 and precedences of the operators. */
13467
d2e4a39e
AS
13468static const struct op_print ada_op_print_tab[] = {
13469 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13470 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13471 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13472 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13473 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13474 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13475 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13476 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13477 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13478 {">=", BINOP_GEQ, PREC_ORDER, 0},
13479 {">", BINOP_GTR, PREC_ORDER, 0},
13480 {"<", BINOP_LESS, PREC_ORDER, 0},
13481 {">>", BINOP_RSH, PREC_SHIFT, 0},
13482 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13483 {"+", BINOP_ADD, PREC_ADD, 0},
13484 {"-", BINOP_SUB, PREC_ADD, 0},
13485 {"&", BINOP_CONCAT, PREC_ADD, 0},
13486 {"*", BINOP_MUL, PREC_MUL, 0},
13487 {"/", BINOP_DIV, PREC_MUL, 0},
13488 {"rem", BINOP_REM, PREC_MUL, 0},
13489 {"mod", BINOP_MOD, PREC_MUL, 0},
13490 {"**", BINOP_EXP, PREC_REPEAT, 0},
13491 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13492 {"-", UNOP_NEG, PREC_PREFIX, 0},
13493 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13494 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13495 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13496 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13497 {".all", UNOP_IND, PREC_SUFFIX, 1},
13498 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13499 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
d2e4a39e 13500 {NULL, 0, 0, 0}
14f9c5c9
AS
13501};
13502\f
72d5681a
PH
13503enum ada_primitive_types {
13504 ada_primitive_type_int,
13505 ada_primitive_type_long,
13506 ada_primitive_type_short,
13507 ada_primitive_type_char,
13508 ada_primitive_type_float,
13509 ada_primitive_type_double,
13510 ada_primitive_type_void,
13511 ada_primitive_type_long_long,
13512 ada_primitive_type_long_double,
13513 ada_primitive_type_natural,
13514 ada_primitive_type_positive,
13515 ada_primitive_type_system_address,
13516 nr_ada_primitive_types
13517};
6c038f32
PH
13518
13519static void
d4a9a881 13520ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
13521 struct language_arch_info *lai)
13522{
d4a9a881 13523 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 13524
72d5681a 13525 lai->primitive_type_vector
d4a9a881 13526 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 13527 struct type *);
e9bb382b
UW
13528
13529 lai->primitive_type_vector [ada_primitive_type_int]
13530 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13531 0, "integer");
13532 lai->primitive_type_vector [ada_primitive_type_long]
13533 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13534 0, "long_integer");
13535 lai->primitive_type_vector [ada_primitive_type_short]
13536 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13537 0, "short_integer");
13538 lai->string_char_type
13539 = lai->primitive_type_vector [ada_primitive_type_char]
13540 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13541 lai->primitive_type_vector [ada_primitive_type_float]
13542 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13543 "float", NULL);
13544 lai->primitive_type_vector [ada_primitive_type_double]
13545 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13546 "long_float", NULL);
13547 lai->primitive_type_vector [ada_primitive_type_long_long]
13548 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13549 0, "long_long_integer");
13550 lai->primitive_type_vector [ada_primitive_type_long_double]
13551 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13552 "long_long_float", NULL);
13553 lai->primitive_type_vector [ada_primitive_type_natural]
13554 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13555 0, "natural");
13556 lai->primitive_type_vector [ada_primitive_type_positive]
13557 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13558 0, "positive");
13559 lai->primitive_type_vector [ada_primitive_type_void]
13560 = builtin->builtin_void;
13561
13562 lai->primitive_type_vector [ada_primitive_type_system_address]
13563 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
13564 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13565 = "system__address";
fbb06eb1 13566
47e729a8 13567 lai->bool_type_symbol = NULL;
fbb06eb1 13568 lai->bool_type_default = builtin->builtin_bool;
6c038f32 13569}
6c038f32
PH
13570\f
13571 /* Language vector */
13572
13573/* Not really used, but needed in the ada_language_defn. */
13574
13575static void
6c7a06a3 13576emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 13577{
6c7a06a3 13578 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
13579}
13580
13581static int
410a0ff2 13582parse (struct parser_state *ps)
6c038f32
PH
13583{
13584 warnings_issued = 0;
410a0ff2 13585 return ada_parse (ps);
6c038f32
PH
13586}
13587
13588static const struct exp_descriptor ada_exp_descriptor = {
13589 ada_print_subexp,
13590 ada_operator_length,
c0201579 13591 ada_operator_check,
6c038f32
PH
13592 ada_op_name,
13593 ada_dump_subexp_body,
13594 ada_evaluate_subexp
13595};
13596
1a119f36 13597/* Implement the "la_get_symbol_name_cmp" language_defn method
74ccd7f5
JB
13598 for Ada. */
13599
1a119f36
JB
13600static symbol_name_cmp_ftype
13601ada_get_symbol_name_cmp (const char *lookup_name)
74ccd7f5
JB
13602{
13603 if (should_use_wild_match (lookup_name))
13604 return wild_match;
13605 else
13606 return compare_names;
13607}
13608
a5ee536b
JB
13609/* Implement the "la_read_var_value" language_defn method for Ada. */
13610
13611static struct value *
13612ada_read_var_value (struct symbol *var, struct frame_info *frame)
13613{
3977b71f 13614 const struct block *frame_block = NULL;
a5ee536b
JB
13615 struct symbol *renaming_sym = NULL;
13616
13617 /* The only case where default_read_var_value is not sufficient
13618 is when VAR is a renaming... */
13619 if (frame)
13620 frame_block = get_frame_block (frame, NULL);
13621 if (frame_block)
13622 renaming_sym = ada_find_renaming_symbol (var, frame_block);
13623 if (renaming_sym != NULL)
13624 return ada_read_renaming_var_value (renaming_sym, frame_block);
13625
13626 /* This is a typical case where we expect the default_read_var_value
13627 function to work. */
13628 return default_read_var_value (var, frame);
13629}
13630
6c038f32
PH
13631const struct language_defn ada_language_defn = {
13632 "ada", /* Language name */
6abde28f 13633 "Ada",
6c038f32 13634 language_ada,
6c038f32 13635 range_check_off,
6c038f32
PH
13636 case_sensitive_on, /* Yes, Ada is case-insensitive, but
13637 that's not quite what this means. */
6c038f32 13638 array_row_major,
9a044a89 13639 macro_expansion_no,
6c038f32
PH
13640 &ada_exp_descriptor,
13641 parse,
13642 ada_error,
13643 resolve,
13644 ada_printchar, /* Print a character constant */
13645 ada_printstr, /* Function to print string constant */
13646 emit_char, /* Function to print single char (not used) */
6c038f32 13647 ada_print_type, /* Print a type using appropriate syntax */
be942545 13648 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
13649 ada_val_print, /* Print a value using appropriate syntax */
13650 ada_value_print, /* Print a top-level value */
a5ee536b 13651 ada_read_var_value, /* la_read_var_value */
6c038f32 13652 NULL, /* Language specific skip_trampoline */
2b2d9e11 13653 NULL, /* name_of_this */
6c038f32
PH
13654 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
13655 basic_lookup_transparent_type, /* lookup_transparent_type */
13656 ada_la_decode, /* Language specific symbol demangler */
0963b4bd
MS
13657 NULL, /* Language specific
13658 class_name_from_physname */
6c038f32
PH
13659 ada_op_print_tab, /* expression operators for printing */
13660 0, /* c-style arrays */
13661 1, /* String lower bound */
6c038f32 13662 ada_get_gdb_completer_word_break_characters,
41d27058 13663 ada_make_symbol_completion_list,
72d5681a 13664 ada_language_arch_info,
e79af960 13665 ada_print_array_index,
41f1b697 13666 default_pass_by_reference,
ae6a3a4c 13667 c_get_string,
1a119f36 13668 ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */
f8eba3c6 13669 ada_iterate_over_symbols,
a53b64ea 13670 &ada_varobj_ops,
bb2ec1b3
TT
13671 NULL,
13672 NULL,
6c038f32
PH
13673 LANG_MAGIC
13674};
13675
2c0b251b
PA
13676/* Provide a prototype to silence -Wmissing-prototypes. */
13677extern initialize_file_ftype _initialize_ada_language;
13678
5bf03f13
JB
13679/* Command-list for the "set/show ada" prefix command. */
13680static struct cmd_list_element *set_ada_list;
13681static struct cmd_list_element *show_ada_list;
13682
13683/* Implement the "set ada" prefix command. */
13684
13685static void
13686set_ada_command (char *arg, int from_tty)
13687{
13688 printf_unfiltered (_(\
13689"\"set ada\" must be followed by the name of a setting.\n"));
635c7e8a 13690 help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
5bf03f13
JB
13691}
13692
13693/* Implement the "show ada" prefix command. */
13694
13695static void
13696show_ada_command (char *args, int from_tty)
13697{
13698 cmd_show_list (show_ada_list, from_tty, "");
13699}
13700
2060206e
PA
13701static void
13702initialize_ada_catchpoint_ops (void)
13703{
13704 struct breakpoint_ops *ops;
13705
13706 initialize_breakpoint_ops ();
13707
13708 ops = &catch_exception_breakpoint_ops;
13709 *ops = bkpt_breakpoint_ops;
13710 ops->dtor = dtor_catch_exception;
13711 ops->allocate_location = allocate_location_catch_exception;
13712 ops->re_set = re_set_catch_exception;
13713 ops->check_status = check_status_catch_exception;
13714 ops->print_it = print_it_catch_exception;
13715 ops->print_one = print_one_catch_exception;
13716 ops->print_mention = print_mention_catch_exception;
13717 ops->print_recreate = print_recreate_catch_exception;
13718
13719 ops = &catch_exception_unhandled_breakpoint_ops;
13720 *ops = bkpt_breakpoint_ops;
13721 ops->dtor = dtor_catch_exception_unhandled;
13722 ops->allocate_location = allocate_location_catch_exception_unhandled;
13723 ops->re_set = re_set_catch_exception_unhandled;
13724 ops->check_status = check_status_catch_exception_unhandled;
13725 ops->print_it = print_it_catch_exception_unhandled;
13726 ops->print_one = print_one_catch_exception_unhandled;
13727 ops->print_mention = print_mention_catch_exception_unhandled;
13728 ops->print_recreate = print_recreate_catch_exception_unhandled;
13729
13730 ops = &catch_assert_breakpoint_ops;
13731 *ops = bkpt_breakpoint_ops;
13732 ops->dtor = dtor_catch_assert;
13733 ops->allocate_location = allocate_location_catch_assert;
13734 ops->re_set = re_set_catch_assert;
13735 ops->check_status = check_status_catch_assert;
13736 ops->print_it = print_it_catch_assert;
13737 ops->print_one = print_one_catch_assert;
13738 ops->print_mention = print_mention_catch_assert;
13739 ops->print_recreate = print_recreate_catch_assert;
13740}
13741
3d9434b5
JB
13742/* This module's 'new_objfile' observer. */
13743
13744static void
13745ada_new_objfile_observer (struct objfile *objfile)
13746{
13747 ada_clear_symbol_cache ();
13748}
13749
13750/* This module's 'free_objfile' observer. */
13751
13752static void
13753ada_free_objfile_observer (struct objfile *objfile)
13754{
13755 ada_clear_symbol_cache ();
13756}
13757
d2e4a39e 13758void
6c038f32 13759_initialize_ada_language (void)
14f9c5c9 13760{
6c038f32
PH
13761 add_language (&ada_language_defn);
13762
2060206e
PA
13763 initialize_ada_catchpoint_ops ();
13764
5bf03f13
JB
13765 add_prefix_cmd ("ada", no_class, set_ada_command,
13766 _("Prefix command for changing Ada-specfic settings"),
13767 &set_ada_list, "set ada ", 0, &setlist);
13768
13769 add_prefix_cmd ("ada", no_class, show_ada_command,
13770 _("Generic command for showing Ada-specific settings."),
13771 &show_ada_list, "show ada ", 0, &showlist);
13772
13773 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13774 &trust_pad_over_xvs, _("\
13775Enable or disable an optimization trusting PAD types over XVS types"), _("\
13776Show whether an optimization trusting PAD types over XVS types is activated"),
13777 _("\
13778This is related to the encoding used by the GNAT compiler. The debugger\n\
13779should normally trust the contents of PAD types, but certain older versions\n\
13780of GNAT have a bug that sometimes causes the information in the PAD type\n\
13781to be incorrect. Turning this setting \"off\" allows the debugger to\n\
13782work around this bug. It is always safe to turn this option \"off\", but\n\
13783this incurs a slight performance penalty, so it is recommended to NOT change\n\
13784this option to \"off\" unless necessary."),
13785 NULL, NULL, &set_ada_list, &show_ada_list);
13786
9ac4176b
PA
13787 add_catch_command ("exception", _("\
13788Catch Ada exceptions, when raised.\n\
13789With an argument, catch only exceptions with the given name."),
13790 catch_ada_exception_command,
13791 NULL,
13792 CATCH_PERMANENT,
13793 CATCH_TEMPORARY);
13794 add_catch_command ("assert", _("\
13795Catch failed Ada assertions, when raised.\n\
13796With an argument, catch only exceptions with the given name."),
13797 catch_assert_command,
13798 NULL,
13799 CATCH_PERMANENT,
13800 CATCH_TEMPORARY);
13801
6c038f32 13802 varsize_limit = 65536;
6c038f32 13803
778865d3
JB
13804 add_info ("exceptions", info_exceptions_command,
13805 _("\
13806List all Ada exception names.\n\
13807If a regular expression is passed as an argument, only those matching\n\
13808the regular expression are listed."));
13809
c6044dd1
JB
13810 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13811 _("Set Ada maintenance-related variables."),
13812 &maint_set_ada_cmdlist, "maintenance set ada ",
13813 0/*allow-unknown*/, &maintenance_set_cmdlist);
13814
13815 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13816 _("Show Ada maintenance-related variables"),
13817 &maint_show_ada_cmdlist, "maintenance show ada ",
13818 0/*allow-unknown*/, &maintenance_show_cmdlist);
13819
13820 add_setshow_boolean_cmd
13821 ("ignore-descriptive-types", class_maintenance,
13822 &ada_ignore_descriptive_types_p,
13823 _("Set whether descriptive types generated by GNAT should be ignored."),
13824 _("Show whether descriptive types generated by GNAT should be ignored."),
13825 _("\
13826When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13827DWARF attribute."),
13828 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13829
6c038f32
PH
13830 obstack_init (&symbol_list_obstack);
13831
13832 decoded_names_store = htab_create_alloc
13833 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13834 NULL, xcalloc, xfree);
6b69afc4 13835
3d9434b5
JB
13836 /* The ada-lang observers. */
13837 observer_attach_new_objfile (ada_new_objfile_observer);
13838 observer_attach_free_objfile (ada_free_objfile_observer);
e802dbe0 13839 observer_attach_inferior_exit (ada_inferior_exit);
ee01b665
JB
13840
13841 /* Setup various context-specific data. */
e802dbe0 13842 ada_inferior_data
8e260fc0 13843 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
ee01b665
JB
13844 ada_pspace_data_handle
13845 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14f9c5c9 13846}