]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
Change nm so that when it is running in POSIX compatible mode, it does not prefix...
[thirdparty/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
42a4f53d 3 Copyright (C) 1992-2019 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"
d55e5aa6 24#include "gdb_regex.h"
4de283e4
TT
25#include "frame.h"
26#include "symtab.h"
27#include "gdbtypes.h"
14f9c5c9 28#include "gdbcmd.h"
4de283e4
TT
29#include "expression.h"
30#include "parser-defs.h"
31#include "language.h"
32#include "varobj.h"
33#include "c-lang.h"
34#include "inferior.h"
35#include "symfile.h"
36#include "objfiles.h"
37#include "breakpoint.h"
14f9c5c9 38#include "gdbcore.h"
4c4b4cd2 39#include "hashtab.h"
4de283e4
TT
40#include "gdb_obstack.h"
41#include "ada-lang.h"
42#include "completer.h"
43#include <sys/stat.h>
44#include "ui-out.h"
45#include "block.h"
04714b91 46#include "infcall.h"
4de283e4
TT
47#include "dictionary.h"
48#include "annotate.h"
49#include "valprint.h"
d55e5aa6 50#include "source.h"
4de283e4
TT
51#include "observable.h"
52#include "common/vec.h"
692465f1 53#include "stack.h"
4de283e4 54#include "common/gdb_vecs.h"
79d43c61 55#include "typeprint.h"
4de283e4
TT
56#include "namespace.h"
57
58#include "psymtab.h"
40bc484c 59#include "value.h"
4de283e4
TT
60#include "mi/mi-common.h"
61#include "arch-utils.h"
62#include "cli/cli-utils.h"
63#include "common/function-view.h"
64#include "common/byte-vector.h"
65#include <algorithm>
2ff0a947 66#include <map>
ccefe4c4 67
4c4b4cd2 68/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 69 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
70 Copied from valarith.c. */
71
72#ifndef TRUNCATION_TOWARDS_ZERO
73#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
74#endif
75
d2e4a39e 76static struct type *desc_base_type (struct type *);
14f9c5c9 77
d2e4a39e 78static struct type *desc_bounds_type (struct type *);
14f9c5c9 79
d2e4a39e 80static struct value *desc_bounds (struct value *);
14f9c5c9 81
d2e4a39e 82static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 83
d2e4a39e 84static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 85
556bdfd4 86static struct type *desc_data_target_type (struct type *);
14f9c5c9 87
d2e4a39e 88static struct value *desc_data (struct value *);
14f9c5c9 89
d2e4a39e 90static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 91
d2e4a39e 92static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 93
d2e4a39e 94static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 95
d2e4a39e 96static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 97
d2e4a39e 98static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 99
d2e4a39e 100static struct type *desc_index_type (struct type *, int);
14f9c5c9 101
d2e4a39e 102static int desc_arity (struct type *);
14f9c5c9 103
d2e4a39e 104static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 105
d2e4a39e 106static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 107
40bc484c 108static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 109
4c4b4cd2 110static void ada_add_block_symbols (struct obstack *,
b5ec771e
PA
111 const struct block *,
112 const lookup_name_info &lookup_name,
113 domain_enum, struct objfile *);
14f9c5c9 114
22cee43f 115static void ada_add_all_symbols (struct obstack *, const struct block *,
b5ec771e
PA
116 const lookup_name_info &lookup_name,
117 domain_enum, int, int *);
22cee43f 118
d12307c1 119static int is_nonfunction (struct block_symbol *, int);
14f9c5c9 120
76a01679 121static void add_defn_to_vec (struct obstack *, struct symbol *,
f0c5f9b2 122 const struct block *);
14f9c5c9 123
4c4b4cd2
PH
124static int num_defns_collected (struct obstack *);
125
d12307c1 126static struct block_symbol *defns_collected (struct obstack *, int);
14f9c5c9 127
e9d9f57e 128static struct value *resolve_subexp (expression_up *, int *, int,
699bd4cf
TT
129 struct type *, int,
130 innermost_block_tracker *);
14f9c5c9 131
e9d9f57e 132static void replace_operator_with_call (expression_up *, int, int, int,
270140bd 133 struct symbol *, const struct block *);
14f9c5c9 134
d2e4a39e 135static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 136
a121b7c1 137static const char *ada_op_name (enum exp_opcode);
4c4b4cd2
PH
138
139static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 140
d2e4a39e 141static int numeric_type_p (struct type *);
14f9c5c9 142
d2e4a39e 143static int integer_type_p (struct type *);
14f9c5c9 144
d2e4a39e 145static int scalar_type_p (struct type *);
14f9c5c9 146
d2e4a39e 147static int discrete_type_p (struct type *);
14f9c5c9 148
aeb5907d
JB
149static enum ada_renaming_category parse_old_style_renaming (struct type *,
150 const char **,
151 int *,
152 const char **);
153
154static struct symbol *find_old_style_renaming_symbol (const char *,
270140bd 155 const struct block *);
aeb5907d 156
a121b7c1 157static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
988f6b3d 158 int, int);
4c4b4cd2 159
d2e4a39e 160static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 161
b4ba55a1
JB
162static struct type *ada_find_parallel_type_with_name (struct type *,
163 const char *);
164
d2e4a39e 165static int is_dynamic_field (struct type *, int);
14f9c5c9 166
10a2c479 167static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 168 const gdb_byte *,
4c4b4cd2
PH
169 CORE_ADDR, struct value *);
170
171static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 172
28c85d6c 173static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 174
d2e4a39e 175static struct type *to_static_fixed_type (struct type *);
f192137b 176static struct type *static_unwrap_type (struct type *type);
14f9c5c9 177
d2e4a39e 178static struct value *unwrap_value (struct value *);
14f9c5c9 179
ad82864c 180static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 181
ad82864c 182static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 183
ad82864c
JB
184static long decode_packed_array_bitsize (struct type *);
185
186static struct value *decode_constrained_packed_array (struct value *);
187
188static int ada_is_packed_array_type (struct type *);
189
190static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 191
d2e4a39e 192static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 193 struct value **);
14f9c5c9 194
4c4b4cd2
PH
195static struct value *coerce_unspec_val_to_type (struct value *,
196 struct type *);
14f9c5c9 197
d2e4a39e 198static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 199
d2e4a39e 200static int equiv_types (struct type *, struct type *);
14f9c5c9 201
d2e4a39e 202static int is_name_suffix (const char *);
14f9c5c9 203
73589123
PH
204static int advance_wild_match (const char **, const char *, int);
205
b5ec771e 206static bool wild_match (const char *name, const char *patn);
14f9c5c9 207
d2e4a39e 208static struct value *ada_coerce_ref (struct value *);
14f9c5c9 209
4c4b4cd2
PH
210static LONGEST pos_atr (struct value *);
211
3cb382c9 212static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 213
d2e4a39e 214static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 215
4c4b4cd2
PH
216static struct symbol *standard_lookup (const char *, const struct block *,
217 domain_enum);
14f9c5c9 218
108d56a4 219static struct value *ada_search_struct_field (const char *, struct value *, int,
4c4b4cd2
PH
220 struct type *);
221
222static struct value *ada_value_primitive_field (struct value *, int, int,
223 struct type *);
224
0d5cff50 225static int find_struct_field (const char *, struct type *, int,
52ce6436 226 struct type **, int *, int *, int *, int *);
4c4b4cd2 227
d12307c1 228static int ada_resolve_function (struct block_symbol *, int,
4c4b4cd2 229 struct value **, int, const char *,
2a612529 230 struct type *, int);
4c4b4cd2 231
4c4b4cd2
PH
232static int ada_is_direct_array_type (struct type *);
233
72d5681a
PH
234static void ada_language_arch_info (struct gdbarch *,
235 struct language_arch_info *);
714e53ab 236
52ce6436
PH
237static struct value *ada_index_struct_field (int, struct value *, int,
238 struct type *);
239
240static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
241 struct expression *,
242 int *, enum noside);
52ce6436
PH
243
244static void aggregate_assign_from_choices (struct value *, struct value *,
245 struct expression *,
246 int *, LONGEST *, int *,
247 int, LONGEST, LONGEST);
248
249static void aggregate_assign_positional (struct value *, struct value *,
250 struct expression *,
251 int *, LONGEST *, int *, int,
252 LONGEST, LONGEST);
253
254
255static void aggregate_assign_others (struct value *, struct value *,
256 struct expression *,
257 int *, LONGEST *, int, LONGEST, LONGEST);
258
259
260static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
261
262
263static struct value *ada_evaluate_subexp (struct type *, struct expression *,
264 int *, enum noside);
265
266static void ada_forward_operator_length (struct expression *, int, int *,
267 int *);
852dff6c
JB
268
269static struct type *ada_find_any_type (const char *name);
b5ec771e
PA
270
271static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
272 (const lookup_name_info &lookup_name);
273
4c4b4cd2
PH
274\f
275
ee01b665
JB
276/* The result of a symbol lookup to be stored in our symbol cache. */
277
278struct cache_entry
279{
280 /* The name used to perform the lookup. */
281 const char *name;
282 /* The namespace used during the lookup. */
fe978cb0 283 domain_enum domain;
ee01b665
JB
284 /* The symbol returned by the lookup, or NULL if no matching symbol
285 was found. */
286 struct symbol *sym;
287 /* The block where the symbol was found, or NULL if no matching
288 symbol was found. */
289 const struct block *block;
290 /* A pointer to the next entry with the same hash. */
291 struct cache_entry *next;
292};
293
294/* The Ada symbol cache, used to store the result of Ada-mode symbol
295 lookups in the course of executing the user's commands.
296
297 The cache is implemented using a simple, fixed-sized hash.
298 The size is fixed on the grounds that there are not likely to be
299 all that many symbols looked up during any given session, regardless
300 of the size of the symbol table. If we decide to go to a resizable
301 table, let's just use the stuff from libiberty instead. */
302
303#define HASH_SIZE 1009
304
305struct ada_symbol_cache
306{
307 /* An obstack used to store the entries in our cache. */
308 struct obstack cache_space;
309
310 /* The root of the hash table used to implement our symbol cache. */
311 struct cache_entry *root[HASH_SIZE];
312};
313
314static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
76a01679 315
4c4b4cd2 316/* Maximum-sized dynamic type. */
14f9c5c9
AS
317static unsigned int varsize_limit;
318
67cb5b2d 319static const char ada_completer_word_break_characters[] =
4c4b4cd2
PH
320#ifdef VMS
321 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
322#else
14f9c5c9 323 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 324#endif
14f9c5c9 325
4c4b4cd2 326/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 327static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 328 = "__gnat_ada_main_program_name";
14f9c5c9 329
4c4b4cd2
PH
330/* Limit on the number of warnings to raise per expression evaluation. */
331static int warning_limit = 2;
332
333/* Number of warning messages issued; reset to 0 by cleanups after
334 expression evaluation. */
335static int warnings_issued = 0;
336
337static const char *known_runtime_file_name_patterns[] = {
338 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
339};
340
341static const char *known_auxiliary_function_name_patterns[] = {
342 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
343};
344
c6044dd1
JB
345/* Maintenance-related settings for this module. */
346
347static struct cmd_list_element *maint_set_ada_cmdlist;
348static struct cmd_list_element *maint_show_ada_cmdlist;
349
350/* Implement the "maintenance set ada" (prefix) command. */
351
352static void
981a3fb3 353maint_set_ada_cmd (const char *args, int from_tty)
c6044dd1 354{
635c7e8a
TT
355 help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
356 gdb_stdout);
c6044dd1
JB
357}
358
359/* Implement the "maintenance show ada" (prefix) command. */
360
361static void
981a3fb3 362maint_show_ada_cmd (const char *args, int from_tty)
c6044dd1
JB
363{
364 cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
365}
366
367/* The "maintenance ada set/show ignore-descriptive-type" value. */
368
369static int ada_ignore_descriptive_types_p = 0;
370
e802dbe0
JB
371 /* Inferior-specific data. */
372
373/* Per-inferior data for this module. */
374
375struct ada_inferior_data
376{
377 /* The ada__tags__type_specific_data type, which is used when decoding
378 tagged types. With older versions of GNAT, this type was directly
379 accessible through a component ("tsd") in the object tag. But this
380 is no longer the case, so we cache it for each inferior. */
381 struct type *tsd_type;
3eecfa55
JB
382
383 /* The exception_support_info data. This data is used to determine
384 how to implement support for Ada exception catchpoints in a given
385 inferior. */
386 const struct exception_support_info *exception_info;
e802dbe0
JB
387};
388
389/* Our key to this module's inferior data. */
390static const struct inferior_data *ada_inferior_data;
391
392/* A cleanup routine for our inferior data. */
393static void
394ada_inferior_data_cleanup (struct inferior *inf, void *arg)
395{
396 struct ada_inferior_data *data;
397
9a3c8263 398 data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
e802dbe0
JB
399 if (data != NULL)
400 xfree (data);
401}
402
403/* Return our inferior data for the given inferior (INF).
404
405 This function always returns a valid pointer to an allocated
406 ada_inferior_data structure. If INF's inferior data has not
407 been previously set, this functions creates a new one with all
408 fields set to zero, sets INF's inferior to it, and then returns
409 a pointer to that newly allocated ada_inferior_data. */
410
411static struct ada_inferior_data *
412get_ada_inferior_data (struct inferior *inf)
413{
414 struct ada_inferior_data *data;
415
9a3c8263 416 data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
e802dbe0
JB
417 if (data == NULL)
418 {
41bf6aca 419 data = XCNEW (struct ada_inferior_data);
e802dbe0
JB
420 set_inferior_data (inf, ada_inferior_data, data);
421 }
422
423 return data;
424}
425
426/* Perform all necessary cleanups regarding our module's inferior data
427 that is required after the inferior INF just exited. */
428
429static void
430ada_inferior_exit (struct inferior *inf)
431{
432 ada_inferior_data_cleanup (inf, NULL);
433 set_inferior_data (inf, ada_inferior_data, NULL);
434}
435
ee01b665
JB
436
437 /* program-space-specific data. */
438
439/* This module's per-program-space data. */
440struct ada_pspace_data
441{
442 /* The Ada symbol cache. */
443 struct ada_symbol_cache *sym_cache;
444};
445
446/* Key to our per-program-space data. */
447static const struct program_space_data *ada_pspace_data_handle;
448
449/* Return this module's data for the given program space (PSPACE).
450 If not is found, add a zero'ed one now.
451
452 This function always returns a valid object. */
453
454static struct ada_pspace_data *
455get_ada_pspace_data (struct program_space *pspace)
456{
457 struct ada_pspace_data *data;
458
9a3c8263
SM
459 data = ((struct ada_pspace_data *)
460 program_space_data (pspace, ada_pspace_data_handle));
ee01b665
JB
461 if (data == NULL)
462 {
463 data = XCNEW (struct ada_pspace_data);
464 set_program_space_data (pspace, ada_pspace_data_handle, data);
465 }
466
467 return data;
468}
469
470/* The cleanup callback for this module's per-program-space data. */
471
472static void
473ada_pspace_data_cleanup (struct program_space *pspace, void *data)
474{
9a3c8263 475 struct ada_pspace_data *pspace_data = (struct ada_pspace_data *) data;
ee01b665
JB
476
477 if (pspace_data->sym_cache != NULL)
478 ada_free_symbol_cache (pspace_data->sym_cache);
479 xfree (pspace_data);
480}
481
4c4b4cd2
PH
482 /* Utilities */
483
720d1a40 484/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 485 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
486
487 Normally, we really expect a typedef type to only have 1 typedef layer.
488 In other words, we really expect the target type of a typedef type to be
489 a non-typedef type. This is particularly true for Ada units, because
490 the language does not have a typedef vs not-typedef distinction.
491 In that respect, the Ada compiler has been trying to eliminate as many
492 typedef definitions in the debugging information, since they generally
493 do not bring any extra information (we still use typedef under certain
494 circumstances related mostly to the GNAT encoding).
495
496 Unfortunately, we have seen situations where the debugging information
497 generated by the compiler leads to such multiple typedef layers. For
498 instance, consider the following example with stabs:
499
500 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
501 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
502
503 This is an error in the debugging information which causes type
504 pck__float_array___XUP to be defined twice, and the second time,
505 it is defined as a typedef of a typedef.
506
507 This is on the fringe of legality as far as debugging information is
508 concerned, and certainly unexpected. But it is easy to handle these
509 situations correctly, so we can afford to be lenient in this case. */
510
511static struct type *
512ada_typedef_target_type (struct type *type)
513{
514 while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
515 type = TYPE_TARGET_TYPE (type);
516 return type;
517}
518
41d27058
JB
519/* Given DECODED_NAME a string holding a symbol name in its
520 decoded form (ie using the Ada dotted notation), returns
521 its unqualified name. */
522
523static const char *
524ada_unqualified_name (const char *decoded_name)
525{
2b0f535a
JB
526 const char *result;
527
528 /* If the decoded name starts with '<', it means that the encoded
529 name does not follow standard naming conventions, and thus that
530 it is not your typical Ada symbol name. Trying to unqualify it
531 is therefore pointless and possibly erroneous. */
532 if (decoded_name[0] == '<')
533 return decoded_name;
534
535 result = strrchr (decoded_name, '.');
41d27058
JB
536 if (result != NULL)
537 result++; /* Skip the dot... */
538 else
539 result = decoded_name;
540
541 return result;
542}
543
39e7af3e 544/* Return a string starting with '<', followed by STR, and '>'. */
41d27058 545
39e7af3e 546static std::string
41d27058
JB
547add_angle_brackets (const char *str)
548{
39e7af3e 549 return string_printf ("<%s>", str);
41d27058 550}
96d887e8 551
67cb5b2d 552static const char *
4c4b4cd2
PH
553ada_get_gdb_completer_word_break_characters (void)
554{
555 return ada_completer_word_break_characters;
556}
557
e79af960
JB
558/* Print an array element index using the Ada syntax. */
559
560static void
561ada_print_array_index (struct value *index_value, struct ui_file *stream,
79a45b7d 562 const struct value_print_options *options)
e79af960 563{
79a45b7d 564 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
565 fprintf_filtered (stream, " => ");
566}
567
e2b7af72
JB
568/* la_watch_location_expression for Ada. */
569
570gdb::unique_xmalloc_ptr<char>
571ada_watch_location_expression (struct type *type, CORE_ADDR addr)
572{
573 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
574 std::string name = type_to_string (type);
575 return gdb::unique_xmalloc_ptr<char>
576 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
577}
578
f27cf670 579/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 580 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 581 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 582
f27cf670
AS
583void *
584grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 585{
d2e4a39e
AS
586 if (*size < min_size)
587 {
588 *size *= 2;
589 if (*size < min_size)
4c4b4cd2 590 *size = min_size;
f27cf670 591 vect = xrealloc (vect, *size * element_size);
d2e4a39e 592 }
f27cf670 593 return vect;
14f9c5c9
AS
594}
595
596/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 597 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
598
599static int
ebf56fd3 600field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
601{
602 int len = strlen (target);
5b4ee69b 603
d2e4a39e 604 return
4c4b4cd2
PH
605 (strncmp (field_name, target, len) == 0
606 && (field_name[len] == '\0'
61012eef 607 || (startswith (field_name + len, "___")
76a01679
JB
608 && strcmp (field_name + strlen (field_name) - 6,
609 "___XVN") != 0)));
14f9c5c9
AS
610}
611
612
872c8b51
JB
613/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
614 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
615 and return its index. This function also handles fields whose name
616 have ___ suffixes because the compiler sometimes alters their name
617 by adding such a suffix to represent fields with certain constraints.
618 If the field could not be found, return a negative number if
619 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
620
621int
622ada_get_field_index (const struct type *type, const char *field_name,
623 int maybe_missing)
624{
625 int fieldno;
872c8b51
JB
626 struct type *struct_type = check_typedef ((struct type *) type);
627
628 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
629 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
630 return fieldno;
631
632 if (!maybe_missing)
323e0a4a 633 error (_("Unable to find field %s in struct %s. Aborting"),
872c8b51 634 field_name, TYPE_NAME (struct_type));
4c4b4cd2
PH
635
636 return -1;
637}
638
639/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
640
641int
d2e4a39e 642ada_name_prefix_len (const char *name)
14f9c5c9
AS
643{
644 if (name == NULL)
645 return 0;
d2e4a39e 646 else
14f9c5c9 647 {
d2e4a39e 648 const char *p = strstr (name, "___");
5b4ee69b 649
14f9c5c9 650 if (p == NULL)
4c4b4cd2 651 return strlen (name);
14f9c5c9 652 else
4c4b4cd2 653 return p - name;
14f9c5c9
AS
654 }
655}
656
4c4b4cd2
PH
657/* Return non-zero if SUFFIX is a suffix of STR.
658 Return zero if STR is null. */
659
14f9c5c9 660static int
d2e4a39e 661is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
662{
663 int len1, len2;
5b4ee69b 664
14f9c5c9
AS
665 if (str == NULL)
666 return 0;
667 len1 = strlen (str);
668 len2 = strlen (suffix);
4c4b4cd2 669 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
670}
671
4c4b4cd2
PH
672/* The contents of value VAL, treated as a value of type TYPE. The
673 result is an lval in memory if VAL is. */
14f9c5c9 674
d2e4a39e 675static struct value *
4c4b4cd2 676coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 677{
61ee279c 678 type = ada_check_typedef (type);
df407dfe 679 if (value_type (val) == type)
4c4b4cd2 680 return val;
d2e4a39e 681 else
14f9c5c9 682 {
4c4b4cd2
PH
683 struct value *result;
684
685 /* Make sure that the object size is not unreasonable before
686 trying to allocate some memory for it. */
c1b5a1a6 687 ada_ensure_varsize_limit (type);
4c4b4cd2 688
41e8491f
JK
689 if (value_lazy (val)
690 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
691 result = allocate_value_lazy (type);
692 else
693 {
694 result = allocate_value (type);
9a0dc9e3 695 value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
41e8491f 696 }
74bcbdf3 697 set_value_component_location (result, val);
9bbda503
AC
698 set_value_bitsize (result, value_bitsize (val));
699 set_value_bitpos (result, value_bitpos (val));
42ae5230 700 set_value_address (result, value_address (val));
14f9c5c9
AS
701 return result;
702 }
703}
704
fc1a4b47
AC
705static const gdb_byte *
706cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
707{
708 if (valaddr == NULL)
709 return NULL;
710 else
711 return valaddr + offset;
712}
713
714static CORE_ADDR
ebf56fd3 715cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
716{
717 if (address == 0)
718 return 0;
d2e4a39e 719 else
14f9c5c9
AS
720 return address + offset;
721}
722
4c4b4cd2
PH
723/* Issue a warning (as for the definition of warning in utils.c, but
724 with exactly one argument rather than ...), unless the limit on the
725 number of warnings has passed during the evaluation of the current
726 expression. */
a2249542 727
77109804
AC
728/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
729 provided by "complaint". */
a0b31db1 730static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 731
14f9c5c9 732static void
a2249542 733lim_warning (const char *format, ...)
14f9c5c9 734{
a2249542 735 va_list args;
a2249542 736
5b4ee69b 737 va_start (args, format);
4c4b4cd2
PH
738 warnings_issued += 1;
739 if (warnings_issued <= warning_limit)
a2249542
MK
740 vwarning (format, args);
741
742 va_end (args);
4c4b4cd2
PH
743}
744
714e53ab
PH
745/* Issue an error if the size of an object of type T is unreasonable,
746 i.e. if it would be a bad idea to allocate a value of this type in
747 GDB. */
748
c1b5a1a6
JB
749void
750ada_ensure_varsize_limit (const struct type *type)
714e53ab
PH
751{
752 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 753 error (_("object size is larger than varsize-limit"));
714e53ab
PH
754}
755
0963b4bd 756/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 757static LONGEST
c3e5cd34 758max_of_size (int size)
4c4b4cd2 759{
76a01679 760 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 761
76a01679 762 return top_bit | (top_bit - 1);
4c4b4cd2
PH
763}
764
0963b4bd 765/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 766static LONGEST
c3e5cd34 767min_of_size (int size)
4c4b4cd2 768{
c3e5cd34 769 return -max_of_size (size) - 1;
4c4b4cd2
PH
770}
771
0963b4bd 772/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 773static ULONGEST
c3e5cd34 774umax_of_size (int size)
4c4b4cd2 775{
76a01679 776 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 777
76a01679 778 return top_bit | (top_bit - 1);
4c4b4cd2
PH
779}
780
0963b4bd 781/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
782static LONGEST
783max_of_type (struct type *t)
4c4b4cd2 784{
c3e5cd34
PH
785 if (TYPE_UNSIGNED (t))
786 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
787 else
788 return max_of_size (TYPE_LENGTH (t));
789}
790
0963b4bd 791/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
792static LONGEST
793min_of_type (struct type *t)
794{
795 if (TYPE_UNSIGNED (t))
796 return 0;
797 else
798 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
799}
800
801/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
802LONGEST
803ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 804{
c3345124 805 type = resolve_dynamic_type (type, NULL, 0);
76a01679 806 switch (TYPE_CODE (type))
4c4b4cd2
PH
807 {
808 case TYPE_CODE_RANGE:
690cc4eb 809 return TYPE_HIGH_BOUND (type);
4c4b4cd2 810 case TYPE_CODE_ENUM:
14e75d8e 811 return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
690cc4eb
PH
812 case TYPE_CODE_BOOL:
813 return 1;
814 case TYPE_CODE_CHAR:
76a01679 815 case TYPE_CODE_INT:
690cc4eb 816 return max_of_type (type);
4c4b4cd2 817 default:
43bbcdc2 818 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
819 }
820}
821
14e75d8e 822/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
823LONGEST
824ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 825{
c3345124 826 type = resolve_dynamic_type (type, NULL, 0);
76a01679 827 switch (TYPE_CODE (type))
4c4b4cd2
PH
828 {
829 case TYPE_CODE_RANGE:
690cc4eb 830 return TYPE_LOW_BOUND (type);
4c4b4cd2 831 case TYPE_CODE_ENUM:
14e75d8e 832 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
833 case TYPE_CODE_BOOL:
834 return 0;
835 case TYPE_CODE_CHAR:
76a01679 836 case TYPE_CODE_INT:
690cc4eb 837 return min_of_type (type);
4c4b4cd2 838 default:
43bbcdc2 839 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
840 }
841}
842
843/* The identity on non-range types. For range types, the underlying
76a01679 844 non-range scalar type. */
4c4b4cd2
PH
845
846static struct type *
18af8284 847get_base_type (struct type *type)
4c4b4cd2
PH
848{
849 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
850 {
76a01679
JB
851 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
852 return type;
4c4b4cd2
PH
853 type = TYPE_TARGET_TYPE (type);
854 }
855 return type;
14f9c5c9 856}
41246937
JB
857
858/* Return a decoded version of the given VALUE. This means returning
859 a value whose type is obtained by applying all the GNAT-specific
860 encondings, making the resulting type a static but standard description
861 of the initial type. */
862
863struct value *
864ada_get_decoded_value (struct value *value)
865{
866 struct type *type = ada_check_typedef (value_type (value));
867
868 if (ada_is_array_descriptor_type (type)
869 || (ada_is_constrained_packed_array_type (type)
870 && TYPE_CODE (type) != TYPE_CODE_PTR))
871 {
872 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */
873 value = ada_coerce_to_simple_array_ptr (value);
874 else
875 value = ada_coerce_to_simple_array (value);
876 }
877 else
878 value = ada_to_fixed_value (value);
879
880 return value;
881}
882
883/* Same as ada_get_decoded_value, but with the given TYPE.
884 Because there is no associated actual value for this type,
885 the resulting type might be a best-effort approximation in
886 the case of dynamic types. */
887
888struct type *
889ada_get_decoded_type (struct type *type)
890{
891 type = to_static_fixed_type (type);
892 if (ada_is_constrained_packed_array_type (type))
893 type = ada_coerce_to_simple_array_type (type);
894 return type;
895}
896
4c4b4cd2 897\f
76a01679 898
4c4b4cd2 899 /* Language Selection */
14f9c5c9
AS
900
901/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 902 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 903
14f9c5c9 904enum language
ccefe4c4 905ada_update_initial_language (enum language lang)
14f9c5c9 906{
d2e4a39e 907 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
3b7344d5 908 (struct objfile *) NULL).minsym != NULL)
4c4b4cd2 909 return language_ada;
14f9c5c9
AS
910
911 return lang;
912}
96d887e8
PH
913
914/* If the main procedure is written in Ada, then return its name.
915 The result is good until the next call. Return NULL if the main
916 procedure doesn't appear to be in Ada. */
917
918char *
919ada_main_name (void)
920{
3b7344d5 921 struct bound_minimal_symbol msym;
e83e4e24 922 static gdb::unique_xmalloc_ptr<char> main_program_name;
6c038f32 923
96d887e8
PH
924 /* For Ada, the name of the main procedure is stored in a specific
925 string constant, generated by the binder. Look for that symbol,
926 extract its address, and then read that string. If we didn't find
927 that string, then most probably the main procedure is not written
928 in Ada. */
929 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
930
3b7344d5 931 if (msym.minsym != NULL)
96d887e8 932 {
f9bc20b9
JB
933 CORE_ADDR main_program_name_addr;
934 int err_code;
935
77e371c0 936 main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 937 if (main_program_name_addr == 0)
323e0a4a 938 error (_("Invalid address for Ada main program name."));
96d887e8 939
f9bc20b9
JB
940 target_read_string (main_program_name_addr, &main_program_name,
941 1024, &err_code);
942
943 if (err_code != 0)
944 return NULL;
e83e4e24 945 return main_program_name.get ();
96d887e8
PH
946 }
947
948 /* The main procedure doesn't seem to be in Ada. */
949 return NULL;
950}
14f9c5c9 951\f
4c4b4cd2 952 /* Symbols */
d2e4a39e 953
4c4b4cd2
PH
954/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
955 of NULLs. */
14f9c5c9 956
d2e4a39e
AS
957const struct ada_opname_map ada_opname_table[] = {
958 {"Oadd", "\"+\"", BINOP_ADD},
959 {"Osubtract", "\"-\"", BINOP_SUB},
960 {"Omultiply", "\"*\"", BINOP_MUL},
961 {"Odivide", "\"/\"", BINOP_DIV},
962 {"Omod", "\"mod\"", BINOP_MOD},
963 {"Orem", "\"rem\"", BINOP_REM},
964 {"Oexpon", "\"**\"", BINOP_EXP},
965 {"Olt", "\"<\"", BINOP_LESS},
966 {"Ole", "\"<=\"", BINOP_LEQ},
967 {"Ogt", "\">\"", BINOP_GTR},
968 {"Oge", "\">=\"", BINOP_GEQ},
969 {"Oeq", "\"=\"", BINOP_EQUAL},
970 {"One", "\"/=\"", BINOP_NOTEQUAL},
971 {"Oand", "\"and\"", BINOP_BITWISE_AND},
972 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
973 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
974 {"Oconcat", "\"&\"", BINOP_CONCAT},
975 {"Oabs", "\"abs\"", UNOP_ABS},
976 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
977 {"Oadd", "\"+\"", UNOP_PLUS},
978 {"Osubtract", "\"-\"", UNOP_NEG},
979 {NULL, NULL}
14f9c5c9
AS
980};
981
b5ec771e
PA
982/* The "encoded" form of DECODED, according to GNAT conventions. The
983 result is valid until the next call to ada_encode. If
984 THROW_ERRORS, throw an error if invalid operator name is found.
985 Otherwise, return NULL in that case. */
4c4b4cd2 986
b5ec771e
PA
987static char *
988ada_encode_1 (const char *decoded, bool throw_errors)
14f9c5c9 989{
4c4b4cd2
PH
990 static char *encoding_buffer = NULL;
991 static size_t encoding_buffer_size = 0;
d2e4a39e 992 const char *p;
14f9c5c9 993 int k;
d2e4a39e 994
4c4b4cd2 995 if (decoded == NULL)
14f9c5c9
AS
996 return NULL;
997
4c4b4cd2
PH
998 GROW_VECT (encoding_buffer, encoding_buffer_size,
999 2 * strlen (decoded) + 10);
14f9c5c9
AS
1000
1001 k = 0;
4c4b4cd2 1002 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 1003 {
cdc7bb92 1004 if (*p == '.')
4c4b4cd2
PH
1005 {
1006 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
1007 k += 2;
1008 }
14f9c5c9 1009 else if (*p == '"')
4c4b4cd2
PH
1010 {
1011 const struct ada_opname_map *mapping;
1012
1013 for (mapping = ada_opname_table;
1265e4aa 1014 mapping->encoded != NULL
61012eef 1015 && !startswith (p, mapping->decoded); mapping += 1)
4c4b4cd2
PH
1016 ;
1017 if (mapping->encoded == NULL)
b5ec771e
PA
1018 {
1019 if (throw_errors)
1020 error (_("invalid Ada operator name: %s"), p);
1021 else
1022 return NULL;
1023 }
4c4b4cd2
PH
1024 strcpy (encoding_buffer + k, mapping->encoded);
1025 k += strlen (mapping->encoded);
1026 break;
1027 }
d2e4a39e 1028 else
4c4b4cd2
PH
1029 {
1030 encoding_buffer[k] = *p;
1031 k += 1;
1032 }
14f9c5c9
AS
1033 }
1034
4c4b4cd2
PH
1035 encoding_buffer[k] = '\0';
1036 return encoding_buffer;
14f9c5c9
AS
1037}
1038
b5ec771e
PA
1039/* The "encoded" form of DECODED, according to GNAT conventions.
1040 The result is valid until the next call to ada_encode. */
1041
1042char *
1043ada_encode (const char *decoded)
1044{
1045 return ada_encode_1 (decoded, true);
1046}
1047
14f9c5c9 1048/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
1049 quotes, unfolded, but with the quotes stripped away. Result good
1050 to next call. */
1051
d2e4a39e
AS
1052char *
1053ada_fold_name (const char *name)
14f9c5c9 1054{
d2e4a39e 1055 static char *fold_buffer = NULL;
14f9c5c9
AS
1056 static size_t fold_buffer_size = 0;
1057
1058 int len = strlen (name);
d2e4a39e 1059 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
1060
1061 if (name[0] == '\'')
1062 {
d2e4a39e
AS
1063 strncpy (fold_buffer, name + 1, len - 2);
1064 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
1065 }
1066 else
1067 {
1068 int i;
5b4ee69b 1069
14f9c5c9 1070 for (i = 0; i <= len; i += 1)
4c4b4cd2 1071 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
1072 }
1073
1074 return fold_buffer;
1075}
1076
529cad9c
PH
1077/* Return nonzero if C is either a digit or a lowercase alphabet character. */
1078
1079static int
1080is_lower_alphanum (const char c)
1081{
1082 return (isdigit (c) || (isalpha (c) && islower (c)));
1083}
1084
c90092fe
JB
1085/* ENCODED is the linkage name of a symbol and LEN contains its length.
1086 This function saves in LEN the length of that same symbol name but
1087 without either of these suffixes:
29480c32
JB
1088 . .{DIGIT}+
1089 . ${DIGIT}+
1090 . ___{DIGIT}+
1091 . __{DIGIT}+.
c90092fe 1092
29480c32
JB
1093 These are suffixes introduced by the compiler for entities such as
1094 nested subprogram for instance, in order to avoid name clashes.
1095 They do not serve any purpose for the debugger. */
1096
1097static void
1098ada_remove_trailing_digits (const char *encoded, int *len)
1099{
1100 if (*len > 1 && isdigit (encoded[*len - 1]))
1101 {
1102 int i = *len - 2;
5b4ee69b 1103
29480c32
JB
1104 while (i > 0 && isdigit (encoded[i]))
1105 i--;
1106 if (i >= 0 && encoded[i] == '.')
1107 *len = i;
1108 else if (i >= 0 && encoded[i] == '$')
1109 *len = i;
61012eef 1110 else if (i >= 2 && startswith (encoded + i - 2, "___"))
29480c32 1111 *len = i - 2;
61012eef 1112 else if (i >= 1 && startswith (encoded + i - 1, "__"))
29480c32
JB
1113 *len = i - 1;
1114 }
1115}
1116
1117/* Remove the suffix introduced by the compiler for protected object
1118 subprograms. */
1119
1120static void
1121ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1122{
1123 /* Remove trailing N. */
1124
1125 /* Protected entry subprograms are broken into two
1126 separate subprograms: The first one is unprotected, and has
1127 a 'N' suffix; the second is the protected version, and has
0963b4bd 1128 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1129 the protection. Since the P subprograms are internally generated,
1130 we leave these names undecoded, giving the user a clue that this
1131 entity is internal. */
1132
1133 if (*len > 1
1134 && encoded[*len - 1] == 'N'
1135 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1136 *len = *len - 1;
1137}
1138
69fadcdf
JB
1139/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
1140
1141static void
1142ada_remove_Xbn_suffix (const char *encoded, int *len)
1143{
1144 int i = *len - 1;
1145
1146 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1147 i--;
1148
1149 if (encoded[i] != 'X')
1150 return;
1151
1152 if (i == 0)
1153 return;
1154
1155 if (isalnum (encoded[i-1]))
1156 *len = i;
1157}
1158
29480c32
JB
1159/* If ENCODED follows the GNAT entity encoding conventions, then return
1160 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1161 replaced by ENCODED.
14f9c5c9 1162
4c4b4cd2 1163 The resulting string is valid until the next call of ada_decode.
29480c32 1164 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
1165 is returned. */
1166
1167const char *
1168ada_decode (const char *encoded)
14f9c5c9
AS
1169{
1170 int i, j;
1171 int len0;
d2e4a39e 1172 const char *p;
4c4b4cd2 1173 char *decoded;
14f9c5c9 1174 int at_start_name;
4c4b4cd2
PH
1175 static char *decoding_buffer = NULL;
1176 static size_t decoding_buffer_size = 0;
d2e4a39e 1177
0d81f350
JG
1178 /* With function descriptors on PPC64, the value of a symbol named
1179 ".FN", if it exists, is the entry point of the function "FN". */
1180 if (encoded[0] == '.')
1181 encoded += 1;
1182
29480c32
JB
1183 /* The name of the Ada main procedure starts with "_ada_".
1184 This prefix is not part of the decoded name, so skip this part
1185 if we see this prefix. */
61012eef 1186 if (startswith (encoded, "_ada_"))
4c4b4cd2 1187 encoded += 5;
14f9c5c9 1188
29480c32
JB
1189 /* If the name starts with '_', then it is not a properly encoded
1190 name, so do not attempt to decode it. Similarly, if the name
1191 starts with '<', the name should not be decoded. */
4c4b4cd2 1192 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1193 goto Suppress;
1194
4c4b4cd2 1195 len0 = strlen (encoded);
4c4b4cd2 1196
29480c32
JB
1197 ada_remove_trailing_digits (encoded, &len0);
1198 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1199
4c4b4cd2
PH
1200 /* Remove the ___X.* suffix if present. Do not forget to verify that
1201 the suffix is located before the current "end" of ENCODED. We want
1202 to avoid re-matching parts of ENCODED that have previously been
1203 marked as discarded (by decrementing LEN0). */
1204 p = strstr (encoded, "___");
1205 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1206 {
1207 if (p[3] == 'X')
4c4b4cd2 1208 len0 = p - encoded;
14f9c5c9 1209 else
4c4b4cd2 1210 goto Suppress;
14f9c5c9 1211 }
4c4b4cd2 1212
29480c32
JB
1213 /* Remove any trailing TKB suffix. It tells us that this symbol
1214 is for the body of a task, but that information does not actually
1215 appear in the decoded name. */
1216
61012eef 1217 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
14f9c5c9 1218 len0 -= 3;
76a01679 1219
a10967fa
JB
1220 /* Remove any trailing TB suffix. The TB suffix is slightly different
1221 from the TKB suffix because it is used for non-anonymous task
1222 bodies. */
1223
61012eef 1224 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
a10967fa
JB
1225 len0 -= 2;
1226
29480c32
JB
1227 /* Remove trailing "B" suffixes. */
1228 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1229
61012eef 1230 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
14f9c5c9
AS
1231 len0 -= 1;
1232
4c4b4cd2 1233 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1234
4c4b4cd2
PH
1235 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1236 decoded = decoding_buffer;
14f9c5c9 1237
29480c32
JB
1238 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1239
4c4b4cd2 1240 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1241 {
4c4b4cd2
PH
1242 i = len0 - 2;
1243 while ((i >= 0 && isdigit (encoded[i]))
1244 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1245 i -= 1;
1246 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1247 len0 = i - 1;
1248 else if (encoded[i] == '$')
1249 len0 = i;
d2e4a39e 1250 }
14f9c5c9 1251
29480c32
JB
1252 /* The first few characters that are not alphabetic are not part
1253 of any encoding we use, so we can copy them over verbatim. */
1254
4c4b4cd2
PH
1255 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1256 decoded[j] = encoded[i];
14f9c5c9
AS
1257
1258 at_start_name = 1;
1259 while (i < len0)
1260 {
29480c32 1261 /* Is this a symbol function? */
4c4b4cd2
PH
1262 if (at_start_name && encoded[i] == 'O')
1263 {
1264 int k;
5b4ee69b 1265
4c4b4cd2
PH
1266 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1267 {
1268 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1269 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1270 op_len - 1) == 0)
1271 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1272 {
1273 strcpy (decoded + j, ada_opname_table[k].decoded);
1274 at_start_name = 0;
1275 i += op_len;
1276 j += strlen (ada_opname_table[k].decoded);
1277 break;
1278 }
1279 }
1280 if (ada_opname_table[k].encoded != NULL)
1281 continue;
1282 }
14f9c5c9
AS
1283 at_start_name = 0;
1284
529cad9c
PH
1285 /* Replace "TK__" with "__", which will eventually be translated
1286 into "." (just below). */
1287
61012eef 1288 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
4c4b4cd2 1289 i += 2;
529cad9c 1290
29480c32
JB
1291 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1292 be translated into "." (just below). These are internal names
1293 generated for anonymous blocks inside which our symbol is nested. */
1294
1295 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1296 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1297 && isdigit (encoded [i+4]))
1298 {
1299 int k = i + 5;
1300
1301 while (k < len0 && isdigit (encoded[k]))
1302 k++; /* Skip any extra digit. */
1303
1304 /* Double-check that the "__B_{DIGITS}+" sequence we found
1305 is indeed followed by "__". */
1306 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1307 i = k;
1308 }
1309
529cad9c
PH
1310 /* Remove _E{DIGITS}+[sb] */
1311
1312 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1313 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1314 one implements the actual entry code, and has a suffix following
1315 the convention above; the second one implements the barrier and
1316 uses the same convention as above, except that the 'E' is replaced
1317 by a 'B'.
1318
1319 Just as above, we do not decode the name of barrier functions
1320 to give the user a clue that the code he is debugging has been
1321 internally generated. */
1322
1323 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1324 && isdigit (encoded[i+2]))
1325 {
1326 int k = i + 3;
1327
1328 while (k < len0 && isdigit (encoded[k]))
1329 k++;
1330
1331 if (k < len0
1332 && (encoded[k] == 'b' || encoded[k] == 's'))
1333 {
1334 k++;
1335 /* Just as an extra precaution, make sure that if this
1336 suffix is followed by anything else, it is a '_'.
1337 Otherwise, we matched this sequence by accident. */
1338 if (k == len0
1339 || (k < len0 && encoded[k] == '_'))
1340 i = k;
1341 }
1342 }
1343
1344 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1345 the GNAT front-end in protected object subprograms. */
1346
1347 if (i < len0 + 3
1348 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1349 {
1350 /* Backtrack a bit up until we reach either the begining of
1351 the encoded name, or "__". Make sure that we only find
1352 digits or lowercase characters. */
1353 const char *ptr = encoded + i - 1;
1354
1355 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1356 ptr--;
1357 if (ptr < encoded
1358 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1359 i++;
1360 }
1361
4c4b4cd2
PH
1362 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1363 {
29480c32
JB
1364 /* This is a X[bn]* sequence not separated from the previous
1365 part of the name with a non-alpha-numeric character (in other
1366 words, immediately following an alpha-numeric character), then
1367 verify that it is placed at the end of the encoded name. If
1368 not, then the encoding is not valid and we should abort the
1369 decoding. Otherwise, just skip it, it is used in body-nested
1370 package names. */
4c4b4cd2
PH
1371 do
1372 i += 1;
1373 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1374 if (i < len0)
1375 goto Suppress;
1376 }
cdc7bb92 1377 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1378 {
29480c32 1379 /* Replace '__' by '.'. */
4c4b4cd2
PH
1380 decoded[j] = '.';
1381 at_start_name = 1;
1382 i += 2;
1383 j += 1;
1384 }
14f9c5c9 1385 else
4c4b4cd2 1386 {
29480c32
JB
1387 /* It's a character part of the decoded name, so just copy it
1388 over. */
4c4b4cd2
PH
1389 decoded[j] = encoded[i];
1390 i += 1;
1391 j += 1;
1392 }
14f9c5c9 1393 }
4c4b4cd2 1394 decoded[j] = '\000';
14f9c5c9 1395
29480c32
JB
1396 /* Decoded names should never contain any uppercase character.
1397 Double-check this, and abort the decoding if we find one. */
1398
4c4b4cd2
PH
1399 for (i = 0; decoded[i] != '\0'; i += 1)
1400 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1401 goto Suppress;
1402
4c4b4cd2
PH
1403 if (strcmp (decoded, encoded) == 0)
1404 return encoded;
1405 else
1406 return decoded;
14f9c5c9
AS
1407
1408Suppress:
4c4b4cd2
PH
1409 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1410 decoded = decoding_buffer;
1411 if (encoded[0] == '<')
1412 strcpy (decoded, encoded);
14f9c5c9 1413 else
88c15c34 1414 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1415 return decoded;
1416
1417}
1418
1419/* Table for keeping permanent unique copies of decoded names. Once
1420 allocated, names in this table are never released. While this is a
1421 storage leak, it should not be significant unless there are massive
1422 changes in the set of decoded names in successive versions of a
1423 symbol table loaded during a single session. */
1424static struct htab *decoded_names_store;
1425
1426/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1427 in the language-specific part of GSYMBOL, if it has not been
1428 previously computed. Tries to save the decoded name in the same
1429 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1430 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1431 GSYMBOL).
4c4b4cd2
PH
1432 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1433 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1434 when a decoded name is cached in it. */
4c4b4cd2 1435
45e6c716 1436const char *
f85f34ed 1437ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1438{
f85f34ed
TT
1439 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1440 const char **resultp =
615b3f62 1441 &gsymbol->language_specific.demangled_name;
5b4ee69b 1442
f85f34ed 1443 if (!gsymbol->ada_mangled)
4c4b4cd2
PH
1444 {
1445 const char *decoded = ada_decode (gsymbol->name);
f85f34ed 1446 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1447
f85f34ed 1448 gsymbol->ada_mangled = 1;
5b4ee69b 1449
f85f34ed 1450 if (obstack != NULL)
224c3ddb
SM
1451 *resultp
1452 = (const char *) obstack_copy0 (obstack, decoded, strlen (decoded));
f85f34ed 1453 else
76a01679 1454 {
f85f34ed
TT
1455 /* Sometimes, we can't find a corresponding objfile, in
1456 which case, we put the result on the heap. Since we only
1457 decode when needed, we hope this usually does not cause a
1458 significant memory leak (FIXME). */
1459
76a01679
JB
1460 char **slot = (char **) htab_find_slot (decoded_names_store,
1461 decoded, INSERT);
5b4ee69b 1462
76a01679
JB
1463 if (*slot == NULL)
1464 *slot = xstrdup (decoded);
1465 *resultp = *slot;
1466 }
4c4b4cd2 1467 }
14f9c5c9 1468
4c4b4cd2
PH
1469 return *resultp;
1470}
76a01679 1471
2c0b251b 1472static char *
76a01679 1473ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1474{
1475 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1476}
1477
8b302db8
TT
1478/* Implement la_sniff_from_mangled_name for Ada. */
1479
1480static int
1481ada_sniff_from_mangled_name (const char *mangled, char **out)
1482{
1483 const char *demangled = ada_decode (mangled);
1484
1485 *out = NULL;
1486
1487 if (demangled != mangled && demangled != NULL && demangled[0] != '<')
1488 {
1489 /* Set the gsymbol language to Ada, but still return 0.
1490 Two reasons for that:
1491
1492 1. For Ada, we prefer computing the symbol's decoded name
1493 on the fly rather than pre-compute it, in order to save
1494 memory (Ada projects are typically very large).
1495
1496 2. There are some areas in the definition of the GNAT
1497 encoding where, with a bit of bad luck, we might be able
1498 to decode a non-Ada symbol, generating an incorrect
1499 demangled name (Eg: names ending with "TB" for instance
1500 are identified as task bodies and so stripped from
1501 the decoded name returned).
1502
1503 Returning 1, here, but not setting *DEMANGLED, helps us get a
1504 little bit of the best of both worlds. Because we're last,
1505 we should not affect any of the other languages that were
1506 able to demangle the symbol before us; we get to correctly
1507 tag Ada symbols as such; and even if we incorrectly tagged a
1508 non-Ada symbol, which should be rare, any routing through the
1509 Ada language should be transparent (Ada tries to behave much
1510 like C/C++ with non-Ada symbols). */
1511 return 1;
1512 }
1513
1514 return 0;
1515}
1516
14f9c5c9 1517\f
d2e4a39e 1518
4c4b4cd2 1519 /* Arrays */
14f9c5c9 1520
28c85d6c
JB
1521/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1522 generated by the GNAT compiler to describe the index type used
1523 for each dimension of an array, check whether it follows the latest
1524 known encoding. If not, fix it up to conform to the latest encoding.
1525 Otherwise, do nothing. This function also does nothing if
1526 INDEX_DESC_TYPE is NULL.
1527
1528 The GNAT encoding used to describle the array index type evolved a bit.
1529 Initially, the information would be provided through the name of each
1530 field of the structure type only, while the type of these fields was
1531 described as unspecified and irrelevant. The debugger was then expected
1532 to perform a global type lookup using the name of that field in order
1533 to get access to the full index type description. Because these global
1534 lookups can be very expensive, the encoding was later enhanced to make
1535 the global lookup unnecessary by defining the field type as being
1536 the full index type description.
1537
1538 The purpose of this routine is to allow us to support older versions
1539 of the compiler by detecting the use of the older encoding, and by
1540 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1541 we essentially replace each field's meaningless type by the associated
1542 index subtype). */
1543
1544void
1545ada_fixup_array_indexes_type (struct type *index_desc_type)
1546{
1547 int i;
1548
1549 if (index_desc_type == NULL)
1550 return;
1551 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1552
1553 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1554 to check one field only, no need to check them all). If not, return
1555 now.
1556
1557 If our INDEX_DESC_TYPE was generated using the older encoding,
1558 the field type should be a meaningless integer type whose name
1559 is not equal to the field name. */
1560 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1561 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1562 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1563 return;
1564
1565 /* Fixup each field of INDEX_DESC_TYPE. */
1566 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1567 {
0d5cff50 1568 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1569 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1570
1571 if (raw_type)
1572 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1573 }
1574}
1575
4c4b4cd2 1576/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1577
a121b7c1 1578static const char *bound_name[] = {
d2e4a39e 1579 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1580 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1581};
1582
1583/* Maximum number of array dimensions we are prepared to handle. */
1584
4c4b4cd2 1585#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1586
14f9c5c9 1587
4c4b4cd2
PH
1588/* The desc_* routines return primitive portions of array descriptors
1589 (fat pointers). */
14f9c5c9
AS
1590
1591/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1592 level of indirection, if needed. */
1593
d2e4a39e
AS
1594static struct type *
1595desc_base_type (struct type *type)
14f9c5c9
AS
1596{
1597 if (type == NULL)
1598 return NULL;
61ee279c 1599 type = ada_check_typedef (type);
720d1a40
JB
1600 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1601 type = ada_typedef_target_type (type);
1602
1265e4aa
JB
1603 if (type != NULL
1604 && (TYPE_CODE (type) == TYPE_CODE_PTR
1605 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1606 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1607 else
1608 return type;
1609}
1610
4c4b4cd2
PH
1611/* True iff TYPE indicates a "thin" array pointer type. */
1612
14f9c5c9 1613static int
d2e4a39e 1614is_thin_pntr (struct type *type)
14f9c5c9 1615{
d2e4a39e 1616 return
14f9c5c9
AS
1617 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1618 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1619}
1620
4c4b4cd2
PH
1621/* The descriptor type for thin pointer type TYPE. */
1622
d2e4a39e
AS
1623static struct type *
1624thin_descriptor_type (struct type *type)
14f9c5c9 1625{
d2e4a39e 1626 struct type *base_type = desc_base_type (type);
5b4ee69b 1627
14f9c5c9
AS
1628 if (base_type == NULL)
1629 return NULL;
1630 if (is_suffix (ada_type_name (base_type), "___XVE"))
1631 return base_type;
d2e4a39e 1632 else
14f9c5c9 1633 {
d2e4a39e 1634 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1635
14f9c5c9 1636 if (alt_type == NULL)
4c4b4cd2 1637 return base_type;
14f9c5c9 1638 else
4c4b4cd2 1639 return alt_type;
14f9c5c9
AS
1640 }
1641}
1642
4c4b4cd2
PH
1643/* A pointer to the array data for thin-pointer value VAL. */
1644
d2e4a39e
AS
1645static struct value *
1646thin_data_pntr (struct value *val)
14f9c5c9 1647{
828292f2 1648 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1649 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1650
556bdfd4
UW
1651 data_type = lookup_pointer_type (data_type);
1652
14f9c5c9 1653 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1654 return value_cast (data_type, value_copy (val));
d2e4a39e 1655 else
42ae5230 1656 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1657}
1658
4c4b4cd2
PH
1659/* True iff TYPE indicates a "thick" array pointer type. */
1660
14f9c5c9 1661static int
d2e4a39e 1662is_thick_pntr (struct type *type)
14f9c5c9
AS
1663{
1664 type = desc_base_type (type);
1665 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1666 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1667}
1668
4c4b4cd2
PH
1669/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1670 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1671
d2e4a39e
AS
1672static struct type *
1673desc_bounds_type (struct type *type)
14f9c5c9 1674{
d2e4a39e 1675 struct type *r;
14f9c5c9
AS
1676
1677 type = desc_base_type (type);
1678
1679 if (type == NULL)
1680 return NULL;
1681 else if (is_thin_pntr (type))
1682 {
1683 type = thin_descriptor_type (type);
1684 if (type == NULL)
4c4b4cd2 1685 return NULL;
14f9c5c9
AS
1686 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1687 if (r != NULL)
61ee279c 1688 return ada_check_typedef (r);
14f9c5c9
AS
1689 }
1690 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1691 {
1692 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1693 if (r != NULL)
61ee279c 1694 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1695 }
1696 return NULL;
1697}
1698
1699/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1700 one, a pointer to its bounds data. Otherwise NULL. */
1701
d2e4a39e
AS
1702static struct value *
1703desc_bounds (struct value *arr)
14f9c5c9 1704{
df407dfe 1705 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1706
d2e4a39e 1707 if (is_thin_pntr (type))
14f9c5c9 1708 {
d2e4a39e 1709 struct type *bounds_type =
4c4b4cd2 1710 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1711 LONGEST addr;
1712
4cdfadb1 1713 if (bounds_type == NULL)
323e0a4a 1714 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1715
1716 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1717 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1718 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1719 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1720 addr = value_as_long (arr);
d2e4a39e 1721 else
42ae5230 1722 addr = value_address (arr);
14f9c5c9 1723
d2e4a39e 1724 return
4c4b4cd2
PH
1725 value_from_longest (lookup_pointer_type (bounds_type),
1726 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1727 }
1728
1729 else if (is_thick_pntr (type))
05e522ef
JB
1730 {
1731 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1732 _("Bad GNAT array descriptor"));
1733 struct type *p_bounds_type = value_type (p_bounds);
1734
1735 if (p_bounds_type
1736 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1737 {
1738 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1739
1740 if (TYPE_STUB (target_type))
1741 p_bounds = value_cast (lookup_pointer_type
1742 (ada_check_typedef (target_type)),
1743 p_bounds);
1744 }
1745 else
1746 error (_("Bad GNAT array descriptor"));
1747
1748 return p_bounds;
1749 }
14f9c5c9
AS
1750 else
1751 return NULL;
1752}
1753
4c4b4cd2
PH
1754/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1755 position of the field containing the address of the bounds data. */
1756
14f9c5c9 1757static int
d2e4a39e 1758fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1759{
1760 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1761}
1762
1763/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1764 size of the field containing the address of the bounds data. */
1765
14f9c5c9 1766static int
d2e4a39e 1767fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1768{
1769 type = desc_base_type (type);
1770
d2e4a39e 1771 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1772 return TYPE_FIELD_BITSIZE (type, 1);
1773 else
61ee279c 1774 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1775}
1776
4c4b4cd2 1777/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1778 pointer to one, the type of its array data (a array-with-no-bounds type);
1779 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1780 data. */
4c4b4cd2 1781
d2e4a39e 1782static struct type *
556bdfd4 1783desc_data_target_type (struct type *type)
14f9c5c9
AS
1784{
1785 type = desc_base_type (type);
1786
4c4b4cd2 1787 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1788 if (is_thin_pntr (type))
556bdfd4 1789 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1790 else if (is_thick_pntr (type))
556bdfd4
UW
1791 {
1792 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1793
1794 if (data_type
1795 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1796 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1797 }
1798
1799 return NULL;
14f9c5c9
AS
1800}
1801
1802/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1803 its array data. */
4c4b4cd2 1804
d2e4a39e
AS
1805static struct value *
1806desc_data (struct value *arr)
14f9c5c9 1807{
df407dfe 1808 struct type *type = value_type (arr);
5b4ee69b 1809
14f9c5c9
AS
1810 if (is_thin_pntr (type))
1811 return thin_data_pntr (arr);
1812 else if (is_thick_pntr (type))
d2e4a39e 1813 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1814 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1815 else
1816 return NULL;
1817}
1818
1819
1820/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1821 position of the field containing the address of the data. */
1822
14f9c5c9 1823static int
d2e4a39e 1824fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1825{
1826 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1827}
1828
1829/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1830 size of the field containing the address of the data. */
1831
14f9c5c9 1832static int
d2e4a39e 1833fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1834{
1835 type = desc_base_type (type);
1836
1837 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1838 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1839 else
14f9c5c9
AS
1840 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1841}
1842
4c4b4cd2 1843/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1844 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1845 bound, if WHICH is 1. The first bound is I=1. */
1846
d2e4a39e
AS
1847static struct value *
1848desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1849{
d2e4a39e 1850 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1851 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1852}
1853
1854/* If BOUNDS is an array-bounds structure type, return the bit position
1855 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1856 bound, if WHICH is 1. The first bound is I=1. */
1857
14f9c5c9 1858static int
d2e4a39e 1859desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1860{
d2e4a39e 1861 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1862}
1863
1864/* If BOUNDS is an array-bounds structure type, return the bit field size
1865 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1866 bound, if WHICH is 1. The first bound is I=1. */
1867
76a01679 1868static int
d2e4a39e 1869desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1870{
1871 type = desc_base_type (type);
1872
d2e4a39e
AS
1873 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1874 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1875 else
1876 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1877}
1878
1879/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1880 Ith bound (numbering from 1). Otherwise, NULL. */
1881
d2e4a39e
AS
1882static struct type *
1883desc_index_type (struct type *type, int i)
14f9c5c9
AS
1884{
1885 type = desc_base_type (type);
1886
1887 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1888 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1889 else
14f9c5c9
AS
1890 return NULL;
1891}
1892
4c4b4cd2
PH
1893/* The number of index positions in the array-bounds type TYPE.
1894 Return 0 if TYPE is NULL. */
1895
14f9c5c9 1896static int
d2e4a39e 1897desc_arity (struct type *type)
14f9c5c9
AS
1898{
1899 type = desc_base_type (type);
1900
1901 if (type != NULL)
1902 return TYPE_NFIELDS (type) / 2;
1903 return 0;
1904}
1905
4c4b4cd2
PH
1906/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1907 an array descriptor type (representing an unconstrained array
1908 type). */
1909
76a01679
JB
1910static int
1911ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1912{
1913 if (type == NULL)
1914 return 0;
61ee279c 1915 type = ada_check_typedef (type);
4c4b4cd2 1916 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1917 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1918}
1919
52ce6436 1920/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1921 * to one. */
52ce6436 1922
2c0b251b 1923static int
52ce6436
PH
1924ada_is_array_type (struct type *type)
1925{
1926 while (type != NULL
1927 && (TYPE_CODE (type) == TYPE_CODE_PTR
1928 || TYPE_CODE (type) == TYPE_CODE_REF))
1929 type = TYPE_TARGET_TYPE (type);
1930 return ada_is_direct_array_type (type);
1931}
1932
4c4b4cd2 1933/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1934
14f9c5c9 1935int
4c4b4cd2 1936ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1937{
1938 if (type == NULL)
1939 return 0;
61ee279c 1940 type = ada_check_typedef (type);
14f9c5c9 1941 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2 1942 || (TYPE_CODE (type) == TYPE_CODE_PTR
b0dd7688
JB
1943 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1944 == TYPE_CODE_ARRAY));
14f9c5c9
AS
1945}
1946
4c4b4cd2
PH
1947/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1948
14f9c5c9 1949int
4c4b4cd2 1950ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1951{
556bdfd4 1952 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1953
1954 if (type == NULL)
1955 return 0;
61ee279c 1956 type = ada_check_typedef (type);
556bdfd4
UW
1957 return (data_type != NULL
1958 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1959 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1960}
1961
1962/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1963 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1964 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1965 is still needed. */
1966
14f9c5c9 1967int
ebf56fd3 1968ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1969{
d2e4a39e 1970 return
14f9c5c9
AS
1971 type != NULL
1972 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1973 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1974 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1975 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1976}
1977
1978
4c4b4cd2 1979/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1980 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1981 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1982 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1983 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1984 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1985 a descriptor. */
d2e4a39e
AS
1986struct type *
1987ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1988{
ad82864c
JB
1989 if (ada_is_constrained_packed_array_type (value_type (arr)))
1990 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1991
df407dfe
AC
1992 if (!ada_is_array_descriptor_type (value_type (arr)))
1993 return value_type (arr);
d2e4a39e
AS
1994
1995 if (!bounds)
ad82864c
JB
1996 {
1997 struct type *array_type =
1998 ada_check_typedef (desc_data_target_type (value_type (arr)));
1999
2000 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
2001 TYPE_FIELD_BITSIZE (array_type, 0) =
2002 decode_packed_array_bitsize (value_type (arr));
2003
2004 return array_type;
2005 }
14f9c5c9
AS
2006 else
2007 {
d2e4a39e 2008 struct type *elt_type;
14f9c5c9 2009 int arity;
d2e4a39e 2010 struct value *descriptor;
14f9c5c9 2011
df407dfe
AC
2012 elt_type = ada_array_element_type (value_type (arr), -1);
2013 arity = ada_array_arity (value_type (arr));
14f9c5c9 2014
d2e4a39e 2015 if (elt_type == NULL || arity == 0)
df407dfe 2016 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
2017
2018 descriptor = desc_bounds (arr);
d2e4a39e 2019 if (value_as_long (descriptor) == 0)
4c4b4cd2 2020 return NULL;
d2e4a39e 2021 while (arity > 0)
4c4b4cd2 2022 {
e9bb382b
UW
2023 struct type *range_type = alloc_type_copy (value_type (arr));
2024 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
2025 struct value *low = desc_one_bound (descriptor, arity, 0);
2026 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 2027
5b4ee69b 2028 arity -= 1;
0c9c3474
SA
2029 create_static_range_type (range_type, value_type (low),
2030 longest_to_int (value_as_long (low)),
2031 longest_to_int (value_as_long (high)));
4c4b4cd2 2032 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
2033
2034 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
2035 {
2036 /* We need to store the element packed bitsize, as well as
2037 recompute the array size, because it was previously
2038 computed based on the unpacked element size. */
2039 LONGEST lo = value_as_long (low);
2040 LONGEST hi = value_as_long (high);
2041
2042 TYPE_FIELD_BITSIZE (elt_type, 0) =
2043 decode_packed_array_bitsize (value_type (arr));
2044 /* If the array has no element, then the size is already
2045 zero, and does not need to be recomputed. */
2046 if (lo < hi)
2047 {
2048 int array_bitsize =
2049 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2050
2051 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2052 }
2053 }
4c4b4cd2 2054 }
14f9c5c9
AS
2055
2056 return lookup_pointer_type (elt_type);
2057 }
2058}
2059
2060/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
2061 Otherwise, returns either a standard GDB array with bounds set
2062 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2063 GDB array. Returns NULL if ARR is a null fat pointer. */
2064
d2e4a39e
AS
2065struct value *
2066ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 2067{
df407dfe 2068 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2069 {
d2e4a39e 2070 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 2071
14f9c5c9 2072 if (arrType == NULL)
4c4b4cd2 2073 return NULL;
14f9c5c9
AS
2074 return value_cast (arrType, value_copy (desc_data (arr)));
2075 }
ad82864c
JB
2076 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2077 return decode_constrained_packed_array (arr);
14f9c5c9
AS
2078 else
2079 return arr;
2080}
2081
2082/* If ARR does not represent an array, returns ARR unchanged.
2083 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
2084 be ARR itself if it already is in the proper form). */
2085
720d1a40 2086struct value *
d2e4a39e 2087ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 2088{
df407dfe 2089 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2090 {
d2e4a39e 2091 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 2092
14f9c5c9 2093 if (arrVal == NULL)
323e0a4a 2094 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 2095 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
2096 return value_ind (arrVal);
2097 }
ad82864c
JB
2098 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2099 return decode_constrained_packed_array (arr);
d2e4a39e 2100 else
14f9c5c9
AS
2101 return arr;
2102}
2103
2104/* If TYPE represents a GNAT array type, return it translated to an
2105 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
2106 packing). For other types, is the identity. */
2107
d2e4a39e
AS
2108struct type *
2109ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 2110{
ad82864c
JB
2111 if (ada_is_constrained_packed_array_type (type))
2112 return decode_constrained_packed_array_type (type);
17280b9f
UW
2113
2114 if (ada_is_array_descriptor_type (type))
556bdfd4 2115 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
2116
2117 return type;
14f9c5c9
AS
2118}
2119
4c4b4cd2
PH
2120/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
2121
ad82864c
JB
2122static int
2123ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
2124{
2125 if (type == NULL)
2126 return 0;
4c4b4cd2 2127 type = desc_base_type (type);
61ee279c 2128 type = ada_check_typedef (type);
d2e4a39e 2129 return
14f9c5c9
AS
2130 ada_type_name (type) != NULL
2131 && strstr (ada_type_name (type), "___XP") != NULL;
2132}
2133
ad82864c
JB
2134/* Non-zero iff TYPE represents a standard GNAT constrained
2135 packed-array type. */
2136
2137int
2138ada_is_constrained_packed_array_type (struct type *type)
2139{
2140 return ada_is_packed_array_type (type)
2141 && !ada_is_array_descriptor_type (type);
2142}
2143
2144/* Non-zero iff TYPE represents an array descriptor for a
2145 unconstrained packed-array type. */
2146
2147static int
2148ada_is_unconstrained_packed_array_type (struct type *type)
2149{
2150 return ada_is_packed_array_type (type)
2151 && ada_is_array_descriptor_type (type);
2152}
2153
2154/* Given that TYPE encodes a packed array type (constrained or unconstrained),
2155 return the size of its elements in bits. */
2156
2157static long
2158decode_packed_array_bitsize (struct type *type)
2159{
0d5cff50
DE
2160 const char *raw_name;
2161 const char *tail;
ad82864c
JB
2162 long bits;
2163
720d1a40
JB
2164 /* Access to arrays implemented as fat pointers are encoded as a typedef
2165 of the fat pointer type. We need the name of the fat pointer type
2166 to do the decoding, so strip the typedef layer. */
2167 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2168 type = ada_typedef_target_type (type);
2169
2170 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2171 if (!raw_name)
2172 raw_name = ada_type_name (desc_base_type (type));
2173
2174 if (!raw_name)
2175 return 0;
2176
2177 tail = strstr (raw_name, "___XP");
720d1a40 2178 gdb_assert (tail != NULL);
ad82864c
JB
2179
2180 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2181 {
2182 lim_warning
2183 (_("could not understand bit size information on packed array"));
2184 return 0;
2185 }
2186
2187 return bits;
2188}
2189
14f9c5c9
AS
2190/* Given that TYPE is a standard GDB array type with all bounds filled
2191 in, and that the element size of its ultimate scalar constituents
2192 (that is, either its elements, or, if it is an array of arrays, its
2193 elements' elements, etc.) is *ELT_BITS, return an identical type,
2194 but with the bit sizes of its elements (and those of any
2195 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2196 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2197 in bits.
2198
2199 Note that, for arrays whose index type has an XA encoding where
2200 a bound references a record discriminant, getting that discriminant,
2201 and therefore the actual value of that bound, is not possible
2202 because none of the given parameters gives us access to the record.
2203 This function assumes that it is OK in the context where it is being
2204 used to return an array whose bounds are still dynamic and where
2205 the length is arbitrary. */
4c4b4cd2 2206
d2e4a39e 2207static struct type *
ad82864c 2208constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2209{
d2e4a39e
AS
2210 struct type *new_elt_type;
2211 struct type *new_type;
99b1c762
JB
2212 struct type *index_type_desc;
2213 struct type *index_type;
14f9c5c9
AS
2214 LONGEST low_bound, high_bound;
2215
61ee279c 2216 type = ada_check_typedef (type);
14f9c5c9
AS
2217 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2218 return type;
2219
99b1c762
JB
2220 index_type_desc = ada_find_parallel_type (type, "___XA");
2221 if (index_type_desc)
2222 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2223 NULL);
2224 else
2225 index_type = TYPE_INDEX_TYPE (type);
2226
e9bb382b 2227 new_type = alloc_type_copy (type);
ad82864c
JB
2228 new_elt_type =
2229 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2230 elt_bits);
99b1c762 2231 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9
AS
2232 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2233 TYPE_NAME (new_type) = ada_type_name (type);
2234
4a46959e
JB
2235 if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2236 && is_dynamic_type (check_typedef (index_type)))
2237 || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
14f9c5c9
AS
2238 low_bound = high_bound = 0;
2239 if (high_bound < low_bound)
2240 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2241 else
14f9c5c9
AS
2242 {
2243 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2244 TYPE_LENGTH (new_type) =
4c4b4cd2 2245 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2246 }
2247
876cecd0 2248 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2249 return new_type;
2250}
2251
ad82864c
JB
2252/* The array type encoded by TYPE, where
2253 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2254
d2e4a39e 2255static struct type *
ad82864c 2256decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2257{
0d5cff50 2258 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2259 char *name;
0d5cff50 2260 const char *tail;
d2e4a39e 2261 struct type *shadow_type;
14f9c5c9 2262 long bits;
14f9c5c9 2263
727e3d2e
JB
2264 if (!raw_name)
2265 raw_name = ada_type_name (desc_base_type (type));
2266
2267 if (!raw_name)
2268 return NULL;
2269
2270 name = (char *) alloca (strlen (raw_name) + 1);
2271 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2272 type = desc_base_type (type);
2273
14f9c5c9
AS
2274 memcpy (name, raw_name, tail - raw_name);
2275 name[tail - raw_name] = '\000';
2276
b4ba55a1
JB
2277 shadow_type = ada_find_parallel_type_with_name (type, name);
2278
2279 if (shadow_type == NULL)
14f9c5c9 2280 {
323e0a4a 2281 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2282 return NULL;
2283 }
f168693b 2284 shadow_type = check_typedef (shadow_type);
14f9c5c9
AS
2285
2286 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2287 {
0963b4bd
MS
2288 lim_warning (_("could not understand bounds "
2289 "information on packed array"));
14f9c5c9
AS
2290 return NULL;
2291 }
d2e4a39e 2292
ad82864c
JB
2293 bits = decode_packed_array_bitsize (type);
2294 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2295}
2296
ad82864c
JB
2297/* Given that ARR is a struct value *indicating a GNAT constrained packed
2298 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2299 standard GDB array type except that the BITSIZEs of the array
2300 target types are set to the number of bits in each element, and the
4c4b4cd2 2301 type length is set appropriately. */
14f9c5c9 2302
d2e4a39e 2303static struct value *
ad82864c 2304decode_constrained_packed_array (struct value *arr)
14f9c5c9 2305{
4c4b4cd2 2306 struct type *type;
14f9c5c9 2307
11aa919a
PMR
2308 /* If our value is a pointer, then dereference it. Likewise if
2309 the value is a reference. Make sure that this operation does not
2310 cause the target type to be fixed, as this would indirectly cause
2311 this array to be decoded. The rest of the routine assumes that
2312 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2313 and "value_ind" routines to perform the dereferencing, as opposed
2314 to using "ada_coerce_ref" or "ada_value_ind". */
2315 arr = coerce_ref (arr);
828292f2 2316 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
284614f0 2317 arr = value_ind (arr);
4c4b4cd2 2318
ad82864c 2319 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2320 if (type == NULL)
2321 {
323e0a4a 2322 error (_("can't unpack array"));
14f9c5c9
AS
2323 return NULL;
2324 }
61ee279c 2325
50810684 2326 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2327 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2328 {
2329 /* This is a (right-justified) modular type representing a packed
2330 array with no wrapper. In order to interpret the value through
2331 the (left-justified) packed array type we just built, we must
2332 first left-justify it. */
2333 int bit_size, bit_pos;
2334 ULONGEST mod;
2335
df407dfe 2336 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2337 bit_size = 0;
2338 while (mod > 0)
2339 {
2340 bit_size += 1;
2341 mod >>= 1;
2342 }
df407dfe 2343 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2344 arr = ada_value_primitive_packed_val (arr, NULL,
2345 bit_pos / HOST_CHAR_BIT,
2346 bit_pos % HOST_CHAR_BIT,
2347 bit_size,
2348 type);
2349 }
2350
4c4b4cd2 2351 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2352}
2353
2354
2355/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2356 given in IND. ARR must be a simple array. */
14f9c5c9 2357
d2e4a39e
AS
2358static struct value *
2359value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2360{
2361 int i;
2362 int bits, elt_off, bit_off;
2363 long elt_total_bit_offset;
d2e4a39e
AS
2364 struct type *elt_type;
2365 struct value *v;
14f9c5c9
AS
2366
2367 bits = 0;
2368 elt_total_bit_offset = 0;
df407dfe 2369 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2370 for (i = 0; i < arity; i += 1)
14f9c5c9 2371 {
d2e4a39e 2372 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2373 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2374 error
0963b4bd
MS
2375 (_("attempt to do packed indexing of "
2376 "something other than a packed array"));
14f9c5c9 2377 else
4c4b4cd2
PH
2378 {
2379 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2380 LONGEST lowerbound, upperbound;
2381 LONGEST idx;
2382
2383 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2384 {
323e0a4a 2385 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2386 lowerbound = upperbound = 0;
2387 }
2388
3cb382c9 2389 idx = pos_atr (ind[i]);
4c4b4cd2 2390 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2391 lim_warning (_("packed array index %ld out of bounds"),
2392 (long) idx);
4c4b4cd2
PH
2393 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2394 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2395 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2396 }
14f9c5c9
AS
2397 }
2398 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2399 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2400
2401 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2402 bits, elt_type);
14f9c5c9
AS
2403 return v;
2404}
2405
4c4b4cd2 2406/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2407
2408static int
d2e4a39e 2409has_negatives (struct type *type)
14f9c5c9 2410{
d2e4a39e
AS
2411 switch (TYPE_CODE (type))
2412 {
2413 default:
2414 return 0;
2415 case TYPE_CODE_INT:
2416 return !TYPE_UNSIGNED (type);
2417 case TYPE_CODE_RANGE:
2418 return TYPE_LOW_BOUND (type) < 0;
2419 }
14f9c5c9 2420}
d2e4a39e 2421
f93fca70 2422/* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
5b639dea 2423 unpack that data into UNPACKED. UNPACKED_LEN is the size in bytes of
f93fca70 2424 the unpacked buffer.
14f9c5c9 2425
5b639dea
JB
2426 The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2427 enough to contain at least BIT_OFFSET bits. If not, an error is raised.
2428
f93fca70
JB
2429 IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2430 zero otherwise.
14f9c5c9 2431
f93fca70 2432 IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
a1c95e6b 2433
f93fca70
JB
2434 IS_SCALAR is nonzero if the data corresponds to a signed type. */
2435
2436static void
2437ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2438 gdb_byte *unpacked, int unpacked_len,
2439 int is_big_endian, int is_signed_type,
2440 int is_scalar)
2441{
a1c95e6b
JB
2442 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2443 int src_idx; /* Index into the source area */
2444 int src_bytes_left; /* Number of source bytes left to process. */
2445 int srcBitsLeft; /* Number of source bits left to move */
2446 int unusedLS; /* Number of bits in next significant
2447 byte of source that are unused */
2448
a1c95e6b
JB
2449 int unpacked_idx; /* Index into the unpacked buffer */
2450 int unpacked_bytes_left; /* Number of bytes left to set in unpacked. */
2451
4c4b4cd2 2452 unsigned long accum; /* Staging area for bits being transferred */
a1c95e6b 2453 int accumSize; /* Number of meaningful bits in accum */
14f9c5c9 2454 unsigned char sign;
a1c95e6b 2455
4c4b4cd2
PH
2456 /* Transmit bytes from least to most significant; delta is the direction
2457 the indices move. */
f93fca70 2458 int delta = is_big_endian ? -1 : 1;
14f9c5c9 2459
5b639dea
JB
2460 /* Make sure that unpacked is large enough to receive the BIT_SIZE
2461 bits from SRC. .*/
2462 if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2463 error (_("Cannot unpack %d bits into buffer of %d bytes"),
2464 bit_size, unpacked_len);
2465
14f9c5c9 2466 srcBitsLeft = bit_size;
086ca51f 2467 src_bytes_left = src_len;
f93fca70 2468 unpacked_bytes_left = unpacked_len;
14f9c5c9 2469 sign = 0;
f93fca70
JB
2470
2471 if (is_big_endian)
14f9c5c9 2472 {
086ca51f 2473 src_idx = src_len - 1;
f93fca70
JB
2474 if (is_signed_type
2475 && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2476 sign = ~0;
d2e4a39e
AS
2477
2478 unusedLS =
4c4b4cd2
PH
2479 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2480 % HOST_CHAR_BIT;
14f9c5c9 2481
f93fca70
JB
2482 if (is_scalar)
2483 {
2484 accumSize = 0;
2485 unpacked_idx = unpacked_len - 1;
2486 }
2487 else
2488 {
4c4b4cd2
PH
2489 /* Non-scalar values must be aligned at a byte boundary... */
2490 accumSize =
2491 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2492 /* ... And are placed at the beginning (most-significant) bytes
2493 of the target. */
086ca51f
JB
2494 unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2495 unpacked_bytes_left = unpacked_idx + 1;
f93fca70 2496 }
14f9c5c9 2497 }
d2e4a39e 2498 else
14f9c5c9
AS
2499 {
2500 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2501
086ca51f 2502 src_idx = unpacked_idx = 0;
14f9c5c9
AS
2503 unusedLS = bit_offset;
2504 accumSize = 0;
2505
f93fca70 2506 if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2507 sign = ~0;
14f9c5c9 2508 }
d2e4a39e 2509
14f9c5c9 2510 accum = 0;
086ca51f 2511 while (src_bytes_left > 0)
14f9c5c9
AS
2512 {
2513 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2514 part of the value. */
d2e4a39e 2515 unsigned int unusedMSMask =
4c4b4cd2
PH
2516 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2517 1;
2518 /* Sign-extend bits for this byte. */
14f9c5c9 2519 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2520
d2e4a39e 2521 accum |=
086ca51f 2522 (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2523 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2524 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2 2525 {
db297a65 2526 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
4c4b4cd2
PH
2527 accumSize -= HOST_CHAR_BIT;
2528 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2529 unpacked_bytes_left -= 1;
2530 unpacked_idx += delta;
4c4b4cd2 2531 }
14f9c5c9
AS
2532 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2533 unusedLS = 0;
086ca51f
JB
2534 src_bytes_left -= 1;
2535 src_idx += delta;
14f9c5c9 2536 }
086ca51f 2537 while (unpacked_bytes_left > 0)
14f9c5c9
AS
2538 {
2539 accum |= sign << accumSize;
db297a65 2540 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
14f9c5c9 2541 accumSize -= HOST_CHAR_BIT;
9cd4d857
JB
2542 if (accumSize < 0)
2543 accumSize = 0;
14f9c5c9 2544 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2545 unpacked_bytes_left -= 1;
2546 unpacked_idx += delta;
14f9c5c9 2547 }
f93fca70
JB
2548}
2549
2550/* Create a new value of type TYPE from the contents of OBJ starting
2551 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2552 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2553 assigning through the result will set the field fetched from.
2554 VALADDR is ignored unless OBJ is NULL, in which case,
2555 VALADDR+OFFSET must address the start of storage containing the
2556 packed value. The value returned in this case is never an lval.
2557 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2558
2559struct value *
2560ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2561 long offset, int bit_offset, int bit_size,
2562 struct type *type)
2563{
2564 struct value *v;
bfb1c796 2565 const gdb_byte *src; /* First byte containing data to unpack */
f93fca70 2566 gdb_byte *unpacked;
220475ed 2567 const int is_scalar = is_scalar_type (type);
d0a9e810 2568 const int is_big_endian = gdbarch_bits_big_endian (get_type_arch (type));
d5722aa2 2569 gdb::byte_vector staging;
f93fca70
JB
2570
2571 type = ada_check_typedef (type);
2572
d0a9e810 2573 if (obj == NULL)
bfb1c796 2574 src = valaddr + offset;
d0a9e810 2575 else
bfb1c796 2576 src = value_contents (obj) + offset;
d0a9e810
JB
2577
2578 if (is_dynamic_type (type))
2579 {
2580 /* The length of TYPE might by dynamic, so we need to resolve
2581 TYPE in order to know its actual size, which we then use
2582 to create the contents buffer of the value we return.
2583 The difficulty is that the data containing our object is
2584 packed, and therefore maybe not at a byte boundary. So, what
2585 we do, is unpack the data into a byte-aligned buffer, and then
2586 use that buffer as our object's value for resolving the type. */
d5722aa2
PA
2587 int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2588 staging.resize (staging_len);
d0a9e810
JB
2589
2590 ada_unpack_from_contents (src, bit_offset, bit_size,
d5722aa2 2591 staging.data (), staging.size (),
d0a9e810
JB
2592 is_big_endian, has_negatives (type),
2593 is_scalar);
d5722aa2 2594 type = resolve_dynamic_type (type, staging.data (), 0);
0cafa88c
JB
2595 if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2596 {
2597 /* This happens when the length of the object is dynamic,
2598 and is actually smaller than the space reserved for it.
2599 For instance, in an array of variant records, the bit_size
2600 we're given is the array stride, which is constant and
2601 normally equal to the maximum size of its element.
2602 But, in reality, each element only actually spans a portion
2603 of that stride. */
2604 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2605 }
d0a9e810
JB
2606 }
2607
f93fca70
JB
2608 if (obj == NULL)
2609 {
2610 v = allocate_value (type);
bfb1c796 2611 src = valaddr + offset;
f93fca70
JB
2612 }
2613 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2614 {
0cafa88c 2615 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
bfb1c796 2616 gdb_byte *buf;
0cafa88c 2617
f93fca70 2618 v = value_at (type, value_address (obj) + offset);
bfb1c796
PA
2619 buf = (gdb_byte *) alloca (src_len);
2620 read_memory (value_address (v), buf, src_len);
2621 src = buf;
f93fca70
JB
2622 }
2623 else
2624 {
2625 v = allocate_value (type);
bfb1c796 2626 src = value_contents (obj) + offset;
f93fca70
JB
2627 }
2628
2629 if (obj != NULL)
2630 {
2631 long new_offset = offset;
2632
2633 set_value_component_location (v, obj);
2634 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2635 set_value_bitsize (v, bit_size);
2636 if (value_bitpos (v) >= HOST_CHAR_BIT)
2637 {
2638 ++new_offset;
2639 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2640 }
2641 set_value_offset (v, new_offset);
2642
2643 /* Also set the parent value. This is needed when trying to
2644 assign a new value (in inferior memory). */
2645 set_value_parent (v, obj);
2646 }
2647 else
2648 set_value_bitsize (v, bit_size);
bfb1c796 2649 unpacked = value_contents_writeable (v);
f93fca70
JB
2650
2651 if (bit_size == 0)
2652 {
2653 memset (unpacked, 0, TYPE_LENGTH (type));
2654 return v;
2655 }
2656
d5722aa2 2657 if (staging.size () == TYPE_LENGTH (type))
f93fca70 2658 {
d0a9e810
JB
2659 /* Small short-cut: If we've unpacked the data into a buffer
2660 of the same size as TYPE's length, then we can reuse that,
2661 instead of doing the unpacking again. */
d5722aa2 2662 memcpy (unpacked, staging.data (), staging.size ());
f93fca70 2663 }
d0a9e810
JB
2664 else
2665 ada_unpack_from_contents (src, bit_offset, bit_size,
2666 unpacked, TYPE_LENGTH (type),
2667 is_big_endian, has_negatives (type), is_scalar);
f93fca70 2668
14f9c5c9
AS
2669 return v;
2670}
d2e4a39e 2671
14f9c5c9
AS
2672/* Store the contents of FROMVAL into the location of TOVAL.
2673 Return a new value with the location of TOVAL and contents of
2674 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2675 floating-point or non-scalar types. */
14f9c5c9 2676
d2e4a39e
AS
2677static struct value *
2678ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2679{
df407dfe
AC
2680 struct type *type = value_type (toval);
2681 int bits = value_bitsize (toval);
14f9c5c9 2682
52ce6436
PH
2683 toval = ada_coerce_ref (toval);
2684 fromval = ada_coerce_ref (fromval);
2685
2686 if (ada_is_direct_array_type (value_type (toval)))
2687 toval = ada_coerce_to_simple_array (toval);
2688 if (ada_is_direct_array_type (value_type (fromval)))
2689 fromval = ada_coerce_to_simple_array (fromval);
2690
88e3b34b 2691 if (!deprecated_value_modifiable (toval))
323e0a4a 2692 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2693
d2e4a39e 2694 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2695 && bits > 0
d2e4a39e 2696 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2697 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2698 {
df407dfe
AC
2699 int len = (value_bitpos (toval)
2700 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2701 int from_size;
224c3ddb 2702 gdb_byte *buffer = (gdb_byte *) alloca (len);
d2e4a39e 2703 struct value *val;
42ae5230 2704 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2705
2706 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2707 fromval = value_cast (type, fromval);
14f9c5c9 2708
52ce6436 2709 read_memory (to_addr, buffer, len);
aced2898
PH
2710 from_size = value_bitsize (fromval);
2711 if (from_size == 0)
2712 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2713 if (gdbarch_bits_big_endian (get_type_arch (type)))
a99bc3d2
JB
2714 copy_bitwise (buffer, value_bitpos (toval),
2715 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2716 else
a99bc3d2
JB
2717 copy_bitwise (buffer, value_bitpos (toval),
2718 value_contents (fromval), 0, bits, 0);
972daa01 2719 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2720
14f9c5c9 2721 val = value_copy (toval);
0fd88904 2722 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2723 TYPE_LENGTH (type));
04624583 2724 deprecated_set_value_type (val, type);
d2e4a39e 2725
14f9c5c9
AS
2726 return val;
2727 }
2728
2729 return value_assign (toval, fromval);
2730}
2731
2732
7c512744
JB
2733/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2734 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2735 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2736 COMPONENT, and not the inferior's memory. The current contents
2737 of COMPONENT are ignored.
2738
2739 Although not part of the initial design, this function also works
2740 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2741 had a null address, and COMPONENT had an address which is equal to
2742 its offset inside CONTAINER. */
2743
52ce6436
PH
2744static void
2745value_assign_to_component (struct value *container, struct value *component,
2746 struct value *val)
2747{
2748 LONGEST offset_in_container =
42ae5230 2749 (LONGEST) (value_address (component) - value_address (container));
7c512744 2750 int bit_offset_in_container =
52ce6436
PH
2751 value_bitpos (component) - value_bitpos (container);
2752 int bits;
7c512744 2753
52ce6436
PH
2754 val = value_cast (value_type (component), val);
2755
2756 if (value_bitsize (component) == 0)
2757 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2758 else
2759 bits = value_bitsize (component);
2760
50810684 2761 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2a62dfa9
JB
2762 {
2763 int src_offset;
2764
2765 if (is_scalar_type (check_typedef (value_type (component))))
2766 src_offset
2767 = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2768 else
2769 src_offset = 0;
a99bc3d2
JB
2770 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2771 value_bitpos (container) + bit_offset_in_container,
2772 value_contents (val), src_offset, bits, 1);
2a62dfa9 2773 }
52ce6436 2774 else
a99bc3d2
JB
2775 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2776 value_bitpos (container) + bit_offset_in_container,
2777 value_contents (val), 0, bits, 0);
7c512744
JB
2778}
2779
736ade86
XR
2780/* Determine if TYPE is an access to an unconstrained array. */
2781
d91e9ea8 2782bool
736ade86
XR
2783ada_is_access_to_unconstrained_array (struct type *type)
2784{
2785 return (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
2786 && is_thick_pntr (ada_typedef_target_type (type)));
2787}
2788
4c4b4cd2
PH
2789/* The value of the element of array ARR at the ARITY indices given in IND.
2790 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2791 thereto. */
2792
d2e4a39e
AS
2793struct value *
2794ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2795{
2796 int k;
d2e4a39e
AS
2797 struct value *elt;
2798 struct type *elt_type;
14f9c5c9
AS
2799
2800 elt = ada_coerce_to_simple_array (arr);
2801
df407dfe 2802 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2803 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2804 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2805 return value_subscript_packed (elt, arity, ind);
2806
2807 for (k = 0; k < arity; k += 1)
2808 {
b9c50e9a
XR
2809 struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2810
14f9c5c9 2811 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2812 error (_("too many subscripts (%d expected)"), k);
b9c50e9a 2813
2497b498 2814 elt = value_subscript (elt, pos_atr (ind[k]));
b9c50e9a
XR
2815
2816 if (ada_is_access_to_unconstrained_array (saved_elt_type)
2817 && TYPE_CODE (value_type (elt)) != TYPE_CODE_TYPEDEF)
2818 {
2819 /* The element is a typedef to an unconstrained array,
2820 except that the value_subscript call stripped the
2821 typedef layer. The typedef layer is GNAT's way to
2822 specify that the element is, at the source level, an
2823 access to the unconstrained array, rather than the
2824 unconstrained array. So, we need to restore that
2825 typedef layer, which we can do by forcing the element's
2826 type back to its original type. Otherwise, the returned
2827 value is going to be printed as the array, rather
2828 than as an access. Another symptom of the same issue
2829 would be that an expression trying to dereference the
2830 element would also be improperly rejected. */
2831 deprecated_set_value_type (elt, saved_elt_type);
2832 }
2833
2834 elt_type = ada_check_typedef (value_type (elt));
14f9c5c9 2835 }
b9c50e9a 2836
14f9c5c9
AS
2837 return elt;
2838}
2839
deede10c
JB
2840/* Assuming ARR is a pointer to a GDB array, the value of the element
2841 of *ARR at the ARITY indices given in IND.
919e6dbe
PMR
2842 Does not read the entire array into memory.
2843
2844 Note: Unlike what one would expect, this function is used instead of
2845 ada_value_subscript for basically all non-packed array types. The reason
2846 for this is that a side effect of doing our own pointer arithmetics instead
2847 of relying on value_subscript is that there is no implicit typedef peeling.
2848 This is important for arrays of array accesses, where it allows us to
2849 preserve the fact that the array's element is an array access, where the
2850 access part os encoded in a typedef layer. */
14f9c5c9 2851
2c0b251b 2852static struct value *
deede10c 2853ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2854{
2855 int k;
919e6dbe 2856 struct value *array_ind = ada_value_ind (arr);
deede10c 2857 struct type *type
919e6dbe
PMR
2858 = check_typedef (value_enclosing_type (array_ind));
2859
2860 if (TYPE_CODE (type) == TYPE_CODE_ARRAY
2861 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2862 return value_subscript_packed (array_ind, arity, ind);
14f9c5c9
AS
2863
2864 for (k = 0; k < arity; k += 1)
2865 {
2866 LONGEST lwb, upb;
aa715135 2867 struct value *lwb_value;
14f9c5c9
AS
2868
2869 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2870 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2871 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2872 value_copy (arr));
14f9c5c9 2873 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
aa715135
JG
2874 lwb_value = value_from_longest (value_type(ind[k]), lwb);
2875 arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
14f9c5c9
AS
2876 type = TYPE_TARGET_TYPE (type);
2877 }
2878
2879 return value_ind (arr);
2880}
2881
0b5d8877 2882/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2883 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2884 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2885 this array is LOW, as per Ada rules. */
0b5d8877 2886static struct value *
f5938064
JG
2887ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2888 int low, int high)
0b5d8877 2889{
b0dd7688 2890 struct type *type0 = ada_check_typedef (type);
aa715135 2891 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
0c9c3474 2892 struct type *index_type
aa715135 2893 = create_static_range_type (NULL, base_index_type, low, high);
9fe561ab
JB
2894 struct type *slice_type = create_array_type_with_stride
2895 (NULL, TYPE_TARGET_TYPE (type0), index_type,
2896 get_dyn_prop (DYN_PROP_BYTE_STRIDE, type0),
2897 TYPE_FIELD_BITSIZE (type0, 0));
aa715135
JG
2898 int base_low = ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2899 LONGEST base_low_pos, low_pos;
2900 CORE_ADDR base;
2901
2902 if (!discrete_position (base_index_type, low, &low_pos)
2903 || !discrete_position (base_index_type, base_low, &base_low_pos))
2904 {
2905 warning (_("unable to get positions in slice, use bounds instead"));
2906 low_pos = low;
2907 base_low_pos = base_low;
2908 }
5b4ee69b 2909
aa715135
JG
2910 base = value_as_address (array_ptr)
2911 + ((low_pos - base_low_pos)
2912 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
f5938064 2913 return value_at_lazy (slice_type, base);
0b5d8877
PH
2914}
2915
2916
2917static struct value *
2918ada_value_slice (struct value *array, int low, int high)
2919{
b0dd7688 2920 struct type *type = ada_check_typedef (value_type (array));
aa715135 2921 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
0c9c3474
SA
2922 struct type *index_type
2923 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
9fe561ab
JB
2924 struct type *slice_type = create_array_type_with_stride
2925 (NULL, TYPE_TARGET_TYPE (type), index_type,
2926 get_dyn_prop (DYN_PROP_BYTE_STRIDE, type),
2927 TYPE_FIELD_BITSIZE (type, 0));
aa715135 2928 LONGEST low_pos, high_pos;
5b4ee69b 2929
aa715135
JG
2930 if (!discrete_position (base_index_type, low, &low_pos)
2931 || !discrete_position (base_index_type, high, &high_pos))
2932 {
2933 warning (_("unable to get positions in slice, use bounds instead"));
2934 low_pos = low;
2935 high_pos = high;
2936 }
2937
2938 return value_cast (slice_type,
2939 value_slice (array, low, high_pos - low_pos + 1));
0b5d8877
PH
2940}
2941
14f9c5c9
AS
2942/* If type is a record type in the form of a standard GNAT array
2943 descriptor, returns the number of dimensions for type. If arr is a
2944 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2945 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2946
2947int
d2e4a39e 2948ada_array_arity (struct type *type)
14f9c5c9
AS
2949{
2950 int arity;
2951
2952 if (type == NULL)
2953 return 0;
2954
2955 type = desc_base_type (type);
2956
2957 arity = 0;
d2e4a39e 2958 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2959 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2960 else
2961 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2962 {
4c4b4cd2 2963 arity += 1;
61ee279c 2964 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2965 }
d2e4a39e 2966
14f9c5c9
AS
2967 return arity;
2968}
2969
2970/* If TYPE is a record type in the form of a standard GNAT array
2971 descriptor or a simple array type, returns the element type for
2972 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2973 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2974
d2e4a39e
AS
2975struct type *
2976ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2977{
2978 type = desc_base_type (type);
2979
d2e4a39e 2980 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2981 {
2982 int k;
d2e4a39e 2983 struct type *p_array_type;
14f9c5c9 2984
556bdfd4 2985 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2986
2987 k = ada_array_arity (type);
2988 if (k == 0)
4c4b4cd2 2989 return NULL;
d2e4a39e 2990
4c4b4cd2 2991 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2992 if (nindices >= 0 && k > nindices)
4c4b4cd2 2993 k = nindices;
d2e4a39e 2994 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2995 {
61ee279c 2996 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2997 k -= 1;
2998 }
14f9c5c9
AS
2999 return p_array_type;
3000 }
3001 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
3002 {
3003 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
3004 {
3005 type = TYPE_TARGET_TYPE (type);
3006 nindices -= 1;
3007 }
14f9c5c9
AS
3008 return type;
3009 }
3010
3011 return NULL;
3012}
3013
4c4b4cd2 3014/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
3015 Does not examine memory. Throws an error if N is invalid or TYPE
3016 is not an array type. NAME is the name of the Ada attribute being
3017 evaluated ('range, 'first, 'last, or 'length); it is used in building
3018 the error message. */
14f9c5c9 3019
1eea4ebd
UW
3020static struct type *
3021ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 3022{
4c4b4cd2
PH
3023 struct type *result_type;
3024
14f9c5c9
AS
3025 type = desc_base_type (type);
3026
1eea4ebd
UW
3027 if (n < 0 || n > ada_array_arity (type))
3028 error (_("invalid dimension number to '%s"), name);
14f9c5c9 3029
4c4b4cd2 3030 if (ada_is_simple_array_type (type))
14f9c5c9
AS
3031 {
3032 int i;
3033
3034 for (i = 1; i < n; i += 1)
4c4b4cd2 3035 type = TYPE_TARGET_TYPE (type);
262452ec 3036 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
3037 /* FIXME: The stabs type r(0,0);bound;bound in an array type
3038 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 3039 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
3040 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
3041 result_type = NULL;
14f9c5c9 3042 }
d2e4a39e 3043 else
1eea4ebd
UW
3044 {
3045 result_type = desc_index_type (desc_bounds_type (type), n);
3046 if (result_type == NULL)
3047 error (_("attempt to take bound of something that is not an array"));
3048 }
3049
3050 return result_type;
14f9c5c9
AS
3051}
3052
3053/* Given that arr is an array type, returns the lower bound of the
3054 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 3055 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
3056 array-descriptor type. It works for other arrays with bounds supplied
3057 by run-time quantities other than discriminants. */
14f9c5c9 3058
abb68b3e 3059static LONGEST
fb5e3d5c 3060ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 3061{
8a48ac95 3062 struct type *type, *index_type_desc, *index_type;
1ce677a4 3063 int i;
262452ec
JK
3064
3065 gdb_assert (which == 0 || which == 1);
14f9c5c9 3066
ad82864c
JB
3067 if (ada_is_constrained_packed_array_type (arr_type))
3068 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 3069
4c4b4cd2 3070 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 3071 return (LONGEST) - which;
14f9c5c9
AS
3072
3073 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
3074 type = TYPE_TARGET_TYPE (arr_type);
3075 else
3076 type = arr_type;
3077
bafffb51
JB
3078 if (TYPE_FIXED_INSTANCE (type))
3079 {
3080 /* The array has already been fixed, so we do not need to
3081 check the parallel ___XA type again. That encoding has
3082 already been applied, so ignore it now. */
3083 index_type_desc = NULL;
3084 }
3085 else
3086 {
3087 index_type_desc = ada_find_parallel_type (type, "___XA");
3088 ada_fixup_array_indexes_type (index_type_desc);
3089 }
3090
262452ec 3091 if (index_type_desc != NULL)
28c85d6c
JB
3092 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
3093 NULL);
262452ec 3094 else
8a48ac95
JB
3095 {
3096 struct type *elt_type = check_typedef (type);
3097
3098 for (i = 1; i < n; i++)
3099 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
3100
3101 index_type = TYPE_INDEX_TYPE (elt_type);
3102 }
262452ec 3103
43bbcdc2
PH
3104 return
3105 (LONGEST) (which == 0
3106 ? ada_discrete_type_low_bound (index_type)
3107 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
3108}
3109
3110/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
3111 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3112 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3113 supplied by run-time quantities other than discriminants. */
14f9c5c9 3114
1eea4ebd 3115static LONGEST
4dc81987 3116ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3117{
eb479039
JB
3118 struct type *arr_type;
3119
3120 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3121 arr = value_ind (arr);
3122 arr_type = value_enclosing_type (arr);
14f9c5c9 3123
ad82864c
JB
3124 if (ada_is_constrained_packed_array_type (arr_type))
3125 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3126 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3127 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3128 else
1eea4ebd 3129 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3130}
3131
3132/* Given that arr is an array value, returns the length of the
3133 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3134 supplied by run-time quantities other than discriminants.
3135 Does not work for arrays indexed by enumeration types with representation
3136 clauses at the moment. */
14f9c5c9 3137
1eea4ebd 3138static LONGEST
d2e4a39e 3139ada_array_length (struct value *arr, int n)
14f9c5c9 3140{
aa715135
JG
3141 struct type *arr_type, *index_type;
3142 int low, high;
eb479039
JB
3143
3144 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3145 arr = value_ind (arr);
3146 arr_type = value_enclosing_type (arr);
14f9c5c9 3147
ad82864c
JB
3148 if (ada_is_constrained_packed_array_type (arr_type))
3149 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3150
4c4b4cd2 3151 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3152 {
3153 low = ada_array_bound_from_type (arr_type, n, 0);
3154 high = ada_array_bound_from_type (arr_type, n, 1);
3155 }
14f9c5c9 3156 else
aa715135
JG
3157 {
3158 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3159 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3160 }
3161
f168693b 3162 arr_type = check_typedef (arr_type);
7150d33c 3163 index_type = ada_index_type (arr_type, n, "length");
aa715135
JG
3164 if (index_type != NULL)
3165 {
3166 struct type *base_type;
3167 if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
3168 base_type = TYPE_TARGET_TYPE (index_type);
3169 else
3170 base_type = index_type;
3171
3172 low = pos_atr (value_from_longest (base_type, low));
3173 high = pos_atr (value_from_longest (base_type, high));
3174 }
3175 return high - low + 1;
4c4b4cd2
PH
3176}
3177
bff8c71f
TT
3178/* An array whose type is that of ARR_TYPE (an array type), with
3179 bounds LOW to HIGH, but whose contents are unimportant. If HIGH is
3180 less than LOW, then LOW-1 is used. */
4c4b4cd2
PH
3181
3182static struct value *
bff8c71f 3183empty_array (struct type *arr_type, int low, int high)
4c4b4cd2 3184{
b0dd7688 3185 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3186 struct type *index_type
3187 = create_static_range_type
bff8c71f
TT
3188 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low,
3189 high < low ? low - 1 : high);
b0dd7688 3190 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3191
0b5d8877 3192 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3193}
14f9c5c9 3194\f
d2e4a39e 3195
4c4b4cd2 3196 /* Name resolution */
14f9c5c9 3197
4c4b4cd2
PH
3198/* The "decoded" name for the user-definable Ada operator corresponding
3199 to OP. */
14f9c5c9 3200
d2e4a39e 3201static const char *
4c4b4cd2 3202ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3203{
3204 int i;
3205
4c4b4cd2 3206 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3207 {
3208 if (ada_opname_table[i].op == op)
4c4b4cd2 3209 return ada_opname_table[i].decoded;
14f9c5c9 3210 }
323e0a4a 3211 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3212}
3213
3214
4c4b4cd2
PH
3215/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3216 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3217 undefined namespace) and converts operators that are
3218 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
3219 non-null, it provides a preferred result type [at the moment, only
3220 type void has any effect---causing procedures to be preferred over
3221 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 3222 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3223
4c4b4cd2 3224static void
699bd4cf
TT
3225resolve (expression_up *expp, int void_context_p, int parse_completion,
3226 innermost_block_tracker *tracker)
14f9c5c9 3227{
30b15541
UW
3228 struct type *context_type = NULL;
3229 int pc = 0;
3230
3231 if (void_context_p)
3232 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3233
699bd4cf 3234 resolve_subexp (expp, &pc, 1, context_type, parse_completion, tracker);
14f9c5c9
AS
3235}
3236
4c4b4cd2
PH
3237/* Resolve the operator of the subexpression beginning at
3238 position *POS of *EXPP. "Resolving" consists of replacing
3239 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3240 with their resolutions, replacing built-in operators with
3241 function calls to user-defined operators, where appropriate, and,
3242 when DEPROCEDURE_P is non-zero, converting function-valued variables
3243 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3244 are as in ada_resolve, above. */
14f9c5c9 3245
d2e4a39e 3246static struct value *
e9d9f57e 3247resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
699bd4cf
TT
3248 struct type *context_type, int parse_completion,
3249 innermost_block_tracker *tracker)
14f9c5c9
AS
3250{
3251 int pc = *pos;
3252 int i;
4c4b4cd2 3253 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 3254 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
3255 struct value **argvec; /* Vector of operand types (alloca'ed). */
3256 int nargs; /* Number of operands. */
52ce6436 3257 int oplen;
14f9c5c9
AS
3258
3259 argvec = NULL;
3260 nargs = 0;
e9d9f57e 3261 exp = expp->get ();
14f9c5c9 3262
52ce6436
PH
3263 /* Pass one: resolve operands, saving their types and updating *pos,
3264 if needed. */
14f9c5c9
AS
3265 switch (op)
3266 {
4c4b4cd2
PH
3267 case OP_FUNCALL:
3268 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
3269 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3270 *pos += 7;
4c4b4cd2
PH
3271 else
3272 {
3273 *pos += 3;
699bd4cf 3274 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
4c4b4cd2
PH
3275 }
3276 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
3277 break;
3278
14f9c5c9 3279 case UNOP_ADDR:
4c4b4cd2 3280 *pos += 1;
699bd4cf 3281 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
4c4b4cd2
PH
3282 break;
3283
52ce6436
PH
3284 case UNOP_QUAL:
3285 *pos += 3;
2a612529 3286 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
699bd4cf 3287 parse_completion, tracker);
4c4b4cd2
PH
3288 break;
3289
52ce6436 3290 case OP_ATR_MODULUS:
4c4b4cd2
PH
3291 case OP_ATR_SIZE:
3292 case OP_ATR_TAG:
4c4b4cd2
PH
3293 case OP_ATR_FIRST:
3294 case OP_ATR_LAST:
3295 case OP_ATR_LENGTH:
3296 case OP_ATR_POS:
3297 case OP_ATR_VAL:
4c4b4cd2
PH
3298 case OP_ATR_MIN:
3299 case OP_ATR_MAX:
52ce6436
PH
3300 case TERNOP_IN_RANGE:
3301 case BINOP_IN_BOUNDS:
3302 case UNOP_IN_RANGE:
3303 case OP_AGGREGATE:
3304 case OP_OTHERS:
3305 case OP_CHOICES:
3306 case OP_POSITIONAL:
3307 case OP_DISCRETE_RANGE:
3308 case OP_NAME:
3309 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3310 *pos += oplen;
14f9c5c9
AS
3311 break;
3312
3313 case BINOP_ASSIGN:
3314 {
4c4b4cd2
PH
3315 struct value *arg1;
3316
3317 *pos += 1;
699bd4cf 3318 arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
4c4b4cd2 3319 if (arg1 == NULL)
699bd4cf 3320 resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
4c4b4cd2 3321 else
699bd4cf
TT
3322 resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
3323 tracker);
4c4b4cd2 3324 break;
14f9c5c9
AS
3325 }
3326
4c4b4cd2 3327 case UNOP_CAST:
4c4b4cd2
PH
3328 *pos += 3;
3329 nargs = 1;
3330 break;
14f9c5c9 3331
4c4b4cd2
PH
3332 case BINOP_ADD:
3333 case BINOP_SUB:
3334 case BINOP_MUL:
3335 case BINOP_DIV:
3336 case BINOP_REM:
3337 case BINOP_MOD:
3338 case BINOP_EXP:
3339 case BINOP_CONCAT:
3340 case BINOP_LOGICAL_AND:
3341 case BINOP_LOGICAL_OR:
3342 case BINOP_BITWISE_AND:
3343 case BINOP_BITWISE_IOR:
3344 case BINOP_BITWISE_XOR:
14f9c5c9 3345
4c4b4cd2
PH
3346 case BINOP_EQUAL:
3347 case BINOP_NOTEQUAL:
3348 case BINOP_LESS:
3349 case BINOP_GTR:
3350 case BINOP_LEQ:
3351 case BINOP_GEQ:
14f9c5c9 3352
4c4b4cd2
PH
3353 case BINOP_REPEAT:
3354 case BINOP_SUBSCRIPT:
3355 case BINOP_COMMA:
40c8aaa9
JB
3356 *pos += 1;
3357 nargs = 2;
3358 break;
14f9c5c9 3359
4c4b4cd2
PH
3360 case UNOP_NEG:
3361 case UNOP_PLUS:
3362 case UNOP_LOGICAL_NOT:
3363 case UNOP_ABS:
3364 case UNOP_IND:
3365 *pos += 1;
3366 nargs = 1;
3367 break;
14f9c5c9 3368
4c4b4cd2 3369 case OP_LONG:
edd079d9 3370 case OP_FLOAT:
4c4b4cd2 3371 case OP_VAR_VALUE:
74ea4be4 3372 case OP_VAR_MSYM_VALUE:
4c4b4cd2
PH
3373 *pos += 4;
3374 break;
14f9c5c9 3375
4c4b4cd2
PH
3376 case OP_TYPE:
3377 case OP_BOOL:
3378 case OP_LAST:
4c4b4cd2
PH
3379 case OP_INTERNALVAR:
3380 *pos += 3;
3381 break;
14f9c5c9 3382
4c4b4cd2
PH
3383 case UNOP_MEMVAL:
3384 *pos += 3;
3385 nargs = 1;
3386 break;
3387
67f3407f
DJ
3388 case OP_REGISTER:
3389 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3390 break;
3391
4c4b4cd2
PH
3392 case STRUCTOP_STRUCT:
3393 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3394 nargs = 1;
3395 break;
3396
4c4b4cd2 3397 case TERNOP_SLICE:
4c4b4cd2
PH
3398 *pos += 1;
3399 nargs = 3;
3400 break;
3401
52ce6436 3402 case OP_STRING:
14f9c5c9 3403 break;
4c4b4cd2
PH
3404
3405 default:
323e0a4a 3406 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3407 }
3408
8d749320 3409 argvec = XALLOCAVEC (struct value *, nargs + 1);
4c4b4cd2 3410 for (i = 0; i < nargs; i += 1)
699bd4cf
TT
3411 argvec[i] = resolve_subexp (expp, pos, 1, NULL, parse_completion,
3412 tracker);
4c4b4cd2 3413 argvec[i] = NULL;
e9d9f57e 3414 exp = expp->get ();
4c4b4cd2
PH
3415
3416 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3417 switch (op)
3418 {
3419 default:
3420 break;
3421
14f9c5c9 3422 case OP_VAR_VALUE:
4c4b4cd2 3423 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679 3424 {
54d343a2 3425 std::vector<struct block_symbol> candidates;
76a01679
JB
3426 int n_candidates;
3427
3428 n_candidates =
3429 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3430 (exp->elts[pc + 2].symbol),
3431 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3432 &candidates);
76a01679
JB
3433
3434 if (n_candidates > 1)
3435 {
3436 /* Types tend to get re-introduced locally, so if there
3437 are any local symbols that are not types, first filter
3438 out all types. */
3439 int j;
3440 for (j = 0; j < n_candidates; j += 1)
d12307c1 3441 switch (SYMBOL_CLASS (candidates[j].symbol))
76a01679
JB
3442 {
3443 case LOC_REGISTER:
3444 case LOC_ARG:
3445 case LOC_REF_ARG:
76a01679
JB
3446 case LOC_REGPARM_ADDR:
3447 case LOC_LOCAL:
76a01679 3448 case LOC_COMPUTED:
76a01679
JB
3449 goto FoundNonType;
3450 default:
3451 break;
3452 }
3453 FoundNonType:
3454 if (j < n_candidates)
3455 {
3456 j = 0;
3457 while (j < n_candidates)
3458 {
d12307c1 3459 if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
76a01679
JB
3460 {
3461 candidates[j] = candidates[n_candidates - 1];
3462 n_candidates -= 1;
3463 }
3464 else
3465 j += 1;
3466 }
3467 }
3468 }
3469
3470 if (n_candidates == 0)
323e0a4a 3471 error (_("No definition found for %s"),
76a01679
JB
3472 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3473 else if (n_candidates == 1)
3474 i = 0;
3475 else if (deprocedure_p
54d343a2 3476 && !is_nonfunction (candidates.data (), n_candidates))
76a01679 3477 {
06d5cf63 3478 i = ada_resolve_function
54d343a2 3479 (candidates.data (), n_candidates, NULL, 0,
06d5cf63 3480 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
2a612529 3481 context_type, parse_completion);
76a01679 3482 if (i < 0)
323e0a4a 3483 error (_("Could not find a match for %s"),
76a01679
JB
3484 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3485 }
3486 else
3487 {
323e0a4a 3488 printf_filtered (_("Multiple matches for %s\n"),
76a01679 3489 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
54d343a2 3490 user_select_syms (candidates.data (), n_candidates, 1);
76a01679
JB
3491 i = 0;
3492 }
3493
3494 exp->elts[pc + 1].block = candidates[i].block;
d12307c1 3495 exp->elts[pc + 2].symbol = candidates[i].symbol;
699bd4cf 3496 tracker->update (candidates[i]);
76a01679
JB
3497 }
3498
3499 if (deprocedure_p
3500 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3501 == TYPE_CODE_FUNC))
3502 {
424da6cf 3503 replace_operator_with_call (expp, pc, 0, 4,
76a01679
JB
3504 exp->elts[pc + 2].symbol,
3505 exp->elts[pc + 1].block);
e9d9f57e 3506 exp = expp->get ();
76a01679 3507 }
14f9c5c9
AS
3508 break;
3509
3510 case OP_FUNCALL:
3511 {
4c4b4cd2 3512 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3513 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2 3514 {
54d343a2 3515 std::vector<struct block_symbol> candidates;
4c4b4cd2
PH
3516 int n_candidates;
3517
3518 n_candidates =
76a01679
JB
3519 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3520 (exp->elts[pc + 5].symbol),
3521 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3522 &candidates);
ec6a20c2 3523
4c4b4cd2
PH
3524 if (n_candidates == 1)
3525 i = 0;
3526 else
3527 {
06d5cf63 3528 i = ada_resolve_function
54d343a2 3529 (candidates.data (), n_candidates,
06d5cf63
JB
3530 argvec, nargs,
3531 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
2a612529 3532 context_type, parse_completion);
4c4b4cd2 3533 if (i < 0)
323e0a4a 3534 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3535 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3536 }
3537
3538 exp->elts[pc + 4].block = candidates[i].block;
d12307c1 3539 exp->elts[pc + 5].symbol = candidates[i].symbol;
699bd4cf 3540 tracker->update (candidates[i]);
4c4b4cd2 3541 }
14f9c5c9
AS
3542 }
3543 break;
3544 case BINOP_ADD:
3545 case BINOP_SUB:
3546 case BINOP_MUL:
3547 case BINOP_DIV:
3548 case BINOP_REM:
3549 case BINOP_MOD:
3550 case BINOP_CONCAT:
3551 case BINOP_BITWISE_AND:
3552 case BINOP_BITWISE_IOR:
3553 case BINOP_BITWISE_XOR:
3554 case BINOP_EQUAL:
3555 case BINOP_NOTEQUAL:
3556 case BINOP_LESS:
3557 case BINOP_GTR:
3558 case BINOP_LEQ:
3559 case BINOP_GEQ:
3560 case BINOP_EXP:
3561 case UNOP_NEG:
3562 case UNOP_PLUS:
3563 case UNOP_LOGICAL_NOT:
3564 case UNOP_ABS:
3565 if (possible_user_operator_p (op, argvec))
4c4b4cd2 3566 {
54d343a2 3567 std::vector<struct block_symbol> candidates;
4c4b4cd2
PH
3568 int n_candidates;
3569
3570 n_candidates =
b5ec771e 3571 ada_lookup_symbol_list (ada_decoded_op_name (op),
582942f4 3572 NULL, VAR_DOMAIN,
4eeaa230 3573 &candidates);
ec6a20c2 3574
54d343a2 3575 i = ada_resolve_function (candidates.data (), n_candidates, argvec,
2a612529
TT
3576 nargs, ada_decoded_op_name (op), NULL,
3577 parse_completion);
4c4b4cd2
PH
3578 if (i < 0)
3579 break;
3580
d12307c1
PMR
3581 replace_operator_with_call (expp, pc, nargs, 1,
3582 candidates[i].symbol,
3583 candidates[i].block);
e9d9f57e 3584 exp = expp->get ();
4c4b4cd2 3585 }
14f9c5c9 3586 break;
4c4b4cd2
PH
3587
3588 case OP_TYPE:
b3dbf008 3589 case OP_REGISTER:
4c4b4cd2 3590 return NULL;
14f9c5c9
AS
3591 }
3592
3593 *pos = pc;
ced9779b
JB
3594 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3595 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3596 exp->elts[pc + 1].objfile,
3597 exp->elts[pc + 2].msymbol);
3598 else
3599 return evaluate_subexp_type (exp, pos);
14f9c5c9
AS
3600}
3601
3602/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3603 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3604 a non-pointer. */
14f9c5c9 3605/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3606 liberal. */
14f9c5c9
AS
3607
3608static int
4dc81987 3609ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3610{
61ee279c
PH
3611 ftype = ada_check_typedef (ftype);
3612 atype = ada_check_typedef (atype);
14f9c5c9
AS
3613
3614 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3615 ftype = TYPE_TARGET_TYPE (ftype);
3616 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3617 atype = TYPE_TARGET_TYPE (atype);
3618
d2e4a39e 3619 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3620 {
3621 default:
5b3d5b7d 3622 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3623 case TYPE_CODE_PTR:
3624 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3625 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3626 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3627 else
1265e4aa
JB
3628 return (may_deref
3629 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3630 case TYPE_CODE_INT:
3631 case TYPE_CODE_ENUM:
3632 case TYPE_CODE_RANGE:
3633 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3634 {
3635 case TYPE_CODE_INT:
3636 case TYPE_CODE_ENUM:
3637 case TYPE_CODE_RANGE:
3638 return 1;
3639 default:
3640 return 0;
3641 }
14f9c5c9
AS
3642
3643 case TYPE_CODE_ARRAY:
d2e4a39e 3644 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3645 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3646
3647 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3648 if (ada_is_array_descriptor_type (ftype))
3649 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3650 || ada_is_array_descriptor_type (atype));
14f9c5c9 3651 else
4c4b4cd2
PH
3652 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3653 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3654
3655 case TYPE_CODE_UNION:
3656 case TYPE_CODE_FLT:
3657 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3658 }
3659}
3660
3661/* Return non-zero if the formals of FUNC "sufficiently match" the
3662 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3663 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3664 argument function. */
14f9c5c9
AS
3665
3666static int
d2e4a39e 3667ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3668{
3669 int i;
d2e4a39e 3670 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3671
1265e4aa
JB
3672 if (SYMBOL_CLASS (func) == LOC_CONST
3673 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3674 return (n_actuals == 0);
3675 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3676 return 0;
3677
3678 if (TYPE_NFIELDS (func_type) != n_actuals)
3679 return 0;
3680
3681 for (i = 0; i < n_actuals; i += 1)
3682 {
4c4b4cd2 3683 if (actuals[i] == NULL)
76a01679
JB
3684 return 0;
3685 else
3686 {
5b4ee69b
MS
3687 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3688 i));
df407dfe 3689 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3690
76a01679
JB
3691 if (!ada_type_match (ftype, atype, 1))
3692 return 0;
3693 }
14f9c5c9
AS
3694 }
3695 return 1;
3696}
3697
3698/* False iff function type FUNC_TYPE definitely does not produce a value
3699 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3700 FUNC_TYPE is not a valid function type with a non-null return type
3701 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3702
3703static int
d2e4a39e 3704return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3705{
d2e4a39e 3706 struct type *return_type;
14f9c5c9
AS
3707
3708 if (func_type == NULL)
3709 return 1;
3710
4c4b4cd2 3711 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3712 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3713 else
18af8284 3714 return_type = get_base_type (func_type);
14f9c5c9
AS
3715 if (return_type == NULL)
3716 return 1;
3717
18af8284 3718 context_type = get_base_type (context_type);
14f9c5c9
AS
3719
3720 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3721 return context_type == NULL || return_type == context_type;
3722 else if (context_type == NULL)
3723 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3724 else
3725 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3726}
3727
3728
4c4b4cd2 3729/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3730 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3731 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3732 that returns that type, then eliminate matches that don't. If
3733 CONTEXT_TYPE is void and there is at least one match that does not
3734 return void, eliminate all matches that do.
3735
14f9c5c9
AS
3736 Asks the user if there is more than one match remaining. Returns -1
3737 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3738 solely for messages. May re-arrange and modify SYMS in
3739 the process; the index returned is for the modified vector. */
14f9c5c9 3740
4c4b4cd2 3741static int
d12307c1 3742ada_resolve_function (struct block_symbol syms[],
4c4b4cd2 3743 int nsyms, struct value **args, int nargs,
2a612529
TT
3744 const char *name, struct type *context_type,
3745 int parse_completion)
14f9c5c9 3746{
30b15541 3747 int fallback;
14f9c5c9 3748 int k;
4c4b4cd2 3749 int m; /* Number of hits */
14f9c5c9 3750
d2e4a39e 3751 m = 0;
30b15541
UW
3752 /* In the first pass of the loop, we only accept functions matching
3753 context_type. If none are found, we add a second pass of the loop
3754 where every function is accepted. */
3755 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3756 {
3757 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3758 {
d12307c1 3759 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
4c4b4cd2 3760
d12307c1 3761 if (ada_args_match (syms[k].symbol, args, nargs)
30b15541 3762 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3763 {
3764 syms[m] = syms[k];
3765 m += 1;
3766 }
3767 }
14f9c5c9
AS
3768 }
3769
dc5c8746
PMR
3770 /* If we got multiple matches, ask the user which one to use. Don't do this
3771 interactive thing during completion, though, as the purpose of the
3772 completion is providing a list of all possible matches. Prompting the
3773 user to filter it down would be completely unexpected in this case. */
14f9c5c9
AS
3774 if (m == 0)
3775 return -1;
dc5c8746 3776 else if (m > 1 && !parse_completion)
14f9c5c9 3777 {
323e0a4a 3778 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3779 user_select_syms (syms, m, 1);
14f9c5c9
AS
3780 return 0;
3781 }
3782 return 0;
3783}
3784
4c4b4cd2
PH
3785/* Returns true (non-zero) iff decoded name N0 should appear before N1
3786 in a listing of choices during disambiguation (see sort_choices, below).
3787 The idea is that overloadings of a subprogram name from the
3788 same package should sort in their source order. We settle for ordering
3789 such symbols by their trailing number (__N or $N). */
3790
14f9c5c9 3791static int
0d5cff50 3792encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3793{
3794 if (N1 == NULL)
3795 return 0;
3796 else if (N0 == NULL)
3797 return 1;
3798 else
3799 {
3800 int k0, k1;
5b4ee69b 3801
d2e4a39e 3802 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3803 ;
d2e4a39e 3804 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3805 ;
d2e4a39e 3806 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3807 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3808 {
3809 int n0, n1;
5b4ee69b 3810
4c4b4cd2
PH
3811 n0 = k0;
3812 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3813 n0 -= 1;
3814 n1 = k1;
3815 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3816 n1 -= 1;
3817 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3818 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3819 }
14f9c5c9
AS
3820 return (strcmp (N0, N1) < 0);
3821 }
3822}
d2e4a39e 3823
4c4b4cd2
PH
3824/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3825 encoded names. */
3826
d2e4a39e 3827static void
d12307c1 3828sort_choices (struct block_symbol syms[], int nsyms)
14f9c5c9 3829{
4c4b4cd2 3830 int i;
5b4ee69b 3831
d2e4a39e 3832 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3833 {
d12307c1 3834 struct block_symbol sym = syms[i];
14f9c5c9
AS
3835 int j;
3836
d2e4a39e 3837 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2 3838 {
d12307c1
PMR
3839 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].symbol),
3840 SYMBOL_LINKAGE_NAME (sym.symbol)))
4c4b4cd2
PH
3841 break;
3842 syms[j + 1] = syms[j];
3843 }
d2e4a39e 3844 syms[j + 1] = sym;
14f9c5c9
AS
3845 }
3846}
3847
d72413e6
PMR
3848/* Whether GDB should display formals and return types for functions in the
3849 overloads selection menu. */
3850static int print_signatures = 1;
3851
3852/* Print the signature for SYM on STREAM according to the FLAGS options. For
3853 all but functions, the signature is just the name of the symbol. For
3854 functions, this is the name of the function, the list of types for formals
3855 and the return type (if any). */
3856
3857static void
3858ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3859 const struct type_print_options *flags)
3860{
3861 struct type *type = SYMBOL_TYPE (sym);
3862
3863 fprintf_filtered (stream, "%s", SYMBOL_PRINT_NAME (sym));
3864 if (!print_signatures
3865 || type == NULL
3866 || TYPE_CODE (type) != TYPE_CODE_FUNC)
3867 return;
3868
3869 if (TYPE_NFIELDS (type) > 0)
3870 {
3871 int i;
3872
3873 fprintf_filtered (stream, " (");
3874 for (i = 0; i < TYPE_NFIELDS (type); ++i)
3875 {
3876 if (i > 0)
3877 fprintf_filtered (stream, "; ");
3878 ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0,
3879 flags);
3880 }
3881 fprintf_filtered (stream, ")");
3882 }
3883 if (TYPE_TARGET_TYPE (type) != NULL
3884 && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
3885 {
3886 fprintf_filtered (stream, " return ");
3887 ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3888 }
3889}
3890
4c4b4cd2
PH
3891/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3892 by asking the user (if necessary), returning the number selected,
3893 and setting the first elements of SYMS items. Error if no symbols
3894 selected. */
14f9c5c9
AS
3895
3896/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3897 to be re-integrated one of these days. */
14f9c5c9
AS
3898
3899int
d12307c1 3900user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
14f9c5c9
AS
3901{
3902 int i;
8d749320 3903 int *chosen = XALLOCAVEC (int , nsyms);
14f9c5c9
AS
3904 int n_chosen;
3905 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3906 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3907
3908 if (max_results < 1)
323e0a4a 3909 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3910 if (nsyms <= 1)
3911 return nsyms;
3912
717d2f5a
JB
3913 if (select_mode == multiple_symbols_cancel)
3914 error (_("\
3915canceled because the command is ambiguous\n\
3916See set/show multiple-symbol."));
a0087920 3917
717d2f5a
JB
3918 /* If select_mode is "all", then return all possible symbols.
3919 Only do that if more than one symbol can be selected, of course.
3920 Otherwise, display the menu as usual. */
3921 if (select_mode == multiple_symbols_all && max_results > 1)
3922 return nsyms;
3923
a0087920 3924 printf_filtered (_("[0] cancel\n"));
14f9c5c9 3925 if (max_results > 1)
a0087920 3926 printf_filtered (_("[1] all\n"));
14f9c5c9 3927
4c4b4cd2 3928 sort_choices (syms, nsyms);
14f9c5c9
AS
3929
3930 for (i = 0; i < nsyms; i += 1)
3931 {
d12307c1 3932 if (syms[i].symbol == NULL)
4c4b4cd2
PH
3933 continue;
3934
d12307c1 3935 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
4c4b4cd2 3936 {
76a01679 3937 struct symtab_and_line sal =
d12307c1 3938 find_function_start_sal (syms[i].symbol, 1);
5b4ee69b 3939
a0087920 3940 printf_filtered ("[%d] ", i + first_choice);
d72413e6
PMR
3941 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3942 &type_print_raw_options);
323e0a4a 3943 if (sal.symtab == NULL)
a0087920
TT
3944 printf_filtered (_(" at <no source file available>:%d\n"),
3945 sal.line);
323e0a4a 3946 else
a0087920
TT
3947 printf_filtered (_(" at %s:%d\n"),
3948 symtab_to_filename_for_display (sal.symtab),
3949 sal.line);
4c4b4cd2
PH
3950 continue;
3951 }
d2e4a39e 3952 else
4c4b4cd2
PH
3953 {
3954 int is_enumeral =
d12307c1
PMR
3955 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3956 && SYMBOL_TYPE (syms[i].symbol) != NULL
3957 && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM);
1994afbf
DE
3958 struct symtab *symtab = NULL;
3959
d12307c1
PMR
3960 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3961 symtab = symbol_symtab (syms[i].symbol);
4c4b4cd2 3962
d12307c1 3963 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
d72413e6 3964 {
a0087920 3965 printf_filtered ("[%d] ", i + first_choice);
d72413e6
PMR
3966 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3967 &type_print_raw_options);
a0087920
TT
3968 printf_filtered (_(" at %s:%d\n"),
3969 symtab_to_filename_for_display (symtab),
3970 SYMBOL_LINE (syms[i].symbol));
d72413e6 3971 }
76a01679 3972 else if (is_enumeral
d12307c1 3973 && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL)
4c4b4cd2 3974 {
a0087920 3975 printf_filtered (("[%d] "), i + first_choice);
d12307c1 3976 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
79d43c61 3977 gdb_stdout, -1, 0, &type_print_raw_options);
a0087920
TT
3978 printf_filtered (_("'(%s) (enumeral)\n"),
3979 SYMBOL_PRINT_NAME (syms[i].symbol));
4c4b4cd2 3980 }
d72413e6
PMR
3981 else
3982 {
a0087920 3983 printf_filtered ("[%d] ", i + first_choice);
d72413e6
PMR
3984 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3985 &type_print_raw_options);
3986
3987 if (symtab != NULL)
a0087920
TT
3988 printf_filtered (is_enumeral
3989 ? _(" in %s (enumeral)\n")
3990 : _(" at %s:?\n"),
3991 symtab_to_filename_for_display (symtab));
d72413e6 3992 else
a0087920
TT
3993 printf_filtered (is_enumeral
3994 ? _(" (enumeral)\n")
3995 : _(" at ?\n"));
d72413e6 3996 }
4c4b4cd2 3997 }
14f9c5c9 3998 }
d2e4a39e 3999
14f9c5c9 4000 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 4001 "overload-choice");
14f9c5c9
AS
4002
4003 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 4004 syms[i] = syms[chosen[i]];
14f9c5c9
AS
4005
4006 return n_chosen;
4007}
4008
4009/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 4010 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
4011 order in CHOICES[0 .. N-1], and return N.
4012
4013 The user types choices as a sequence of numbers on one line
4014 separated by blanks, encoding them as follows:
4015
4c4b4cd2 4016 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
4017 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
4018 + The user chooses k by typing k+IS_ALL_CHOICE+1.
4019
4c4b4cd2 4020 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
4021
4022 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 4023 prompts (for use with the -f switch). */
14f9c5c9
AS
4024
4025int
d2e4a39e 4026get_selections (int *choices, int n_choices, int max_results,
a121b7c1 4027 int is_all_choice, const char *annotation_suffix)
14f9c5c9 4028{
d2e4a39e 4029 char *args;
a121b7c1 4030 const char *prompt;
14f9c5c9
AS
4031 int n_chosen;
4032 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 4033
14f9c5c9
AS
4034 prompt = getenv ("PS2");
4035 if (prompt == NULL)
0bcd0149 4036 prompt = "> ";
14f9c5c9 4037
89fbedf3 4038 args = command_line_input (prompt, annotation_suffix);
d2e4a39e 4039
14f9c5c9 4040 if (args == NULL)
323e0a4a 4041 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
4042
4043 n_chosen = 0;
76a01679 4044
4c4b4cd2
PH
4045 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
4046 order, as given in args. Choices are validated. */
14f9c5c9
AS
4047 while (1)
4048 {
d2e4a39e 4049 char *args2;
14f9c5c9
AS
4050 int choice, j;
4051
0fcd72ba 4052 args = skip_spaces (args);
14f9c5c9 4053 if (*args == '\0' && n_chosen == 0)
323e0a4a 4054 error_no_arg (_("one or more choice numbers"));
14f9c5c9 4055 else if (*args == '\0')
4c4b4cd2 4056 break;
14f9c5c9
AS
4057
4058 choice = strtol (args, &args2, 10);
d2e4a39e 4059 if (args == args2 || choice < 0
4c4b4cd2 4060 || choice > n_choices + first_choice - 1)
323e0a4a 4061 error (_("Argument must be choice number"));
14f9c5c9
AS
4062 args = args2;
4063
d2e4a39e 4064 if (choice == 0)
323e0a4a 4065 error (_("cancelled"));
14f9c5c9
AS
4066
4067 if (choice < first_choice)
4c4b4cd2
PH
4068 {
4069 n_chosen = n_choices;
4070 for (j = 0; j < n_choices; j += 1)
4071 choices[j] = j;
4072 break;
4073 }
14f9c5c9
AS
4074 choice -= first_choice;
4075
d2e4a39e 4076 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
4077 {
4078 }
14f9c5c9
AS
4079
4080 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
4081 {
4082 int k;
5b4ee69b 4083
4c4b4cd2
PH
4084 for (k = n_chosen - 1; k > j; k -= 1)
4085 choices[k + 1] = choices[k];
4086 choices[j + 1] = choice;
4087 n_chosen += 1;
4088 }
14f9c5c9
AS
4089 }
4090
4091 if (n_chosen > max_results)
323e0a4a 4092 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 4093
14f9c5c9
AS
4094 return n_chosen;
4095}
4096
4c4b4cd2
PH
4097/* Replace the operator of length OPLEN at position PC in *EXPP with a call
4098 on the function identified by SYM and BLOCK, and taking NARGS
4099 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
4100
4101static void
e9d9f57e 4102replace_operator_with_call (expression_up *expp, int pc, int nargs,
4c4b4cd2 4103 int oplen, struct symbol *sym,
270140bd 4104 const struct block *block)
14f9c5c9
AS
4105{
4106 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 4107 symbol, -oplen for operator being replaced). */
d2e4a39e 4108 struct expression *newexp = (struct expression *)
8c1a34e7 4109 xzalloc (sizeof (struct expression)
4c4b4cd2 4110 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
e9d9f57e 4111 struct expression *exp = expp->get ();
14f9c5c9
AS
4112
4113 newexp->nelts = exp->nelts + 7 - oplen;
4114 newexp->language_defn = exp->language_defn;
3489610d 4115 newexp->gdbarch = exp->gdbarch;
14f9c5c9 4116 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 4117 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 4118 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
4119
4120 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
4121 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
4122
4123 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
4124 newexp->elts[pc + 4].block = block;
4125 newexp->elts[pc + 5].symbol = sym;
4126
e9d9f57e 4127 expp->reset (newexp);
d2e4a39e 4128}
14f9c5c9
AS
4129
4130/* Type-class predicates */
4131
4c4b4cd2
PH
4132/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4133 or FLOAT). */
14f9c5c9
AS
4134
4135static int
d2e4a39e 4136numeric_type_p (struct type *type)
14f9c5c9
AS
4137{
4138 if (type == NULL)
4139 return 0;
d2e4a39e
AS
4140 else
4141 {
4142 switch (TYPE_CODE (type))
4c4b4cd2
PH
4143 {
4144 case TYPE_CODE_INT:
4145 case TYPE_CODE_FLT:
4146 return 1;
4147 case TYPE_CODE_RANGE:
4148 return (type == TYPE_TARGET_TYPE (type)
4149 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4150 default:
4151 return 0;
4152 }
d2e4a39e 4153 }
14f9c5c9
AS
4154}
4155
4c4b4cd2 4156/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4157
4158static int
d2e4a39e 4159integer_type_p (struct type *type)
14f9c5c9
AS
4160{
4161 if (type == NULL)
4162 return 0;
d2e4a39e
AS
4163 else
4164 {
4165 switch (TYPE_CODE (type))
4c4b4cd2
PH
4166 {
4167 case TYPE_CODE_INT:
4168 return 1;
4169 case TYPE_CODE_RANGE:
4170 return (type == TYPE_TARGET_TYPE (type)
4171 || integer_type_p (TYPE_TARGET_TYPE (type)));
4172 default:
4173 return 0;
4174 }
d2e4a39e 4175 }
14f9c5c9
AS
4176}
4177
4c4b4cd2 4178/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4179
4180static int
d2e4a39e 4181scalar_type_p (struct type *type)
14f9c5c9
AS
4182{
4183 if (type == NULL)
4184 return 0;
d2e4a39e
AS
4185 else
4186 {
4187 switch (TYPE_CODE (type))
4c4b4cd2
PH
4188 {
4189 case TYPE_CODE_INT:
4190 case TYPE_CODE_RANGE:
4191 case TYPE_CODE_ENUM:
4192 case TYPE_CODE_FLT:
4193 return 1;
4194 default:
4195 return 0;
4196 }
d2e4a39e 4197 }
14f9c5c9
AS
4198}
4199
4c4b4cd2 4200/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4201
4202static int
d2e4a39e 4203discrete_type_p (struct type *type)
14f9c5c9
AS
4204{
4205 if (type == NULL)
4206 return 0;
d2e4a39e
AS
4207 else
4208 {
4209 switch (TYPE_CODE (type))
4c4b4cd2
PH
4210 {
4211 case TYPE_CODE_INT:
4212 case TYPE_CODE_RANGE:
4213 case TYPE_CODE_ENUM:
872f0337 4214 case TYPE_CODE_BOOL:
4c4b4cd2
PH
4215 return 1;
4216 default:
4217 return 0;
4218 }
d2e4a39e 4219 }
14f9c5c9
AS
4220}
4221
4c4b4cd2
PH
4222/* Returns non-zero if OP with operands in the vector ARGS could be
4223 a user-defined function. Errs on the side of pre-defined operators
4224 (i.e., result 0). */
14f9c5c9
AS
4225
4226static int
d2e4a39e 4227possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4228{
76a01679 4229 struct type *type0 =
df407dfe 4230 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4231 struct type *type1 =
df407dfe 4232 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4233
4c4b4cd2
PH
4234 if (type0 == NULL)
4235 return 0;
4236
14f9c5c9
AS
4237 switch (op)
4238 {
4239 default:
4240 return 0;
4241
4242 case BINOP_ADD:
4243 case BINOP_SUB:
4244 case BINOP_MUL:
4245 case BINOP_DIV:
d2e4a39e 4246 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4247
4248 case BINOP_REM:
4249 case BINOP_MOD:
4250 case BINOP_BITWISE_AND:
4251 case BINOP_BITWISE_IOR:
4252 case BINOP_BITWISE_XOR:
d2e4a39e 4253 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4254
4255 case BINOP_EQUAL:
4256 case BINOP_NOTEQUAL:
4257 case BINOP_LESS:
4258 case BINOP_GTR:
4259 case BINOP_LEQ:
4260 case BINOP_GEQ:
d2e4a39e 4261 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4262
4263 case BINOP_CONCAT:
ee90b9ab 4264 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4265
4266 case BINOP_EXP:
d2e4a39e 4267 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4268
4269 case UNOP_NEG:
4270 case UNOP_PLUS:
4271 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4272 case UNOP_ABS:
4273 return (!numeric_type_p (type0));
14f9c5c9
AS
4274
4275 }
4276}
4277\f
4c4b4cd2 4278 /* Renaming */
14f9c5c9 4279
aeb5907d
JB
4280/* NOTES:
4281
4282 1. In the following, we assume that a renaming type's name may
4283 have an ___XD suffix. It would be nice if this went away at some
4284 point.
4285 2. We handle both the (old) purely type-based representation of
4286 renamings and the (new) variable-based encoding. At some point,
4287 it is devoutly to be hoped that the former goes away
4288 (FIXME: hilfinger-2007-07-09).
4289 3. Subprogram renamings are not implemented, although the XRS
4290 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4291
4292/* If SYM encodes a renaming,
4293
4294 <renaming> renames <renamed entity>,
4295
4296 sets *LEN to the length of the renamed entity's name,
4297 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4298 the string describing the subcomponent selected from the renamed
0963b4bd 4299 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4300 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4301 are undefined). Otherwise, returns a value indicating the category
4302 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4303 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4304 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4305 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4306 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4307 may be NULL, in which case they are not assigned.
4308
4309 [Currently, however, GCC does not generate subprogram renamings.] */
4310
4311enum ada_renaming_category
4312ada_parse_renaming (struct symbol *sym,
4313 const char **renamed_entity, int *len,
4314 const char **renaming_expr)
4315{
4316 enum ada_renaming_category kind;
4317 const char *info;
4318 const char *suffix;
4319
4320 if (sym == NULL)
4321 return ADA_NOT_RENAMING;
4322 switch (SYMBOL_CLASS (sym))
14f9c5c9 4323 {
aeb5907d
JB
4324 default:
4325 return ADA_NOT_RENAMING;
4326 case LOC_TYPEDEF:
4327 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4328 renamed_entity, len, renaming_expr);
4329 case LOC_LOCAL:
4330 case LOC_STATIC:
4331 case LOC_COMPUTED:
4332 case LOC_OPTIMIZED_OUT:
4333 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4334 if (info == NULL)
4335 return ADA_NOT_RENAMING;
4336 switch (info[5])
4337 {
4338 case '_':
4339 kind = ADA_OBJECT_RENAMING;
4340 info += 6;
4341 break;
4342 case 'E':
4343 kind = ADA_EXCEPTION_RENAMING;
4344 info += 7;
4345 break;
4346 case 'P':
4347 kind = ADA_PACKAGE_RENAMING;
4348 info += 7;
4349 break;
4350 case 'S':
4351 kind = ADA_SUBPROGRAM_RENAMING;
4352 info += 7;
4353 break;
4354 default:
4355 return ADA_NOT_RENAMING;
4356 }
14f9c5c9 4357 }
4c4b4cd2 4358
aeb5907d
JB
4359 if (renamed_entity != NULL)
4360 *renamed_entity = info;
4361 suffix = strstr (info, "___XE");
4362 if (suffix == NULL || suffix == info)
4363 return ADA_NOT_RENAMING;
4364 if (len != NULL)
4365 *len = strlen (info) - strlen (suffix);
4366 suffix += 5;
4367 if (renaming_expr != NULL)
4368 *renaming_expr = suffix;
4369 return kind;
4370}
4371
4372/* Assuming TYPE encodes a renaming according to the old encoding in
4373 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4374 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4375 ADA_NOT_RENAMING otherwise. */
4376static enum ada_renaming_category
4377parse_old_style_renaming (struct type *type,
4378 const char **renamed_entity, int *len,
4379 const char **renaming_expr)
4380{
4381 enum ada_renaming_category kind;
4382 const char *name;
4383 const char *info;
4384 const char *suffix;
14f9c5c9 4385
aeb5907d
JB
4386 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4387 || TYPE_NFIELDS (type) != 1)
4388 return ADA_NOT_RENAMING;
14f9c5c9 4389
a737d952 4390 name = TYPE_NAME (type);
aeb5907d
JB
4391 if (name == NULL)
4392 return ADA_NOT_RENAMING;
4393
4394 name = strstr (name, "___XR");
4395 if (name == NULL)
4396 return ADA_NOT_RENAMING;
4397 switch (name[5])
4398 {
4399 case '\0':
4400 case '_':
4401 kind = ADA_OBJECT_RENAMING;
4402 break;
4403 case 'E':
4404 kind = ADA_EXCEPTION_RENAMING;
4405 break;
4406 case 'P':
4407 kind = ADA_PACKAGE_RENAMING;
4408 break;
4409 case 'S':
4410 kind = ADA_SUBPROGRAM_RENAMING;
4411 break;
4412 default:
4413 return ADA_NOT_RENAMING;
4414 }
14f9c5c9 4415
aeb5907d
JB
4416 info = TYPE_FIELD_NAME (type, 0);
4417 if (info == NULL)
4418 return ADA_NOT_RENAMING;
4419 if (renamed_entity != NULL)
4420 *renamed_entity = info;
4421 suffix = strstr (info, "___XE");
4422 if (renaming_expr != NULL)
4423 *renaming_expr = suffix + 5;
4424 if (suffix == NULL || suffix == info)
4425 return ADA_NOT_RENAMING;
4426 if (len != NULL)
4427 *len = suffix - info;
4428 return kind;
a5ee536b
JB
4429}
4430
4431/* Compute the value of the given RENAMING_SYM, which is expected to
4432 be a symbol encoding a renaming expression. BLOCK is the block
4433 used to evaluate the renaming. */
52ce6436 4434
a5ee536b
JB
4435static struct value *
4436ada_read_renaming_var_value (struct symbol *renaming_sym,
3977b71f 4437 const struct block *block)
a5ee536b 4438{
bbc13ae3 4439 const char *sym_name;
a5ee536b 4440
bbc13ae3 4441 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4d01a485
PA
4442 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4443 return evaluate_expression (expr.get ());
a5ee536b 4444}
14f9c5c9 4445\f
d2e4a39e 4446
4c4b4cd2 4447 /* Evaluation: Function Calls */
14f9c5c9 4448
4c4b4cd2 4449/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4450 lvalues, and otherwise has the side-effect of allocating memory
4451 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4452
d2e4a39e 4453static struct value *
40bc484c 4454ensure_lval (struct value *val)
14f9c5c9 4455{
40bc484c
JB
4456 if (VALUE_LVAL (val) == not_lval
4457 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4458 {
df407dfe 4459 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4460 const CORE_ADDR addr =
4461 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4462
a84a8a0d 4463 VALUE_LVAL (val) = lval_memory;
1a088441 4464 set_value_address (val, addr);
40bc484c 4465 write_memory (addr, value_contents (val), len);
c3e5cd34 4466 }
14f9c5c9
AS
4467
4468 return val;
4469}
4470
4471/* Return the value ACTUAL, converted to be an appropriate value for a
4472 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4473 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4474 values not residing in memory, updating it as needed. */
14f9c5c9 4475
a93c0eb6 4476struct value *
40bc484c 4477ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4478{
df407dfe 4479 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4480 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4481 struct type *formal_target =
4482 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4483 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4484 struct type *actual_target =
4485 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4486 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4487
4c4b4cd2 4488 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4489 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4490 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4491 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4492 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4493 {
a84a8a0d 4494 struct value *result;
5b4ee69b 4495
14f9c5c9 4496 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4497 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4498 result = desc_data (actual);
cb923fcc 4499 else if (TYPE_CODE (formal_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4500 {
4501 if (VALUE_LVAL (actual) != lval_memory)
4502 {
4503 struct value *val;
5b4ee69b 4504
df407dfe 4505 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4506 val = allocate_value (actual_type);
990a07ab 4507 memcpy ((char *) value_contents_raw (val),
0fd88904 4508 (char *) value_contents (actual),
4c4b4cd2 4509 TYPE_LENGTH (actual_type));
40bc484c 4510 actual = ensure_lval (val);
4c4b4cd2 4511 }
a84a8a0d 4512 result = value_addr (actual);
4c4b4cd2 4513 }
a84a8a0d
JB
4514 else
4515 return actual;
b1af9e97 4516 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4517 }
4518 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4519 return ada_value_ind (actual);
8344af1e
JB
4520 else if (ada_is_aligner_type (formal_type))
4521 {
4522 /* We need to turn this parameter into an aligner type
4523 as well. */
4524 struct value *aligner = allocate_value (formal_type);
4525 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4526
4527 value_assign_to_component (aligner, component, actual);
4528 return aligner;
4529 }
14f9c5c9
AS
4530
4531 return actual;
4532}
4533
438c98a1
JB
4534/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4535 type TYPE. This is usually an inefficient no-op except on some targets
4536 (such as AVR) where the representation of a pointer and an address
4537 differs. */
4538
4539static CORE_ADDR
4540value_pointer (struct value *value, struct type *type)
4541{
4542 struct gdbarch *gdbarch = get_type_arch (type);
4543 unsigned len = TYPE_LENGTH (type);
224c3ddb 4544 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4545 CORE_ADDR addr;
4546
4547 addr = value_address (value);
4548 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4549 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4550 return addr;
4551}
4552
14f9c5c9 4553
4c4b4cd2
PH
4554/* Push a descriptor of type TYPE for array value ARR on the stack at
4555 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4556 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4557 to-descriptor type rather than a descriptor type), a struct value *
4558 representing a pointer to this descriptor. */
14f9c5c9 4559
d2e4a39e 4560static struct value *
40bc484c 4561make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4562{
d2e4a39e
AS
4563 struct type *bounds_type = desc_bounds_type (type);
4564 struct type *desc_type = desc_base_type (type);
4565 struct value *descriptor = allocate_value (desc_type);
4566 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4567 int i;
d2e4a39e 4568
0963b4bd
MS
4569 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4570 i > 0; i -= 1)
14f9c5c9 4571 {
19f220c3
JK
4572 modify_field (value_type (bounds), value_contents_writeable (bounds),
4573 ada_array_bound (arr, i, 0),
4574 desc_bound_bitpos (bounds_type, i, 0),
4575 desc_bound_bitsize (bounds_type, i, 0));
4576 modify_field (value_type (bounds), value_contents_writeable (bounds),
4577 ada_array_bound (arr, i, 1),
4578 desc_bound_bitpos (bounds_type, i, 1),
4579 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4580 }
d2e4a39e 4581
40bc484c 4582 bounds = ensure_lval (bounds);
d2e4a39e 4583
19f220c3
JK
4584 modify_field (value_type (descriptor),
4585 value_contents_writeable (descriptor),
4586 value_pointer (ensure_lval (arr),
4587 TYPE_FIELD_TYPE (desc_type, 0)),
4588 fat_pntr_data_bitpos (desc_type),
4589 fat_pntr_data_bitsize (desc_type));
4590
4591 modify_field (value_type (descriptor),
4592 value_contents_writeable (descriptor),
4593 value_pointer (bounds,
4594 TYPE_FIELD_TYPE (desc_type, 1)),
4595 fat_pntr_bounds_bitpos (desc_type),
4596 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4597
40bc484c 4598 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4599
4600 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4601 return value_addr (descriptor);
4602 else
4603 return descriptor;
4604}
14f9c5c9 4605\f
3d9434b5
JB
4606 /* Symbol Cache Module */
4607
3d9434b5 4608/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4609 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4610 on the type of entity being printed, the cache can make it as much
4611 as an order of magnitude faster than without it.
4612
4613 The descriptive type DWARF extension has significantly reduced
4614 the need for this cache, at least when DWARF is being used. However,
4615 even in this case, some expensive name-based symbol searches are still
4616 sometimes necessary - to find an XVZ variable, mostly. */
4617
ee01b665 4618/* Initialize the contents of SYM_CACHE. */
3d9434b5 4619
ee01b665
JB
4620static void
4621ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4622{
4623 obstack_init (&sym_cache->cache_space);
4624 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4625}
3d9434b5 4626
ee01b665
JB
4627/* Free the memory used by SYM_CACHE. */
4628
4629static void
4630ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4631{
ee01b665
JB
4632 obstack_free (&sym_cache->cache_space, NULL);
4633 xfree (sym_cache);
4634}
3d9434b5 4635
ee01b665
JB
4636/* Return the symbol cache associated to the given program space PSPACE.
4637 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4638
ee01b665
JB
4639static struct ada_symbol_cache *
4640ada_get_symbol_cache (struct program_space *pspace)
4641{
4642 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4643
66c168ae 4644 if (pspace_data->sym_cache == NULL)
ee01b665 4645 {
66c168ae
JB
4646 pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4647 ada_init_symbol_cache (pspace_data->sym_cache);
ee01b665
JB
4648 }
4649
66c168ae 4650 return pspace_data->sym_cache;
ee01b665 4651}
3d9434b5
JB
4652
4653/* Clear all entries from the symbol cache. */
4654
4655static void
4656ada_clear_symbol_cache (void)
4657{
ee01b665
JB
4658 struct ada_symbol_cache *sym_cache
4659 = ada_get_symbol_cache (current_program_space);
4660
4661 obstack_free (&sym_cache->cache_space, NULL);
4662 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4663}
4664
fe978cb0 4665/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4666 Return it if found, or NULL otherwise. */
4667
4668static struct cache_entry **
fe978cb0 4669find_entry (const char *name, domain_enum domain)
3d9434b5 4670{
ee01b665
JB
4671 struct ada_symbol_cache *sym_cache
4672 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4673 int h = msymbol_hash (name) % HASH_SIZE;
4674 struct cache_entry **e;
4675
ee01b665 4676 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4677 {
fe978cb0 4678 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
3d9434b5
JB
4679 return e;
4680 }
4681 return NULL;
4682}
4683
fe978cb0 4684/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4685 Return 1 if found, 0 otherwise.
4686
4687 If an entry was found and SYM is not NULL, set *SYM to the entry's
4688 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4689
96d887e8 4690static int
fe978cb0 4691lookup_cached_symbol (const char *name, domain_enum domain,
f0c5f9b2 4692 struct symbol **sym, const struct block **block)
96d887e8 4693{
fe978cb0 4694 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4695
4696 if (e == NULL)
4697 return 0;
4698 if (sym != NULL)
4699 *sym = (*e)->sym;
4700 if (block != NULL)
4701 *block = (*e)->block;
4702 return 1;
96d887e8
PH
4703}
4704
3d9434b5 4705/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4706 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4707
96d887e8 4708static void
fe978cb0 4709cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
270140bd 4710 const struct block *block)
96d887e8 4711{
ee01b665
JB
4712 struct ada_symbol_cache *sym_cache
4713 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4714 int h;
4715 char *copy;
4716 struct cache_entry *e;
4717
1994afbf
DE
4718 /* Symbols for builtin types don't have a block.
4719 For now don't cache such symbols. */
4720 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4721 return;
4722
3d9434b5
JB
4723 /* If the symbol is a local symbol, then do not cache it, as a search
4724 for that symbol depends on the context. To determine whether
4725 the symbol is local or not, we check the block where we found it
4726 against the global and static blocks of its associated symtab. */
4727 if (sym
08be3fe3 4728 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4729 GLOBAL_BLOCK) != block
08be3fe3 4730 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4731 STATIC_BLOCK) != block)
3d9434b5
JB
4732 return;
4733
4734 h = msymbol_hash (name) % HASH_SIZE;
e39db4db 4735 e = XOBNEW (&sym_cache->cache_space, cache_entry);
ee01b665
JB
4736 e->next = sym_cache->root[h];
4737 sym_cache->root[h] = e;
224c3ddb
SM
4738 e->name = copy
4739 = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
3d9434b5
JB
4740 strcpy (copy, name);
4741 e->sym = sym;
fe978cb0 4742 e->domain = domain;
3d9434b5 4743 e->block = block;
96d887e8 4744}
4c4b4cd2
PH
4745\f
4746 /* Symbol Lookup */
4747
b5ec771e
PA
4748/* Return the symbol name match type that should be used used when
4749 searching for all symbols matching LOOKUP_NAME.
c0431670
JB
4750
4751 LOOKUP_NAME is expected to be a symbol name after transformation
f98b2e33 4752 for Ada lookups. */
c0431670 4753
b5ec771e
PA
4754static symbol_name_match_type
4755name_match_type_from_name (const char *lookup_name)
c0431670 4756{
b5ec771e
PA
4757 return (strstr (lookup_name, "__") == NULL
4758 ? symbol_name_match_type::WILD
4759 : symbol_name_match_type::FULL);
c0431670
JB
4760}
4761
4c4b4cd2
PH
4762/* Return the result of a standard (literal, C-like) lookup of NAME in
4763 given DOMAIN, visible from lexical block BLOCK. */
4764
4765static struct symbol *
4766standard_lookup (const char *name, const struct block *block,
4767 domain_enum domain)
4768{
acbd605d 4769 /* Initialize it just to avoid a GCC false warning. */
6640a367 4770 struct block_symbol sym = {};
4c4b4cd2 4771
d12307c1
PMR
4772 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4773 return sym.symbol;
a2cd4f14 4774 ada_lookup_encoded_symbol (name, block, domain, &sym);
d12307c1
PMR
4775 cache_symbol (name, domain, sym.symbol, sym.block);
4776 return sym.symbol;
4c4b4cd2
PH
4777}
4778
4779
4780/* Non-zero iff there is at least one non-function/non-enumeral symbol
4781 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4782 since they contend in overloading in the same way. */
4783static int
d12307c1 4784is_nonfunction (struct block_symbol syms[], int n)
4c4b4cd2
PH
4785{
4786 int i;
4787
4788 for (i = 0; i < n; i += 1)
d12307c1
PMR
4789 if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC
4790 && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM
4791 || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
14f9c5c9
AS
4792 return 1;
4793
4794 return 0;
4795}
4796
4797/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4798 struct types. Otherwise, they may not. */
14f9c5c9
AS
4799
4800static int
d2e4a39e 4801equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4802{
d2e4a39e 4803 if (type0 == type1)
14f9c5c9 4804 return 1;
d2e4a39e 4805 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4806 || TYPE_CODE (type0) != TYPE_CODE (type1))
4807 return 0;
d2e4a39e 4808 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4809 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4810 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4811 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4812 return 1;
d2e4a39e 4813
14f9c5c9
AS
4814 return 0;
4815}
4816
4817/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4818 no more defined than that of SYM1. */
14f9c5c9
AS
4819
4820static int
d2e4a39e 4821lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4822{
4823 if (sym0 == sym1)
4824 return 1;
176620f1 4825 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4826 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4827 return 0;
4828
d2e4a39e 4829 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4830 {
4831 case LOC_UNDEF:
4832 return 1;
4833 case LOC_TYPEDEF:
4834 {
4c4b4cd2
PH
4835 struct type *type0 = SYMBOL_TYPE (sym0);
4836 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4837 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4838 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4839 int len0 = strlen (name0);
5b4ee69b 4840
4c4b4cd2
PH
4841 return
4842 TYPE_CODE (type0) == TYPE_CODE (type1)
4843 && (equiv_types (type0, type1)
4844 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
61012eef 4845 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4846 }
4847 case LOC_CONST:
4848 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4849 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4850 default:
4851 return 0;
14f9c5c9
AS
4852 }
4853}
4854
d12307c1 4855/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4c4b4cd2 4856 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4857
4858static void
76a01679
JB
4859add_defn_to_vec (struct obstack *obstackp,
4860 struct symbol *sym,
f0c5f9b2 4861 const struct block *block)
14f9c5c9
AS
4862{
4863 int i;
d12307c1 4864 struct block_symbol *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4865
529cad9c
PH
4866 /* Do not try to complete stub types, as the debugger is probably
4867 already scanning all symbols matching a certain name at the
4868 time when this function is called. Trying to replace the stub
4869 type by its associated full type will cause us to restart a scan
4870 which may lead to an infinite recursion. Instead, the client
4871 collecting the matching symbols will end up collecting several
4872 matches, with at least one of them complete. It can then filter
4873 out the stub ones if needed. */
4874
4c4b4cd2
PH
4875 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4876 {
d12307c1 4877 if (lesseq_defined_than (sym, prevDefns[i].symbol))
4c4b4cd2 4878 return;
d12307c1 4879 else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4c4b4cd2 4880 {
d12307c1 4881 prevDefns[i].symbol = sym;
4c4b4cd2 4882 prevDefns[i].block = block;
4c4b4cd2 4883 return;
76a01679 4884 }
4c4b4cd2
PH
4885 }
4886
4887 {
d12307c1 4888 struct block_symbol info;
4c4b4cd2 4889
d12307c1 4890 info.symbol = sym;
4c4b4cd2 4891 info.block = block;
d12307c1 4892 obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4c4b4cd2
PH
4893 }
4894}
4895
d12307c1
PMR
4896/* Number of block_symbol structures currently collected in current vector in
4897 OBSTACKP. */
4c4b4cd2 4898
76a01679
JB
4899static int
4900num_defns_collected (struct obstack *obstackp)
4c4b4cd2 4901{
d12307c1 4902 return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4c4b4cd2
PH
4903}
4904
d12307c1
PMR
4905/* Vector of block_symbol structures currently collected in current vector in
4906 OBSTACKP. If FINISH, close off the vector and return its final address. */
4c4b4cd2 4907
d12307c1 4908static struct block_symbol *
4c4b4cd2
PH
4909defns_collected (struct obstack *obstackp, int finish)
4910{
4911 if (finish)
224c3ddb 4912 return (struct block_symbol *) obstack_finish (obstackp);
4c4b4cd2 4913 else
d12307c1 4914 return (struct block_symbol *) obstack_base (obstackp);
4c4b4cd2
PH
4915}
4916
7c7b6655
TT
4917/* Return a bound minimal symbol matching NAME according to Ada
4918 decoding rules. Returns an invalid symbol if there is no such
4919 minimal symbol. Names prefixed with "standard__" are handled
4920 specially: "standard__" is first stripped off, and only static and
4921 global symbols are searched. */
4c4b4cd2 4922
7c7b6655 4923struct bound_minimal_symbol
96d887e8 4924ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4925{
7c7b6655 4926 struct bound_minimal_symbol result;
4c4b4cd2 4927
7c7b6655
TT
4928 memset (&result, 0, sizeof (result));
4929
b5ec771e
PA
4930 symbol_name_match_type match_type = name_match_type_from_name (name);
4931 lookup_name_info lookup_name (name, match_type);
4932
4933 symbol_name_matcher_ftype *match_name
4934 = ada_get_symbol_name_matcher (lookup_name);
4c4b4cd2 4935
2030c079 4936 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 4937 {
7932255d 4938 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf
TT
4939 {
4940 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), lookup_name, NULL)
4941 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4942 {
4943 result.minsym = msymbol;
4944 result.objfile = objfile;
4945 break;
4946 }
4947 }
4948 }
4c4b4cd2 4949
7c7b6655 4950 return result;
96d887e8 4951}
4c4b4cd2 4952
2ff0a947
TT
4953/* Return all the bound minimal symbols matching NAME according to Ada
4954 decoding rules. Returns an empty vector if there is no such
4955 minimal symbol. Names prefixed with "standard__" are handled
4956 specially: "standard__" is first stripped off, and only static and
4957 global symbols are searched. */
4958
4959static std::vector<struct bound_minimal_symbol>
4960ada_lookup_simple_minsyms (const char *name)
4961{
4962 std::vector<struct bound_minimal_symbol> result;
4963
4964 symbol_name_match_type match_type = name_match_type_from_name (name);
4965 lookup_name_info lookup_name (name, match_type);
4966
4967 symbol_name_matcher_ftype *match_name
4968 = ada_get_symbol_name_matcher (lookup_name);
4969
4970 for (objfile *objfile : current_program_space->objfiles ())
4971 {
4972 for (minimal_symbol *msymbol : objfile->msymbols ())
4973 {
4974 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), lookup_name, NULL)
4975 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4976 result.push_back ({msymbol, objfile});
4977 }
4978 }
4979
4980 return result;
4981}
4982
96d887e8
PH
4983/* For all subprograms that statically enclose the subprogram of the
4984 selected frame, add symbols matching identifier NAME in DOMAIN
4985 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4986 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4987 with a wildcard prefix. */
4c4b4cd2 4988
96d887e8
PH
4989static void
4990add_symbols_from_enclosing_procs (struct obstack *obstackp,
b5ec771e
PA
4991 const lookup_name_info &lookup_name,
4992 domain_enum domain)
96d887e8 4993{
96d887e8 4994}
14f9c5c9 4995
96d887e8
PH
4996/* True if TYPE is definitely an artificial type supplied to a symbol
4997 for which no debugging information was given in the symbol file. */
14f9c5c9 4998
96d887e8
PH
4999static int
5000is_nondebugging_type (struct type *type)
5001{
0d5cff50 5002 const char *name = ada_type_name (type);
5b4ee69b 5003
96d887e8
PH
5004 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
5005}
4c4b4cd2 5006
8f17729f
JB
5007/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
5008 that are deemed "identical" for practical purposes.
5009
5010 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
5011 types and that their number of enumerals is identical (in other
5012 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
5013
5014static int
5015ada_identical_enum_types_p (struct type *type1, struct type *type2)
5016{
5017 int i;
5018
5019 /* The heuristic we use here is fairly conservative. We consider
5020 that 2 enumerate types are identical if they have the same
5021 number of enumerals and that all enumerals have the same
5022 underlying value and name. */
5023
5024 /* All enums in the type should have an identical underlying value. */
5025 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 5026 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
5027 return 0;
5028
5029 /* All enumerals should also have the same name (modulo any numerical
5030 suffix). */
5031 for (i = 0; i < TYPE_NFIELDS (type1); i++)
5032 {
0d5cff50
DE
5033 const char *name_1 = TYPE_FIELD_NAME (type1, i);
5034 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
5035 int len_1 = strlen (name_1);
5036 int len_2 = strlen (name_2);
5037
5038 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
5039 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
5040 if (len_1 != len_2
5041 || strncmp (TYPE_FIELD_NAME (type1, i),
5042 TYPE_FIELD_NAME (type2, i),
5043 len_1) != 0)
5044 return 0;
5045 }
5046
5047 return 1;
5048}
5049
5050/* Return nonzero if all the symbols in SYMS are all enumeral symbols
5051 that are deemed "identical" for practical purposes. Sometimes,
5052 enumerals are not strictly identical, but their types are so similar
5053 that they can be considered identical.
5054
5055 For instance, consider the following code:
5056
5057 type Color is (Black, Red, Green, Blue, White);
5058 type RGB_Color is new Color range Red .. Blue;
5059
5060 Type RGB_Color is a subrange of an implicit type which is a copy
5061 of type Color. If we call that implicit type RGB_ColorB ("B" is
5062 for "Base Type"), then type RGB_ColorB is a copy of type Color.
5063 As a result, when an expression references any of the enumeral
5064 by name (Eg. "print green"), the expression is technically
5065 ambiguous and the user should be asked to disambiguate. But
5066 doing so would only hinder the user, since it wouldn't matter
5067 what choice he makes, the outcome would always be the same.
5068 So, for practical purposes, we consider them as the same. */
5069
5070static int
54d343a2 5071symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
8f17729f
JB
5072{
5073 int i;
5074
5075 /* Before performing a thorough comparison check of each type,
5076 we perform a series of inexpensive checks. We expect that these
5077 checks will quickly fail in the vast majority of cases, and thus
5078 help prevent the unnecessary use of a more expensive comparison.
5079 Said comparison also expects us to make some of these checks
5080 (see ada_identical_enum_types_p). */
5081
5082 /* Quick check: All symbols should have an enum type. */
54d343a2 5083 for (i = 0; i < syms.size (); i++)
d12307c1 5084 if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM)
8f17729f
JB
5085 return 0;
5086
5087 /* Quick check: They should all have the same value. */
54d343a2 5088 for (i = 1; i < syms.size (); i++)
d12307c1 5089 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
5090 return 0;
5091
5092 /* Quick check: They should all have the same number of enumerals. */
54d343a2 5093 for (i = 1; i < syms.size (); i++)
d12307c1
PMR
5094 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol))
5095 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
5096 return 0;
5097
5098 /* All the sanity checks passed, so we might have a set of
5099 identical enumeration types. Perform a more complete
5100 comparison of the type of each symbol. */
54d343a2 5101 for (i = 1; i < syms.size (); i++)
d12307c1
PMR
5102 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
5103 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
5104 return 0;
5105
5106 return 1;
5107}
5108
54d343a2 5109/* Remove any non-debugging symbols in SYMS that definitely
96d887e8
PH
5110 duplicate other symbols in the list (The only case I know of where
5111 this happens is when object files containing stabs-in-ecoff are
5112 linked with files containing ordinary ecoff debugging symbols (or no
5113 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
5114 Returns the number of items in the modified list. */
4c4b4cd2 5115
96d887e8 5116static int
54d343a2 5117remove_extra_symbols (std::vector<struct block_symbol> *syms)
96d887e8
PH
5118{
5119 int i, j;
4c4b4cd2 5120
8f17729f
JB
5121 /* We should never be called with less than 2 symbols, as there
5122 cannot be any extra symbol in that case. But it's easy to
5123 handle, since we have nothing to do in that case. */
54d343a2
TT
5124 if (syms->size () < 2)
5125 return syms->size ();
8f17729f 5126
96d887e8 5127 i = 0;
54d343a2 5128 while (i < syms->size ())
96d887e8 5129 {
a35ddb44 5130 int remove_p = 0;
339c13b6
JB
5131
5132 /* If two symbols have the same name and one of them is a stub type,
5133 the get rid of the stub. */
5134
54d343a2
TT
5135 if (TYPE_STUB (SYMBOL_TYPE ((*syms)[i].symbol))
5136 && SYMBOL_LINKAGE_NAME ((*syms)[i].symbol) != NULL)
339c13b6 5137 {
54d343a2 5138 for (j = 0; j < syms->size (); j++)
339c13b6
JB
5139 {
5140 if (j != i
54d343a2
TT
5141 && !TYPE_STUB (SYMBOL_TYPE ((*syms)[j].symbol))
5142 && SYMBOL_LINKAGE_NAME ((*syms)[j].symbol) != NULL
5143 && strcmp (SYMBOL_LINKAGE_NAME ((*syms)[i].symbol),
5144 SYMBOL_LINKAGE_NAME ((*syms)[j].symbol)) == 0)
a35ddb44 5145 remove_p = 1;
339c13b6
JB
5146 }
5147 }
5148
5149 /* Two symbols with the same name, same class and same address
5150 should be identical. */
5151
54d343a2
TT
5152 else if (SYMBOL_LINKAGE_NAME ((*syms)[i].symbol) != NULL
5153 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5154 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
96d887e8 5155 {
54d343a2 5156 for (j = 0; j < syms->size (); j += 1)
96d887e8
PH
5157 {
5158 if (i != j
54d343a2
TT
5159 && SYMBOL_LINKAGE_NAME ((*syms)[j].symbol) != NULL
5160 && strcmp (SYMBOL_LINKAGE_NAME ((*syms)[i].symbol),
5161 SYMBOL_LINKAGE_NAME ((*syms)[j].symbol)) == 0
5162 && SYMBOL_CLASS ((*syms)[i].symbol)
5163 == SYMBOL_CLASS ((*syms)[j].symbol)
5164 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5165 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
a35ddb44 5166 remove_p = 1;
4c4b4cd2 5167 }
4c4b4cd2 5168 }
339c13b6 5169
a35ddb44 5170 if (remove_p)
54d343a2 5171 syms->erase (syms->begin () + i);
339c13b6 5172
96d887e8 5173 i += 1;
14f9c5c9 5174 }
8f17729f
JB
5175
5176 /* If all the remaining symbols are identical enumerals, then
5177 just keep the first one and discard the rest.
5178
5179 Unlike what we did previously, we do not discard any entry
5180 unless they are ALL identical. This is because the symbol
5181 comparison is not a strict comparison, but rather a practical
5182 comparison. If all symbols are considered identical, then
5183 we can just go ahead and use the first one and discard the rest.
5184 But if we cannot reduce the list to a single element, we have
5185 to ask the user to disambiguate anyways. And if we have to
5186 present a multiple-choice menu, it's less confusing if the list
5187 isn't missing some choices that were identical and yet distinct. */
54d343a2
TT
5188 if (symbols_are_identical_enums (*syms))
5189 syms->resize (1);
8f17729f 5190
54d343a2 5191 return syms->size ();
14f9c5c9
AS
5192}
5193
96d887e8
PH
5194/* Given a type that corresponds to a renaming entity, use the type name
5195 to extract the scope (package name or function name, fully qualified,
5196 and following the GNAT encoding convention) where this renaming has been
49d83361 5197 defined. */
4c4b4cd2 5198
49d83361 5199static std::string
96d887e8 5200xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5201{
96d887e8 5202 /* The renaming types adhere to the following convention:
0963b4bd 5203 <scope>__<rename>___<XR extension>.
96d887e8
PH
5204 So, to extract the scope, we search for the "___XR" extension,
5205 and then backtrack until we find the first "__". */
76a01679 5206
a737d952 5207 const char *name = TYPE_NAME (renaming_type);
108d56a4
SM
5208 const char *suffix = strstr (name, "___XR");
5209 const char *last;
14f9c5c9 5210
96d887e8
PH
5211 /* Now, backtrack a bit until we find the first "__". Start looking
5212 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5213
96d887e8
PH
5214 for (last = suffix - 3; last > name; last--)
5215 if (last[0] == '_' && last[1] == '_')
5216 break;
76a01679 5217
96d887e8 5218 /* Make a copy of scope and return it. */
49d83361 5219 return std::string (name, last);
4c4b4cd2
PH
5220}
5221
96d887e8 5222/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5223
96d887e8
PH
5224static int
5225is_package_name (const char *name)
4c4b4cd2 5226{
96d887e8
PH
5227 /* Here, We take advantage of the fact that no symbols are generated
5228 for packages, while symbols are generated for each function.
5229 So the condition for NAME represent a package becomes equivalent
5230 to NAME not existing in our list of symbols. There is only one
5231 small complication with library-level functions (see below). */
4c4b4cd2 5232
96d887e8
PH
5233 /* If it is a function that has not been defined at library level,
5234 then we should be able to look it up in the symbols. */
5235 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5236 return 0;
14f9c5c9 5237
96d887e8
PH
5238 /* Library-level function names start with "_ada_". See if function
5239 "_ada_" followed by NAME can be found. */
14f9c5c9 5240
96d887e8 5241 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5242 functions names cannot contain "__" in them. */
96d887e8
PH
5243 if (strstr (name, "__") != NULL)
5244 return 0;
4c4b4cd2 5245
528e1572 5246 std::string fun_name = string_printf ("_ada_%s", name);
14f9c5c9 5247
528e1572 5248 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
96d887e8 5249}
14f9c5c9 5250
96d887e8 5251/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5252 not visible from FUNCTION_NAME. */
14f9c5c9 5253
96d887e8 5254static int
0d5cff50 5255old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5256{
aeb5907d
JB
5257 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5258 return 0;
5259
49d83361 5260 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
14f9c5c9 5261
96d887e8 5262 /* If the rename has been defined in a package, then it is visible. */
49d83361
TT
5263 if (is_package_name (scope.c_str ()))
5264 return 0;
14f9c5c9 5265
96d887e8
PH
5266 /* Check that the rename is in the current function scope by checking
5267 that its name starts with SCOPE. */
76a01679 5268
96d887e8
PH
5269 /* If the function name starts with "_ada_", it means that it is
5270 a library-level function. Strip this prefix before doing the
5271 comparison, as the encoding for the renaming does not contain
5272 this prefix. */
61012eef 5273 if (startswith (function_name, "_ada_"))
96d887e8 5274 function_name += 5;
f26caa11 5275
49d83361 5276 return !startswith (function_name, scope.c_str ());
f26caa11
PH
5277}
5278
aeb5907d
JB
5279/* Remove entries from SYMS that corresponds to a renaming entity that
5280 is not visible from the function associated with CURRENT_BLOCK or
5281 that is superfluous due to the presence of more specific renaming
5282 information. Places surviving symbols in the initial entries of
5283 SYMS and returns the number of surviving symbols.
96d887e8
PH
5284
5285 Rationale:
aeb5907d
JB
5286 First, in cases where an object renaming is implemented as a
5287 reference variable, GNAT may produce both the actual reference
5288 variable and the renaming encoding. In this case, we discard the
5289 latter.
5290
5291 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5292 entity. Unfortunately, STABS currently does not support the definition
5293 of types that are local to a given lexical block, so all renamings types
5294 are emitted at library level. As a consequence, if an application
5295 contains two renaming entities using the same name, and a user tries to
5296 print the value of one of these entities, the result of the ada symbol
5297 lookup will also contain the wrong renaming type.
f26caa11 5298
96d887e8
PH
5299 This function partially covers for this limitation by attempting to
5300 remove from the SYMS list renaming symbols that should be visible
5301 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5302 method with the current information available. The implementation
5303 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5304
5305 - When the user tries to print a rename in a function while there
5306 is another rename entity defined in a package: Normally, the
5307 rename in the function has precedence over the rename in the
5308 package, so the latter should be removed from the list. This is
5309 currently not the case.
5310
5311 - This function will incorrectly remove valid renames if
5312 the CURRENT_BLOCK corresponds to a function which symbol name
5313 has been changed by an "Export" pragma. As a consequence,
5314 the user will be unable to print such rename entities. */
4c4b4cd2 5315
14f9c5c9 5316static int
54d343a2
TT
5317remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5318 const struct block *current_block)
4c4b4cd2
PH
5319{
5320 struct symbol *current_function;
0d5cff50 5321 const char *current_function_name;
4c4b4cd2 5322 int i;
aeb5907d
JB
5323 int is_new_style_renaming;
5324
5325 /* If there is both a renaming foo___XR... encoded as a variable and
5326 a simple variable foo in the same block, discard the latter.
0963b4bd 5327 First, zero out such symbols, then compress. */
aeb5907d 5328 is_new_style_renaming = 0;
54d343a2 5329 for (i = 0; i < syms->size (); i += 1)
aeb5907d 5330 {
54d343a2
TT
5331 struct symbol *sym = (*syms)[i].symbol;
5332 const struct block *block = (*syms)[i].block;
aeb5907d
JB
5333 const char *name;
5334 const char *suffix;
5335
5336 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5337 continue;
5338 name = SYMBOL_LINKAGE_NAME (sym);
5339 suffix = strstr (name, "___XR");
5340
5341 if (suffix != NULL)
5342 {
5343 int name_len = suffix - name;
5344 int j;
5b4ee69b 5345
aeb5907d 5346 is_new_style_renaming = 1;
54d343a2
TT
5347 for (j = 0; j < syms->size (); j += 1)
5348 if (i != j && (*syms)[j].symbol != NULL
5349 && strncmp (name, SYMBOL_LINKAGE_NAME ((*syms)[j].symbol),
aeb5907d 5350 name_len) == 0
54d343a2
TT
5351 && block == (*syms)[j].block)
5352 (*syms)[j].symbol = NULL;
aeb5907d
JB
5353 }
5354 }
5355 if (is_new_style_renaming)
5356 {
5357 int j, k;
5358
54d343a2
TT
5359 for (j = k = 0; j < syms->size (); j += 1)
5360 if ((*syms)[j].symbol != NULL)
aeb5907d 5361 {
54d343a2 5362 (*syms)[k] = (*syms)[j];
aeb5907d
JB
5363 k += 1;
5364 }
5365 return k;
5366 }
4c4b4cd2
PH
5367
5368 /* Extract the function name associated to CURRENT_BLOCK.
5369 Abort if unable to do so. */
76a01679 5370
4c4b4cd2 5371 if (current_block == NULL)
54d343a2 5372 return syms->size ();
76a01679 5373
7f0df278 5374 current_function = block_linkage_function (current_block);
4c4b4cd2 5375 if (current_function == NULL)
54d343a2 5376 return syms->size ();
4c4b4cd2
PH
5377
5378 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5379 if (current_function_name == NULL)
54d343a2 5380 return syms->size ();
4c4b4cd2
PH
5381
5382 /* Check each of the symbols, and remove it from the list if it is
5383 a type corresponding to a renaming that is out of the scope of
5384 the current block. */
5385
5386 i = 0;
54d343a2 5387 while (i < syms->size ())
4c4b4cd2 5388 {
54d343a2 5389 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
aeb5907d 5390 == ADA_OBJECT_RENAMING
54d343a2
TT
5391 && old_renaming_is_invisible ((*syms)[i].symbol,
5392 current_function_name))
5393 syms->erase (syms->begin () + i);
4c4b4cd2
PH
5394 else
5395 i += 1;
5396 }
5397
54d343a2 5398 return syms->size ();
4c4b4cd2
PH
5399}
5400
339c13b6
JB
5401/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5402 whose name and domain match NAME and DOMAIN respectively.
5403 If no match was found, then extend the search to "enclosing"
5404 routines (in other words, if we're inside a nested function,
5405 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5406 If WILD_MATCH_P is nonzero, perform the naming matching in
5407 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5408
5409 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5410
5411static void
b5ec771e
PA
5412ada_add_local_symbols (struct obstack *obstackp,
5413 const lookup_name_info &lookup_name,
5414 const struct block *block, domain_enum domain)
339c13b6
JB
5415{
5416 int block_depth = 0;
5417
5418 while (block != NULL)
5419 {
5420 block_depth += 1;
b5ec771e 5421 ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
339c13b6
JB
5422
5423 /* If we found a non-function match, assume that's the one. */
5424 if (is_nonfunction (defns_collected (obstackp, 0),
5425 num_defns_collected (obstackp)))
5426 return;
5427
5428 block = BLOCK_SUPERBLOCK (block);
5429 }
5430
5431 /* If no luck so far, try to find NAME as a local symbol in some lexically
5432 enclosing subprogram. */
5433 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
b5ec771e 5434 add_symbols_from_enclosing_procs (obstackp, lookup_name, domain);
339c13b6
JB
5435}
5436
ccefe4c4 5437/* An object of this type is used as the user_data argument when
40658b94 5438 calling the map_matching_symbols method. */
ccefe4c4 5439
40658b94 5440struct match_data
ccefe4c4 5441{
40658b94 5442 struct objfile *objfile;
ccefe4c4 5443 struct obstack *obstackp;
40658b94
PH
5444 struct symbol *arg_sym;
5445 int found_sym;
ccefe4c4
TT
5446};
5447
22cee43f 5448/* A callback for add_nonlocal_symbols that adds SYM, found in BLOCK,
40658b94
PH
5449 to a list of symbols. DATA0 is a pointer to a struct match_data *
5450 containing the obstack that collects the symbol list, the file that SYM
5451 must come from, a flag indicating whether a non-argument symbol has
5452 been found in the current block, and the last argument symbol
5453 passed in SYM within the current block (if any). When SYM is null,
5454 marking the end of a block, the argument symbol is added if no
5455 other has been found. */
ccefe4c4 5456
40658b94 5457static int
582942f4
TT
5458aux_add_nonlocal_symbols (const struct block *block, struct symbol *sym,
5459 void *data0)
ccefe4c4 5460{
40658b94
PH
5461 struct match_data *data = (struct match_data *) data0;
5462
5463 if (sym == NULL)
5464 {
5465 if (!data->found_sym && data->arg_sym != NULL)
5466 add_defn_to_vec (data->obstackp,
5467 fixup_symbol_section (data->arg_sym, data->objfile),
5468 block);
5469 data->found_sym = 0;
5470 data->arg_sym = NULL;
5471 }
5472 else
5473 {
5474 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5475 return 0;
5476 else if (SYMBOL_IS_ARGUMENT (sym))
5477 data->arg_sym = sym;
5478 else
5479 {
5480 data->found_sym = 1;
5481 add_defn_to_vec (data->obstackp,
5482 fixup_symbol_section (sym, data->objfile),
5483 block);
5484 }
5485 }
5486 return 0;
5487}
5488
b5ec771e
PA
5489/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5490 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
5491 symbols to OBSTACKP. Return whether we found such symbols. */
22cee43f
PMR
5492
5493static int
5494ada_add_block_renamings (struct obstack *obstackp,
5495 const struct block *block,
b5ec771e
PA
5496 const lookup_name_info &lookup_name,
5497 domain_enum domain)
22cee43f
PMR
5498{
5499 struct using_direct *renaming;
5500 int defns_mark = num_defns_collected (obstackp);
5501
b5ec771e
PA
5502 symbol_name_matcher_ftype *name_match
5503 = ada_get_symbol_name_matcher (lookup_name);
5504
22cee43f
PMR
5505 for (renaming = block_using (block);
5506 renaming != NULL;
5507 renaming = renaming->next)
5508 {
5509 const char *r_name;
22cee43f
PMR
5510
5511 /* Avoid infinite recursions: skip this renaming if we are actually
5512 already traversing it.
5513
5514 Currently, symbol lookup in Ada don't use the namespace machinery from
5515 C++/Fortran support: skip namespace imports that use them. */
5516 if (renaming->searched
5517 || (renaming->import_src != NULL
5518 && renaming->import_src[0] != '\0')
5519 || (renaming->import_dest != NULL
5520 && renaming->import_dest[0] != '\0'))
5521 continue;
5522 renaming->searched = 1;
5523
5524 /* TODO: here, we perform another name-based symbol lookup, which can
5525 pull its own multiple overloads. In theory, we should be able to do
5526 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5527 not a simple name. But in order to do this, we would need to enhance
5528 the DWARF reader to associate a symbol to this renaming, instead of a
5529 name. So, for now, we do something simpler: re-use the C++/Fortran
5530 namespace machinery. */
5531 r_name = (renaming->alias != NULL
5532 ? renaming->alias
5533 : renaming->declaration);
b5ec771e
PA
5534 if (name_match (r_name, lookup_name, NULL))
5535 {
5536 lookup_name_info decl_lookup_name (renaming->declaration,
5537 lookup_name.match_type ());
5538 ada_add_all_symbols (obstackp, block, decl_lookup_name, domain,
5539 1, NULL);
5540 }
22cee43f
PMR
5541 renaming->searched = 0;
5542 }
5543 return num_defns_collected (obstackp) != defns_mark;
5544}
5545
db230ce3
JB
5546/* Implements compare_names, but only applying the comparision using
5547 the given CASING. */
5b4ee69b 5548
40658b94 5549static int
db230ce3
JB
5550compare_names_with_case (const char *string1, const char *string2,
5551 enum case_sensitivity casing)
40658b94
PH
5552{
5553 while (*string1 != '\0' && *string2 != '\0')
5554 {
db230ce3
JB
5555 char c1, c2;
5556
40658b94
PH
5557 if (isspace (*string1) || isspace (*string2))
5558 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5559
5560 if (casing == case_sensitive_off)
5561 {
5562 c1 = tolower (*string1);
5563 c2 = tolower (*string2);
5564 }
5565 else
5566 {
5567 c1 = *string1;
5568 c2 = *string2;
5569 }
5570 if (c1 != c2)
40658b94 5571 break;
db230ce3 5572
40658b94
PH
5573 string1 += 1;
5574 string2 += 1;
5575 }
db230ce3 5576
40658b94
PH
5577 switch (*string1)
5578 {
5579 case '(':
5580 return strcmp_iw_ordered (string1, string2);
5581 case '_':
5582 if (*string2 == '\0')
5583 {
052874e8 5584 if (is_name_suffix (string1))
40658b94
PH
5585 return 0;
5586 else
1a1d5513 5587 return 1;
40658b94 5588 }
dbb8534f 5589 /* FALLTHROUGH */
40658b94
PH
5590 default:
5591 if (*string2 == '(')
5592 return strcmp_iw_ordered (string1, string2);
5593 else
db230ce3
JB
5594 {
5595 if (casing == case_sensitive_off)
5596 return tolower (*string1) - tolower (*string2);
5597 else
5598 return *string1 - *string2;
5599 }
40658b94 5600 }
ccefe4c4
TT
5601}
5602
db230ce3
JB
5603/* Compare STRING1 to STRING2, with results as for strcmp.
5604 Compatible with strcmp_iw_ordered in that...
5605
5606 strcmp_iw_ordered (STRING1, STRING2) <= 0
5607
5608 ... implies...
5609
5610 compare_names (STRING1, STRING2) <= 0
5611
5612 (they may differ as to what symbols compare equal). */
5613
5614static int
5615compare_names (const char *string1, const char *string2)
5616{
5617 int result;
5618
5619 /* Similar to what strcmp_iw_ordered does, we need to perform
5620 a case-insensitive comparison first, and only resort to
5621 a second, case-sensitive, comparison if the first one was
5622 not sufficient to differentiate the two strings. */
5623
5624 result = compare_names_with_case (string1, string2, case_sensitive_off);
5625 if (result == 0)
5626 result = compare_names_with_case (string1, string2, case_sensitive_on);
5627
5628 return result;
5629}
5630
b5ec771e
PA
5631/* Convenience function to get at the Ada encoded lookup name for
5632 LOOKUP_NAME, as a C string. */
5633
5634static const char *
5635ada_lookup_name (const lookup_name_info &lookup_name)
5636{
5637 return lookup_name.ada ().lookup_name ().c_str ();
5638}
5639
339c13b6 5640/* Add to OBSTACKP all non-local symbols whose name and domain match
b5ec771e
PA
5641 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5642 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5643 symbols otherwise. */
339c13b6
JB
5644
5645static void
b5ec771e
PA
5646add_nonlocal_symbols (struct obstack *obstackp,
5647 const lookup_name_info &lookup_name,
5648 domain_enum domain, int global)
339c13b6 5649{
40658b94 5650 struct match_data data;
339c13b6 5651
6475f2fe 5652 memset (&data, 0, sizeof data);
ccefe4c4 5653 data.obstackp = obstackp;
339c13b6 5654
b5ec771e
PA
5655 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5656
2030c079 5657 for (objfile *objfile : current_program_space->objfiles ())
40658b94
PH
5658 {
5659 data.objfile = objfile;
5660
5661 if (is_wild_match)
b5ec771e
PA
5662 objfile->sf->qf->map_matching_symbols (objfile, lookup_name.name ().c_str (),
5663 domain, global,
4186eb54 5664 aux_add_nonlocal_symbols, &data,
b5ec771e
PA
5665 symbol_name_match_type::WILD,
5666 NULL);
40658b94 5667 else
b5ec771e
PA
5668 objfile->sf->qf->map_matching_symbols (objfile, lookup_name.name ().c_str (),
5669 domain, global,
4186eb54 5670 aux_add_nonlocal_symbols, &data,
b5ec771e
PA
5671 symbol_name_match_type::FULL,
5672 compare_names);
22cee43f 5673
b669c953 5674 for (compunit_symtab *cu : objfile->compunits ())
22cee43f
PMR
5675 {
5676 const struct block *global_block
5677 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5678
b5ec771e
PA
5679 if (ada_add_block_renamings (obstackp, global_block, lookup_name,
5680 domain))
22cee43f
PMR
5681 data.found_sym = 1;
5682 }
40658b94
PH
5683 }
5684
5685 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5686 {
b5ec771e
PA
5687 const char *name = ada_lookup_name (lookup_name);
5688 std::string name1 = std::string ("<_ada_") + name + '>';
5689
2030c079 5690 for (objfile *objfile : current_program_space->objfiles ())
40658b94 5691 {
40658b94 5692 data.objfile = objfile;
b5ec771e
PA
5693 objfile->sf->qf->map_matching_symbols (objfile, name1.c_str (),
5694 domain, global,
0963b4bd
MS
5695 aux_add_nonlocal_symbols,
5696 &data,
b5ec771e
PA
5697 symbol_name_match_type::FULL,
5698 compare_names);
40658b94
PH
5699 }
5700 }
339c13b6
JB
5701}
5702
b5ec771e
PA
5703/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5704 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
5705 returning the number of matches. Add these to OBSTACKP.
4eeaa230 5706
22cee43f
PMR
5707 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5708 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5709 is the one match returned (no other matches in that or
d9680e73 5710 enclosing blocks is returned). If there are any matches in or
22cee43f 5711 surrounding BLOCK, then these alone are returned.
4eeaa230 5712
b5ec771e
PA
5713 Names prefixed with "standard__" are handled specially:
5714 "standard__" is first stripped off (by the lookup_name
5715 constructor), and only static and global symbols are searched.
14f9c5c9 5716
22cee43f
PMR
5717 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5718 to lookup global symbols. */
5719
5720static void
5721ada_add_all_symbols (struct obstack *obstackp,
5722 const struct block *block,
b5ec771e 5723 const lookup_name_info &lookup_name,
22cee43f
PMR
5724 domain_enum domain,
5725 int full_search,
5726 int *made_global_lookup_p)
14f9c5c9
AS
5727{
5728 struct symbol *sym;
14f9c5c9 5729
22cee43f
PMR
5730 if (made_global_lookup_p)
5731 *made_global_lookup_p = 0;
339c13b6
JB
5732
5733 /* Special case: If the user specifies a symbol name inside package
5734 Standard, do a non-wild matching of the symbol name without
5735 the "standard__" prefix. This was primarily introduced in order
5736 to allow the user to specifically access the standard exceptions
5737 using, for instance, Standard.Constraint_Error when Constraint_Error
5738 is ambiguous (due to the user defining its own Constraint_Error
5739 entity inside its program). */
b5ec771e
PA
5740 if (lookup_name.ada ().standard_p ())
5741 block = NULL;
4c4b4cd2 5742
339c13b6 5743 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5744
4eeaa230
DE
5745 if (block != NULL)
5746 {
5747 if (full_search)
b5ec771e 5748 ada_add_local_symbols (obstackp, lookup_name, block, domain);
4eeaa230
DE
5749 else
5750 {
5751 /* In the !full_search case we're are being called by
5752 ada_iterate_over_symbols, and we don't want to search
5753 superblocks. */
b5ec771e 5754 ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
4eeaa230 5755 }
22cee43f
PMR
5756 if (num_defns_collected (obstackp) > 0 || !full_search)
5757 return;
4eeaa230 5758 }
d2e4a39e 5759
339c13b6
JB
5760 /* No non-global symbols found. Check our cache to see if we have
5761 already performed this search before. If we have, then return
5762 the same result. */
5763
b5ec771e
PA
5764 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5765 domain, &sym, &block))
4c4b4cd2
PH
5766 {
5767 if (sym != NULL)
b5ec771e 5768 add_defn_to_vec (obstackp, sym, block);
22cee43f 5769 return;
4c4b4cd2 5770 }
14f9c5c9 5771
22cee43f
PMR
5772 if (made_global_lookup_p)
5773 *made_global_lookup_p = 1;
b1eedac9 5774
339c13b6
JB
5775 /* Search symbols from all global blocks. */
5776
b5ec771e 5777 add_nonlocal_symbols (obstackp, lookup_name, domain, 1);
d2e4a39e 5778
4c4b4cd2 5779 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5780 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5781
22cee43f 5782 if (num_defns_collected (obstackp) == 0)
b5ec771e 5783 add_nonlocal_symbols (obstackp, lookup_name, domain, 0);
22cee43f
PMR
5784}
5785
b5ec771e
PA
5786/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
5787 is non-zero, enclosing scope and in global scopes, returning the number of
22cee43f 5788 matches.
54d343a2
TT
5789 Fills *RESULTS with (SYM,BLOCK) tuples, indicating the symbols
5790 found and the blocks and symbol tables (if any) in which they were
5791 found.
22cee43f
PMR
5792
5793 When full_search is non-zero, any non-function/non-enumeral
5794 symbol match within the nest of blocks whose innermost member is BLOCK,
5795 is the one match returned (no other matches in that or
5796 enclosing blocks is returned). If there are any matches in or
5797 surrounding BLOCK, then these alone are returned.
5798
5799 Names prefixed with "standard__" are handled specially: "standard__"
5800 is first stripped off, and only static and global symbols are searched. */
5801
5802static int
b5ec771e
PA
5803ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5804 const struct block *block,
22cee43f 5805 domain_enum domain,
54d343a2 5806 std::vector<struct block_symbol> *results,
22cee43f
PMR
5807 int full_search)
5808{
22cee43f
PMR
5809 int syms_from_global_search;
5810 int ndefns;
ec6a20c2 5811 auto_obstack obstack;
22cee43f 5812
ec6a20c2 5813 ada_add_all_symbols (&obstack, block, lookup_name,
b5ec771e 5814 domain, full_search, &syms_from_global_search);
14f9c5c9 5815
ec6a20c2
JB
5816 ndefns = num_defns_collected (&obstack);
5817
54d343a2
TT
5818 struct block_symbol *base = defns_collected (&obstack, 1);
5819 for (int i = 0; i < ndefns; ++i)
5820 results->push_back (base[i]);
4c4b4cd2 5821
54d343a2 5822 ndefns = remove_extra_symbols (results);
4c4b4cd2 5823
b1eedac9 5824 if (ndefns == 0 && full_search && syms_from_global_search)
b5ec771e 5825 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
14f9c5c9 5826
b1eedac9 5827 if (ndefns == 1 && full_search && syms_from_global_search)
b5ec771e
PA
5828 cache_symbol (ada_lookup_name (lookup_name), domain,
5829 (*results)[0].symbol, (*results)[0].block);
14f9c5c9 5830
54d343a2 5831 ndefns = remove_irrelevant_renamings (results, block);
ec6a20c2 5832
14f9c5c9
AS
5833 return ndefns;
5834}
5835
b5ec771e 5836/* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
54d343a2
TT
5837 in global scopes, returning the number of matches, and filling *RESULTS
5838 with (SYM,BLOCK) tuples.
ec6a20c2 5839
4eeaa230
DE
5840 See ada_lookup_symbol_list_worker for further details. */
5841
5842int
b5ec771e 5843ada_lookup_symbol_list (const char *name, const struct block *block,
54d343a2
TT
5844 domain_enum domain,
5845 std::vector<struct block_symbol> *results)
4eeaa230 5846{
b5ec771e
PA
5847 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5848 lookup_name_info lookup_name (name, name_match_type);
5849
5850 return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1);
4eeaa230
DE
5851}
5852
5853/* Implementation of the la_iterate_over_symbols method. */
5854
5855static void
14bc53a8 5856ada_iterate_over_symbols
b5ec771e
PA
5857 (const struct block *block, const lookup_name_info &name,
5858 domain_enum domain,
14bc53a8 5859 gdb::function_view<symbol_found_callback_ftype> callback)
4eeaa230
DE
5860{
5861 int ndefs, i;
54d343a2 5862 std::vector<struct block_symbol> results;
4eeaa230
DE
5863
5864 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
ec6a20c2 5865
4eeaa230
DE
5866 for (i = 0; i < ndefs; ++i)
5867 {
7e41c8db 5868 if (!callback (&results[i]))
4eeaa230
DE
5869 break;
5870 }
5871}
5872
4e5c77fe
JB
5873/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5874 to 1, but choosing the first symbol found if there are multiple
5875 choices.
5876
5e2336be
JB
5877 The result is stored in *INFO, which must be non-NULL.
5878 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5879
5880void
5881ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5882 domain_enum domain,
d12307c1 5883 struct block_symbol *info)
14f9c5c9 5884{
b5ec771e
PA
5885 /* Since we already have an encoded name, wrap it in '<>' to force a
5886 verbatim match. Otherwise, if the name happens to not look like
5887 an encoded name (because it doesn't include a "__"),
5888 ada_lookup_name_info would re-encode/fold it again, and that
5889 would e.g., incorrectly lowercase object renaming names like
5890 "R28b" -> "r28b". */
5891 std::string verbatim = std::string ("<") + name + '>';
5892
5e2336be 5893 gdb_assert (info != NULL);
f98fc17b 5894 *info = ada_lookup_symbol (verbatim.c_str (), block, domain, NULL);
4e5c77fe 5895}
aeb5907d
JB
5896
5897/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5898 scope and in global scopes, or NULL if none. NAME is folded and
5899 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5900 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5901 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5902
d12307c1 5903struct block_symbol
aeb5907d 5904ada_lookup_symbol (const char *name, const struct block *block0,
fe978cb0 5905 domain_enum domain, int *is_a_field_of_this)
aeb5907d
JB
5906{
5907 if (is_a_field_of_this != NULL)
5908 *is_a_field_of_this = 0;
5909
54d343a2 5910 std::vector<struct block_symbol> candidates;
f98fc17b 5911 int n_candidates;
f98fc17b
PA
5912
5913 n_candidates = ada_lookup_symbol_list (name, block0, domain, &candidates);
f98fc17b
PA
5914
5915 if (n_candidates == 0)
54d343a2 5916 return {};
f98fc17b
PA
5917
5918 block_symbol info = candidates[0];
5919 info.symbol = fixup_symbol_section (info.symbol, NULL);
d12307c1 5920 return info;
4c4b4cd2 5921}
14f9c5c9 5922
d12307c1 5923static struct block_symbol
f606139a
DE
5924ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5925 const char *name,
76a01679 5926 const struct block *block,
21b556f4 5927 const domain_enum domain)
4c4b4cd2 5928{
d12307c1 5929 struct block_symbol sym;
04dccad0
JB
5930
5931 sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
d12307c1 5932 if (sym.symbol != NULL)
04dccad0
JB
5933 return sym;
5934
5935 /* If we haven't found a match at this point, try the primitive
5936 types. In other languages, this search is performed before
5937 searching for global symbols in order to short-circuit that
5938 global-symbol search if it happens that the name corresponds
5939 to a primitive type. But we cannot do the same in Ada, because
5940 it is perfectly legitimate for a program to declare a type which
5941 has the same name as a standard type. If looking up a type in
5942 that situation, we have traditionally ignored the primitive type
5943 in favor of user-defined types. This is why, unlike most other
5944 languages, we search the primitive types this late and only after
5945 having searched the global symbols without success. */
5946
5947 if (domain == VAR_DOMAIN)
5948 {
5949 struct gdbarch *gdbarch;
5950
5951 if (block == NULL)
5952 gdbarch = target_gdbarch ();
5953 else
5954 gdbarch = block_gdbarch (block);
d12307c1
PMR
5955 sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5956 if (sym.symbol != NULL)
04dccad0
JB
5957 return sym;
5958 }
5959
6640a367 5960 return {};
14f9c5c9
AS
5961}
5962
5963
4c4b4cd2
PH
5964/* True iff STR is a possible encoded suffix of a normal Ada name
5965 that is to be ignored for matching purposes. Suffixes of parallel
5966 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5967 are given by any of the regular expressions:
4c4b4cd2 5968
babe1480
JB
5969 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5970 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5971 TKB [subprogram suffix for task bodies]
babe1480 5972 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5973 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5974
5975 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5976 match is performed. This sequence is used to differentiate homonyms,
5977 is an optional part of a valid name suffix. */
4c4b4cd2 5978
14f9c5c9 5979static int
d2e4a39e 5980is_name_suffix (const char *str)
14f9c5c9
AS
5981{
5982 int k;
4c4b4cd2
PH
5983 const char *matching;
5984 const int len = strlen (str);
5985
babe1480
JB
5986 /* Skip optional leading __[0-9]+. */
5987
4c4b4cd2
PH
5988 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5989 {
babe1480
JB
5990 str += 3;
5991 while (isdigit (str[0]))
5992 str += 1;
4c4b4cd2 5993 }
babe1480
JB
5994
5995 /* [.$][0-9]+ */
4c4b4cd2 5996
babe1480 5997 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5998 {
babe1480 5999 matching = str + 1;
4c4b4cd2
PH
6000 while (isdigit (matching[0]))
6001 matching += 1;
6002 if (matching[0] == '\0')
6003 return 1;
6004 }
6005
6006 /* ___[0-9]+ */
babe1480 6007
4c4b4cd2
PH
6008 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
6009 {
6010 matching = str + 3;
6011 while (isdigit (matching[0]))
6012 matching += 1;
6013 if (matching[0] == '\0')
6014 return 1;
6015 }
6016
9ac7f98e
JB
6017 /* "TKB" suffixes are used for subprograms implementing task bodies. */
6018
6019 if (strcmp (str, "TKB") == 0)
6020 return 1;
6021
529cad9c
PH
6022#if 0
6023 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
6024 with a N at the end. Unfortunately, the compiler uses the same
6025 convention for other internal types it creates. So treating
529cad9c 6026 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
6027 some regressions. For instance, consider the case of an enumerated
6028 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
6029 name ends with N.
6030 Having a single character like this as a suffix carrying some
0963b4bd 6031 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
6032 to be something like "_N" instead. In the meantime, do not do
6033 the following check. */
6034 /* Protected Object Subprograms */
6035 if (len == 1 && str [0] == 'N')
6036 return 1;
6037#endif
6038
6039 /* _E[0-9]+[bs]$ */
6040 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
6041 {
6042 matching = str + 3;
6043 while (isdigit (matching[0]))
6044 matching += 1;
6045 if ((matching[0] == 'b' || matching[0] == 's')
6046 && matching [1] == '\0')
6047 return 1;
6048 }
6049
4c4b4cd2
PH
6050 /* ??? We should not modify STR directly, as we are doing below. This
6051 is fine in this case, but may become problematic later if we find
6052 that this alternative did not work, and want to try matching
6053 another one from the begining of STR. Since we modified it, we
6054 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
6055 if (str[0] == 'X')
6056 {
6057 str += 1;
d2e4a39e 6058 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
6059 {
6060 if (str[0] != 'n' && str[0] != 'b')
6061 return 0;
6062 str += 1;
6063 }
14f9c5c9 6064 }
babe1480 6065
14f9c5c9
AS
6066 if (str[0] == '\000')
6067 return 1;
babe1480 6068
d2e4a39e 6069 if (str[0] == '_')
14f9c5c9
AS
6070 {
6071 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 6072 return 0;
d2e4a39e 6073 if (str[2] == '_')
4c4b4cd2 6074 {
61ee279c
PH
6075 if (strcmp (str + 3, "JM") == 0)
6076 return 1;
6077 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
6078 the LJM suffix in favor of the JM one. But we will
6079 still accept LJM as a valid suffix for a reasonable
6080 amount of time, just to allow ourselves to debug programs
6081 compiled using an older version of GNAT. */
4c4b4cd2
PH
6082 if (strcmp (str + 3, "LJM") == 0)
6083 return 1;
6084 if (str[3] != 'X')
6085 return 0;
1265e4aa
JB
6086 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
6087 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
6088 return 1;
6089 if (str[4] == 'R' && str[5] != 'T')
6090 return 1;
6091 return 0;
6092 }
6093 if (!isdigit (str[2]))
6094 return 0;
6095 for (k = 3; str[k] != '\0'; k += 1)
6096 if (!isdigit (str[k]) && str[k] != '_')
6097 return 0;
14f9c5c9
AS
6098 return 1;
6099 }
4c4b4cd2 6100 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 6101 {
4c4b4cd2
PH
6102 for (k = 2; str[k] != '\0'; k += 1)
6103 if (!isdigit (str[k]) && str[k] != '_')
6104 return 0;
14f9c5c9
AS
6105 return 1;
6106 }
6107 return 0;
6108}
d2e4a39e 6109
aeb5907d
JB
6110/* Return non-zero if the string starting at NAME and ending before
6111 NAME_END contains no capital letters. */
529cad9c
PH
6112
6113static int
6114is_valid_name_for_wild_match (const char *name0)
6115{
6116 const char *decoded_name = ada_decode (name0);
6117 int i;
6118
5823c3ef
JB
6119 /* If the decoded name starts with an angle bracket, it means that
6120 NAME0 does not follow the GNAT encoding format. It should then
6121 not be allowed as a possible wild match. */
6122 if (decoded_name[0] == '<')
6123 return 0;
6124
529cad9c
PH
6125 for (i=0; decoded_name[i] != '\0'; i++)
6126 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
6127 return 0;
6128
6129 return 1;
6130}
6131
73589123
PH
6132/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
6133 that could start a simple name. Assumes that *NAMEP points into
6134 the string beginning at NAME0. */
4c4b4cd2 6135
14f9c5c9 6136static int
73589123 6137advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 6138{
73589123 6139 const char *name = *namep;
5b4ee69b 6140
5823c3ef 6141 while (1)
14f9c5c9 6142 {
aa27d0b3 6143 int t0, t1;
73589123
PH
6144
6145 t0 = *name;
6146 if (t0 == '_')
6147 {
6148 t1 = name[1];
6149 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
6150 {
6151 name += 1;
61012eef 6152 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
6153 break;
6154 else
6155 name += 1;
6156 }
aa27d0b3
JB
6157 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
6158 || name[2] == target0))
73589123
PH
6159 {
6160 name += 2;
6161 break;
6162 }
6163 else
6164 return 0;
6165 }
6166 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
6167 name += 1;
6168 else
5823c3ef 6169 return 0;
73589123
PH
6170 }
6171
6172 *namep = name;
6173 return 1;
6174}
6175
b5ec771e
PA
6176/* Return true iff NAME encodes a name of the form prefix.PATN.
6177 Ignores any informational suffixes of NAME (i.e., for which
6178 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
6179 simple name. */
73589123 6180
b5ec771e 6181static bool
73589123
PH
6182wild_match (const char *name, const char *patn)
6183{
22e048c9 6184 const char *p;
73589123
PH
6185 const char *name0 = name;
6186
6187 while (1)
6188 {
6189 const char *match = name;
6190
6191 if (*name == *patn)
6192 {
6193 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6194 if (*p != *name)
6195 break;
6196 if (*p == '\0' && is_name_suffix (name))
b5ec771e 6197 return match == name0 || is_valid_name_for_wild_match (name0);
73589123
PH
6198
6199 if (name[-1] == '_')
6200 name -= 1;
6201 }
6202 if (!advance_wild_match (&name, name0, *patn))
b5ec771e 6203 return false;
96d887e8 6204 }
96d887e8
PH
6205}
6206
b5ec771e
PA
6207/* Returns true iff symbol name SYM_NAME matches SEARCH_NAME, ignoring
6208 any trailing suffixes that encode debugging information or leading
6209 _ada_ on SYM_NAME (see is_name_suffix commentary for the debugging
6210 information that is ignored). */
40658b94 6211
b5ec771e 6212static bool
c4d840bd
PH
6213full_match (const char *sym_name, const char *search_name)
6214{
b5ec771e
PA
6215 size_t search_name_len = strlen (search_name);
6216
6217 if (strncmp (sym_name, search_name, search_name_len) == 0
6218 && is_name_suffix (sym_name + search_name_len))
6219 return true;
6220
6221 if (startswith (sym_name, "_ada_")
6222 && strncmp (sym_name + 5, search_name, search_name_len) == 0
6223 && is_name_suffix (sym_name + search_name_len + 5))
6224 return true;
c4d840bd 6225
b5ec771e
PA
6226 return false;
6227}
c4d840bd 6228
b5ec771e
PA
6229/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to vector
6230 *defn_symbols, updating the list of symbols in OBSTACKP (if
6231 necessary). OBJFILE is the section containing BLOCK. */
96d887e8
PH
6232
6233static void
6234ada_add_block_symbols (struct obstack *obstackp,
b5ec771e
PA
6235 const struct block *block,
6236 const lookup_name_info &lookup_name,
6237 domain_enum domain, struct objfile *objfile)
96d887e8 6238{
8157b174 6239 struct block_iterator iter;
96d887e8
PH
6240 /* A matching argument symbol, if any. */
6241 struct symbol *arg_sym;
6242 /* Set true when we find a matching non-argument symbol. */
6243 int found_sym;
6244 struct symbol *sym;
6245
6246 arg_sym = NULL;
6247 found_sym = 0;
b5ec771e
PA
6248 for (sym = block_iter_match_first (block, lookup_name, &iter);
6249 sym != NULL;
6250 sym = block_iter_match_next (lookup_name, &iter))
96d887e8 6251 {
b5ec771e
PA
6252 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6253 SYMBOL_DOMAIN (sym), domain))
6254 {
6255 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6256 {
6257 if (SYMBOL_IS_ARGUMENT (sym))
6258 arg_sym = sym;
6259 else
6260 {
6261 found_sym = 1;
6262 add_defn_to_vec (obstackp,
6263 fixup_symbol_section (sym, objfile),
6264 block);
6265 }
6266 }
6267 }
96d887e8
PH
6268 }
6269
22cee43f
PMR
6270 /* Handle renamings. */
6271
b5ec771e 6272 if (ada_add_block_renamings (obstackp, block, lookup_name, domain))
22cee43f
PMR
6273 found_sym = 1;
6274
96d887e8
PH
6275 if (!found_sym && arg_sym != NULL)
6276 {
76a01679
JB
6277 add_defn_to_vec (obstackp,
6278 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6279 block);
96d887e8
PH
6280 }
6281
b5ec771e 6282 if (!lookup_name.ada ().wild_match_p ())
96d887e8
PH
6283 {
6284 arg_sym = NULL;
6285 found_sym = 0;
b5ec771e
PA
6286 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6287 const char *name = ada_lookup_name.c_str ();
6288 size_t name_len = ada_lookup_name.size ();
96d887e8
PH
6289
6290 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6291 {
4186eb54
KS
6292 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6293 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
6294 {
6295 int cmp;
6296
6297 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6298 if (cmp == 0)
6299 {
61012eef 6300 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
76a01679
JB
6301 if (cmp == 0)
6302 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6303 name_len);
6304 }
6305
6306 if (cmp == 0
6307 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6308 {
2a2d4dc3
AS
6309 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6310 {
6311 if (SYMBOL_IS_ARGUMENT (sym))
6312 arg_sym = sym;
6313 else
6314 {
6315 found_sym = 1;
6316 add_defn_to_vec (obstackp,
6317 fixup_symbol_section (sym, objfile),
6318 block);
6319 }
6320 }
76a01679
JB
6321 }
6322 }
76a01679 6323 }
96d887e8
PH
6324
6325 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6326 They aren't parameters, right? */
6327 if (!found_sym && arg_sym != NULL)
6328 {
6329 add_defn_to_vec (obstackp,
76a01679 6330 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6331 block);
96d887e8
PH
6332 }
6333 }
6334}
6335\f
41d27058
JB
6336
6337 /* Symbol Completion */
6338
b5ec771e 6339/* See symtab.h. */
41d27058 6340
b5ec771e
PA
6341bool
6342ada_lookup_name_info::matches
6343 (const char *sym_name,
6344 symbol_name_match_type match_type,
a207cff2 6345 completion_match_result *comp_match_res) const
41d27058 6346{
b5ec771e
PA
6347 bool match = false;
6348 const char *text = m_encoded_name.c_str ();
6349 size_t text_len = m_encoded_name.size ();
41d27058
JB
6350
6351 /* First, test against the fully qualified name of the symbol. */
6352
6353 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6354 match = true;
41d27058 6355
b5ec771e 6356 if (match && !m_encoded_p)
41d27058
JB
6357 {
6358 /* One needed check before declaring a positive match is to verify
6359 that iff we are doing a verbatim match, the decoded version
6360 of the symbol name starts with '<'. Otherwise, this symbol name
6361 is not a suitable completion. */
6362 const char *sym_name_copy = sym_name;
b5ec771e 6363 bool has_angle_bracket;
41d27058
JB
6364
6365 sym_name = ada_decode (sym_name);
6366 has_angle_bracket = (sym_name[0] == '<');
b5ec771e 6367 match = (has_angle_bracket == m_verbatim_p);
41d27058
JB
6368 sym_name = sym_name_copy;
6369 }
6370
b5ec771e 6371 if (match && !m_verbatim_p)
41d27058
JB
6372 {
6373 /* When doing non-verbatim match, another check that needs to
6374 be done is to verify that the potentially matching symbol name
6375 does not include capital letters, because the ada-mode would
6376 not be able to understand these symbol names without the
6377 angle bracket notation. */
6378 const char *tmp;
6379
6380 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6381 if (*tmp != '\0')
b5ec771e 6382 match = false;
41d27058
JB
6383 }
6384
6385 /* Second: Try wild matching... */
6386
b5ec771e 6387 if (!match && m_wild_match_p)
41d27058
JB
6388 {
6389 /* Since we are doing wild matching, this means that TEXT
6390 may represent an unqualified symbol name. We therefore must
6391 also compare TEXT against the unqualified name of the symbol. */
6392 sym_name = ada_unqualified_name (ada_decode (sym_name));
6393
6394 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6395 match = true;
41d27058
JB
6396 }
6397
b5ec771e 6398 /* Finally: If we found a match, prepare the result to return. */
41d27058
JB
6399
6400 if (!match)
b5ec771e 6401 return false;
41d27058 6402
a207cff2 6403 if (comp_match_res != NULL)
b5ec771e 6404 {
a207cff2 6405 std::string &match_str = comp_match_res->match.storage ();
41d27058 6406
b5ec771e 6407 if (!m_encoded_p)
a207cff2 6408 match_str = ada_decode (sym_name);
b5ec771e
PA
6409 else
6410 {
6411 if (m_verbatim_p)
6412 match_str = add_angle_brackets (sym_name);
6413 else
6414 match_str = sym_name;
41d27058 6415
b5ec771e 6416 }
a207cff2
PA
6417
6418 comp_match_res->set_match (match_str.c_str ());
41d27058
JB
6419 }
6420
b5ec771e 6421 return true;
41d27058
JB
6422}
6423
b5ec771e 6424/* Add the list of possible symbol names completing TEXT to TRACKER.
eb3ff9a5 6425 WORD is the entire command on which completion is made. */
41d27058 6426
eb3ff9a5
PA
6427static void
6428ada_collect_symbol_completion_matches (completion_tracker &tracker,
c6756f62 6429 complete_symbol_mode mode,
b5ec771e
PA
6430 symbol_name_match_type name_match_type,
6431 const char *text, const char *word,
eb3ff9a5 6432 enum type_code code)
41d27058 6433{
41d27058 6434 struct symbol *sym;
3977b71f 6435 const struct block *b, *surrounding_static_block = 0;
8157b174 6436 struct block_iterator iter;
41d27058 6437
2f68a895
TT
6438 gdb_assert (code == TYPE_CODE_UNDEF);
6439
1b026119 6440 lookup_name_info lookup_name (text, name_match_type, true);
41d27058
JB
6441
6442 /* First, look at the partial symtab symbols. */
14bc53a8 6443 expand_symtabs_matching (NULL,
b5ec771e
PA
6444 lookup_name,
6445 NULL,
14bc53a8
PA
6446 NULL,
6447 ALL_DOMAIN);
41d27058
JB
6448
6449 /* At this point scan through the misc symbol vectors and add each
6450 symbol you find to the list. Eventually we want to ignore
6451 anything that isn't a text symbol (everything else will be
6452 handled by the psymtab code above). */
6453
2030c079 6454 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 6455 {
7932255d 6456 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf
TT
6457 {
6458 QUIT;
6459
6460 if (completion_skip_symbol (mode, msymbol))
6461 continue;
6462
6463 language symbol_language = MSYMBOL_LANGUAGE (msymbol);
6464
6465 /* Ada minimal symbols won't have their language set to Ada. If
6466 we let completion_list_add_name compare using the
6467 default/C-like matcher, then when completing e.g., symbols in a
6468 package named "pck", we'd match internal Ada symbols like
6469 "pckS", which are invalid in an Ada expression, unless you wrap
6470 them in '<' '>' to request a verbatim match.
6471
6472 Unfortunately, some Ada encoded names successfully demangle as
6473 C++ symbols (using an old mangling scheme), such as "name__2Xn"
6474 -> "Xn::name(void)" and thus some Ada minimal symbols end up
6475 with the wrong language set. Paper over that issue here. */
6476 if (symbol_language == language_auto
6477 || symbol_language == language_cplus)
6478 symbol_language = language_ada;
6479
6480 completion_list_add_name (tracker,
6481 symbol_language,
6482 MSYMBOL_LINKAGE_NAME (msymbol),
6483 lookup_name, text, word);
6484 }
6485 }
41d27058
JB
6486
6487 /* Search upwards from currently selected frame (so that we can
6488 complete on local vars. */
6489
6490 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6491 {
6492 if (!BLOCK_SUPERBLOCK (b))
6493 surrounding_static_block = b; /* For elmin of dups */
6494
6495 ALL_BLOCK_SYMBOLS (b, iter, sym)
6496 {
f9d67a22
PA
6497 if (completion_skip_symbol (mode, sym))
6498 continue;
6499
b5ec771e
PA
6500 completion_list_add_name (tracker,
6501 SYMBOL_LANGUAGE (sym),
6502 SYMBOL_LINKAGE_NAME (sym),
1b026119 6503 lookup_name, text, word);
41d27058
JB
6504 }
6505 }
6506
6507 /* Go through the symtabs and check the externs and statics for
43f3e411 6508 symbols which match. */
41d27058 6509
2030c079 6510 for (objfile *objfile : current_program_space->objfiles ())
41d27058 6511 {
b669c953 6512 for (compunit_symtab *s : objfile->compunits ())
d8aeb77f
TT
6513 {
6514 QUIT;
6515 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
6516 ALL_BLOCK_SYMBOLS (b, iter, sym)
6517 {
6518 if (completion_skip_symbol (mode, sym))
6519 continue;
f9d67a22 6520
d8aeb77f
TT
6521 completion_list_add_name (tracker,
6522 SYMBOL_LANGUAGE (sym),
6523 SYMBOL_LINKAGE_NAME (sym),
6524 lookup_name, text, word);
6525 }
6526 }
41d27058 6527 }
41d27058 6528
2030c079 6529 for (objfile *objfile : current_program_space->objfiles ())
d8aeb77f 6530 {
b669c953 6531 for (compunit_symtab *s : objfile->compunits ())
d8aeb77f
TT
6532 {
6533 QUIT;
6534 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
6535 /* Don't do this block twice. */
6536 if (b == surrounding_static_block)
6537 continue;
6538 ALL_BLOCK_SYMBOLS (b, iter, sym)
6539 {
6540 if (completion_skip_symbol (mode, sym))
6541 continue;
f9d67a22 6542
d8aeb77f
TT
6543 completion_list_add_name (tracker,
6544 SYMBOL_LANGUAGE (sym),
6545 SYMBOL_LINKAGE_NAME (sym),
6546 lookup_name, text, word);
6547 }
6548 }
41d27058 6549 }
41d27058
JB
6550}
6551
963a6417 6552 /* Field Access */
96d887e8 6553
73fb9985
JB
6554/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6555 for tagged types. */
6556
6557static int
6558ada_is_dispatch_table_ptr_type (struct type *type)
6559{
0d5cff50 6560 const char *name;
73fb9985
JB
6561
6562 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6563 return 0;
6564
6565 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6566 if (name == NULL)
6567 return 0;
6568
6569 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6570}
6571
ac4a2da4
JG
6572/* Return non-zero if TYPE is an interface tag. */
6573
6574static int
6575ada_is_interface_tag (struct type *type)
6576{
6577 const char *name = TYPE_NAME (type);
6578
6579 if (name == NULL)
6580 return 0;
6581
6582 return (strcmp (name, "ada__tags__interface_tag") == 0);
6583}
6584
963a6417
PH
6585/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6586 to be invisible to users. */
96d887e8 6587
963a6417
PH
6588int
6589ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6590{
963a6417
PH
6591 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6592 return 1;
ffde82bf 6593
73fb9985
JB
6594 /* Check the name of that field. */
6595 {
6596 const char *name = TYPE_FIELD_NAME (type, field_num);
6597
6598 /* Anonymous field names should not be printed.
6599 brobecker/2007-02-20: I don't think this can actually happen
6600 but we don't want to print the value of annonymous fields anyway. */
6601 if (name == NULL)
6602 return 1;
6603
ffde82bf
JB
6604 /* Normally, fields whose name start with an underscore ("_")
6605 are fields that have been internally generated by the compiler,
6606 and thus should not be printed. The "_parent" field is special,
6607 however: This is a field internally generated by the compiler
6608 for tagged types, and it contains the components inherited from
6609 the parent type. This field should not be printed as is, but
6610 should not be ignored either. */
61012eef 6611 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6612 return 1;
6613 }
6614
ac4a2da4
JG
6615 /* If this is the dispatch table of a tagged type or an interface tag,
6616 then ignore. */
73fb9985 6617 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6618 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6619 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6620 return 1;
6621
6622 /* Not a special field, so it should not be ignored. */
6623 return 0;
963a6417 6624}
96d887e8 6625
963a6417 6626/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6627 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6628
963a6417
PH
6629int
6630ada_is_tagged_type (struct type *type, int refok)
6631{
988f6b3d 6632 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
963a6417 6633}
96d887e8 6634
963a6417 6635/* True iff TYPE represents the type of X'Tag */
96d887e8 6636
963a6417
PH
6637int
6638ada_is_tag_type (struct type *type)
6639{
460efde1
JB
6640 type = ada_check_typedef (type);
6641
963a6417
PH
6642 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6643 return 0;
6644 else
96d887e8 6645 {
963a6417 6646 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6647
963a6417
PH
6648 return (name != NULL
6649 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6650 }
96d887e8
PH
6651}
6652
963a6417 6653/* The type of the tag on VAL. */
76a01679 6654
963a6417
PH
6655struct type *
6656ada_tag_type (struct value *val)
96d887e8 6657{
988f6b3d 6658 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
963a6417 6659}
96d887e8 6660
b50d69b5
JG
6661/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6662 retired at Ada 05). */
6663
6664static int
6665is_ada95_tag (struct value *tag)
6666{
6667 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6668}
6669
963a6417 6670/* The value of the tag on VAL. */
96d887e8 6671
963a6417
PH
6672struct value *
6673ada_value_tag (struct value *val)
6674{
03ee6b2e 6675 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6676}
6677
963a6417
PH
6678/* The value of the tag on the object of type TYPE whose contents are
6679 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6680 ADDRESS. */
96d887e8 6681
963a6417 6682static struct value *
10a2c479 6683value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6684 const gdb_byte *valaddr,
963a6417 6685 CORE_ADDR address)
96d887e8 6686{
b5385fc0 6687 int tag_byte_offset;
963a6417 6688 struct type *tag_type;
5b4ee69b 6689
963a6417 6690 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6691 NULL, NULL, NULL))
96d887e8 6692 {
fc1a4b47 6693 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6694 ? NULL
6695 : valaddr + tag_byte_offset);
963a6417 6696 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6697
963a6417 6698 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6699 }
963a6417
PH
6700 return NULL;
6701}
96d887e8 6702
963a6417
PH
6703static struct type *
6704type_from_tag (struct value *tag)
6705{
6706 const char *type_name = ada_tag_name (tag);
5b4ee69b 6707
963a6417
PH
6708 if (type_name != NULL)
6709 return ada_find_any_type (ada_encode (type_name));
6710 return NULL;
6711}
96d887e8 6712
b50d69b5
JG
6713/* Given a value OBJ of a tagged type, return a value of this
6714 type at the base address of the object. The base address, as
6715 defined in Ada.Tags, it is the address of the primary tag of
6716 the object, and therefore where the field values of its full
6717 view can be fetched. */
6718
6719struct value *
6720ada_tag_value_at_base_address (struct value *obj)
6721{
b50d69b5
JG
6722 struct value *val;
6723 LONGEST offset_to_top = 0;
6724 struct type *ptr_type, *obj_type;
6725 struct value *tag;
6726 CORE_ADDR base_address;
6727
6728 obj_type = value_type (obj);
6729
6730 /* It is the responsability of the caller to deref pointers. */
6731
6732 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6733 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6734 return obj;
6735
6736 tag = ada_value_tag (obj);
6737 if (!tag)
6738 return obj;
6739
6740 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6741
6742 if (is_ada95_tag (tag))
6743 return obj;
6744
08f49010
XR
6745 ptr_type = language_lookup_primitive_type
6746 (language_def (language_ada), target_gdbarch(), "storage_offset");
b50d69b5
JG
6747 ptr_type = lookup_pointer_type (ptr_type);
6748 val = value_cast (ptr_type, tag);
6749 if (!val)
6750 return obj;
6751
6752 /* It is perfectly possible that an exception be raised while
6753 trying to determine the base address, just like for the tag;
6754 see ada_tag_name for more details. We do not print the error
6755 message for the same reason. */
6756
a70b8144 6757 try
b50d69b5
JG
6758 {
6759 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6760 }
6761
230d2906 6762 catch (const gdb_exception_error &e)
492d29ea
PA
6763 {
6764 return obj;
6765 }
b50d69b5
JG
6766
6767 /* If offset is null, nothing to do. */
6768
6769 if (offset_to_top == 0)
6770 return obj;
6771
6772 /* -1 is a special case in Ada.Tags; however, what should be done
6773 is not quite clear from the documentation. So do nothing for
6774 now. */
6775
6776 if (offset_to_top == -1)
6777 return obj;
6778
08f49010
XR
6779 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6780 from the base address. This was however incompatible with
6781 C++ dispatch table: C++ uses a *negative* value to *add*
6782 to the base address. Ada's convention has therefore been
6783 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6784 use the same convention. Here, we support both cases by
6785 checking the sign of OFFSET_TO_TOP. */
6786
6787 if (offset_to_top > 0)
6788 offset_to_top = -offset_to_top;
6789
6790 base_address = value_address (obj) + offset_to_top;
b50d69b5
JG
6791 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6792
6793 /* Make sure that we have a proper tag at the new address.
6794 Otherwise, offset_to_top is bogus (which can happen when
6795 the object is not initialized yet). */
6796
6797 if (!tag)
6798 return obj;
6799
6800 obj_type = type_from_tag (tag);
6801
6802 if (!obj_type)
6803 return obj;
6804
6805 return value_from_contents_and_address (obj_type, NULL, base_address);
6806}
6807
1b611343
JB
6808/* Return the "ada__tags__type_specific_data" type. */
6809
6810static struct type *
6811ada_get_tsd_type (struct inferior *inf)
963a6417 6812{
1b611343 6813 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6814
1b611343
JB
6815 if (data->tsd_type == 0)
6816 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6817 return data->tsd_type;
6818}
529cad9c 6819
1b611343
JB
6820/* Return the TSD (type-specific data) associated to the given TAG.
6821 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6822
1b611343 6823 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6824
1b611343
JB
6825static struct value *
6826ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6827{
4c4b4cd2 6828 struct value *val;
1b611343 6829 struct type *type;
5b4ee69b 6830
1b611343
JB
6831 /* First option: The TSD is simply stored as a field of our TAG.
6832 Only older versions of GNAT would use this format, but we have
6833 to test it first, because there are no visible markers for
6834 the current approach except the absence of that field. */
529cad9c 6835
1b611343
JB
6836 val = ada_value_struct_elt (tag, "tsd", 1);
6837 if (val)
6838 return val;
e802dbe0 6839
1b611343
JB
6840 /* Try the second representation for the dispatch table (in which
6841 there is no explicit 'tsd' field in the referent of the tag pointer,
6842 and instead the tsd pointer is stored just before the dispatch
6843 table. */
e802dbe0 6844
1b611343
JB
6845 type = ada_get_tsd_type (current_inferior());
6846 if (type == NULL)
6847 return NULL;
6848 type = lookup_pointer_type (lookup_pointer_type (type));
6849 val = value_cast (type, tag);
6850 if (val == NULL)
6851 return NULL;
6852 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6853}
6854
1b611343
JB
6855/* Given the TSD of a tag (type-specific data), return a string
6856 containing the name of the associated type.
6857
6858 The returned value is good until the next call. May return NULL
6859 if we are unable to determine the tag name. */
6860
6861static char *
6862ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6863{
529cad9c
PH
6864 static char name[1024];
6865 char *p;
1b611343 6866 struct value *val;
529cad9c 6867
1b611343 6868 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6869 if (val == NULL)
1b611343 6870 return NULL;
4c4b4cd2
PH
6871 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6872 for (p = name; *p != '\0'; p += 1)
6873 if (isalpha (*p))
6874 *p = tolower (*p);
1b611343 6875 return name;
4c4b4cd2
PH
6876}
6877
6878/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6879 a C string.
6880
6881 Return NULL if the TAG is not an Ada tag, or if we were unable to
6882 determine the name of that tag. The result is good until the next
6883 call. */
4c4b4cd2
PH
6884
6885const char *
6886ada_tag_name (struct value *tag)
6887{
1b611343 6888 char *name = NULL;
5b4ee69b 6889
df407dfe 6890 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6891 return NULL;
1b611343
JB
6892
6893 /* It is perfectly possible that an exception be raised while trying
6894 to determine the TAG's name, even under normal circumstances:
6895 The associated variable may be uninitialized or corrupted, for
6896 instance. We do not let any exception propagate past this point.
6897 instead we return NULL.
6898
6899 We also do not print the error message either (which often is very
6900 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6901 the caller print a more meaningful message if necessary. */
a70b8144 6902 try
1b611343
JB
6903 {
6904 struct value *tsd = ada_get_tsd_from_tag (tag);
6905
6906 if (tsd != NULL)
6907 name = ada_tag_name_from_tsd (tsd);
6908 }
230d2906 6909 catch (const gdb_exception_error &e)
492d29ea
PA
6910 {
6911 }
1b611343
JB
6912
6913 return name;
4c4b4cd2
PH
6914}
6915
6916/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6917
d2e4a39e 6918struct type *
ebf56fd3 6919ada_parent_type (struct type *type)
14f9c5c9
AS
6920{
6921 int i;
6922
61ee279c 6923 type = ada_check_typedef (type);
14f9c5c9
AS
6924
6925 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6926 return NULL;
6927
6928 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6929 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6930 {
6931 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6932
6933 /* If the _parent field is a pointer, then dereference it. */
6934 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6935 parent_type = TYPE_TARGET_TYPE (parent_type);
6936 /* If there is a parallel XVS type, get the actual base type. */
6937 parent_type = ada_get_base_type (parent_type);
6938
6939 return ada_check_typedef (parent_type);
6940 }
14f9c5c9
AS
6941
6942 return NULL;
6943}
6944
4c4b4cd2
PH
6945/* True iff field number FIELD_NUM of structure type TYPE contains the
6946 parent-type (inherited) fields of a derived type. Assumes TYPE is
6947 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6948
6949int
ebf56fd3 6950ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6951{
61ee279c 6952 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6953
4c4b4cd2 6954 return (name != NULL
61012eef
GB
6955 && (startswith (name, "PARENT")
6956 || startswith (name, "_parent")));
14f9c5c9
AS
6957}
6958
4c4b4cd2 6959/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6960 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6961 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6962 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6963 structures. */
14f9c5c9
AS
6964
6965int
ebf56fd3 6966ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6967{
d2e4a39e 6968 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6969
dddc0e16
JB
6970 if (name != NULL && strcmp (name, "RETVAL") == 0)
6971 {
6972 /* This happens in functions with "out" or "in out" parameters
6973 which are passed by copy. For such functions, GNAT describes
6974 the function's return type as being a struct where the return
6975 value is in a field called RETVAL, and where the other "out"
6976 or "in out" parameters are fields of that struct. This is not
6977 a wrapper. */
6978 return 0;
6979 }
6980
d2e4a39e 6981 return (name != NULL
61012eef 6982 && (startswith (name, "PARENT")
4c4b4cd2 6983 || strcmp (name, "REP") == 0
61012eef 6984 || startswith (name, "_parent")
4c4b4cd2 6985 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6986}
6987
4c4b4cd2
PH
6988/* True iff field number FIELD_NUM of structure or union type TYPE
6989 is a variant wrapper. Assumes TYPE is a structure type with at least
6990 FIELD_NUM+1 fields. */
14f9c5c9
AS
6991
6992int
ebf56fd3 6993ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6994{
8ecb59f8
TT
6995 /* Only Ada types are eligible. */
6996 if (!ADA_TYPE_P (type))
6997 return 0;
6998
d2e4a39e 6999 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 7000
14f9c5c9 7001 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 7002 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
7003 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
7004 == TYPE_CODE_UNION)));
14f9c5c9
AS
7005}
7006
7007/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 7008 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
7009 returns the type of the controlling discriminant for the variant.
7010 May return NULL if the type could not be found. */
14f9c5c9 7011
d2e4a39e 7012struct type *
ebf56fd3 7013ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 7014{
a121b7c1 7015 const char *name = ada_variant_discrim_name (var_type);
5b4ee69b 7016
988f6b3d 7017 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
14f9c5c9
AS
7018}
7019
4c4b4cd2 7020/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 7021 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 7022 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
7023
7024int
ebf56fd3 7025ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 7026{
d2e4a39e 7027 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 7028
14f9c5c9
AS
7029 return (name != NULL && name[0] == 'O');
7030}
7031
7032/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
7033 returns the name of the discriminant controlling the variant.
7034 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 7035
a121b7c1 7036const char *
ebf56fd3 7037ada_variant_discrim_name (struct type *type0)
14f9c5c9 7038{
d2e4a39e 7039 static char *result = NULL;
14f9c5c9 7040 static size_t result_len = 0;
d2e4a39e
AS
7041 struct type *type;
7042 const char *name;
7043 const char *discrim_end;
7044 const char *discrim_start;
14f9c5c9
AS
7045
7046 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
7047 type = TYPE_TARGET_TYPE (type0);
7048 else
7049 type = type0;
7050
7051 name = ada_type_name (type);
7052
7053 if (name == NULL || name[0] == '\000')
7054 return "";
7055
7056 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
7057 discrim_end -= 1)
7058 {
61012eef 7059 if (startswith (discrim_end, "___XVN"))
4c4b4cd2 7060 break;
14f9c5c9
AS
7061 }
7062 if (discrim_end == name)
7063 return "";
7064
d2e4a39e 7065 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
7066 discrim_start -= 1)
7067 {
d2e4a39e 7068 if (discrim_start == name + 1)
4c4b4cd2 7069 return "";
76a01679 7070 if ((discrim_start > name + 3
61012eef 7071 && startswith (discrim_start - 3, "___"))
4c4b4cd2
PH
7072 || discrim_start[-1] == '.')
7073 break;
14f9c5c9
AS
7074 }
7075
7076 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
7077 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 7078 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
7079 return result;
7080}
7081
4c4b4cd2
PH
7082/* Scan STR for a subtype-encoded number, beginning at position K.
7083 Put the position of the character just past the number scanned in
7084 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
7085 Return 1 if there was a valid number at the given position, and 0
7086 otherwise. A "subtype-encoded" number consists of the absolute value
7087 in decimal, followed by the letter 'm' to indicate a negative number.
7088 Assumes 0m does not occur. */
14f9c5c9
AS
7089
7090int
d2e4a39e 7091ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
7092{
7093 ULONGEST RU;
7094
d2e4a39e 7095 if (!isdigit (str[k]))
14f9c5c9
AS
7096 return 0;
7097
4c4b4cd2 7098 /* Do it the hard way so as not to make any assumption about
14f9c5c9 7099 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 7100 LONGEST. */
14f9c5c9
AS
7101 RU = 0;
7102 while (isdigit (str[k]))
7103 {
d2e4a39e 7104 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
7105 k += 1;
7106 }
7107
d2e4a39e 7108 if (str[k] == 'm')
14f9c5c9
AS
7109 {
7110 if (R != NULL)
4c4b4cd2 7111 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
7112 k += 1;
7113 }
7114 else if (R != NULL)
7115 *R = (LONGEST) RU;
7116
4c4b4cd2 7117 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
7118 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
7119 number representable as a LONGEST (although either would probably work
7120 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 7121 above is always equivalent to the negative of RU. */
14f9c5c9
AS
7122
7123 if (new_k != NULL)
7124 *new_k = k;
7125 return 1;
7126}
7127
4c4b4cd2
PH
7128/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
7129 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
7130 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 7131
d2e4a39e 7132int
ebf56fd3 7133ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 7134{
d2e4a39e 7135 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
7136 int p;
7137
7138 p = 0;
7139 while (1)
7140 {
d2e4a39e 7141 switch (name[p])
4c4b4cd2
PH
7142 {
7143 case '\0':
7144 return 0;
7145 case 'S':
7146 {
7147 LONGEST W;
5b4ee69b 7148
4c4b4cd2
PH
7149 if (!ada_scan_number (name, p + 1, &W, &p))
7150 return 0;
7151 if (val == W)
7152 return 1;
7153 break;
7154 }
7155 case 'R':
7156 {
7157 LONGEST L, U;
5b4ee69b 7158
4c4b4cd2
PH
7159 if (!ada_scan_number (name, p + 1, &L, &p)
7160 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
7161 return 0;
7162 if (val >= L && val <= U)
7163 return 1;
7164 break;
7165 }
7166 case 'O':
7167 return 1;
7168 default:
7169 return 0;
7170 }
7171 }
7172}
7173
0963b4bd 7174/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
7175
7176/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
7177 ARG_TYPE, extract and return the value of one of its (non-static)
7178 fields. FIELDNO says which field. Differs from value_primitive_field
7179 only in that it can handle packed values of arbitrary type. */
14f9c5c9 7180
4c4b4cd2 7181static struct value *
d2e4a39e 7182ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 7183 struct type *arg_type)
14f9c5c9 7184{
14f9c5c9
AS
7185 struct type *type;
7186
61ee279c 7187 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
7188 type = TYPE_FIELD_TYPE (arg_type, fieldno);
7189
4c4b4cd2 7190 /* Handle packed fields. */
14f9c5c9
AS
7191
7192 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
7193 {
7194 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7195 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 7196
0fd88904 7197 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
7198 offset + bit_pos / 8,
7199 bit_pos % 8, bit_size, type);
14f9c5c9
AS
7200 }
7201 else
7202 return value_primitive_field (arg1, offset, fieldno, arg_type);
7203}
7204
52ce6436
PH
7205/* Find field with name NAME in object of type TYPE. If found,
7206 set the following for each argument that is non-null:
7207 - *FIELD_TYPE_P to the field's type;
7208 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
7209 an object of that type;
7210 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
7211 - *BIT_SIZE_P to its size in bits if the field is packed, and
7212 0 otherwise;
7213 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7214 fields up to but not including the desired field, or by the total
7215 number of fields if not found. A NULL value of NAME never
7216 matches; the function just counts visible fields in this case.
7217
828d5846
XR
7218 Notice that we need to handle when a tagged record hierarchy
7219 has some components with the same name, like in this scenario:
7220
7221 type Top_T is tagged record
7222 N : Integer := 1;
7223 U : Integer := 974;
7224 A : Integer := 48;
7225 end record;
7226
7227 type Middle_T is new Top.Top_T with record
7228 N : Character := 'a';
7229 C : Integer := 3;
7230 end record;
7231
7232 type Bottom_T is new Middle.Middle_T with record
7233 N : Float := 4.0;
7234 C : Character := '5';
7235 X : Integer := 6;
7236 A : Character := 'J';
7237 end record;
7238
7239 Let's say we now have a variable declared and initialized as follow:
7240
7241 TC : Top_A := new Bottom_T;
7242
7243 And then we use this variable to call this function
7244
7245 procedure Assign (Obj: in out Top_T; TV : Integer);
7246
7247 as follow:
7248
7249 Assign (Top_T (B), 12);
7250
7251 Now, we're in the debugger, and we're inside that procedure
7252 then and we want to print the value of obj.c:
7253
7254 Usually, the tagged record or one of the parent type owns the
7255 component to print and there's no issue but in this particular
7256 case, what does it mean to ask for Obj.C? Since the actual
7257 type for object is type Bottom_T, it could mean two things: type
7258 component C from the Middle_T view, but also component C from
7259 Bottom_T. So in that "undefined" case, when the component is
7260 not found in the non-resolved type (which includes all the
7261 components of the parent type), then resolve it and see if we
7262 get better luck once expanded.
7263
7264 In the case of homonyms in the derived tagged type, we don't
7265 guaranty anything, and pick the one that's easiest for us
7266 to program.
7267
0963b4bd 7268 Returns 1 if found, 0 otherwise. */
52ce6436 7269
4c4b4cd2 7270static int
0d5cff50 7271find_struct_field (const char *name, struct type *type, int offset,
76a01679 7272 struct type **field_type_p,
52ce6436
PH
7273 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7274 int *index_p)
4c4b4cd2
PH
7275{
7276 int i;
828d5846 7277 int parent_offset = -1;
4c4b4cd2 7278
61ee279c 7279 type = ada_check_typedef (type);
76a01679 7280
52ce6436
PH
7281 if (field_type_p != NULL)
7282 *field_type_p = NULL;
7283 if (byte_offset_p != NULL)
d5d6fca5 7284 *byte_offset_p = 0;
52ce6436
PH
7285 if (bit_offset_p != NULL)
7286 *bit_offset_p = 0;
7287 if (bit_size_p != NULL)
7288 *bit_size_p = 0;
7289
7290 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
7291 {
7292 int bit_pos = TYPE_FIELD_BITPOS (type, i);
7293 int fld_offset = offset + bit_pos / 8;
0d5cff50 7294 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 7295
4c4b4cd2
PH
7296 if (t_field_name == NULL)
7297 continue;
7298
828d5846
XR
7299 else if (ada_is_parent_field (type, i))
7300 {
7301 /* This is a field pointing us to the parent type of a tagged
7302 type. As hinted in this function's documentation, we give
7303 preference to fields in the current record first, so what
7304 we do here is just record the index of this field before
7305 we skip it. If it turns out we couldn't find our field
7306 in the current record, then we'll get back to it and search
7307 inside it whether the field might exist in the parent. */
7308
7309 parent_offset = i;
7310 continue;
7311 }
7312
52ce6436 7313 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
7314 {
7315 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 7316
52ce6436
PH
7317 if (field_type_p != NULL)
7318 *field_type_p = TYPE_FIELD_TYPE (type, i);
7319 if (byte_offset_p != NULL)
7320 *byte_offset_p = fld_offset;
7321 if (bit_offset_p != NULL)
7322 *bit_offset_p = bit_pos % 8;
7323 if (bit_size_p != NULL)
7324 *bit_size_p = bit_size;
76a01679
JB
7325 return 1;
7326 }
4c4b4cd2
PH
7327 else if (ada_is_wrapper_field (type, i))
7328 {
52ce6436
PH
7329 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7330 field_type_p, byte_offset_p, bit_offset_p,
7331 bit_size_p, index_p))
76a01679
JB
7332 return 1;
7333 }
4c4b4cd2
PH
7334 else if (ada_is_variant_part (type, i))
7335 {
52ce6436
PH
7336 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7337 fixed type?? */
4c4b4cd2 7338 int j;
52ce6436
PH
7339 struct type *field_type
7340 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7341
52ce6436 7342 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7343 {
76a01679
JB
7344 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7345 fld_offset
7346 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7347 field_type_p, byte_offset_p,
52ce6436 7348 bit_offset_p, bit_size_p, index_p))
76a01679 7349 return 1;
4c4b4cd2
PH
7350 }
7351 }
52ce6436
PH
7352 else if (index_p != NULL)
7353 *index_p += 1;
4c4b4cd2 7354 }
828d5846
XR
7355
7356 /* Field not found so far. If this is a tagged type which
7357 has a parent, try finding that field in the parent now. */
7358
7359 if (parent_offset != -1)
7360 {
7361 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
7362 int fld_offset = offset + bit_pos / 8;
7363
7364 if (find_struct_field (name, TYPE_FIELD_TYPE (type, parent_offset),
7365 fld_offset, field_type_p, byte_offset_p,
7366 bit_offset_p, bit_size_p, index_p))
7367 return 1;
7368 }
7369
4c4b4cd2
PH
7370 return 0;
7371}
7372
0963b4bd 7373/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7374
52ce6436
PH
7375static int
7376num_visible_fields (struct type *type)
7377{
7378 int n;
5b4ee69b 7379
52ce6436
PH
7380 n = 0;
7381 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7382 return n;
7383}
14f9c5c9 7384
4c4b4cd2 7385/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7386 and search in it assuming it has (class) type TYPE.
7387 If found, return value, else return NULL.
7388
828d5846
XR
7389 Searches recursively through wrapper fields (e.g., '_parent').
7390
7391 In the case of homonyms in the tagged types, please refer to the
7392 long explanation in find_struct_field's function documentation. */
14f9c5c9 7393
4c4b4cd2 7394static struct value *
108d56a4 7395ada_search_struct_field (const char *name, struct value *arg, int offset,
4c4b4cd2 7396 struct type *type)
14f9c5c9
AS
7397{
7398 int i;
828d5846 7399 int parent_offset = -1;
14f9c5c9 7400
5b4ee69b 7401 type = ada_check_typedef (type);
52ce6436 7402 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 7403 {
0d5cff50 7404 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7405
7406 if (t_field_name == NULL)
4c4b4cd2 7407 continue;
14f9c5c9 7408
828d5846
XR
7409 else if (ada_is_parent_field (type, i))
7410 {
7411 /* This is a field pointing us to the parent type of a tagged
7412 type. As hinted in this function's documentation, we give
7413 preference to fields in the current record first, so what
7414 we do here is just record the index of this field before
7415 we skip it. If it turns out we couldn't find our field
7416 in the current record, then we'll get back to it and search
7417 inside it whether the field might exist in the parent. */
7418
7419 parent_offset = i;
7420 continue;
7421 }
7422
14f9c5c9 7423 else if (field_name_match (t_field_name, name))
4c4b4cd2 7424 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7425
7426 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7427 {
0963b4bd 7428 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
7429 ada_search_struct_field (name, arg,
7430 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7431 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7432
4c4b4cd2
PH
7433 if (v != NULL)
7434 return v;
7435 }
14f9c5c9
AS
7436
7437 else if (ada_is_variant_part (type, i))
4c4b4cd2 7438 {
0963b4bd 7439 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7440 int j;
5b4ee69b
MS
7441 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7442 i));
4c4b4cd2
PH
7443 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7444
52ce6436 7445 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7446 {
0963b4bd
MS
7447 struct value *v = ada_search_struct_field /* Force line
7448 break. */
06d5cf63
JB
7449 (name, arg,
7450 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7451 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7452
4c4b4cd2
PH
7453 if (v != NULL)
7454 return v;
7455 }
7456 }
14f9c5c9 7457 }
828d5846
XR
7458
7459 /* Field not found so far. If this is a tagged type which
7460 has a parent, try finding that field in the parent now. */
7461
7462 if (parent_offset != -1)
7463 {
7464 struct value *v = ada_search_struct_field (
7465 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
7466 TYPE_FIELD_TYPE (type, parent_offset));
7467
7468 if (v != NULL)
7469 return v;
7470 }
7471
14f9c5c9
AS
7472 return NULL;
7473}
d2e4a39e 7474
52ce6436
PH
7475static struct value *ada_index_struct_field_1 (int *, struct value *,
7476 int, struct type *);
7477
7478
7479/* Return field #INDEX in ARG, where the index is that returned by
7480 * find_struct_field through its INDEX_P argument. Adjust the address
7481 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7482 * If found, return value, else return NULL. */
52ce6436
PH
7483
7484static struct value *
7485ada_index_struct_field (int index, struct value *arg, int offset,
7486 struct type *type)
7487{
7488 return ada_index_struct_field_1 (&index, arg, offset, type);
7489}
7490
7491
7492/* Auxiliary function for ada_index_struct_field. Like
7493 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7494 * *INDEX_P. */
52ce6436
PH
7495
7496static struct value *
7497ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7498 struct type *type)
7499{
7500 int i;
7501 type = ada_check_typedef (type);
7502
7503 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7504 {
7505 if (TYPE_FIELD_NAME (type, i) == NULL)
7506 continue;
7507 else if (ada_is_wrapper_field (type, i))
7508 {
0963b4bd 7509 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7510 ada_index_struct_field_1 (index_p, arg,
7511 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7512 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7513
52ce6436
PH
7514 if (v != NULL)
7515 return v;
7516 }
7517
7518 else if (ada_is_variant_part (type, i))
7519 {
7520 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7521 find_struct_field. */
52ce6436
PH
7522 error (_("Cannot assign this kind of variant record"));
7523 }
7524 else if (*index_p == 0)
7525 return ada_value_primitive_field (arg, offset, i, type);
7526 else
7527 *index_p -= 1;
7528 }
7529 return NULL;
7530}
7531
4c4b4cd2
PH
7532/* Given ARG, a value of type (pointer or reference to a)*
7533 structure/union, extract the component named NAME from the ultimate
7534 target structure/union and return it as a value with its
f5938064 7535 appropriate type.
14f9c5c9 7536
4c4b4cd2
PH
7537 The routine searches for NAME among all members of the structure itself
7538 and (recursively) among all members of any wrapper members
14f9c5c9
AS
7539 (e.g., '_parent').
7540
03ee6b2e
PH
7541 If NO_ERR, then simply return NULL in case of error, rather than
7542 calling error. */
14f9c5c9 7543
d2e4a39e 7544struct value *
a121b7c1 7545ada_value_struct_elt (struct value *arg, const char *name, int no_err)
14f9c5c9 7546{
4c4b4cd2 7547 struct type *t, *t1;
d2e4a39e 7548 struct value *v;
1f5d1570 7549 int check_tag;
14f9c5c9 7550
4c4b4cd2 7551 v = NULL;
df407dfe 7552 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
7553 if (TYPE_CODE (t) == TYPE_CODE_REF)
7554 {
7555 t1 = TYPE_TARGET_TYPE (t);
7556 if (t1 == NULL)
03ee6b2e 7557 goto BadValue;
61ee279c 7558 t1 = ada_check_typedef (t1);
4c4b4cd2 7559 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 7560 {
994b9211 7561 arg = coerce_ref (arg);
76a01679
JB
7562 t = t1;
7563 }
4c4b4cd2 7564 }
14f9c5c9 7565
4c4b4cd2
PH
7566 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7567 {
7568 t1 = TYPE_TARGET_TYPE (t);
7569 if (t1 == NULL)
03ee6b2e 7570 goto BadValue;
61ee279c 7571 t1 = ada_check_typedef (t1);
4c4b4cd2 7572 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
7573 {
7574 arg = value_ind (arg);
7575 t = t1;
7576 }
4c4b4cd2 7577 else
76a01679 7578 break;
4c4b4cd2 7579 }
14f9c5c9 7580
4c4b4cd2 7581 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 7582 goto BadValue;
14f9c5c9 7583
4c4b4cd2
PH
7584 if (t1 == t)
7585 v = ada_search_struct_field (name, arg, 0, t);
7586 else
7587 {
7588 int bit_offset, bit_size, byte_offset;
7589 struct type *field_type;
7590 CORE_ADDR address;
7591
76a01679 7592 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 7593 address = value_address (ada_value_ind (arg));
4c4b4cd2 7594 else
b50d69b5 7595 address = value_address (ada_coerce_ref (arg));
14f9c5c9 7596
828d5846
XR
7597 /* Check to see if this is a tagged type. We also need to handle
7598 the case where the type is a reference to a tagged type, but
7599 we have to be careful to exclude pointers to tagged types.
7600 The latter should be shown as usual (as a pointer), whereas
7601 a reference should mostly be transparent to the user. */
7602
7603 if (ada_is_tagged_type (t1, 0)
7604 || (TYPE_CODE (t1) == TYPE_CODE_REF
7605 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
7606 {
7607 /* We first try to find the searched field in the current type.
7608 If not found then let's look in the fixed type. */
7609
7610 if (!find_struct_field (name, t1, 0,
7611 &field_type, &byte_offset, &bit_offset,
7612 &bit_size, NULL))
1f5d1570
JG
7613 check_tag = 1;
7614 else
7615 check_tag = 0;
828d5846
XR
7616 }
7617 else
1f5d1570
JG
7618 check_tag = 0;
7619
7620 /* Convert to fixed type in all cases, so that we have proper
7621 offsets to each field in unconstrained record types. */
7622 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
7623 address, NULL, check_tag);
828d5846 7624
76a01679
JB
7625 if (find_struct_field (name, t1, 0,
7626 &field_type, &byte_offset, &bit_offset,
52ce6436 7627 &bit_size, NULL))
76a01679
JB
7628 {
7629 if (bit_size != 0)
7630 {
714e53ab
PH
7631 if (TYPE_CODE (t) == TYPE_CODE_REF)
7632 arg = ada_coerce_ref (arg);
7633 else
7634 arg = ada_value_ind (arg);
76a01679
JB
7635 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7636 bit_offset, bit_size,
7637 field_type);
7638 }
7639 else
f5938064 7640 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
7641 }
7642 }
7643
03ee6b2e
PH
7644 if (v != NULL || no_err)
7645 return v;
7646 else
323e0a4a 7647 error (_("There is no member named %s."), name);
14f9c5c9 7648
03ee6b2e
PH
7649 BadValue:
7650 if (no_err)
7651 return NULL;
7652 else
0963b4bd
MS
7653 error (_("Attempt to extract a component of "
7654 "a value that is not a record."));
14f9c5c9
AS
7655}
7656
3b4de39c 7657/* Return a string representation of type TYPE. */
99bbb428 7658
3b4de39c 7659static std::string
99bbb428
PA
7660type_as_string (struct type *type)
7661{
d7e74731 7662 string_file tmp_stream;
99bbb428 7663
d7e74731 7664 type_print (type, "", &tmp_stream, -1);
99bbb428 7665
d7e74731 7666 return std::move (tmp_stream.string ());
99bbb428
PA
7667}
7668
14f9c5c9 7669/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7670 If DISPP is non-null, add its byte displacement from the beginning of a
7671 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7672 work for packed fields).
7673
7674 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7675 followed by "___".
14f9c5c9 7676
0963b4bd 7677 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7678 be a (pointer or reference)+ to a struct or union, and the
7679 ultimate target type will be searched.
14f9c5c9
AS
7680
7681 Looks recursively into variant clauses and parent types.
7682
828d5846
XR
7683 In the case of homonyms in the tagged types, please refer to the
7684 long explanation in find_struct_field's function documentation.
7685
4c4b4cd2
PH
7686 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7687 TYPE is not a type of the right kind. */
14f9c5c9 7688
4c4b4cd2 7689static struct type *
a121b7c1 7690ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
988f6b3d 7691 int noerr)
14f9c5c9
AS
7692{
7693 int i;
828d5846 7694 int parent_offset = -1;
14f9c5c9
AS
7695
7696 if (name == NULL)
7697 goto BadName;
7698
76a01679 7699 if (refok && type != NULL)
4c4b4cd2
PH
7700 while (1)
7701 {
61ee279c 7702 type = ada_check_typedef (type);
76a01679
JB
7703 if (TYPE_CODE (type) != TYPE_CODE_PTR
7704 && TYPE_CODE (type) != TYPE_CODE_REF)
7705 break;
7706 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7707 }
14f9c5c9 7708
76a01679 7709 if (type == NULL
1265e4aa
JB
7710 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7711 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 7712 {
4c4b4cd2 7713 if (noerr)
76a01679 7714 return NULL;
99bbb428 7715
3b4de39c
PA
7716 error (_("Type %s is not a structure or union type"),
7717 type != NULL ? type_as_string (type).c_str () : _("(null)"));
14f9c5c9
AS
7718 }
7719
7720 type = to_static_fixed_type (type);
7721
7722 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7723 {
0d5cff50 7724 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9 7725 struct type *t;
d2e4a39e 7726
14f9c5c9 7727 if (t_field_name == NULL)
4c4b4cd2 7728 continue;
14f9c5c9 7729
828d5846
XR
7730 else if (ada_is_parent_field (type, i))
7731 {
7732 /* This is a field pointing us to the parent type of a tagged
7733 type. As hinted in this function's documentation, we give
7734 preference to fields in the current record first, so what
7735 we do here is just record the index of this field before
7736 we skip it. If it turns out we couldn't find our field
7737 in the current record, then we'll get back to it and search
7738 inside it whether the field might exist in the parent. */
7739
7740 parent_offset = i;
7741 continue;
7742 }
7743
14f9c5c9 7744 else if (field_name_match (t_field_name, name))
988f6b3d 7745 return TYPE_FIELD_TYPE (type, i);
14f9c5c9
AS
7746
7747 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7748 {
4c4b4cd2 7749 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
988f6b3d 7750 0, 1);
4c4b4cd2 7751 if (t != NULL)
988f6b3d 7752 return t;
4c4b4cd2 7753 }
14f9c5c9
AS
7754
7755 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7756 {
7757 int j;
5b4ee69b
MS
7758 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7759 i));
4c4b4cd2
PH
7760
7761 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7762 {
b1f33ddd
JB
7763 /* FIXME pnh 2008/01/26: We check for a field that is
7764 NOT wrapped in a struct, since the compiler sometimes
7765 generates these for unchecked variant types. Revisit
0963b4bd 7766 if the compiler changes this practice. */
0d5cff50 7767 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
988f6b3d 7768
b1f33ddd
JB
7769 if (v_field_name != NULL
7770 && field_name_match (v_field_name, name))
460efde1 7771 t = TYPE_FIELD_TYPE (field_type, j);
b1f33ddd 7772 else
0963b4bd
MS
7773 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7774 j),
988f6b3d 7775 name, 0, 1);
b1f33ddd 7776
4c4b4cd2 7777 if (t != NULL)
988f6b3d 7778 return t;
4c4b4cd2
PH
7779 }
7780 }
14f9c5c9
AS
7781
7782 }
7783
828d5846
XR
7784 /* Field not found so far. If this is a tagged type which
7785 has a parent, try finding that field in the parent now. */
7786
7787 if (parent_offset != -1)
7788 {
7789 struct type *t;
7790
7791 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, parent_offset),
7792 name, 0, 1);
7793 if (t != NULL)
7794 return t;
7795 }
7796
14f9c5c9 7797BadName:
d2e4a39e 7798 if (!noerr)
14f9c5c9 7799 {
2b2798cc 7800 const char *name_str = name != NULL ? name : _("<null>");
99bbb428
PA
7801
7802 error (_("Type %s has no component named %s"),
3b4de39c 7803 type_as_string (type).c_str (), name_str);
14f9c5c9
AS
7804 }
7805
7806 return NULL;
7807}
7808
b1f33ddd
JB
7809/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7810 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7811 represents an unchecked union (that is, the variant part of a
0963b4bd 7812 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7813
7814static int
7815is_unchecked_variant (struct type *var_type, struct type *outer_type)
7816{
a121b7c1 7817 const char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7818
988f6b3d 7819 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
b1f33ddd
JB
7820}
7821
7822
14f9c5c9
AS
7823/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7824 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7825 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7826 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7827
d2e4a39e 7828int
ebf56fd3 7829ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7830 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7831{
7832 int others_clause;
7833 int i;
a121b7c1 7834 const char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7835 struct value *outer;
7836 struct value *discrim;
14f9c5c9
AS
7837 LONGEST discrim_val;
7838
012370f6
TT
7839 /* Using plain value_from_contents_and_address here causes problems
7840 because we will end up trying to resolve a type that is currently
7841 being constructed. */
7842 outer = value_from_contents_and_address_unresolved (outer_type,
7843 outer_valaddr, 0);
0c281816
JB
7844 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7845 if (discrim == NULL)
14f9c5c9 7846 return -1;
0c281816 7847 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7848
7849 others_clause = -1;
7850 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7851 {
7852 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7853 others_clause = i;
14f9c5c9 7854 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7855 return i;
14f9c5c9
AS
7856 }
7857
7858 return others_clause;
7859}
d2e4a39e 7860\f
14f9c5c9
AS
7861
7862
4c4b4cd2 7863 /* Dynamic-Sized Records */
14f9c5c9
AS
7864
7865/* Strategy: The type ostensibly attached to a value with dynamic size
7866 (i.e., a size that is not statically recorded in the debugging
7867 data) does not accurately reflect the size or layout of the value.
7868 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7869 conventional types that are constructed on the fly. */
14f9c5c9
AS
7870
7871/* There is a subtle and tricky problem here. In general, we cannot
7872 determine the size of dynamic records without its data. However,
7873 the 'struct value' data structure, which GDB uses to represent
7874 quantities in the inferior process (the target), requires the size
7875 of the type at the time of its allocation in order to reserve space
7876 for GDB's internal copy of the data. That's why the
7877 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7878 rather than struct value*s.
14f9c5c9
AS
7879
7880 However, GDB's internal history variables ($1, $2, etc.) are
7881 struct value*s containing internal copies of the data that are not, in
7882 general, the same as the data at their corresponding addresses in
7883 the target. Fortunately, the types we give to these values are all
7884 conventional, fixed-size types (as per the strategy described
7885 above), so that we don't usually have to perform the
7886 'to_fixed_xxx_type' conversions to look at their values.
7887 Unfortunately, there is one exception: if one of the internal
7888 history variables is an array whose elements are unconstrained
7889 records, then we will need to create distinct fixed types for each
7890 element selected. */
7891
7892/* The upshot of all of this is that many routines take a (type, host
7893 address, target address) triple as arguments to represent a value.
7894 The host address, if non-null, is supposed to contain an internal
7895 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7896 target at the target address. */
14f9c5c9
AS
7897
7898/* Assuming that VAL0 represents a pointer value, the result of
7899 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7900 dynamic-sized types. */
14f9c5c9 7901
d2e4a39e
AS
7902struct value *
7903ada_value_ind (struct value *val0)
14f9c5c9 7904{
c48db5ca 7905 struct value *val = value_ind (val0);
5b4ee69b 7906
b50d69b5
JG
7907 if (ada_is_tagged_type (value_type (val), 0))
7908 val = ada_tag_value_at_base_address (val);
7909
4c4b4cd2 7910 return ada_to_fixed_value (val);
14f9c5c9
AS
7911}
7912
7913/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7914 qualifiers on VAL0. */
7915
d2e4a39e
AS
7916static struct value *
7917ada_coerce_ref (struct value *val0)
7918{
df407dfe 7919 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7920 {
7921 struct value *val = val0;
5b4ee69b 7922
994b9211 7923 val = coerce_ref (val);
b50d69b5
JG
7924
7925 if (ada_is_tagged_type (value_type (val), 0))
7926 val = ada_tag_value_at_base_address (val);
7927
4c4b4cd2 7928 return ada_to_fixed_value (val);
d2e4a39e
AS
7929 }
7930 else
14f9c5c9
AS
7931 return val0;
7932}
7933
7934/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7935 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7936
7937static unsigned int
ebf56fd3 7938align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7939{
7940 return (off + alignment - 1) & ~(alignment - 1);
7941}
7942
4c4b4cd2 7943/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7944
7945static unsigned int
ebf56fd3 7946field_alignment (struct type *type, int f)
14f9c5c9 7947{
d2e4a39e 7948 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7949 int len;
14f9c5c9
AS
7950 int align_offset;
7951
64a1bf19
JB
7952 /* The field name should never be null, unless the debugging information
7953 is somehow malformed. In this case, we assume the field does not
7954 require any alignment. */
7955 if (name == NULL)
7956 return 1;
7957
7958 len = strlen (name);
7959
4c4b4cd2
PH
7960 if (!isdigit (name[len - 1]))
7961 return 1;
14f9c5c9 7962
d2e4a39e 7963 if (isdigit (name[len - 2]))
14f9c5c9
AS
7964 align_offset = len - 2;
7965 else
7966 align_offset = len - 1;
7967
61012eef 7968 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7969 return TARGET_CHAR_BIT;
7970
4c4b4cd2
PH
7971 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7972}
7973
852dff6c 7974/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7975
852dff6c
JB
7976static struct symbol *
7977ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7978{
7979 struct symbol *sym;
7980
7981 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7982 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7983 return sym;
7984
4186eb54
KS
7985 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7986 return sym;
14f9c5c9
AS
7987}
7988
dddfab26
UW
7989/* Find a type named NAME. Ignores ambiguity. This routine will look
7990 solely for types defined by debug info, it will not search the GDB
7991 primitive types. */
4c4b4cd2 7992
852dff6c 7993static struct type *
ebf56fd3 7994ada_find_any_type (const char *name)
14f9c5c9 7995{
852dff6c 7996 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7997
14f9c5c9 7998 if (sym != NULL)
dddfab26 7999 return SYMBOL_TYPE (sym);
14f9c5c9 8000
dddfab26 8001 return NULL;
14f9c5c9
AS
8002}
8003
739593e0
JB
8004/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
8005 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
8006 symbol, in which case it is returned. Otherwise, this looks for
8007 symbols whose name is that of NAME_SYM suffixed with "___XR".
8008 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
8009
8010struct symbol *
270140bd 8011ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 8012{
739593e0 8013 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
8014 struct symbol *sym;
8015
739593e0
JB
8016 if (strstr (name, "___XR") != NULL)
8017 return name_sym;
8018
aeb5907d
JB
8019 sym = find_old_style_renaming_symbol (name, block);
8020
8021 if (sym != NULL)
8022 return sym;
8023
0963b4bd 8024 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 8025 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
8026 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
8027 return sym;
8028 else
8029 return NULL;
8030}
8031
8032static struct symbol *
270140bd 8033find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 8034{
7f0df278 8035 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
8036 char *rename;
8037
8038 if (function_sym != NULL)
8039 {
8040 /* If the symbol is defined inside a function, NAME is not fully
8041 qualified. This means we need to prepend the function name
8042 as well as adding the ``___XR'' suffix to build the name of
8043 the associated renaming symbol. */
0d5cff50 8044 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
8045 /* Function names sometimes contain suffixes used
8046 for instance to qualify nested subprograms. When building
8047 the XR type name, we need to make sure that this suffix is
8048 not included. So do not include any suffix in the function
8049 name length below. */
69fadcdf 8050 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
8051 const int rename_len = function_name_len + 2 /* "__" */
8052 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 8053
529cad9c 8054 /* Strip the suffix if necessary. */
69fadcdf
JB
8055 ada_remove_trailing_digits (function_name, &function_name_len);
8056 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
8057 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 8058
4c4b4cd2
PH
8059 /* Library-level functions are a special case, as GNAT adds
8060 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 8061 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
8062 have this prefix, so we need to skip this prefix if present. */
8063 if (function_name_len > 5 /* "_ada_" */
8064 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
8065 {
8066 function_name += 5;
8067 function_name_len -= 5;
8068 }
4c4b4cd2
PH
8069
8070 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
8071 strncpy (rename, function_name, function_name_len);
8072 xsnprintf (rename + function_name_len, rename_len - function_name_len,
8073 "__%s___XR", name);
4c4b4cd2
PH
8074 }
8075 else
8076 {
8077 const int rename_len = strlen (name) + 6;
5b4ee69b 8078
4c4b4cd2 8079 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 8080 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
8081 }
8082
852dff6c 8083 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
8084}
8085
14f9c5c9 8086/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 8087 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 8088 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
8089 otherwise return 0. */
8090
14f9c5c9 8091int
d2e4a39e 8092ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
8093{
8094 if (type1 == NULL)
8095 return 1;
8096 else if (type0 == NULL)
8097 return 0;
8098 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
8099 return 1;
8100 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
8101 return 0;
4c4b4cd2
PH
8102 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
8103 return 1;
ad82864c 8104 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 8105 return 1;
4c4b4cd2
PH
8106 else if (ada_is_array_descriptor_type (type0)
8107 && !ada_is_array_descriptor_type (type1))
14f9c5c9 8108 return 1;
aeb5907d
JB
8109 else
8110 {
a737d952
TT
8111 const char *type0_name = TYPE_NAME (type0);
8112 const char *type1_name = TYPE_NAME (type1);
aeb5907d
JB
8113
8114 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
8115 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
8116 return 1;
8117 }
14f9c5c9
AS
8118 return 0;
8119}
8120
e86ca25f
TT
8121/* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
8122 null. */
4c4b4cd2 8123
0d5cff50 8124const char *
d2e4a39e 8125ada_type_name (struct type *type)
14f9c5c9 8126{
d2e4a39e 8127 if (type == NULL)
14f9c5c9 8128 return NULL;
e86ca25f 8129 return TYPE_NAME (type);
14f9c5c9
AS
8130}
8131
b4ba55a1
JB
8132/* Search the list of "descriptive" types associated to TYPE for a type
8133 whose name is NAME. */
8134
8135static struct type *
8136find_parallel_type_by_descriptive_type (struct type *type, const char *name)
8137{
931e5bc3 8138 struct type *result, *tmp;
b4ba55a1 8139
c6044dd1
JB
8140 if (ada_ignore_descriptive_types_p)
8141 return NULL;
8142
b4ba55a1
JB
8143 /* If there no descriptive-type info, then there is no parallel type
8144 to be found. */
8145 if (!HAVE_GNAT_AUX_INFO (type))
8146 return NULL;
8147
8148 result = TYPE_DESCRIPTIVE_TYPE (type);
8149 while (result != NULL)
8150 {
0d5cff50 8151 const char *result_name = ada_type_name (result);
b4ba55a1
JB
8152
8153 if (result_name == NULL)
8154 {
8155 warning (_("unexpected null name on descriptive type"));
8156 return NULL;
8157 }
8158
8159 /* If the names match, stop. */
8160 if (strcmp (result_name, name) == 0)
8161 break;
8162
8163 /* Otherwise, look at the next item on the list, if any. */
8164 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
8165 tmp = TYPE_DESCRIPTIVE_TYPE (result);
8166 else
8167 tmp = NULL;
8168
8169 /* If not found either, try after having resolved the typedef. */
8170 if (tmp != NULL)
8171 result = tmp;
b4ba55a1 8172 else
931e5bc3 8173 {
f168693b 8174 result = check_typedef (result);
931e5bc3
JG
8175 if (HAVE_GNAT_AUX_INFO (result))
8176 result = TYPE_DESCRIPTIVE_TYPE (result);
8177 else
8178 result = NULL;
8179 }
b4ba55a1
JB
8180 }
8181
8182 /* If we didn't find a match, see whether this is a packed array. With
8183 older compilers, the descriptive type information is either absent or
8184 irrelevant when it comes to packed arrays so the above lookup fails.
8185 Fall back to using a parallel lookup by name in this case. */
12ab9e09 8186 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
8187 return ada_find_any_type (name);
8188
8189 return result;
8190}
8191
8192/* Find a parallel type to TYPE with the specified NAME, using the
8193 descriptive type taken from the debugging information, if available,
8194 and otherwise using the (slower) name-based method. */
8195
8196static struct type *
8197ada_find_parallel_type_with_name (struct type *type, const char *name)
8198{
8199 struct type *result = NULL;
8200
8201 if (HAVE_GNAT_AUX_INFO (type))
8202 result = find_parallel_type_by_descriptive_type (type, name);
8203 else
8204 result = ada_find_any_type (name);
8205
8206 return result;
8207}
8208
8209/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 8210 SUFFIX to the name of TYPE. */
14f9c5c9 8211
d2e4a39e 8212struct type *
ebf56fd3 8213ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 8214{
0d5cff50 8215 char *name;
fe978cb0 8216 const char *type_name = ada_type_name (type);
14f9c5c9 8217 int len;
d2e4a39e 8218
fe978cb0 8219 if (type_name == NULL)
14f9c5c9
AS
8220 return NULL;
8221
fe978cb0 8222 len = strlen (type_name);
14f9c5c9 8223
b4ba55a1 8224 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 8225
fe978cb0 8226 strcpy (name, type_name);
14f9c5c9
AS
8227 strcpy (name + len, suffix);
8228
b4ba55a1 8229 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
8230}
8231
14f9c5c9 8232/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 8233 type describing its fields. Otherwise, return NULL. */
14f9c5c9 8234
d2e4a39e
AS
8235static struct type *
8236dynamic_template_type (struct type *type)
14f9c5c9 8237{
61ee279c 8238 type = ada_check_typedef (type);
14f9c5c9
AS
8239
8240 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 8241 || ada_type_name (type) == NULL)
14f9c5c9 8242 return NULL;
d2e4a39e 8243 else
14f9c5c9
AS
8244 {
8245 int len = strlen (ada_type_name (type));
5b4ee69b 8246
4c4b4cd2
PH
8247 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
8248 return type;
14f9c5c9 8249 else
4c4b4cd2 8250 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
8251 }
8252}
8253
8254/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 8255 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 8256
d2e4a39e
AS
8257static int
8258is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
8259{
8260 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 8261
d2e4a39e 8262 return name != NULL
14f9c5c9
AS
8263 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
8264 && strstr (name, "___XVL") != NULL;
8265}
8266
4c4b4cd2
PH
8267/* The index of the variant field of TYPE, or -1 if TYPE does not
8268 represent a variant record type. */
14f9c5c9 8269
d2e4a39e 8270static int
4c4b4cd2 8271variant_field_index (struct type *type)
14f9c5c9
AS
8272{
8273 int f;
8274
4c4b4cd2
PH
8275 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
8276 return -1;
8277
8278 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
8279 {
8280 if (ada_is_variant_part (type, f))
8281 return f;
8282 }
8283 return -1;
14f9c5c9
AS
8284}
8285
4c4b4cd2
PH
8286/* A record type with no fields. */
8287
d2e4a39e 8288static struct type *
fe978cb0 8289empty_record (struct type *templ)
14f9c5c9 8290{
fe978cb0 8291 struct type *type = alloc_type_copy (templ);
5b4ee69b 8292
14f9c5c9
AS
8293 TYPE_CODE (type) = TYPE_CODE_STRUCT;
8294 TYPE_NFIELDS (type) = 0;
8295 TYPE_FIELDS (type) = NULL;
8ecb59f8 8296 INIT_NONE_SPECIFIC (type);
14f9c5c9 8297 TYPE_NAME (type) = "<empty>";
14f9c5c9
AS
8298 TYPE_LENGTH (type) = 0;
8299 return type;
8300}
8301
8302/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
8303 the value of type TYPE at VALADDR or ADDRESS (see comments at
8304 the beginning of this section) VAL according to GNAT conventions.
8305 DVAL0 should describe the (portion of a) record that contains any
df407dfe 8306 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
8307 an outer-level type (i.e., as opposed to a branch of a variant.) A
8308 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 8309 of the variant.
14f9c5c9 8310
4c4b4cd2
PH
8311 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
8312 length are not statically known are discarded. As a consequence,
8313 VALADDR, ADDRESS and DVAL0 are ignored.
8314
8315 NOTE: Limitations: For now, we assume that dynamic fields and
8316 variants occupy whole numbers of bytes. However, they need not be
8317 byte-aligned. */
8318
8319struct type *
10a2c479 8320ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 8321 const gdb_byte *valaddr,
4c4b4cd2
PH
8322 CORE_ADDR address, struct value *dval0,
8323 int keep_dynamic_fields)
14f9c5c9 8324{
d2e4a39e
AS
8325 struct value *mark = value_mark ();
8326 struct value *dval;
8327 struct type *rtype;
14f9c5c9 8328 int nfields, bit_len;
4c4b4cd2 8329 int variant_field;
14f9c5c9 8330 long off;
d94e4f4f 8331 int fld_bit_len;
14f9c5c9
AS
8332 int f;
8333
4c4b4cd2
PH
8334 /* Compute the number of fields in this record type that are going
8335 to be processed: unless keep_dynamic_fields, this includes only
8336 fields whose position and length are static will be processed. */
8337 if (keep_dynamic_fields)
8338 nfields = TYPE_NFIELDS (type);
8339 else
8340 {
8341 nfields = 0;
76a01679 8342 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
8343 && !ada_is_variant_part (type, nfields)
8344 && !is_dynamic_field (type, nfields))
8345 nfields++;
8346 }
8347
e9bb382b 8348 rtype = alloc_type_copy (type);
14f9c5c9 8349 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8ecb59f8 8350 INIT_NONE_SPECIFIC (rtype);
14f9c5c9 8351 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 8352 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
8353 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8354 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
8355 TYPE_NAME (rtype) = ada_type_name (type);
876cecd0 8356 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 8357
d2e4a39e
AS
8358 off = 0;
8359 bit_len = 0;
4c4b4cd2
PH
8360 variant_field = -1;
8361
14f9c5c9
AS
8362 for (f = 0; f < nfields; f += 1)
8363 {
6c038f32
PH
8364 off = align_value (off, field_alignment (type, f))
8365 + TYPE_FIELD_BITPOS (type, f);
945b3a32 8366 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 8367 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 8368
d2e4a39e 8369 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
8370 {
8371 variant_field = f;
d94e4f4f 8372 fld_bit_len = 0;
4c4b4cd2 8373 }
14f9c5c9 8374 else if (is_dynamic_field (type, f))
4c4b4cd2 8375 {
284614f0
JB
8376 const gdb_byte *field_valaddr = valaddr;
8377 CORE_ADDR field_address = address;
8378 struct type *field_type =
8379 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8380
4c4b4cd2 8381 if (dval0 == NULL)
b5304971
JG
8382 {
8383 /* rtype's length is computed based on the run-time
8384 value of discriminants. If the discriminants are not
8385 initialized, the type size may be completely bogus and
0963b4bd 8386 GDB may fail to allocate a value for it. So check the
b5304971 8387 size first before creating the value. */
c1b5a1a6 8388 ada_ensure_varsize_limit (rtype);
012370f6
TT
8389 /* Using plain value_from_contents_and_address here
8390 causes problems because we will end up trying to
8391 resolve a type that is currently being
8392 constructed. */
8393 dval = value_from_contents_and_address_unresolved (rtype,
8394 valaddr,
8395 address);
9f1f738a 8396 rtype = value_type (dval);
b5304971 8397 }
4c4b4cd2
PH
8398 else
8399 dval = dval0;
8400
284614f0
JB
8401 /* If the type referenced by this field is an aligner type, we need
8402 to unwrap that aligner type, because its size might not be set.
8403 Keeping the aligner type would cause us to compute the wrong
8404 size for this field, impacting the offset of the all the fields
8405 that follow this one. */
8406 if (ada_is_aligner_type (field_type))
8407 {
8408 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8409
8410 field_valaddr = cond_offset_host (field_valaddr, field_offset);
8411 field_address = cond_offset_target (field_address, field_offset);
8412 field_type = ada_aligned_type (field_type);
8413 }
8414
8415 field_valaddr = cond_offset_host (field_valaddr,
8416 off / TARGET_CHAR_BIT);
8417 field_address = cond_offset_target (field_address,
8418 off / TARGET_CHAR_BIT);
8419
8420 /* Get the fixed type of the field. Note that, in this case,
8421 we do not want to get the real type out of the tag: if
8422 the current field is the parent part of a tagged record,
8423 we will get the tag of the object. Clearly wrong: the real
8424 type of the parent is not the real type of the child. We
8425 would end up in an infinite loop. */
8426 field_type = ada_get_base_type (field_type);
8427 field_type = ada_to_fixed_type (field_type, field_valaddr,
8428 field_address, dval, 0);
27f2a97b
JB
8429 /* If the field size is already larger than the maximum
8430 object size, then the record itself will necessarily
8431 be larger than the maximum object size. We need to make
8432 this check now, because the size might be so ridiculously
8433 large (due to an uninitialized variable in the inferior)
8434 that it would cause an overflow when adding it to the
8435 record size. */
c1b5a1a6 8436 ada_ensure_varsize_limit (field_type);
284614f0
JB
8437
8438 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 8439 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
8440 /* The multiplication can potentially overflow. But because
8441 the field length has been size-checked just above, and
8442 assuming that the maximum size is a reasonable value,
8443 an overflow should not happen in practice. So rather than
8444 adding overflow recovery code to this already complex code,
8445 we just assume that it's not going to happen. */
d94e4f4f 8446 fld_bit_len =
4c4b4cd2
PH
8447 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8448 }
14f9c5c9 8449 else
4c4b4cd2 8450 {
5ded5331
JB
8451 /* Note: If this field's type is a typedef, it is important
8452 to preserve the typedef layer.
8453
8454 Otherwise, we might be transforming a typedef to a fat
8455 pointer (encoding a pointer to an unconstrained array),
8456 into a basic fat pointer (encoding an unconstrained
8457 array). As both types are implemented using the same
8458 structure, the typedef is the only clue which allows us
8459 to distinguish between the two options. Stripping it
8460 would prevent us from printing this field appropriately. */
8461 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
8462 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8463 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 8464 fld_bit_len =
4c4b4cd2
PH
8465 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8466 else
5ded5331
JB
8467 {
8468 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8469
8470 /* We need to be careful of typedefs when computing
8471 the length of our field. If this is a typedef,
8472 get the length of the target type, not the length
8473 of the typedef. */
8474 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8475 field_type = ada_typedef_target_type (field_type);
8476
8477 fld_bit_len =
8478 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8479 }
4c4b4cd2 8480 }
14f9c5c9 8481 if (off + fld_bit_len > bit_len)
4c4b4cd2 8482 bit_len = off + fld_bit_len;
d94e4f4f 8483 off += fld_bit_len;
4c4b4cd2
PH
8484 TYPE_LENGTH (rtype) =
8485 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 8486 }
4c4b4cd2
PH
8487
8488 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 8489 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
8490 the record. This can happen in the presence of representation
8491 clauses. */
8492 if (variant_field >= 0)
8493 {
8494 struct type *branch_type;
8495
8496 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8497
8498 if (dval0 == NULL)
9f1f738a 8499 {
012370f6
TT
8500 /* Using plain value_from_contents_and_address here causes
8501 problems because we will end up trying to resolve a type
8502 that is currently being constructed. */
8503 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8504 address);
9f1f738a
SA
8505 rtype = value_type (dval);
8506 }
4c4b4cd2
PH
8507 else
8508 dval = dval0;
8509
8510 branch_type =
8511 to_fixed_variant_branch_type
8512 (TYPE_FIELD_TYPE (type, variant_field),
8513 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8514 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8515 if (branch_type == NULL)
8516 {
8517 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8518 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8519 TYPE_NFIELDS (rtype) -= 1;
8520 }
8521 else
8522 {
8523 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8524 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8525 fld_bit_len =
8526 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8527 TARGET_CHAR_BIT;
8528 if (off + fld_bit_len > bit_len)
8529 bit_len = off + fld_bit_len;
8530 TYPE_LENGTH (rtype) =
8531 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8532 }
8533 }
8534
714e53ab
PH
8535 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8536 should contain the alignment of that record, which should be a strictly
8537 positive value. If null or negative, then something is wrong, most
8538 probably in the debug info. In that case, we don't round up the size
0963b4bd 8539 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8540 the current RTYPE length might be good enough for our purposes. */
8541 if (TYPE_LENGTH (type) <= 0)
8542 {
323e0a4a 8543 if (TYPE_NAME (rtype))
cc1defb1
KS
8544 warning (_("Invalid type size for `%s' detected: %s."),
8545 TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type)));
323e0a4a 8546 else
cc1defb1
KS
8547 warning (_("Invalid type size for <unnamed> detected: %s."),
8548 pulongest (TYPE_LENGTH (type)));
714e53ab
PH
8549 }
8550 else
8551 {
8552 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8553 TYPE_LENGTH (type));
8554 }
14f9c5c9
AS
8555
8556 value_free_to_mark (mark);
d2e4a39e 8557 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8558 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8559 return rtype;
8560}
8561
4c4b4cd2
PH
8562/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8563 of 1. */
14f9c5c9 8564
d2e4a39e 8565static struct type *
fc1a4b47 8566template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8567 CORE_ADDR address, struct value *dval0)
8568{
8569 return ada_template_to_fixed_record_type_1 (type, valaddr,
8570 address, dval0, 1);
8571}
8572
8573/* An ordinary record type in which ___XVL-convention fields and
8574 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8575 static approximations, containing all possible fields. Uses
8576 no runtime values. Useless for use in values, but that's OK,
8577 since the results are used only for type determinations. Works on both
8578 structs and unions. Representation note: to save space, we memorize
8579 the result of this function in the TYPE_TARGET_TYPE of the
8580 template type. */
8581
8582static struct type *
8583template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8584{
8585 struct type *type;
8586 int nfields;
8587 int f;
8588
9e195661
PMR
8589 /* No need no do anything if the input type is already fixed. */
8590 if (TYPE_FIXED_INSTANCE (type0))
8591 return type0;
8592
8593 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8594 if (TYPE_TARGET_TYPE (type0) != NULL)
8595 return TYPE_TARGET_TYPE (type0);
8596
9e195661 8597 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8598 type = type0;
9e195661
PMR
8599 nfields = TYPE_NFIELDS (type0);
8600
8601 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8602 recompute all over next time. */
8603 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8604
8605 for (f = 0; f < nfields; f += 1)
8606 {
460efde1 8607 struct type *field_type = TYPE_FIELD_TYPE (type0, f);
4c4b4cd2 8608 struct type *new_type;
14f9c5c9 8609
4c4b4cd2 8610 if (is_dynamic_field (type0, f))
460efde1
JB
8611 {
8612 field_type = ada_check_typedef (field_type);
8613 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8614 }
14f9c5c9 8615 else
f192137b 8616 new_type = static_unwrap_type (field_type);
9e195661
PMR
8617
8618 if (new_type != field_type)
8619 {
8620 /* Clone TYPE0 only the first time we get a new field type. */
8621 if (type == type0)
8622 {
8623 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8624 TYPE_CODE (type) = TYPE_CODE (type0);
8ecb59f8 8625 INIT_NONE_SPECIFIC (type);
9e195661
PMR
8626 TYPE_NFIELDS (type) = nfields;
8627 TYPE_FIELDS (type) = (struct field *)
8628 TYPE_ALLOC (type, nfields * sizeof (struct field));
8629 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8630 sizeof (struct field) * nfields);
8631 TYPE_NAME (type) = ada_type_name (type0);
9e195661
PMR
8632 TYPE_FIXED_INSTANCE (type) = 1;
8633 TYPE_LENGTH (type) = 0;
8634 }
8635 TYPE_FIELD_TYPE (type, f) = new_type;
8636 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8637 }
14f9c5c9 8638 }
9e195661 8639
14f9c5c9
AS
8640 return type;
8641}
8642
4c4b4cd2 8643/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8644 whose address in memory is ADDRESS, returns a revision of TYPE,
8645 which should be a non-dynamic-sized record, in which the variant
8646 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8647 for discriminant values in DVAL0, which can be NULL if the record
8648 contains the necessary discriminant values. */
8649
d2e4a39e 8650static struct type *
fc1a4b47 8651to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8652 CORE_ADDR address, struct value *dval0)
14f9c5c9 8653{
d2e4a39e 8654 struct value *mark = value_mark ();
4c4b4cd2 8655 struct value *dval;
d2e4a39e 8656 struct type *rtype;
14f9c5c9
AS
8657 struct type *branch_type;
8658 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 8659 int variant_field = variant_field_index (type);
14f9c5c9 8660
4c4b4cd2 8661 if (variant_field == -1)
14f9c5c9
AS
8662 return type;
8663
4c4b4cd2 8664 if (dval0 == NULL)
9f1f738a
SA
8665 {
8666 dval = value_from_contents_and_address (type, valaddr, address);
8667 type = value_type (dval);
8668 }
4c4b4cd2
PH
8669 else
8670 dval = dval0;
8671
e9bb382b 8672 rtype = alloc_type_copy (type);
14f9c5c9 8673 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8ecb59f8 8674 INIT_NONE_SPECIFIC (rtype);
4c4b4cd2 8675 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
8676 TYPE_FIELDS (rtype) =
8677 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8678 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 8679 sizeof (struct field) * nfields);
14f9c5c9 8680 TYPE_NAME (rtype) = ada_type_name (type);
876cecd0 8681 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8682 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8683
4c4b4cd2
PH
8684 branch_type = to_fixed_variant_branch_type
8685 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8686 cond_offset_host (valaddr,
4c4b4cd2
PH
8687 TYPE_FIELD_BITPOS (type, variant_field)
8688 / TARGET_CHAR_BIT),
d2e4a39e 8689 cond_offset_target (address,
4c4b4cd2
PH
8690 TYPE_FIELD_BITPOS (type, variant_field)
8691 / TARGET_CHAR_BIT), dval);
d2e4a39e 8692 if (branch_type == NULL)
14f9c5c9 8693 {
4c4b4cd2 8694 int f;
5b4ee69b 8695
4c4b4cd2
PH
8696 for (f = variant_field + 1; f < nfields; f += 1)
8697 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 8698 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
8699 }
8700 else
8701 {
4c4b4cd2
PH
8702 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8703 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8704 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8705 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8706 }
4c4b4cd2 8707 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8708
4c4b4cd2 8709 value_free_to_mark (mark);
14f9c5c9
AS
8710 return rtype;
8711}
8712
8713/* An ordinary record type (with fixed-length fields) that describes
8714 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8715 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8716 should be in DVAL, a record value; it may be NULL if the object
8717 at ADDR itself contains any necessary discriminant values.
8718 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8719 values from the record are needed. Except in the case that DVAL,
8720 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8721 unchecked) is replaced by a particular branch of the variant.
8722
8723 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8724 is questionable and may be removed. It can arise during the
8725 processing of an unconstrained-array-of-record type where all the
8726 variant branches have exactly the same size. This is because in
8727 such cases, the compiler does not bother to use the XVS convention
8728 when encoding the record. I am currently dubious of this
8729 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8730
d2e4a39e 8731static struct type *
fc1a4b47 8732to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8733 CORE_ADDR address, struct value *dval)
14f9c5c9 8734{
d2e4a39e 8735 struct type *templ_type;
14f9c5c9 8736
876cecd0 8737 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8738 return type0;
8739
d2e4a39e 8740 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8741
8742 if (templ_type != NULL)
8743 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8744 else if (variant_field_index (type0) >= 0)
8745 {
8746 if (dval == NULL && valaddr == NULL && address == 0)
8747 return type0;
8748 return to_record_with_fixed_variant_part (type0, valaddr, address,
8749 dval);
8750 }
14f9c5c9
AS
8751 else
8752 {
876cecd0 8753 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8754 return type0;
8755 }
8756
8757}
8758
8759/* An ordinary record type (with fixed-length fields) that describes
8760 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8761 union type. Any necessary discriminants' values should be in DVAL,
8762 a record value. That is, this routine selects the appropriate
8763 branch of the union at ADDR according to the discriminant value
b1f33ddd 8764 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8765 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8766
d2e4a39e 8767static struct type *
fc1a4b47 8768to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8769 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8770{
8771 int which;
d2e4a39e
AS
8772 struct type *templ_type;
8773 struct type *var_type;
14f9c5c9
AS
8774
8775 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8776 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8777 else
14f9c5c9
AS
8778 var_type = var_type0;
8779
8780 templ_type = ada_find_parallel_type (var_type, "___XVU");
8781
8782 if (templ_type != NULL)
8783 var_type = templ_type;
8784
b1f33ddd
JB
8785 if (is_unchecked_variant (var_type, value_type (dval)))
8786 return var_type0;
d2e4a39e
AS
8787 which =
8788 ada_which_variant_applies (var_type,
0fd88904 8789 value_type (dval), value_contents (dval));
14f9c5c9
AS
8790
8791 if (which < 0)
e9bb382b 8792 return empty_record (var_type);
14f9c5c9 8793 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8794 return to_fixed_record_type
d2e4a39e
AS
8795 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8796 valaddr, address, dval);
4c4b4cd2 8797 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8798 return
8799 to_fixed_record_type
8800 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8801 else
8802 return TYPE_FIELD_TYPE (var_type, which);
8803}
8804
8908fca5
JB
8805/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8806 ENCODING_TYPE, a type following the GNAT conventions for discrete
8807 type encodings, only carries redundant information. */
8808
8809static int
8810ada_is_redundant_range_encoding (struct type *range_type,
8811 struct type *encoding_type)
8812{
108d56a4 8813 const char *bounds_str;
8908fca5
JB
8814 int n;
8815 LONGEST lo, hi;
8816
8817 gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8818
005e2509
JB
8819 if (TYPE_CODE (get_base_type (range_type))
8820 != TYPE_CODE (get_base_type (encoding_type)))
8821 {
8822 /* The compiler probably used a simple base type to describe
8823 the range type instead of the range's actual base type,
8824 expecting us to get the real base type from the encoding
8825 anyway. In this situation, the encoding cannot be ignored
8826 as redundant. */
8827 return 0;
8828 }
8829
8908fca5
JB
8830 if (is_dynamic_type (range_type))
8831 return 0;
8832
8833 if (TYPE_NAME (encoding_type) == NULL)
8834 return 0;
8835
8836 bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8837 if (bounds_str == NULL)
8838 return 0;
8839
8840 n = 8; /* Skip "___XDLU_". */
8841 if (!ada_scan_number (bounds_str, n, &lo, &n))
8842 return 0;
8843 if (TYPE_LOW_BOUND (range_type) != lo)
8844 return 0;
8845
8846 n += 2; /* Skip the "__" separator between the two bounds. */
8847 if (!ada_scan_number (bounds_str, n, &hi, &n))
8848 return 0;
8849 if (TYPE_HIGH_BOUND (range_type) != hi)
8850 return 0;
8851
8852 return 1;
8853}
8854
8855/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8856 a type following the GNAT encoding for describing array type
8857 indices, only carries redundant information. */
8858
8859static int
8860ada_is_redundant_index_type_desc (struct type *array_type,
8861 struct type *desc_type)
8862{
8863 struct type *this_layer = check_typedef (array_type);
8864 int i;
8865
8866 for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8867 {
8868 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8869 TYPE_FIELD_TYPE (desc_type, i)))
8870 return 0;
8871 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8872 }
8873
8874 return 1;
8875}
8876
14f9c5c9
AS
8877/* Assuming that TYPE0 is an array type describing the type of a value
8878 at ADDR, and that DVAL describes a record containing any
8879 discriminants used in TYPE0, returns a type for the value that
8880 contains no dynamic components (that is, no components whose sizes
8881 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8882 true, gives an error message if the resulting type's size is over
4c4b4cd2 8883 varsize_limit. */
14f9c5c9 8884
d2e4a39e
AS
8885static struct type *
8886to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8887 int ignore_too_big)
14f9c5c9 8888{
d2e4a39e
AS
8889 struct type *index_type_desc;
8890 struct type *result;
ad82864c 8891 int constrained_packed_array_p;
931e5bc3 8892 static const char *xa_suffix = "___XA";
14f9c5c9 8893
b0dd7688 8894 type0 = ada_check_typedef (type0);
284614f0 8895 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8896 return type0;
14f9c5c9 8897
ad82864c
JB
8898 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8899 if (constrained_packed_array_p)
8900 type0 = decode_constrained_packed_array_type (type0);
284614f0 8901
931e5bc3
JG
8902 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8903
8904 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8905 encoding suffixed with 'P' may still be generated. If so,
8906 it should be used to find the XA type. */
8907
8908 if (index_type_desc == NULL)
8909 {
1da0522e 8910 const char *type_name = ada_type_name (type0);
931e5bc3 8911
1da0522e 8912 if (type_name != NULL)
931e5bc3 8913 {
1da0522e 8914 const int len = strlen (type_name);
931e5bc3
JG
8915 char *name = (char *) alloca (len + strlen (xa_suffix));
8916
1da0522e 8917 if (type_name[len - 1] == 'P')
931e5bc3 8918 {
1da0522e 8919 strcpy (name, type_name);
931e5bc3
JG
8920 strcpy (name + len - 1, xa_suffix);
8921 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8922 }
8923 }
8924 }
8925
28c85d6c 8926 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8927 if (index_type_desc != NULL
8928 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8929 {
8930 /* Ignore this ___XA parallel type, as it does not bring any
8931 useful information. This allows us to avoid creating fixed
8932 versions of the array's index types, which would be identical
8933 to the original ones. This, in turn, can also help avoid
8934 the creation of fixed versions of the array itself. */
8935 index_type_desc = NULL;
8936 }
8937
14f9c5c9
AS
8938 if (index_type_desc == NULL)
8939 {
61ee279c 8940 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8941
14f9c5c9 8942 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8943 depend on the contents of the array in properly constructed
8944 debugging data. */
529cad9c
PH
8945 /* Create a fixed version of the array element type.
8946 We're not providing the address of an element here,
e1d5a0d2 8947 and thus the actual object value cannot be inspected to do
529cad9c
PH
8948 the conversion. This should not be a problem, since arrays of
8949 unconstrained objects are not allowed. In particular, all
8950 the elements of an array of a tagged type should all be of
8951 the same type specified in the debugging info. No need to
8952 consult the object tag. */
1ed6ede0 8953 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8954
284614f0
JB
8955 /* Make sure we always create a new array type when dealing with
8956 packed array types, since we're going to fix-up the array
8957 type length and element bitsize a little further down. */
ad82864c 8958 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8959 result = type0;
14f9c5c9 8960 else
e9bb382b 8961 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8962 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8963 }
8964 else
8965 {
8966 int i;
8967 struct type *elt_type0;
8968
8969 elt_type0 = type0;
8970 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8971 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8972
8973 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8974 depend on the contents of the array in properly constructed
8975 debugging data. */
529cad9c
PH
8976 /* Create a fixed version of the array element type.
8977 We're not providing the address of an element here,
e1d5a0d2 8978 and thus the actual object value cannot be inspected to do
529cad9c
PH
8979 the conversion. This should not be a problem, since arrays of
8980 unconstrained objects are not allowed. In particular, all
8981 the elements of an array of a tagged type should all be of
8982 the same type specified in the debugging info. No need to
8983 consult the object tag. */
1ed6ede0
JB
8984 result =
8985 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8986
8987 elt_type0 = type0;
14f9c5c9 8988 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8989 {
8990 struct type *range_type =
28c85d6c 8991 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8992
e9bb382b 8993 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8994 result, range_type);
1ce677a4 8995 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8996 }
d2e4a39e 8997 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8998 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8999 }
9000
2e6fda7d
JB
9001 /* We want to preserve the type name. This can be useful when
9002 trying to get the type name of a value that has already been
9003 printed (for instance, if the user did "print VAR; whatis $". */
9004 TYPE_NAME (result) = TYPE_NAME (type0);
9005
ad82864c 9006 if (constrained_packed_array_p)
284614f0
JB
9007 {
9008 /* So far, the resulting type has been created as if the original
9009 type was a regular (non-packed) array type. As a result, the
9010 bitsize of the array elements needs to be set again, and the array
9011 length needs to be recomputed based on that bitsize. */
9012 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
9013 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
9014
9015 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
9016 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
9017 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
9018 TYPE_LENGTH (result)++;
9019 }
9020
876cecd0 9021 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 9022 return result;
d2e4a39e 9023}
14f9c5c9
AS
9024
9025
9026/* A standard type (containing no dynamically sized components)
9027 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
9028 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 9029 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
9030 ADDRESS or in VALADDR contains these discriminants.
9031
1ed6ede0
JB
9032 If CHECK_TAG is not null, in the case of tagged types, this function
9033 attempts to locate the object's tag and use it to compute the actual
9034 type. However, when ADDRESS is null, we cannot use it to determine the
9035 location of the tag, and therefore compute the tagged type's actual type.
9036 So we return the tagged type without consulting the tag. */
529cad9c 9037
f192137b
JB
9038static struct type *
9039ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 9040 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 9041{
61ee279c 9042 type = ada_check_typedef (type);
8ecb59f8
TT
9043
9044 /* Only un-fixed types need to be handled here. */
9045 if (!HAVE_GNAT_AUX_INFO (type))
9046 return type;
9047
d2e4a39e
AS
9048 switch (TYPE_CODE (type))
9049 {
9050 default:
14f9c5c9 9051 return type;
d2e4a39e 9052 case TYPE_CODE_STRUCT:
4c4b4cd2 9053 {
76a01679 9054 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
9055 struct type *fixed_record_type =
9056 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 9057
529cad9c
PH
9058 /* If STATIC_TYPE is a tagged type and we know the object's address,
9059 then we can determine its tag, and compute the object's actual
0963b4bd 9060 type from there. Note that we have to use the fixed record
1ed6ede0
JB
9061 type (the parent part of the record may have dynamic fields
9062 and the way the location of _tag is expressed may depend on
9063 them). */
529cad9c 9064
1ed6ede0 9065 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 9066 {
b50d69b5
JG
9067 struct value *tag =
9068 value_tag_from_contents_and_address
9069 (fixed_record_type,
9070 valaddr,
9071 address);
9072 struct type *real_type = type_from_tag (tag);
9073 struct value *obj =
9074 value_from_contents_and_address (fixed_record_type,
9075 valaddr,
9076 address);
9f1f738a 9077 fixed_record_type = value_type (obj);
76a01679 9078 if (real_type != NULL)
b50d69b5
JG
9079 return to_fixed_record_type
9080 (real_type, NULL,
9081 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 9082 }
4af88198
JB
9083
9084 /* Check to see if there is a parallel ___XVZ variable.
9085 If there is, then it provides the actual size of our type. */
9086 else if (ada_type_name (fixed_record_type) != NULL)
9087 {
0d5cff50 9088 const char *name = ada_type_name (fixed_record_type);
224c3ddb
SM
9089 char *xvz_name
9090 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
eccab96d 9091 bool xvz_found = false;
4af88198
JB
9092 LONGEST size;
9093
88c15c34 9094 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
a70b8144 9095 try
eccab96d
JB
9096 {
9097 xvz_found = get_int_var_value (xvz_name, size);
9098 }
230d2906 9099 catch (const gdb_exception_error &except)
eccab96d
JB
9100 {
9101 /* We found the variable, but somehow failed to read
9102 its value. Rethrow the same error, but with a little
9103 bit more information, to help the user understand
9104 what went wrong (Eg: the variable might have been
9105 optimized out). */
9106 throw_error (except.error,
9107 _("unable to read value of %s (%s)"),
3d6e9d23 9108 xvz_name, except.what ());
eccab96d 9109 }
eccab96d
JB
9110
9111 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
4af88198
JB
9112 {
9113 fixed_record_type = copy_type (fixed_record_type);
9114 TYPE_LENGTH (fixed_record_type) = size;
9115
9116 /* The FIXED_RECORD_TYPE may have be a stub. We have
9117 observed this when the debugging info is STABS, and
9118 apparently it is something that is hard to fix.
9119
9120 In practice, we don't need the actual type definition
9121 at all, because the presence of the XVZ variable allows us
9122 to assume that there must be a XVS type as well, which we
9123 should be able to use later, when we need the actual type
9124 definition.
9125
9126 In the meantime, pretend that the "fixed" type we are
9127 returning is NOT a stub, because this can cause trouble
9128 when using this type to create new types targeting it.
9129 Indeed, the associated creation routines often check
9130 whether the target type is a stub and will try to replace
0963b4bd 9131 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
9132 might cause the new type to have the wrong size too.
9133 Consider the case of an array, for instance, where the size
9134 of the array is computed from the number of elements in
9135 our array multiplied by the size of its element. */
9136 TYPE_STUB (fixed_record_type) = 0;
9137 }
9138 }
1ed6ede0 9139 return fixed_record_type;
4c4b4cd2 9140 }
d2e4a39e 9141 case TYPE_CODE_ARRAY:
4c4b4cd2 9142 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
9143 case TYPE_CODE_UNION:
9144 if (dval == NULL)
4c4b4cd2 9145 return type;
d2e4a39e 9146 else
4c4b4cd2 9147 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 9148 }
14f9c5c9
AS
9149}
9150
f192137b
JB
9151/* The same as ada_to_fixed_type_1, except that it preserves the type
9152 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
9153
9154 The typedef layer needs be preserved in order to differentiate between
9155 arrays and array pointers when both types are implemented using the same
9156 fat pointer. In the array pointer case, the pointer is encoded as
9157 a typedef of the pointer type. For instance, considering:
9158
9159 type String_Access is access String;
9160 S1 : String_Access := null;
9161
9162 To the debugger, S1 is defined as a typedef of type String. But
9163 to the user, it is a pointer. So if the user tries to print S1,
9164 we should not dereference the array, but print the array address
9165 instead.
9166
9167 If we didn't preserve the typedef layer, we would lose the fact that
9168 the type is to be presented as a pointer (needs de-reference before
9169 being printed). And we would also use the source-level type name. */
f192137b
JB
9170
9171struct type *
9172ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
9173 CORE_ADDR address, struct value *dval, int check_tag)
9174
9175{
9176 struct type *fixed_type =
9177 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
9178
96dbd2c1
JB
9179 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
9180 then preserve the typedef layer.
9181
9182 Implementation note: We can only check the main-type portion of
9183 the TYPE and FIXED_TYPE, because eliminating the typedef layer
9184 from TYPE now returns a type that has the same instance flags
9185 as TYPE. For instance, if TYPE is a "typedef const", and its
9186 target type is a "struct", then the typedef elimination will return
9187 a "const" version of the target type. See check_typedef for more
9188 details about how the typedef layer elimination is done.
9189
9190 brobecker/2010-11-19: It seems to me that the only case where it is
9191 useful to preserve the typedef layer is when dealing with fat pointers.
9192 Perhaps, we could add a check for that and preserve the typedef layer
9193 only in that situation. But this seems unecessary so far, probably
9194 because we call check_typedef/ada_check_typedef pretty much everywhere.
9195 */
f192137b 9196 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 9197 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 9198 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
9199 return type;
9200
9201 return fixed_type;
9202}
9203
14f9c5c9 9204/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 9205 TYPE0, but based on no runtime data. */
14f9c5c9 9206
d2e4a39e
AS
9207static struct type *
9208to_static_fixed_type (struct type *type0)
14f9c5c9 9209{
d2e4a39e 9210 struct type *type;
14f9c5c9
AS
9211
9212 if (type0 == NULL)
9213 return NULL;
9214
876cecd0 9215 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
9216 return type0;
9217
61ee279c 9218 type0 = ada_check_typedef (type0);
d2e4a39e 9219
14f9c5c9
AS
9220 switch (TYPE_CODE (type0))
9221 {
9222 default:
9223 return type0;
9224 case TYPE_CODE_STRUCT:
9225 type = dynamic_template_type (type0);
d2e4a39e 9226 if (type != NULL)
4c4b4cd2
PH
9227 return template_to_static_fixed_type (type);
9228 else
9229 return template_to_static_fixed_type (type0);
14f9c5c9
AS
9230 case TYPE_CODE_UNION:
9231 type = ada_find_parallel_type (type0, "___XVU");
9232 if (type != NULL)
4c4b4cd2
PH
9233 return template_to_static_fixed_type (type);
9234 else
9235 return template_to_static_fixed_type (type0);
14f9c5c9
AS
9236 }
9237}
9238
4c4b4cd2
PH
9239/* A static approximation of TYPE with all type wrappers removed. */
9240
d2e4a39e
AS
9241static struct type *
9242static_unwrap_type (struct type *type)
14f9c5c9
AS
9243{
9244 if (ada_is_aligner_type (type))
9245 {
61ee279c 9246 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 9247 if (ada_type_name (type1) == NULL)
4c4b4cd2 9248 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
9249
9250 return static_unwrap_type (type1);
9251 }
d2e4a39e 9252 else
14f9c5c9 9253 {
d2e4a39e 9254 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 9255
d2e4a39e 9256 if (raw_real_type == type)
4c4b4cd2 9257 return type;
14f9c5c9 9258 else
4c4b4cd2 9259 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
9260 }
9261}
9262
9263/* In some cases, incomplete and private types require
4c4b4cd2 9264 cross-references that are not resolved as records (for example,
14f9c5c9
AS
9265 type Foo;
9266 type FooP is access Foo;
9267 V: FooP;
9268 type Foo is array ...;
4c4b4cd2 9269 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
9270 cross-references to such types, we instead substitute for FooP a
9271 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 9272 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
9273
9274/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
9275 exists, otherwise TYPE. */
9276
d2e4a39e 9277struct type *
61ee279c 9278ada_check_typedef (struct type *type)
14f9c5c9 9279{
727e3d2e
JB
9280 if (type == NULL)
9281 return NULL;
9282
736ade86
XR
9283 /* If our type is an access to an unconstrained array, which is encoded
9284 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
720d1a40
JB
9285 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
9286 what allows us to distinguish between fat pointers that represent
9287 array types, and fat pointers that represent array access types
9288 (in both cases, the compiler implements them as fat pointers). */
736ade86 9289 if (ada_is_access_to_unconstrained_array (type))
720d1a40
JB
9290 return type;
9291
f168693b 9292 type = check_typedef (type);
14f9c5c9 9293 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 9294 || !TYPE_STUB (type)
e86ca25f 9295 || TYPE_NAME (type) == NULL)
14f9c5c9 9296 return type;
d2e4a39e 9297 else
14f9c5c9 9298 {
e86ca25f 9299 const char *name = TYPE_NAME (type);
d2e4a39e 9300 struct type *type1 = ada_find_any_type (name);
5b4ee69b 9301
05e522ef
JB
9302 if (type1 == NULL)
9303 return type;
9304
9305 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
9306 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
9307 types, only for the typedef-to-array types). If that's the case,
9308 strip the typedef layer. */
9309 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
9310 type1 = ada_check_typedef (type1);
9311
9312 return type1;
14f9c5c9
AS
9313 }
9314}
9315
9316/* A value representing the data at VALADDR/ADDRESS as described by
9317 type TYPE0, but with a standard (static-sized) type that correctly
9318 describes it. If VAL0 is not NULL and TYPE0 already is a standard
9319 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 9320 creation of struct values]. */
14f9c5c9 9321
4c4b4cd2
PH
9322static struct value *
9323ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
9324 struct value *val0)
14f9c5c9 9325{
1ed6ede0 9326 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 9327
14f9c5c9
AS
9328 if (type == type0 && val0 != NULL)
9329 return val0;
cc0e770c
JB
9330
9331 if (VALUE_LVAL (val0) != lval_memory)
9332 {
9333 /* Our value does not live in memory; it could be a convenience
9334 variable, for instance. Create a not_lval value using val0's
9335 contents. */
9336 return value_from_contents (type, value_contents (val0));
9337 }
9338
9339 return value_from_contents_and_address (type, 0, address);
4c4b4cd2
PH
9340}
9341
9342/* A value representing VAL, but with a standard (static-sized) type
9343 that correctly describes it. Does not necessarily create a new
9344 value. */
9345
0c3acc09 9346struct value *
4c4b4cd2
PH
9347ada_to_fixed_value (struct value *val)
9348{
c48db5ca 9349 val = unwrap_value (val);
d8ce9127 9350 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
c48db5ca 9351 return val;
14f9c5c9 9352}
d2e4a39e 9353\f
14f9c5c9 9354
14f9c5c9
AS
9355/* Attributes */
9356
4c4b4cd2
PH
9357/* Table mapping attribute numbers to names.
9358 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 9359
d2e4a39e 9360static const char *attribute_names[] = {
14f9c5c9
AS
9361 "<?>",
9362
d2e4a39e 9363 "first",
14f9c5c9
AS
9364 "last",
9365 "length",
9366 "image",
14f9c5c9
AS
9367 "max",
9368 "min",
4c4b4cd2
PH
9369 "modulus",
9370 "pos",
9371 "size",
9372 "tag",
14f9c5c9 9373 "val",
14f9c5c9
AS
9374 0
9375};
9376
d2e4a39e 9377const char *
4c4b4cd2 9378ada_attribute_name (enum exp_opcode n)
14f9c5c9 9379{
4c4b4cd2
PH
9380 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9381 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
9382 else
9383 return attribute_names[0];
9384}
9385
4c4b4cd2 9386/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 9387
4c4b4cd2
PH
9388static LONGEST
9389pos_atr (struct value *arg)
14f9c5c9 9390{
24209737
PH
9391 struct value *val = coerce_ref (arg);
9392 struct type *type = value_type (val);
aa715135 9393 LONGEST result;
14f9c5c9 9394
d2e4a39e 9395 if (!discrete_type_p (type))
323e0a4a 9396 error (_("'POS only defined on discrete types"));
14f9c5c9 9397
aa715135
JG
9398 if (!discrete_position (type, value_as_long (val), &result))
9399 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 9400
aa715135 9401 return result;
4c4b4cd2
PH
9402}
9403
9404static struct value *
3cb382c9 9405value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 9406{
3cb382c9 9407 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
9408}
9409
4c4b4cd2 9410/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 9411
d2e4a39e
AS
9412static struct value *
9413value_val_atr (struct type *type, struct value *arg)
14f9c5c9 9414{
d2e4a39e 9415 if (!discrete_type_p (type))
323e0a4a 9416 error (_("'VAL only defined on discrete types"));
df407dfe 9417 if (!integer_type_p (value_type (arg)))
323e0a4a 9418 error (_("'VAL requires integral argument"));
14f9c5c9
AS
9419
9420 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
9421 {
9422 long pos = value_as_long (arg);
5b4ee69b 9423
14f9c5c9 9424 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 9425 error (_("argument to 'VAL out of range"));
14e75d8e 9426 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
9427 }
9428 else
9429 return value_from_longest (type, value_as_long (arg));
9430}
14f9c5c9 9431\f
d2e4a39e 9432
4c4b4cd2 9433 /* Evaluation */
14f9c5c9 9434
4c4b4cd2
PH
9435/* True if TYPE appears to be an Ada character type.
9436 [At the moment, this is true only for Character and Wide_Character;
9437 It is a heuristic test that could stand improvement]. */
14f9c5c9 9438
fc913e53 9439bool
d2e4a39e 9440ada_is_character_type (struct type *type)
14f9c5c9 9441{
7b9f71f2
JB
9442 const char *name;
9443
9444 /* If the type code says it's a character, then assume it really is,
9445 and don't check any further. */
9446 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
fc913e53 9447 return true;
7b9f71f2
JB
9448
9449 /* Otherwise, assume it's a character type iff it is a discrete type
9450 with a known character type name. */
9451 name = ada_type_name (type);
9452 return (name != NULL
9453 && (TYPE_CODE (type) == TYPE_CODE_INT
9454 || TYPE_CODE (type) == TYPE_CODE_RANGE)
9455 && (strcmp (name, "character") == 0
9456 || strcmp (name, "wide_character") == 0
5a517ebd 9457 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 9458 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
9459}
9460
4c4b4cd2 9461/* True if TYPE appears to be an Ada string type. */
14f9c5c9 9462
fc913e53 9463bool
ebf56fd3 9464ada_is_string_type (struct type *type)
14f9c5c9 9465{
61ee279c 9466 type = ada_check_typedef (type);
d2e4a39e 9467 if (type != NULL
14f9c5c9 9468 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
9469 && (ada_is_simple_array_type (type)
9470 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
9471 && ada_array_arity (type) == 1)
9472 {
9473 struct type *elttype = ada_array_element_type (type, 1);
9474
9475 return ada_is_character_type (elttype);
9476 }
d2e4a39e 9477 else
fc913e53 9478 return false;
14f9c5c9
AS
9479}
9480
5bf03f13
JB
9481/* The compiler sometimes provides a parallel XVS type for a given
9482 PAD type. Normally, it is safe to follow the PAD type directly,
9483 but older versions of the compiler have a bug that causes the offset
9484 of its "F" field to be wrong. Following that field in that case
9485 would lead to incorrect results, but this can be worked around
9486 by ignoring the PAD type and using the associated XVS type instead.
9487
9488 Set to True if the debugger should trust the contents of PAD types.
9489 Otherwise, ignore the PAD type if there is a parallel XVS type. */
9490static int trust_pad_over_xvs = 1;
14f9c5c9
AS
9491
9492/* True if TYPE is a struct type introduced by the compiler to force the
9493 alignment of a value. Such types have a single field with a
4c4b4cd2 9494 distinctive name. */
14f9c5c9
AS
9495
9496int
ebf56fd3 9497ada_is_aligner_type (struct type *type)
14f9c5c9 9498{
61ee279c 9499 type = ada_check_typedef (type);
714e53ab 9500
5bf03f13 9501 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
9502 return 0;
9503
14f9c5c9 9504 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
9505 && TYPE_NFIELDS (type) == 1
9506 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
9507}
9508
9509/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 9510 the parallel type. */
14f9c5c9 9511
d2e4a39e
AS
9512struct type *
9513ada_get_base_type (struct type *raw_type)
14f9c5c9 9514{
d2e4a39e
AS
9515 struct type *real_type_namer;
9516 struct type *raw_real_type;
14f9c5c9
AS
9517
9518 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9519 return raw_type;
9520
284614f0
JB
9521 if (ada_is_aligner_type (raw_type))
9522 /* The encoding specifies that we should always use the aligner type.
9523 So, even if this aligner type has an associated XVS type, we should
9524 simply ignore it.
9525
9526 According to the compiler gurus, an XVS type parallel to an aligner
9527 type may exist because of a stabs limitation. In stabs, aligner
9528 types are empty because the field has a variable-sized type, and
9529 thus cannot actually be used as an aligner type. As a result,
9530 we need the associated parallel XVS type to decode the type.
9531 Since the policy in the compiler is to not change the internal
9532 representation based on the debugging info format, we sometimes
9533 end up having a redundant XVS type parallel to the aligner type. */
9534 return raw_type;
9535
14f9c5c9 9536 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9537 if (real_type_namer == NULL
14f9c5c9
AS
9538 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9539 || TYPE_NFIELDS (real_type_namer) != 1)
9540 return raw_type;
9541
f80d3ff2
JB
9542 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9543 {
9544 /* This is an older encoding form where the base type needs to be
9545 looked up by name. We prefer the newer enconding because it is
9546 more efficient. */
9547 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9548 if (raw_real_type == NULL)
9549 return raw_type;
9550 else
9551 return raw_real_type;
9552 }
9553
9554 /* The field in our XVS type is a reference to the base type. */
9555 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 9556}
14f9c5c9 9557
4c4b4cd2 9558/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9559
d2e4a39e
AS
9560struct type *
9561ada_aligned_type (struct type *type)
14f9c5c9
AS
9562{
9563 if (ada_is_aligner_type (type))
9564 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9565 else
9566 return ada_get_base_type (type);
9567}
9568
9569
9570/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9571 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9572
fc1a4b47
AC
9573const gdb_byte *
9574ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9575{
d2e4a39e 9576 if (ada_is_aligner_type (type))
14f9c5c9 9577 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
9578 valaddr +
9579 TYPE_FIELD_BITPOS (type,
9580 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9581 else
9582 return valaddr;
9583}
9584
4c4b4cd2
PH
9585
9586
14f9c5c9 9587/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9588 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9589const char *
9590ada_enum_name (const char *name)
14f9c5c9 9591{
4c4b4cd2
PH
9592 static char *result;
9593 static size_t result_len = 0;
e6a959d6 9594 const char *tmp;
14f9c5c9 9595
4c4b4cd2
PH
9596 /* First, unqualify the enumeration name:
9597 1. Search for the last '.' character. If we find one, then skip
177b42fe 9598 all the preceding characters, the unqualified name starts
76a01679 9599 right after that dot.
4c4b4cd2 9600 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9601 translates dots into "__". Search forward for double underscores,
9602 but stop searching when we hit an overloading suffix, which is
9603 of the form "__" followed by digits. */
4c4b4cd2 9604
c3e5cd34
PH
9605 tmp = strrchr (name, '.');
9606 if (tmp != NULL)
4c4b4cd2
PH
9607 name = tmp + 1;
9608 else
14f9c5c9 9609 {
4c4b4cd2
PH
9610 while ((tmp = strstr (name, "__")) != NULL)
9611 {
9612 if (isdigit (tmp[2]))
9613 break;
9614 else
9615 name = tmp + 2;
9616 }
14f9c5c9
AS
9617 }
9618
9619 if (name[0] == 'Q')
9620 {
14f9c5c9 9621 int v;
5b4ee69b 9622
14f9c5c9 9623 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
9624 {
9625 if (sscanf (name + 2, "%x", &v) != 1)
9626 return name;
9627 }
14f9c5c9 9628 else
4c4b4cd2 9629 return name;
14f9c5c9 9630
4c4b4cd2 9631 GROW_VECT (result, result_len, 16);
14f9c5c9 9632 if (isascii (v) && isprint (v))
88c15c34 9633 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9634 else if (name[1] == 'U')
88c15c34 9635 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9636 else
88c15c34 9637 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9638
9639 return result;
9640 }
d2e4a39e 9641 else
4c4b4cd2 9642 {
c3e5cd34
PH
9643 tmp = strstr (name, "__");
9644 if (tmp == NULL)
9645 tmp = strstr (name, "$");
9646 if (tmp != NULL)
4c4b4cd2
PH
9647 {
9648 GROW_VECT (result, result_len, tmp - name + 1);
9649 strncpy (result, name, tmp - name);
9650 result[tmp - name] = '\0';
9651 return result;
9652 }
9653
9654 return name;
9655 }
14f9c5c9
AS
9656}
9657
14f9c5c9
AS
9658/* Evaluate the subexpression of EXP starting at *POS as for
9659 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9660 expression. */
14f9c5c9 9661
d2e4a39e
AS
9662static struct value *
9663evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9664{
4b27a620 9665 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9666}
9667
9668/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9669 value it wraps. */
14f9c5c9 9670
d2e4a39e
AS
9671static struct value *
9672unwrap_value (struct value *val)
14f9c5c9 9673{
df407dfe 9674 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9675
14f9c5c9
AS
9676 if (ada_is_aligner_type (type))
9677 {
de4d072f 9678 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9679 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9680
14f9c5c9 9681 if (ada_type_name (val_type) == NULL)
4c4b4cd2 9682 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
9683
9684 return unwrap_value (v);
9685 }
d2e4a39e 9686 else
14f9c5c9 9687 {
d2e4a39e 9688 struct type *raw_real_type =
61ee279c 9689 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9690
5bf03f13
JB
9691 /* If there is no parallel XVS or XVE type, then the value is
9692 already unwrapped. Return it without further modification. */
9693 if ((type == raw_real_type)
9694 && ada_find_parallel_type (type, "___XVE") == NULL)
9695 return val;
14f9c5c9 9696
d2e4a39e 9697 return
4c4b4cd2
PH
9698 coerce_unspec_val_to_type
9699 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9700 value_address (val),
1ed6ede0 9701 NULL, 1));
14f9c5c9
AS
9702 }
9703}
d2e4a39e
AS
9704
9705static struct value *
50eff16b 9706cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9707{
50eff16b
UW
9708 struct value *scale = ada_scaling_factor (value_type (arg));
9709 arg = value_cast (value_type (scale), arg);
14f9c5c9 9710
50eff16b
UW
9711 arg = value_binop (arg, scale, BINOP_MUL);
9712 return value_cast (type, arg);
14f9c5c9
AS
9713}
9714
d2e4a39e 9715static struct value *
50eff16b 9716cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9 9717{
50eff16b
UW
9718 if (type == value_type (arg))
9719 return arg;
5b4ee69b 9720
50eff16b
UW
9721 struct value *scale = ada_scaling_factor (type);
9722 if (ada_is_fixed_point_type (value_type (arg)))
9723 arg = cast_from_fixed (value_type (scale), arg);
9724 else
9725 arg = value_cast (value_type (scale), arg);
9726
9727 arg = value_binop (arg, scale, BINOP_DIV);
9728 return value_cast (type, arg);
14f9c5c9
AS
9729}
9730
d99dcf51
JB
9731/* Given two array types T1 and T2, return nonzero iff both arrays
9732 contain the same number of elements. */
9733
9734static int
9735ada_same_array_size_p (struct type *t1, struct type *t2)
9736{
9737 LONGEST lo1, hi1, lo2, hi2;
9738
9739 /* Get the array bounds in order to verify that the size of
9740 the two arrays match. */
9741 if (!get_array_bounds (t1, &lo1, &hi1)
9742 || !get_array_bounds (t2, &lo2, &hi2))
9743 error (_("unable to determine array bounds"));
9744
9745 /* To make things easier for size comparison, normalize a bit
9746 the case of empty arrays by making sure that the difference
9747 between upper bound and lower bound is always -1. */
9748 if (lo1 > hi1)
9749 hi1 = lo1 - 1;
9750 if (lo2 > hi2)
9751 hi2 = lo2 - 1;
9752
9753 return (hi1 - lo1 == hi2 - lo2);
9754}
9755
9756/* Assuming that VAL is an array of integrals, and TYPE represents
9757 an array with the same number of elements, but with wider integral
9758 elements, return an array "casted" to TYPE. In practice, this
9759 means that the returned array is built by casting each element
9760 of the original array into TYPE's (wider) element type. */
9761
9762static struct value *
9763ada_promote_array_of_integrals (struct type *type, struct value *val)
9764{
9765 struct type *elt_type = TYPE_TARGET_TYPE (type);
9766 LONGEST lo, hi;
9767 struct value *res;
9768 LONGEST i;
9769
9770 /* Verify that both val and type are arrays of scalars, and
9771 that the size of val's elements is smaller than the size
9772 of type's element. */
9773 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9774 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9775 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9776 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9777 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9778 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9779
9780 if (!get_array_bounds (type, &lo, &hi))
9781 error (_("unable to determine array bounds"));
9782
9783 res = allocate_value (type);
9784
9785 /* Promote each array element. */
9786 for (i = 0; i < hi - lo + 1; i++)
9787 {
9788 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9789
9790 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9791 value_contents_all (elt), TYPE_LENGTH (elt_type));
9792 }
9793
9794 return res;
9795}
9796
4c4b4cd2
PH
9797/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9798 return the converted value. */
9799
d2e4a39e
AS
9800static struct value *
9801coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9802{
df407dfe 9803 struct type *type2 = value_type (val);
5b4ee69b 9804
14f9c5c9
AS
9805 if (type == type2)
9806 return val;
9807
61ee279c
PH
9808 type2 = ada_check_typedef (type2);
9809 type = ada_check_typedef (type);
14f9c5c9 9810
d2e4a39e
AS
9811 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9812 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
9813 {
9814 val = ada_value_ind (val);
df407dfe 9815 type2 = value_type (val);
14f9c5c9
AS
9816 }
9817
d2e4a39e 9818 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
9819 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9820 {
d99dcf51
JB
9821 if (!ada_same_array_size_p (type, type2))
9822 error (_("cannot assign arrays of different length"));
9823
9824 if (is_integral_type (TYPE_TARGET_TYPE (type))
9825 && is_integral_type (TYPE_TARGET_TYPE (type2))
9826 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9827 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9828 {
9829 /* Allow implicit promotion of the array elements to
9830 a wider type. */
9831 return ada_promote_array_of_integrals (type, val);
9832 }
9833
9834 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9835 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9836 error (_("Incompatible types in assignment"));
04624583 9837 deprecated_set_value_type (val, type);
14f9c5c9 9838 }
d2e4a39e 9839 return val;
14f9c5c9
AS
9840}
9841
4c4b4cd2
PH
9842static struct value *
9843ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9844{
9845 struct value *val;
9846 struct type *type1, *type2;
9847 LONGEST v, v1, v2;
9848
994b9211
AC
9849 arg1 = coerce_ref (arg1);
9850 arg2 = coerce_ref (arg2);
18af8284
JB
9851 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9852 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9853
76a01679
JB
9854 if (TYPE_CODE (type1) != TYPE_CODE_INT
9855 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
9856 return value_binop (arg1, arg2, op);
9857
76a01679 9858 switch (op)
4c4b4cd2
PH
9859 {
9860 case BINOP_MOD:
9861 case BINOP_DIV:
9862 case BINOP_REM:
9863 break;
9864 default:
9865 return value_binop (arg1, arg2, op);
9866 }
9867
9868 v2 = value_as_long (arg2);
9869 if (v2 == 0)
323e0a4a 9870 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9871
9872 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9873 return value_binop (arg1, arg2, op);
9874
9875 v1 = value_as_long (arg1);
9876 switch (op)
9877 {
9878 case BINOP_DIV:
9879 v = v1 / v2;
76a01679
JB
9880 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9881 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9882 break;
9883 case BINOP_REM:
9884 v = v1 % v2;
76a01679
JB
9885 if (v * v1 < 0)
9886 v -= v2;
4c4b4cd2
PH
9887 break;
9888 default:
9889 /* Should not reach this point. */
9890 v = 0;
9891 }
9892
9893 val = allocate_value (type1);
990a07ab 9894 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9895 TYPE_LENGTH (value_type (val)),
9896 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9897 return val;
9898}
9899
9900static int
9901ada_value_equal (struct value *arg1, struct value *arg2)
9902{
df407dfe
AC
9903 if (ada_is_direct_array_type (value_type (arg1))
9904 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9905 {
79e8fcaa
JB
9906 struct type *arg1_type, *arg2_type;
9907
f58b38bf
JB
9908 /* Automatically dereference any array reference before
9909 we attempt to perform the comparison. */
9910 arg1 = ada_coerce_ref (arg1);
9911 arg2 = ada_coerce_ref (arg2);
79e8fcaa 9912
4c4b4cd2
PH
9913 arg1 = ada_coerce_to_simple_array (arg1);
9914 arg2 = ada_coerce_to_simple_array (arg2);
79e8fcaa
JB
9915
9916 arg1_type = ada_check_typedef (value_type (arg1));
9917 arg2_type = ada_check_typedef (value_type (arg2));
9918
9919 if (TYPE_CODE (arg1_type) != TYPE_CODE_ARRAY
9920 || TYPE_CODE (arg2_type) != TYPE_CODE_ARRAY)
323e0a4a 9921 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9922 /* FIXME: The following works only for types whose
76a01679
JB
9923 representations use all bits (no padding or undefined bits)
9924 and do not have user-defined equality. */
79e8fcaa
JB
9925 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9926 && memcmp (value_contents (arg1), value_contents (arg2),
9927 TYPE_LENGTH (arg1_type)) == 0);
4c4b4cd2
PH
9928 }
9929 return value_equal (arg1, arg2);
9930}
9931
52ce6436
PH
9932/* Total number of component associations in the aggregate starting at
9933 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9934 OP_AGGREGATE. */
52ce6436
PH
9935
9936static int
9937num_component_specs (struct expression *exp, int pc)
9938{
9939 int n, m, i;
5b4ee69b 9940
52ce6436
PH
9941 m = exp->elts[pc + 1].longconst;
9942 pc += 3;
9943 n = 0;
9944 for (i = 0; i < m; i += 1)
9945 {
9946 switch (exp->elts[pc].opcode)
9947 {
9948 default:
9949 n += 1;
9950 break;
9951 case OP_CHOICES:
9952 n += exp->elts[pc + 1].longconst;
9953 break;
9954 }
9955 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9956 }
9957 return n;
9958}
9959
9960/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9961 component of LHS (a simple array or a record), updating *POS past
9962 the expression, assuming that LHS is contained in CONTAINER. Does
9963 not modify the inferior's memory, nor does it modify LHS (unless
9964 LHS == CONTAINER). */
9965
9966static void
9967assign_component (struct value *container, struct value *lhs, LONGEST index,
9968 struct expression *exp, int *pos)
9969{
9970 struct value *mark = value_mark ();
9971 struct value *elt;
0e2da9f0 9972 struct type *lhs_type = check_typedef (value_type (lhs));
5b4ee69b 9973
0e2da9f0 9974 if (TYPE_CODE (lhs_type) == TYPE_CODE_ARRAY)
52ce6436 9975 {
22601c15
UW
9976 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9977 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9978
52ce6436
PH
9979 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9980 }
9981 else
9982 {
9983 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9984 elt = ada_to_fixed_value (elt);
52ce6436
PH
9985 }
9986
9987 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9988 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9989 else
9990 value_assign_to_component (container, elt,
9991 ada_evaluate_subexp (NULL, exp, pos,
9992 EVAL_NORMAL));
9993
9994 value_free_to_mark (mark);
9995}
9996
9997/* Assuming that LHS represents an lvalue having a record or array
9998 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9999 of that aggregate's value to LHS, advancing *POS past the
10000 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
10001 lvalue containing LHS (possibly LHS itself). Does not modify
10002 the inferior's memory, nor does it modify the contents of
0963b4bd 10003 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
10004
10005static struct value *
10006assign_aggregate (struct value *container,
10007 struct value *lhs, struct expression *exp,
10008 int *pos, enum noside noside)
10009{
10010 struct type *lhs_type;
10011 int n = exp->elts[*pos+1].longconst;
10012 LONGEST low_index, high_index;
10013 int num_specs;
10014 LONGEST *indices;
10015 int max_indices, num_indices;
52ce6436 10016 int i;
52ce6436
PH
10017
10018 *pos += 3;
10019 if (noside != EVAL_NORMAL)
10020 {
52ce6436
PH
10021 for (i = 0; i < n; i += 1)
10022 ada_evaluate_subexp (NULL, exp, pos, noside);
10023 return container;
10024 }
10025
10026 container = ada_coerce_ref (container);
10027 if (ada_is_direct_array_type (value_type (container)))
10028 container = ada_coerce_to_simple_array (container);
10029 lhs = ada_coerce_ref (lhs);
10030 if (!deprecated_value_modifiable (lhs))
10031 error (_("Left operand of assignment is not a modifiable lvalue."));
10032
0e2da9f0 10033 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
10034 if (ada_is_direct_array_type (lhs_type))
10035 {
10036 lhs = ada_coerce_to_simple_array (lhs);
0e2da9f0 10037 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
10038 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
10039 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
10040 }
10041 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
10042 {
10043 low_index = 0;
10044 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
10045 }
10046 else
10047 error (_("Left-hand side must be array or record."));
10048
10049 num_specs = num_component_specs (exp, *pos - 3);
10050 max_indices = 4 * num_specs + 4;
8d749320 10051 indices = XALLOCAVEC (LONGEST, max_indices);
52ce6436
PH
10052 indices[0] = indices[1] = low_index - 1;
10053 indices[2] = indices[3] = high_index + 1;
10054 num_indices = 4;
10055
10056 for (i = 0; i < n; i += 1)
10057 {
10058 switch (exp->elts[*pos].opcode)
10059 {
1fbf5ada
JB
10060 case OP_CHOICES:
10061 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
10062 &num_indices, max_indices,
10063 low_index, high_index);
10064 break;
10065 case OP_POSITIONAL:
10066 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
10067 &num_indices, max_indices,
10068 low_index, high_index);
1fbf5ada
JB
10069 break;
10070 case OP_OTHERS:
10071 if (i != n-1)
10072 error (_("Misplaced 'others' clause"));
10073 aggregate_assign_others (container, lhs, exp, pos, indices,
10074 num_indices, low_index, high_index);
10075 break;
10076 default:
10077 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
10078 }
10079 }
10080
10081 return container;
10082}
10083
10084/* Assign into the component of LHS indexed by the OP_POSITIONAL
10085 construct at *POS, updating *POS past the construct, given that
10086 the positions are relative to lower bound LOW, where HIGH is the
10087 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
10088 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 10089 assign_aggregate. */
52ce6436
PH
10090static void
10091aggregate_assign_positional (struct value *container,
10092 struct value *lhs, struct expression *exp,
10093 int *pos, LONGEST *indices, int *num_indices,
10094 int max_indices, LONGEST low, LONGEST high)
10095{
10096 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
10097
10098 if (ind - 1 == high)
e1d5a0d2 10099 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
10100 if (ind <= high)
10101 {
10102 add_component_interval (ind, ind, indices, num_indices, max_indices);
10103 *pos += 3;
10104 assign_component (container, lhs, ind, exp, pos);
10105 }
10106 else
10107 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10108}
10109
10110/* Assign into the components of LHS indexed by the OP_CHOICES
10111 construct at *POS, updating *POS past the construct, given that
10112 the allowable indices are LOW..HIGH. Record the indices assigned
10113 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 10114 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
10115static void
10116aggregate_assign_from_choices (struct value *container,
10117 struct value *lhs, struct expression *exp,
10118 int *pos, LONGEST *indices, int *num_indices,
10119 int max_indices, LONGEST low, LONGEST high)
10120{
10121 int j;
10122 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
10123 int choice_pos, expr_pc;
10124 int is_array = ada_is_direct_array_type (value_type (lhs));
10125
10126 choice_pos = *pos += 3;
10127
10128 for (j = 0; j < n_choices; j += 1)
10129 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10130 expr_pc = *pos;
10131 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10132
10133 for (j = 0; j < n_choices; j += 1)
10134 {
10135 LONGEST lower, upper;
10136 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 10137
52ce6436
PH
10138 if (op == OP_DISCRETE_RANGE)
10139 {
10140 choice_pos += 1;
10141 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
10142 EVAL_NORMAL));
10143 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
10144 EVAL_NORMAL));
10145 }
10146 else if (is_array)
10147 {
10148 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
10149 EVAL_NORMAL));
10150 upper = lower;
10151 }
10152 else
10153 {
10154 int ind;
0d5cff50 10155 const char *name;
5b4ee69b 10156
52ce6436
PH
10157 switch (op)
10158 {
10159 case OP_NAME:
10160 name = &exp->elts[choice_pos + 2].string;
10161 break;
10162 case OP_VAR_VALUE:
10163 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
10164 break;
10165 default:
10166 error (_("Invalid record component association."));
10167 }
10168 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
10169 ind = 0;
10170 if (! find_struct_field (name, value_type (lhs), 0,
10171 NULL, NULL, NULL, NULL, &ind))
10172 error (_("Unknown component name: %s."), name);
10173 lower = upper = ind;
10174 }
10175
10176 if (lower <= upper && (lower < low || upper > high))
10177 error (_("Index in component association out of bounds."));
10178
10179 add_component_interval (lower, upper, indices, num_indices,
10180 max_indices);
10181 while (lower <= upper)
10182 {
10183 int pos1;
5b4ee69b 10184
52ce6436
PH
10185 pos1 = expr_pc;
10186 assign_component (container, lhs, lower, exp, &pos1);
10187 lower += 1;
10188 }
10189 }
10190}
10191
10192/* Assign the value of the expression in the OP_OTHERS construct in
10193 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
10194 have not been previously assigned. The index intervals already assigned
10195 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 10196 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
10197static void
10198aggregate_assign_others (struct value *container,
10199 struct value *lhs, struct expression *exp,
10200 int *pos, LONGEST *indices, int num_indices,
10201 LONGEST low, LONGEST high)
10202{
10203 int i;
5ce64950 10204 int expr_pc = *pos + 1;
52ce6436
PH
10205
10206 for (i = 0; i < num_indices - 2; i += 2)
10207 {
10208 LONGEST ind;
5b4ee69b 10209
52ce6436
PH
10210 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
10211 {
5ce64950 10212 int localpos;
5b4ee69b 10213
5ce64950
MS
10214 localpos = expr_pc;
10215 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
10216 }
10217 }
10218 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10219}
10220
10221/* Add the interval [LOW .. HIGH] to the sorted set of intervals
10222 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
10223 modifying *SIZE as needed. It is an error if *SIZE exceeds
10224 MAX_SIZE. The resulting intervals do not overlap. */
10225static void
10226add_component_interval (LONGEST low, LONGEST high,
10227 LONGEST* indices, int *size, int max_size)
10228{
10229 int i, j;
5b4ee69b 10230
52ce6436
PH
10231 for (i = 0; i < *size; i += 2) {
10232 if (high >= indices[i] && low <= indices[i + 1])
10233 {
10234 int kh;
5b4ee69b 10235
52ce6436
PH
10236 for (kh = i + 2; kh < *size; kh += 2)
10237 if (high < indices[kh])
10238 break;
10239 if (low < indices[i])
10240 indices[i] = low;
10241 indices[i + 1] = indices[kh - 1];
10242 if (high > indices[i + 1])
10243 indices[i + 1] = high;
10244 memcpy (indices + i + 2, indices + kh, *size - kh);
10245 *size -= kh - i - 2;
10246 return;
10247 }
10248 else if (high < indices[i])
10249 break;
10250 }
10251
10252 if (*size == max_size)
10253 error (_("Internal error: miscounted aggregate components."));
10254 *size += 2;
10255 for (j = *size-1; j >= i+2; j -= 1)
10256 indices[j] = indices[j - 2];
10257 indices[i] = low;
10258 indices[i + 1] = high;
10259}
10260
6e48bd2c
JB
10261/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
10262 is different. */
10263
10264static struct value *
b7e22850 10265ada_value_cast (struct type *type, struct value *arg2)
6e48bd2c
JB
10266{
10267 if (type == ada_check_typedef (value_type (arg2)))
10268 return arg2;
10269
10270 if (ada_is_fixed_point_type (type))
95f39a5b 10271 return cast_to_fixed (type, arg2);
6e48bd2c
JB
10272
10273 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10274 return cast_from_fixed (type, arg2);
6e48bd2c
JB
10275
10276 return value_cast (type, arg2);
10277}
10278
284614f0
JB
10279/* Evaluating Ada expressions, and printing their result.
10280 ------------------------------------------------------
10281
21649b50
JB
10282 1. Introduction:
10283 ----------------
10284
284614f0
JB
10285 We usually evaluate an Ada expression in order to print its value.
10286 We also evaluate an expression in order to print its type, which
10287 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
10288 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
10289 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
10290 the evaluation compared to the EVAL_NORMAL, but is otherwise very
10291 similar.
10292
10293 Evaluating expressions is a little more complicated for Ada entities
10294 than it is for entities in languages such as C. The main reason for
10295 this is that Ada provides types whose definition might be dynamic.
10296 One example of such types is variant records. Or another example
10297 would be an array whose bounds can only be known at run time.
10298
10299 The following description is a general guide as to what should be
10300 done (and what should NOT be done) in order to evaluate an expression
10301 involving such types, and when. This does not cover how the semantic
10302 information is encoded by GNAT as this is covered separatly. For the
10303 document used as the reference for the GNAT encoding, see exp_dbug.ads
10304 in the GNAT sources.
10305
10306 Ideally, we should embed each part of this description next to its
10307 associated code. Unfortunately, the amount of code is so vast right
10308 now that it's hard to see whether the code handling a particular
10309 situation might be duplicated or not. One day, when the code is
10310 cleaned up, this guide might become redundant with the comments
10311 inserted in the code, and we might want to remove it.
10312
21649b50
JB
10313 2. ``Fixing'' an Entity, the Simple Case:
10314 -----------------------------------------
10315
284614f0
JB
10316 When evaluating Ada expressions, the tricky issue is that they may
10317 reference entities whose type contents and size are not statically
10318 known. Consider for instance a variant record:
10319
10320 type Rec (Empty : Boolean := True) is record
10321 case Empty is
10322 when True => null;
10323 when False => Value : Integer;
10324 end case;
10325 end record;
10326 Yes : Rec := (Empty => False, Value => 1);
10327 No : Rec := (empty => True);
10328
10329 The size and contents of that record depends on the value of the
10330 descriminant (Rec.Empty). At this point, neither the debugging
10331 information nor the associated type structure in GDB are able to
10332 express such dynamic types. So what the debugger does is to create
10333 "fixed" versions of the type that applies to the specific object.
10334 We also informally refer to this opperation as "fixing" an object,
10335 which means creating its associated fixed type.
10336
10337 Example: when printing the value of variable "Yes" above, its fixed
10338 type would look like this:
10339
10340 type Rec is record
10341 Empty : Boolean;
10342 Value : Integer;
10343 end record;
10344
10345 On the other hand, if we printed the value of "No", its fixed type
10346 would become:
10347
10348 type Rec is record
10349 Empty : Boolean;
10350 end record;
10351
10352 Things become a little more complicated when trying to fix an entity
10353 with a dynamic type that directly contains another dynamic type,
10354 such as an array of variant records, for instance. There are
10355 two possible cases: Arrays, and records.
10356
21649b50
JB
10357 3. ``Fixing'' Arrays:
10358 ---------------------
10359
10360 The type structure in GDB describes an array in terms of its bounds,
10361 and the type of its elements. By design, all elements in the array
10362 have the same type and we cannot represent an array of variant elements
10363 using the current type structure in GDB. When fixing an array,
10364 we cannot fix the array element, as we would potentially need one
10365 fixed type per element of the array. As a result, the best we can do
10366 when fixing an array is to produce an array whose bounds and size
10367 are correct (allowing us to read it from memory), but without having
10368 touched its element type. Fixing each element will be done later,
10369 when (if) necessary.
10370
10371 Arrays are a little simpler to handle than records, because the same
10372 amount of memory is allocated for each element of the array, even if
1b536f04 10373 the amount of space actually used by each element differs from element
21649b50 10374 to element. Consider for instance the following array of type Rec:
284614f0
JB
10375
10376 type Rec_Array is array (1 .. 2) of Rec;
10377
1b536f04
JB
10378 The actual amount of memory occupied by each element might be different
10379 from element to element, depending on the value of their discriminant.
21649b50 10380 But the amount of space reserved for each element in the array remains
1b536f04 10381 fixed regardless. So we simply need to compute that size using
21649b50
JB
10382 the debugging information available, from which we can then determine
10383 the array size (we multiply the number of elements of the array by
10384 the size of each element).
10385
10386 The simplest case is when we have an array of a constrained element
10387 type. For instance, consider the following type declarations:
10388
10389 type Bounded_String (Max_Size : Integer) is
10390 Length : Integer;
10391 Buffer : String (1 .. Max_Size);
10392 end record;
10393 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10394
10395 In this case, the compiler describes the array as an array of
10396 variable-size elements (identified by its XVS suffix) for which
10397 the size can be read in the parallel XVZ variable.
10398
10399 In the case of an array of an unconstrained element type, the compiler
10400 wraps the array element inside a private PAD type. This type should not
10401 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
10402 that we also use the adjective "aligner" in our code to designate
10403 these wrapper types.
10404
1b536f04 10405 In some cases, the size allocated for each element is statically
21649b50
JB
10406 known. In that case, the PAD type already has the correct size,
10407 and the array element should remain unfixed.
10408
10409 But there are cases when this size is not statically known.
10410 For instance, assuming that "Five" is an integer variable:
284614f0
JB
10411
10412 type Dynamic is array (1 .. Five) of Integer;
10413 type Wrapper (Has_Length : Boolean := False) is record
10414 Data : Dynamic;
10415 case Has_Length is
10416 when True => Length : Integer;
10417 when False => null;
10418 end case;
10419 end record;
10420 type Wrapper_Array is array (1 .. 2) of Wrapper;
10421
10422 Hello : Wrapper_Array := (others => (Has_Length => True,
10423 Data => (others => 17),
10424 Length => 1));
10425
10426
10427 The debugging info would describe variable Hello as being an
10428 array of a PAD type. The size of that PAD type is not statically
10429 known, but can be determined using a parallel XVZ variable.
10430 In that case, a copy of the PAD type with the correct size should
10431 be used for the fixed array.
10432
21649b50
JB
10433 3. ``Fixing'' record type objects:
10434 ----------------------------------
10435
10436 Things are slightly different from arrays in the case of dynamic
284614f0
JB
10437 record types. In this case, in order to compute the associated
10438 fixed type, we need to determine the size and offset of each of
10439 its components. This, in turn, requires us to compute the fixed
10440 type of each of these components.
10441
10442 Consider for instance the example:
10443
10444 type Bounded_String (Max_Size : Natural) is record
10445 Str : String (1 .. Max_Size);
10446 Length : Natural;
10447 end record;
10448 My_String : Bounded_String (Max_Size => 10);
10449
10450 In that case, the position of field "Length" depends on the size
10451 of field Str, which itself depends on the value of the Max_Size
21649b50 10452 discriminant. In order to fix the type of variable My_String,
284614f0
JB
10453 we need to fix the type of field Str. Therefore, fixing a variant
10454 record requires us to fix each of its components.
10455
10456 However, if a component does not have a dynamic size, the component
10457 should not be fixed. In particular, fields that use a PAD type
10458 should not fixed. Here is an example where this might happen
10459 (assuming type Rec above):
10460
10461 type Container (Big : Boolean) is record
10462 First : Rec;
10463 After : Integer;
10464 case Big is
10465 when True => Another : Integer;
10466 when False => null;
10467 end case;
10468 end record;
10469 My_Container : Container := (Big => False,
10470 First => (Empty => True),
10471 After => 42);
10472
10473 In that example, the compiler creates a PAD type for component First,
10474 whose size is constant, and then positions the component After just
10475 right after it. The offset of component After is therefore constant
10476 in this case.
10477
10478 The debugger computes the position of each field based on an algorithm
10479 that uses, among other things, the actual position and size of the field
21649b50
JB
10480 preceding it. Let's now imagine that the user is trying to print
10481 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
10482 end up computing the offset of field After based on the size of the
10483 fixed version of field First. And since in our example First has
10484 only one actual field, the size of the fixed type is actually smaller
10485 than the amount of space allocated to that field, and thus we would
10486 compute the wrong offset of field After.
10487
21649b50
JB
10488 To make things more complicated, we need to watch out for dynamic
10489 components of variant records (identified by the ___XVL suffix in
10490 the component name). Even if the target type is a PAD type, the size
10491 of that type might not be statically known. So the PAD type needs
10492 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10493 we might end up with the wrong size for our component. This can be
10494 observed with the following type declarations:
284614f0
JB
10495
10496 type Octal is new Integer range 0 .. 7;
10497 type Octal_Array is array (Positive range <>) of Octal;
10498 pragma Pack (Octal_Array);
10499
10500 type Octal_Buffer (Size : Positive) is record
10501 Buffer : Octal_Array (1 .. Size);
10502 Length : Integer;
10503 end record;
10504
10505 In that case, Buffer is a PAD type whose size is unset and needs
10506 to be computed by fixing the unwrapped type.
10507
21649b50
JB
10508 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10509 ----------------------------------------------------------
10510
10511 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
10512 thus far, be actually fixed?
10513
10514 The answer is: Only when referencing that element. For instance
10515 when selecting one component of a record, this specific component
10516 should be fixed at that point in time. Or when printing the value
10517 of a record, each component should be fixed before its value gets
10518 printed. Similarly for arrays, the element of the array should be
10519 fixed when printing each element of the array, or when extracting
10520 one element out of that array. On the other hand, fixing should
10521 not be performed on the elements when taking a slice of an array!
10522
31432a67 10523 Note that one of the side effects of miscomputing the offset and
284614f0
JB
10524 size of each field is that we end up also miscomputing the size
10525 of the containing type. This can have adverse results when computing
10526 the value of an entity. GDB fetches the value of an entity based
10527 on the size of its type, and thus a wrong size causes GDB to fetch
10528 the wrong amount of memory. In the case where the computed size is
10529 too small, GDB fetches too little data to print the value of our
31432a67 10530 entity. Results in this case are unpredictable, as we usually read
284614f0
JB
10531 past the buffer containing the data =:-o. */
10532
ced9779b
JB
10533/* Evaluate a subexpression of EXP, at index *POS, and return a value
10534 for that subexpression cast to TO_TYPE. Advance *POS over the
10535 subexpression. */
10536
10537static value *
10538ada_evaluate_subexp_for_cast (expression *exp, int *pos,
10539 enum noside noside, struct type *to_type)
10540{
10541 int pc = *pos;
10542
10543 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
10544 || exp->elts[pc].opcode == OP_VAR_VALUE)
10545 {
10546 (*pos) += 4;
10547
10548 value *val;
10549 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
10550 {
10551 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10552 return value_zero (to_type, not_lval);
10553
10554 val = evaluate_var_msym_value (noside,
10555 exp->elts[pc + 1].objfile,
10556 exp->elts[pc + 2].msymbol);
10557 }
10558 else
10559 val = evaluate_var_value (noside,
10560 exp->elts[pc + 1].block,
10561 exp->elts[pc + 2].symbol);
10562
10563 if (noside == EVAL_SKIP)
10564 return eval_skip_value (exp);
10565
10566 val = ada_value_cast (to_type, val);
10567
10568 /* Follow the Ada language semantics that do not allow taking
10569 an address of the result of a cast (view conversion in Ada). */
10570 if (VALUE_LVAL (val) == lval_memory)
10571 {
10572 if (value_lazy (val))
10573 value_fetch_lazy (val);
10574 VALUE_LVAL (val) = not_lval;
10575 }
10576 return val;
10577 }
10578
10579 value *val = evaluate_subexp (to_type, exp, pos, noside);
10580 if (noside == EVAL_SKIP)
10581 return eval_skip_value (exp);
10582 return ada_value_cast (to_type, val);
10583}
10584
284614f0
JB
10585/* Implement the evaluate_exp routine in the exp_descriptor structure
10586 for the Ada language. */
10587
52ce6436 10588static struct value *
ebf56fd3 10589ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 10590 int *pos, enum noside noside)
14f9c5c9
AS
10591{
10592 enum exp_opcode op;
b5385fc0 10593 int tem;
14f9c5c9 10594 int pc;
5ec18f2b 10595 int preeval_pos;
14f9c5c9
AS
10596 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10597 struct type *type;
52ce6436 10598 int nargs, oplen;
d2e4a39e 10599 struct value **argvec;
14f9c5c9 10600
d2e4a39e
AS
10601 pc = *pos;
10602 *pos += 1;
14f9c5c9
AS
10603 op = exp->elts[pc].opcode;
10604
d2e4a39e 10605 switch (op)
14f9c5c9
AS
10606 {
10607 default:
10608 *pos -= 1;
6e48bd2c 10609 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10610
10611 if (noside == EVAL_NORMAL)
10612 arg1 = unwrap_value (arg1);
6e48bd2c 10613
edd079d9 10614 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
6e48bd2c
JB
10615 then we need to perform the conversion manually, because
10616 evaluate_subexp_standard doesn't do it. This conversion is
10617 necessary in Ada because the different kinds of float/fixed
10618 types in Ada have different representations.
10619
10620 Similarly, we need to perform the conversion from OP_LONG
10621 ourselves. */
edd079d9 10622 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
b7e22850 10623 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10624
10625 return arg1;
4c4b4cd2
PH
10626
10627 case OP_STRING:
10628 {
76a01679 10629 struct value *result;
5b4ee69b 10630
76a01679
JB
10631 *pos -= 1;
10632 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10633 /* The result type will have code OP_STRING, bashed there from
10634 OP_ARRAY. Bash it back. */
df407dfe
AC
10635 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10636 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 10637 return result;
4c4b4cd2 10638 }
14f9c5c9
AS
10639
10640 case UNOP_CAST:
10641 (*pos) += 2;
10642 type = exp->elts[pc + 1].type;
ced9779b 10643 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10644
4c4b4cd2
PH
10645 case UNOP_QUAL:
10646 (*pos) += 2;
10647 type = exp->elts[pc + 1].type;
10648 return ada_evaluate_subexp (type, exp, pos, noside);
10649
14f9c5c9
AS
10650 case BINOP_ASSIGN:
10651 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
10652 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10653 {
10654 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10655 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10656 return arg1;
10657 return ada_value_assign (arg1, arg1);
10658 }
003f3813
JB
10659 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10660 except if the lhs of our assignment is a convenience variable.
10661 In the case of assigning to a convenience variable, the lhs
10662 should be exactly the result of the evaluation of the rhs. */
10663 type = value_type (arg1);
10664 if (VALUE_LVAL (arg1) == lval_internalvar)
10665 type = NULL;
10666 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10667 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10668 return arg1;
df407dfe
AC
10669 if (ada_is_fixed_point_type (value_type (arg1)))
10670 arg2 = cast_to_fixed (value_type (arg1), arg2);
10671 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 10672 error
323e0a4a 10673 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 10674 else
df407dfe 10675 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10676 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10677
10678 case BINOP_ADD:
10679 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10680 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10681 if (noside == EVAL_SKIP)
4c4b4cd2 10682 goto nosideret;
2ac8a782
JB
10683 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10684 return (value_from_longest
10685 (value_type (arg1),
10686 value_as_long (arg1) + value_as_long (arg2)));
c40cc657
JB
10687 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10688 return (value_from_longest
10689 (value_type (arg2),
10690 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
10691 if ((ada_is_fixed_point_type (value_type (arg1))
10692 || ada_is_fixed_point_type (value_type (arg2)))
10693 && value_type (arg1) != value_type (arg2))
323e0a4a 10694 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10695 /* Do the addition, and cast the result to the type of the first
10696 argument. We cannot cast the result to a reference type, so if
10697 ARG1 is a reference type, find its underlying type. */
10698 type = value_type (arg1);
10699 while (TYPE_CODE (type) == TYPE_CODE_REF)
10700 type = TYPE_TARGET_TYPE (type);
f44316fa 10701 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10702 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10703
10704 case BINOP_SUB:
10705 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10706 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10707 if (noside == EVAL_SKIP)
4c4b4cd2 10708 goto nosideret;
2ac8a782
JB
10709 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10710 return (value_from_longest
10711 (value_type (arg1),
10712 value_as_long (arg1) - value_as_long (arg2)));
c40cc657
JB
10713 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10714 return (value_from_longest
10715 (value_type (arg2),
10716 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
10717 if ((ada_is_fixed_point_type (value_type (arg1))
10718 || ada_is_fixed_point_type (value_type (arg2)))
10719 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10720 error (_("Operands of fixed-point subtraction "
10721 "must have the same type"));
b7789565
JB
10722 /* Do the substraction, and cast the result to the type of the first
10723 argument. We cannot cast the result to a reference type, so if
10724 ARG1 is a reference type, find its underlying type. */
10725 type = value_type (arg1);
10726 while (TYPE_CODE (type) == TYPE_CODE_REF)
10727 type = TYPE_TARGET_TYPE (type);
f44316fa 10728 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10729 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10730
10731 case BINOP_MUL:
10732 case BINOP_DIV:
e1578042
JB
10733 case BINOP_REM:
10734 case BINOP_MOD:
14f9c5c9
AS
10735 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10736 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10737 if (noside == EVAL_SKIP)
4c4b4cd2 10738 goto nosideret;
e1578042 10739 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10740 {
10741 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10742 return value_zero (value_type (arg1), not_lval);
10743 }
14f9c5c9 10744 else
4c4b4cd2 10745 {
a53b7a21 10746 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 10747 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 10748 arg1 = cast_from_fixed (type, arg1);
df407dfe 10749 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10750 arg2 = cast_from_fixed (type, arg2);
f44316fa 10751 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10752 return ada_value_binop (arg1, arg2, op);
10753 }
10754
4c4b4cd2
PH
10755 case BINOP_EQUAL:
10756 case BINOP_NOTEQUAL:
14f9c5c9 10757 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10758 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10759 if (noside == EVAL_SKIP)
76a01679 10760 goto nosideret;
4c4b4cd2 10761 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10762 tem = 0;
4c4b4cd2 10763 else
f44316fa
UW
10764 {
10765 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10766 tem = ada_value_equal (arg1, arg2);
10767 }
4c4b4cd2 10768 if (op == BINOP_NOTEQUAL)
76a01679 10769 tem = !tem;
fbb06eb1
UW
10770 type = language_bool_type (exp->language_defn, exp->gdbarch);
10771 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10772
10773 case UNOP_NEG:
10774 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10775 if (noside == EVAL_SKIP)
10776 goto nosideret;
df407dfe
AC
10777 else if (ada_is_fixed_point_type (value_type (arg1)))
10778 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10779 else
f44316fa
UW
10780 {
10781 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10782 return value_neg (arg1);
10783 }
4c4b4cd2 10784
2330c6c6
JB
10785 case BINOP_LOGICAL_AND:
10786 case BINOP_LOGICAL_OR:
10787 case UNOP_LOGICAL_NOT:
000d5124
JB
10788 {
10789 struct value *val;
10790
10791 *pos -= 1;
10792 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10793 type = language_bool_type (exp->language_defn, exp->gdbarch);
10794 return value_cast (type, val);
000d5124 10795 }
2330c6c6
JB
10796
10797 case BINOP_BITWISE_AND:
10798 case BINOP_BITWISE_IOR:
10799 case BINOP_BITWISE_XOR:
000d5124
JB
10800 {
10801 struct value *val;
10802
10803 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10804 *pos = pc;
10805 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10806
10807 return value_cast (value_type (arg1), val);
10808 }
2330c6c6 10809
14f9c5c9
AS
10810 case OP_VAR_VALUE:
10811 *pos -= 1;
6799def4 10812
14f9c5c9 10813 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10814 {
10815 *pos += 4;
10816 goto nosideret;
10817 }
da5c522f
JB
10818
10819 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10820 /* Only encountered when an unresolved symbol occurs in a
10821 context other than a function call, in which case, it is
52ce6436 10822 invalid. */
323e0a4a 10823 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 10824 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
da5c522f
JB
10825
10826 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10827 {
0c1f74cf 10828 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10829 /* Check to see if this is a tagged type. We also need to handle
10830 the case where the type is a reference to a tagged type, but
10831 we have to be careful to exclude pointers to tagged types.
10832 The latter should be shown as usual (as a pointer), whereas
10833 a reference should mostly be transparent to the user. */
10834 if (ada_is_tagged_type (type, 0)
023db19c 10835 || (TYPE_CODE (type) == TYPE_CODE_REF
31dbc1c5 10836 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10837 {
10838 /* Tagged types are a little special in the fact that the real
10839 type is dynamic and can only be determined by inspecting the
10840 object's tag. This means that we need to get the object's
10841 value first (EVAL_NORMAL) and then extract the actual object
10842 type from its tag.
10843
10844 Note that we cannot skip the final step where we extract
10845 the object type from its tag, because the EVAL_NORMAL phase
10846 results in dynamic components being resolved into fixed ones.
10847 This can cause problems when trying to print the type
10848 description of tagged types whose parent has a dynamic size:
10849 We use the type name of the "_parent" component in order
10850 to print the name of the ancestor type in the type description.
10851 If that component had a dynamic size, the resolution into
10852 a fixed type would result in the loss of that type name,
10853 thus preventing us from printing the name of the ancestor
10854 type in the type description. */
10855 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10856
10857 if (TYPE_CODE (type) != TYPE_CODE_REF)
10858 {
10859 struct type *actual_type;
10860
10861 actual_type = type_from_tag (ada_value_tag (arg1));
10862 if (actual_type == NULL)
10863 /* If, for some reason, we were unable to determine
10864 the actual type from the tag, then use the static
10865 approximation that we just computed as a fallback.
10866 This can happen if the debugging information is
10867 incomplete, for instance. */
10868 actual_type = type;
10869 return value_zero (actual_type, not_lval);
10870 }
10871 else
10872 {
10873 /* In the case of a ref, ada_coerce_ref takes care
10874 of determining the actual type. But the evaluation
10875 should return a ref as it should be valid to ask
10876 for its address; so rebuild a ref after coerce. */
10877 arg1 = ada_coerce_ref (arg1);
a65cfae5 10878 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10879 }
10880 }
0c1f74cf 10881
84754697
JB
10882 /* Records and unions for which GNAT encodings have been
10883 generated need to be statically fixed as well.
10884 Otherwise, non-static fixing produces a type where
10885 all dynamic properties are removed, which prevents "ptype"
10886 from being able to completely describe the type.
10887 For instance, a case statement in a variant record would be
10888 replaced by the relevant components based on the actual
10889 value of the discriminants. */
10890 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10891 && dynamic_template_type (type) != NULL)
10892 || (TYPE_CODE (type) == TYPE_CODE_UNION
10893 && ada_find_parallel_type (type, "___XVU") != NULL))
10894 {
10895 *pos += 4;
10896 return value_zero (to_static_fixed_type (type), not_lval);
10897 }
4c4b4cd2 10898 }
da5c522f
JB
10899
10900 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10901 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10902
10903 case OP_FUNCALL:
10904 (*pos) += 2;
10905
10906 /* Allocate arg vector, including space for the function to be
10907 called in argvec[0] and a terminating NULL. */
10908 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10909 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10910
10911 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10912 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10913 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
10914 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10915 else
10916 {
10917 for (tem = 0; tem <= nargs; tem += 1)
10918 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10919 argvec[tem] = 0;
10920
10921 if (noside == EVAL_SKIP)
10922 goto nosideret;
10923 }
10924
ad82864c
JB
10925 if (ada_is_constrained_packed_array_type
10926 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10927 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
10928 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10929 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10930 /* This is a packed array that has already been fixed, and
10931 therefore already coerced to a simple array. Nothing further
10932 to do. */
10933 ;
e6c2c623
PMR
10934 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF)
10935 {
10936 /* Make sure we dereference references so that all the code below
10937 feels like it's really handling the referenced value. Wrapping
10938 types (for alignment) may be there, so make sure we strip them as
10939 well. */
10940 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10941 }
10942 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10943 && VALUE_LVAL (argvec[0]) == lval_memory)
10944 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10945
df407dfe 10946 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10947
10948 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10949 them. So, if this is an array typedef (encoding use for array
10950 access types encoded as fat pointers), strip it now. */
720d1a40
JB
10951 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10952 type = ada_typedef_target_type (type);
10953
4c4b4cd2
PH
10954 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10955 {
61ee279c 10956 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
10957 {
10958 case TYPE_CODE_FUNC:
61ee279c 10959 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10960 break;
10961 case TYPE_CODE_ARRAY:
10962 break;
10963 case TYPE_CODE_STRUCT:
10964 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10965 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10966 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10967 break;
10968 default:
323e0a4a 10969 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10970 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10971 break;
10972 }
10973 }
10974
10975 switch (TYPE_CODE (type))
10976 {
10977 case TYPE_CODE_FUNC:
10978 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 10979 {
7022349d
PA
10980 if (TYPE_TARGET_TYPE (type) == NULL)
10981 error_call_unknown_return_type (NULL);
10982 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 10983 }
e71585ff
PA
10984 return call_function_by_hand (argvec[0], NULL,
10985 gdb::make_array_view (argvec + 1,
10986 nargs));
c8ea1972
PH
10987 case TYPE_CODE_INTERNAL_FUNCTION:
10988 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10989 /* We don't know anything about what the internal
10990 function might return, but we have to return
10991 something. */
10992 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10993 not_lval);
10994 else
10995 return call_internal_function (exp->gdbarch, exp->language_defn,
10996 argvec[0], nargs, argvec + 1);
10997
4c4b4cd2
PH
10998 case TYPE_CODE_STRUCT:
10999 {
11000 int arity;
11001
4c4b4cd2
PH
11002 arity = ada_array_arity (type);
11003 type = ada_array_element_type (type, nargs);
11004 if (type == NULL)
323e0a4a 11005 error (_("cannot subscript or call a record"));
4c4b4cd2 11006 if (arity != nargs)
323e0a4a 11007 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 11008 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 11009 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
11010 return
11011 unwrap_value (ada_value_subscript
11012 (argvec[0], nargs, argvec + 1));
11013 }
11014 case TYPE_CODE_ARRAY:
11015 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11016 {
11017 type = ada_array_element_type (type, nargs);
11018 if (type == NULL)
323e0a4a 11019 error (_("element type of array unknown"));
4c4b4cd2 11020 else
0a07e705 11021 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
11022 }
11023 return
11024 unwrap_value (ada_value_subscript
11025 (ada_coerce_to_simple_array (argvec[0]),
11026 nargs, argvec + 1));
11027 case TYPE_CODE_PTR: /* Pointer to array */
4c4b4cd2
PH
11028 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11029 {
deede10c 11030 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
4c4b4cd2
PH
11031 type = ada_array_element_type (type, nargs);
11032 if (type == NULL)
323e0a4a 11033 error (_("element type of array unknown"));
4c4b4cd2 11034 else
0a07e705 11035 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
11036 }
11037 return
deede10c
JB
11038 unwrap_value (ada_value_ptr_subscript (argvec[0],
11039 nargs, argvec + 1));
4c4b4cd2
PH
11040
11041 default:
e1d5a0d2
PH
11042 error (_("Attempt to index or call something other than an "
11043 "array or function"));
4c4b4cd2
PH
11044 }
11045
11046 case TERNOP_SLICE:
11047 {
11048 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11049 struct value *low_bound_val =
11050 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
11051 struct value *high_bound_val =
11052 evaluate_subexp (NULL_TYPE, exp, pos, noside);
11053 LONGEST low_bound;
11054 LONGEST high_bound;
5b4ee69b 11055
994b9211
AC
11056 low_bound_val = coerce_ref (low_bound_val);
11057 high_bound_val = coerce_ref (high_bound_val);
aa715135
JG
11058 low_bound = value_as_long (low_bound_val);
11059 high_bound = value_as_long (high_bound_val);
963a6417 11060
4c4b4cd2
PH
11061 if (noside == EVAL_SKIP)
11062 goto nosideret;
11063
4c4b4cd2
PH
11064 /* If this is a reference to an aligner type, then remove all
11065 the aligners. */
df407dfe
AC
11066 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
11067 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
11068 TYPE_TARGET_TYPE (value_type (array)) =
11069 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 11070
ad82864c 11071 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 11072 error (_("cannot slice a packed array"));
4c4b4cd2
PH
11073
11074 /* If this is a reference to an array or an array lvalue,
11075 convert to a pointer. */
df407dfe
AC
11076 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
11077 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
11078 && VALUE_LVAL (array) == lval_memory))
11079 array = value_addr (array);
11080
1265e4aa 11081 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 11082 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 11083 (value_type (array))))
bff8c71f
TT
11084 return empty_array (ada_type_of_array (array, 0), low_bound,
11085 high_bound);
4c4b4cd2
PH
11086
11087 array = ada_coerce_to_simple_array_ptr (array);
11088
714e53ab
PH
11089 /* If we have more than one level of pointer indirection,
11090 dereference the value until we get only one level. */
df407dfe
AC
11091 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
11092 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
11093 == TYPE_CODE_PTR))
11094 array = value_ind (array);
11095
11096 /* Make sure we really do have an array type before going further,
11097 to avoid a SEGV when trying to get the index type or the target
11098 type later down the road if the debug info generated by
11099 the compiler is incorrect or incomplete. */
df407dfe 11100 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 11101 error (_("cannot take slice of non-array"));
714e53ab 11102
828292f2
JB
11103 if (TYPE_CODE (ada_check_typedef (value_type (array)))
11104 == TYPE_CODE_PTR)
4c4b4cd2 11105 {
828292f2
JB
11106 struct type *type0 = ada_check_typedef (value_type (array));
11107
0b5d8877 11108 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
bff8c71f 11109 return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
4c4b4cd2
PH
11110 else
11111 {
11112 struct type *arr_type0 =
828292f2 11113 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 11114
f5938064
JG
11115 return ada_value_slice_from_ptr (array, arr_type0,
11116 longest_to_int (low_bound),
11117 longest_to_int (high_bound));
4c4b4cd2
PH
11118 }
11119 }
11120 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11121 return array;
11122 else if (high_bound < low_bound)
bff8c71f 11123 return empty_array (value_type (array), low_bound, high_bound);
4c4b4cd2 11124 else
529cad9c
PH
11125 return ada_value_slice (array, longest_to_int (low_bound),
11126 longest_to_int (high_bound));
4c4b4cd2 11127 }
14f9c5c9 11128
4c4b4cd2
PH
11129 case UNOP_IN_RANGE:
11130 (*pos) += 2;
11131 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 11132 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 11133
14f9c5c9 11134 if (noside == EVAL_SKIP)
4c4b4cd2 11135 goto nosideret;
14f9c5c9 11136
4c4b4cd2
PH
11137 switch (TYPE_CODE (type))
11138 {
11139 default:
e1d5a0d2
PH
11140 lim_warning (_("Membership test incompletely implemented; "
11141 "always returns true"));
fbb06eb1
UW
11142 type = language_bool_type (exp->language_defn, exp->gdbarch);
11143 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
11144
11145 case TYPE_CODE_RANGE:
030b4912
UW
11146 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
11147 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
11148 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11149 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
11150 type = language_bool_type (exp->language_defn, exp->gdbarch);
11151 return
11152 value_from_longest (type,
4c4b4cd2
PH
11153 (value_less (arg1, arg3)
11154 || value_equal (arg1, arg3))
11155 && (value_less (arg2, arg1)
11156 || value_equal (arg2, arg1)));
11157 }
11158
11159 case BINOP_IN_BOUNDS:
14f9c5c9 11160 (*pos) += 2;
4c4b4cd2
PH
11161 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11162 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 11163
4c4b4cd2
PH
11164 if (noside == EVAL_SKIP)
11165 goto nosideret;
14f9c5c9 11166
4c4b4cd2 11167 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
11168 {
11169 type = language_bool_type (exp->language_defn, exp->gdbarch);
11170 return value_zero (type, not_lval);
11171 }
14f9c5c9 11172
4c4b4cd2 11173 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 11174
1eea4ebd
UW
11175 type = ada_index_type (value_type (arg2), tem, "range");
11176 if (!type)
11177 type = value_type (arg1);
14f9c5c9 11178
1eea4ebd
UW
11179 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
11180 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 11181
f44316fa
UW
11182 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11183 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 11184 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 11185 return
fbb06eb1 11186 value_from_longest (type,
4c4b4cd2
PH
11187 (value_less (arg1, arg3)
11188 || value_equal (arg1, arg3))
11189 && (value_less (arg2, arg1)
11190 || value_equal (arg2, arg1)));
11191
11192 case TERNOP_IN_RANGE:
11193 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11194 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11195 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11196
11197 if (noside == EVAL_SKIP)
11198 goto nosideret;
11199
f44316fa
UW
11200 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11201 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 11202 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 11203 return
fbb06eb1 11204 value_from_longest (type,
4c4b4cd2
PH
11205 (value_less (arg1, arg3)
11206 || value_equal (arg1, arg3))
11207 && (value_less (arg2, arg1)
11208 || value_equal (arg2, arg1)));
11209
11210 case OP_ATR_FIRST:
11211 case OP_ATR_LAST:
11212 case OP_ATR_LENGTH:
11213 {
76a01679 11214 struct type *type_arg;
5b4ee69b 11215
76a01679
JB
11216 if (exp->elts[*pos].opcode == OP_TYPE)
11217 {
11218 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11219 arg1 = NULL;
5bc23cb3 11220 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
11221 }
11222 else
11223 {
11224 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11225 type_arg = NULL;
11226 }
11227
11228 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 11229 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
11230 tem = longest_to_int (exp->elts[*pos + 2].longconst);
11231 *pos += 4;
11232
11233 if (noside == EVAL_SKIP)
11234 goto nosideret;
11235
11236 if (type_arg == NULL)
11237 {
11238 arg1 = ada_coerce_ref (arg1);
11239
ad82864c 11240 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
11241 arg1 = ada_coerce_to_simple_array (arg1);
11242
aa4fb036 11243 if (op == OP_ATR_LENGTH)
1eea4ebd 11244 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11245 else
11246 {
11247 type = ada_index_type (value_type (arg1), tem,
11248 ada_attribute_name (op));
11249 if (type == NULL)
11250 type = builtin_type (exp->gdbarch)->builtin_int;
11251 }
76a01679
JB
11252
11253 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 11254 return allocate_value (type);
76a01679
JB
11255
11256 switch (op)
11257 {
11258 default: /* Should never happen. */
323e0a4a 11259 error (_("unexpected attribute encountered"));
76a01679 11260 case OP_ATR_FIRST:
1eea4ebd
UW
11261 return value_from_longest
11262 (type, ada_array_bound (arg1, tem, 0));
76a01679 11263 case OP_ATR_LAST:
1eea4ebd
UW
11264 return value_from_longest
11265 (type, ada_array_bound (arg1, tem, 1));
76a01679 11266 case OP_ATR_LENGTH:
1eea4ebd
UW
11267 return value_from_longest
11268 (type, ada_array_length (arg1, tem));
76a01679
JB
11269 }
11270 }
11271 else if (discrete_type_p (type_arg))
11272 {
11273 struct type *range_type;
0d5cff50 11274 const char *name = ada_type_name (type_arg);
5b4ee69b 11275
76a01679
JB
11276 range_type = NULL;
11277 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 11278 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
11279 if (range_type == NULL)
11280 range_type = type_arg;
11281 switch (op)
11282 {
11283 default:
323e0a4a 11284 error (_("unexpected attribute encountered"));
76a01679 11285 case OP_ATR_FIRST:
690cc4eb 11286 return value_from_longest
43bbcdc2 11287 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 11288 case OP_ATR_LAST:
690cc4eb 11289 return value_from_longest
43bbcdc2 11290 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 11291 case OP_ATR_LENGTH:
323e0a4a 11292 error (_("the 'length attribute applies only to array types"));
76a01679
JB
11293 }
11294 }
11295 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 11296 error (_("unimplemented type attribute"));
76a01679
JB
11297 else
11298 {
11299 LONGEST low, high;
11300
ad82864c
JB
11301 if (ada_is_constrained_packed_array_type (type_arg))
11302 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 11303
aa4fb036 11304 if (op == OP_ATR_LENGTH)
1eea4ebd 11305 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11306 else
11307 {
11308 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
11309 if (type == NULL)
11310 type = builtin_type (exp->gdbarch)->builtin_int;
11311 }
1eea4ebd 11312
76a01679
JB
11313 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11314 return allocate_value (type);
11315
11316 switch (op)
11317 {
11318 default:
323e0a4a 11319 error (_("unexpected attribute encountered"));
76a01679 11320 case OP_ATR_FIRST:
1eea4ebd 11321 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
11322 return value_from_longest (type, low);
11323 case OP_ATR_LAST:
1eea4ebd 11324 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11325 return value_from_longest (type, high);
11326 case OP_ATR_LENGTH:
1eea4ebd
UW
11327 low = ada_array_bound_from_type (type_arg, tem, 0);
11328 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11329 return value_from_longest (type, high - low + 1);
11330 }
11331 }
14f9c5c9
AS
11332 }
11333
4c4b4cd2
PH
11334 case OP_ATR_TAG:
11335 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11336 if (noside == EVAL_SKIP)
76a01679 11337 goto nosideret;
4c4b4cd2
PH
11338
11339 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11340 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
11341
11342 return ada_value_tag (arg1);
11343
11344 case OP_ATR_MIN:
11345 case OP_ATR_MAX:
11346 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11347 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11348 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11349 if (noside == EVAL_SKIP)
76a01679 11350 goto nosideret;
d2e4a39e 11351 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11352 return value_zero (value_type (arg1), not_lval);
14f9c5c9 11353 else
f44316fa
UW
11354 {
11355 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11356 return value_binop (arg1, arg2,
11357 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
11358 }
14f9c5c9 11359
4c4b4cd2
PH
11360 case OP_ATR_MODULUS:
11361 {
31dedfee 11362 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 11363
5b4ee69b 11364 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
11365 if (noside == EVAL_SKIP)
11366 goto nosideret;
4c4b4cd2 11367
76a01679 11368 if (!ada_is_modular_type (type_arg))
323e0a4a 11369 error (_("'modulus must be applied to modular type"));
4c4b4cd2 11370
76a01679
JB
11371 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11372 ada_modulus (type_arg));
4c4b4cd2
PH
11373 }
11374
11375
11376 case OP_ATR_POS:
11377 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11378 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11379 if (noside == EVAL_SKIP)
76a01679 11380 goto nosideret;
3cb382c9
UW
11381 type = builtin_type (exp->gdbarch)->builtin_int;
11382 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11383 return value_zero (type, not_lval);
14f9c5c9 11384 else
3cb382c9 11385 return value_pos_atr (type, arg1);
14f9c5c9 11386
4c4b4cd2
PH
11387 case OP_ATR_SIZE:
11388 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
11389 type = value_type (arg1);
11390
11391 /* If the argument is a reference, then dereference its type, since
11392 the user is really asking for the size of the actual object,
11393 not the size of the pointer. */
11394 if (TYPE_CODE (type) == TYPE_CODE_REF)
11395 type = TYPE_TARGET_TYPE (type);
11396
4c4b4cd2 11397 if (noside == EVAL_SKIP)
76a01679 11398 goto nosideret;
4c4b4cd2 11399 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 11400 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 11401 else
22601c15 11402 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 11403 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
11404
11405 case OP_ATR_VAL:
11406 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 11407 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 11408 type = exp->elts[pc + 2].type;
14f9c5c9 11409 if (noside == EVAL_SKIP)
76a01679 11410 goto nosideret;
4c4b4cd2 11411 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11412 return value_zero (type, not_lval);
4c4b4cd2 11413 else
76a01679 11414 return value_val_atr (type, arg1);
4c4b4cd2
PH
11415
11416 case BINOP_EXP:
11417 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11418 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11419 if (noside == EVAL_SKIP)
11420 goto nosideret;
11421 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11422 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 11423 else
f44316fa
UW
11424 {
11425 /* For integer exponentiation operations,
11426 only promote the first argument. */
11427 if (is_integral_type (value_type (arg2)))
11428 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11429 else
11430 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11431
11432 return value_binop (arg1, arg2, op);
11433 }
4c4b4cd2
PH
11434
11435 case UNOP_PLUS:
11436 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11437 if (noside == EVAL_SKIP)
11438 goto nosideret;
11439 else
11440 return arg1;
11441
11442 case UNOP_ABS:
11443 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11444 if (noside == EVAL_SKIP)
11445 goto nosideret;
f44316fa 11446 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 11447 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 11448 return value_neg (arg1);
14f9c5c9 11449 else
4c4b4cd2 11450 return arg1;
14f9c5c9
AS
11451
11452 case UNOP_IND:
5ec18f2b 11453 preeval_pos = *pos;
6b0d7253 11454 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 11455 if (noside == EVAL_SKIP)
4c4b4cd2 11456 goto nosideret;
df407dfe 11457 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11458 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
11459 {
11460 if (ada_is_array_descriptor_type (type))
11461 /* GDB allows dereferencing GNAT array descriptors. */
11462 {
11463 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 11464
4c4b4cd2 11465 if (arrType == NULL)
323e0a4a 11466 error (_("Attempt to dereference null array pointer."));
00a4c844 11467 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
11468 }
11469 else if (TYPE_CODE (type) == TYPE_CODE_PTR
11470 || TYPE_CODE (type) == TYPE_CODE_REF
11471 /* In C you can dereference an array to get the 1st elt. */
11472 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab 11473 {
5ec18f2b
JG
11474 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11475 only be determined by inspecting the object's tag.
11476 This means that we need to evaluate completely the
11477 expression in order to get its type. */
11478
023db19c
JB
11479 if ((TYPE_CODE (type) == TYPE_CODE_REF
11480 || TYPE_CODE (type) == TYPE_CODE_PTR)
5ec18f2b
JG
11481 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11482 {
11483 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11484 EVAL_NORMAL);
11485 type = value_type (ada_value_ind (arg1));
11486 }
11487 else
11488 {
11489 type = to_static_fixed_type
11490 (ada_aligned_type
11491 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11492 }
c1b5a1a6 11493 ada_ensure_varsize_limit (type);
714e53ab
PH
11494 return value_zero (type, lval_memory);
11495 }
4c4b4cd2 11496 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
11497 {
11498 /* GDB allows dereferencing an int. */
11499 if (expect_type == NULL)
11500 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11501 lval_memory);
11502 else
11503 {
11504 expect_type =
11505 to_static_fixed_type (ada_aligned_type (expect_type));
11506 return value_zero (expect_type, lval_memory);
11507 }
11508 }
4c4b4cd2 11509 else
323e0a4a 11510 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 11511 }
0963b4bd 11512 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11513 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11514
96967637
JB
11515 if (TYPE_CODE (type) == TYPE_CODE_INT)
11516 /* GDB allows dereferencing an int. If we were given
11517 the expect_type, then use that as the target type.
11518 Otherwise, assume that the target type is an int. */
11519 {
11520 if (expect_type != NULL)
11521 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11522 arg1));
11523 else
11524 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11525 (CORE_ADDR) value_as_address (arg1));
11526 }
6b0d7253 11527
4c4b4cd2
PH
11528 if (ada_is_array_descriptor_type (type))
11529 /* GDB allows dereferencing GNAT array descriptors. */
11530 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11531 else
4c4b4cd2 11532 return ada_value_ind (arg1);
14f9c5c9
AS
11533
11534 case STRUCTOP_STRUCT:
11535 tem = longest_to_int (exp->elts[pc + 1].longconst);
11536 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11537 preeval_pos = *pos;
14f9c5c9
AS
11538 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11539 if (noside == EVAL_SKIP)
4c4b4cd2 11540 goto nosideret;
14f9c5c9 11541 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11542 {
df407dfe 11543 struct type *type1 = value_type (arg1);
5b4ee69b 11544
76a01679
JB
11545 if (ada_is_tagged_type (type1, 1))
11546 {
11547 type = ada_lookup_struct_elt_type (type1,
11548 &exp->elts[pc + 2].string,
988f6b3d 11549 1, 1);
5ec18f2b
JG
11550
11551 /* If the field is not found, check if it exists in the
11552 extension of this object's type. This means that we
11553 need to evaluate completely the expression. */
11554
76a01679 11555 if (type == NULL)
5ec18f2b
JG
11556 {
11557 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11558 EVAL_NORMAL);
11559 arg1 = ada_value_struct_elt (arg1,
11560 &exp->elts[pc + 2].string,
11561 0);
11562 arg1 = unwrap_value (arg1);
11563 type = value_type (ada_to_fixed_value (arg1));
11564 }
76a01679
JB
11565 }
11566 else
11567 type =
11568 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
988f6b3d 11569 0);
76a01679
JB
11570
11571 return value_zero (ada_aligned_type (type), lval_memory);
11572 }
14f9c5c9 11573 else
a579cd9a
MW
11574 {
11575 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11576 arg1 = unwrap_value (arg1);
11577 return ada_to_fixed_value (arg1);
11578 }
284614f0 11579
14f9c5c9 11580 case OP_TYPE:
4c4b4cd2
PH
11581 /* The value is not supposed to be used. This is here to make it
11582 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11583 (*pos) += 2;
11584 if (noside == EVAL_SKIP)
4c4b4cd2 11585 goto nosideret;
14f9c5c9 11586 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 11587 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11588 else
323e0a4a 11589 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11590
11591 case OP_AGGREGATE:
11592 case OP_CHOICES:
11593 case OP_OTHERS:
11594 case OP_DISCRETE_RANGE:
11595 case OP_POSITIONAL:
11596 case OP_NAME:
11597 if (noside == EVAL_NORMAL)
11598 switch (op)
11599 {
11600 case OP_NAME:
11601 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11602 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11603 case OP_AGGREGATE:
11604 error (_("Aggregates only allowed on the right of an assignment"));
11605 default:
0963b4bd
MS
11606 internal_error (__FILE__, __LINE__,
11607 _("aggregate apparently mangled"));
52ce6436
PH
11608 }
11609
11610 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11611 *pos += oplen - 1;
11612 for (tem = 0; tem < nargs; tem += 1)
11613 ada_evaluate_subexp (NULL, exp, pos, noside);
11614 goto nosideret;
14f9c5c9
AS
11615 }
11616
11617nosideret:
ced9779b 11618 return eval_skip_value (exp);
14f9c5c9 11619}
14f9c5c9 11620\f
d2e4a39e 11621
4c4b4cd2 11622 /* Fixed point */
14f9c5c9
AS
11623
11624/* If TYPE encodes an Ada fixed-point type, return the suffix of the
11625 type name that encodes the 'small and 'delta information.
4c4b4cd2 11626 Otherwise, return NULL. */
14f9c5c9 11627
d2e4a39e 11628static const char *
ebf56fd3 11629fixed_type_info (struct type *type)
14f9c5c9 11630{
d2e4a39e 11631 const char *name = ada_type_name (type);
14f9c5c9
AS
11632 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11633
d2e4a39e
AS
11634 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11635 {
14f9c5c9 11636 const char *tail = strstr (name, "___XF_");
5b4ee69b 11637
14f9c5c9 11638 if (tail == NULL)
4c4b4cd2 11639 return NULL;
d2e4a39e 11640 else
4c4b4cd2 11641 return tail + 5;
14f9c5c9
AS
11642 }
11643 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11644 return fixed_type_info (TYPE_TARGET_TYPE (type));
11645 else
11646 return NULL;
11647}
11648
4c4b4cd2 11649/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
11650
11651int
ebf56fd3 11652ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
11653{
11654 return fixed_type_info (type) != NULL;
11655}
11656
4c4b4cd2
PH
11657/* Return non-zero iff TYPE represents a System.Address type. */
11658
11659int
11660ada_is_system_address_type (struct type *type)
11661{
11662 return (TYPE_NAME (type)
11663 && strcmp (TYPE_NAME (type), "system__address") == 0);
11664}
11665
14f9c5c9 11666/* Assuming that TYPE is the representation of an Ada fixed-point
50eff16b
UW
11667 type, return the target floating-point type to be used to represent
11668 of this type during internal computation. */
11669
11670static struct type *
11671ada_scaling_type (struct type *type)
11672{
11673 return builtin_type (get_type_arch (type))->builtin_long_double;
11674}
11675
11676/* Assuming that TYPE is the representation of an Ada fixed-point
11677 type, return its delta, or NULL if the type is malformed and the
4c4b4cd2 11678 delta cannot be determined. */
14f9c5c9 11679
50eff16b 11680struct value *
ebf56fd3 11681ada_delta (struct type *type)
14f9c5c9
AS
11682{
11683 const char *encoding = fixed_type_info (type);
50eff16b
UW
11684 struct type *scale_type = ada_scaling_type (type);
11685
11686 long long num, den;
11687
11688 if (sscanf (encoding, "_%lld_%lld", &num, &den) < 2)
11689 return nullptr;
d2e4a39e 11690 else
50eff16b
UW
11691 return value_binop (value_from_longest (scale_type, num),
11692 value_from_longest (scale_type, den), BINOP_DIV);
14f9c5c9
AS
11693}
11694
11695/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 11696 factor ('SMALL value) associated with the type. */
14f9c5c9 11697
50eff16b
UW
11698struct value *
11699ada_scaling_factor (struct type *type)
14f9c5c9
AS
11700{
11701 const char *encoding = fixed_type_info (type);
50eff16b
UW
11702 struct type *scale_type = ada_scaling_type (type);
11703
11704 long long num0, den0, num1, den1;
14f9c5c9 11705 int n;
d2e4a39e 11706
50eff16b 11707 n = sscanf (encoding, "_%lld_%lld_%lld_%lld",
facc390f 11708 &num0, &den0, &num1, &den1);
14f9c5c9
AS
11709
11710 if (n < 2)
50eff16b 11711 return value_from_longest (scale_type, 1);
14f9c5c9 11712 else if (n == 4)
50eff16b
UW
11713 return value_binop (value_from_longest (scale_type, num1),
11714 value_from_longest (scale_type, den1), BINOP_DIV);
d2e4a39e 11715 else
50eff16b
UW
11716 return value_binop (value_from_longest (scale_type, num0),
11717 value_from_longest (scale_type, den0), BINOP_DIV);
14f9c5c9
AS
11718}
11719
14f9c5c9 11720\f
d2e4a39e 11721
4c4b4cd2 11722 /* Range types */
14f9c5c9
AS
11723
11724/* Scan STR beginning at position K for a discriminant name, and
11725 return the value of that discriminant field of DVAL in *PX. If
11726 PNEW_K is not null, put the position of the character beyond the
11727 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11728 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11729
11730static int
108d56a4 11731scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
76a01679 11732 int *pnew_k)
14f9c5c9
AS
11733{
11734 static char *bound_buffer = NULL;
11735 static size_t bound_buffer_len = 0;
5da1a4d3 11736 const char *pstart, *pend, *bound;
d2e4a39e 11737 struct value *bound_val;
14f9c5c9
AS
11738
11739 if (dval == NULL || str == NULL || str[k] == '\0')
11740 return 0;
11741
5da1a4d3
SM
11742 pstart = str + k;
11743 pend = strstr (pstart, "__");
14f9c5c9
AS
11744 if (pend == NULL)
11745 {
5da1a4d3 11746 bound = pstart;
14f9c5c9
AS
11747 k += strlen (bound);
11748 }
d2e4a39e 11749 else
14f9c5c9 11750 {
5da1a4d3
SM
11751 int len = pend - pstart;
11752
11753 /* Strip __ and beyond. */
11754 GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11755 strncpy (bound_buffer, pstart, len);
11756 bound_buffer[len] = '\0';
11757
14f9c5c9 11758 bound = bound_buffer;
d2e4a39e 11759 k = pend - str;
14f9c5c9 11760 }
d2e4a39e 11761
df407dfe 11762 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11763 if (bound_val == NULL)
11764 return 0;
11765
11766 *px = value_as_long (bound_val);
11767 if (pnew_k != NULL)
11768 *pnew_k = k;
11769 return 1;
11770}
11771
11772/* Value of variable named NAME in the current environment. If
11773 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11774 otherwise causes an error with message ERR_MSG. */
11775
d2e4a39e 11776static struct value *
edb0c9cb 11777get_var_value (const char *name, const char *err_msg)
14f9c5c9 11778{
b5ec771e 11779 lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
14f9c5c9 11780
54d343a2 11781 std::vector<struct block_symbol> syms;
b5ec771e
PA
11782 int nsyms = ada_lookup_symbol_list_worker (lookup_name,
11783 get_selected_block (0),
11784 VAR_DOMAIN, &syms, 1);
14f9c5c9
AS
11785
11786 if (nsyms != 1)
11787 {
11788 if (err_msg == NULL)
4c4b4cd2 11789 return 0;
14f9c5c9 11790 else
8a3fe4f8 11791 error (("%s"), err_msg);
14f9c5c9
AS
11792 }
11793
54d343a2 11794 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11795}
d2e4a39e 11796
edb0c9cb
PA
11797/* Value of integer variable named NAME in the current environment.
11798 If no such variable is found, returns false. Otherwise, sets VALUE
11799 to the variable's value and returns true. */
4c4b4cd2 11800
edb0c9cb
PA
11801bool
11802get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11803{
4c4b4cd2 11804 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11805
14f9c5c9 11806 if (var_val == 0)
edb0c9cb
PA
11807 return false;
11808
11809 value = value_as_long (var_val);
11810 return true;
14f9c5c9 11811}
d2e4a39e 11812
14f9c5c9
AS
11813
11814/* Return a range type whose base type is that of the range type named
11815 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11816 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11817 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11818 corresponding range type from debug information; fall back to using it
11819 if symbol lookup fails. If a new type must be created, allocate it
11820 like ORIG_TYPE was. The bounds information, in general, is encoded
11821 in NAME, the base type given in the named range type. */
14f9c5c9 11822
d2e4a39e 11823static struct type *
28c85d6c 11824to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11825{
0d5cff50 11826 const char *name;
14f9c5c9 11827 struct type *base_type;
108d56a4 11828 const char *subtype_info;
14f9c5c9 11829
28c85d6c
JB
11830 gdb_assert (raw_type != NULL);
11831 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 11832
1ce677a4 11833 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
11834 base_type = TYPE_TARGET_TYPE (raw_type);
11835 else
11836 base_type = raw_type;
11837
28c85d6c 11838 name = TYPE_NAME (raw_type);
14f9c5c9
AS
11839 subtype_info = strstr (name, "___XD");
11840 if (subtype_info == NULL)
690cc4eb 11841 {
43bbcdc2
PH
11842 LONGEST L = ada_discrete_type_low_bound (raw_type);
11843 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11844
690cc4eb
PH
11845 if (L < INT_MIN || U > INT_MAX)
11846 return raw_type;
11847 else
0c9c3474
SA
11848 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11849 L, U);
690cc4eb 11850 }
14f9c5c9
AS
11851 else
11852 {
11853 static char *name_buf = NULL;
11854 static size_t name_len = 0;
11855 int prefix_len = subtype_info - name;
11856 LONGEST L, U;
11857 struct type *type;
108d56a4 11858 const char *bounds_str;
14f9c5c9
AS
11859 int n;
11860
11861 GROW_VECT (name_buf, name_len, prefix_len + 5);
11862 strncpy (name_buf, name, prefix_len);
11863 name_buf[prefix_len] = '\0';
11864
11865 subtype_info += 5;
11866 bounds_str = strchr (subtype_info, '_');
11867 n = 1;
11868
d2e4a39e 11869 if (*subtype_info == 'L')
4c4b4cd2
PH
11870 {
11871 if (!ada_scan_number (bounds_str, n, &L, &n)
11872 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11873 return raw_type;
11874 if (bounds_str[n] == '_')
11875 n += 2;
0963b4bd 11876 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11877 n += 1;
11878 subtype_info += 1;
11879 }
d2e4a39e 11880 else
4c4b4cd2 11881 {
4c4b4cd2 11882 strcpy (name_buf + prefix_len, "___L");
edb0c9cb 11883 if (!get_int_var_value (name_buf, L))
4c4b4cd2 11884 {
323e0a4a 11885 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11886 L = 1;
11887 }
11888 }
14f9c5c9 11889
d2e4a39e 11890 if (*subtype_info == 'U')
4c4b4cd2
PH
11891 {
11892 if (!ada_scan_number (bounds_str, n, &U, &n)
11893 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11894 return raw_type;
11895 }
d2e4a39e 11896 else
4c4b4cd2 11897 {
4c4b4cd2 11898 strcpy (name_buf + prefix_len, "___U");
edb0c9cb 11899 if (!get_int_var_value (name_buf, U))
4c4b4cd2 11900 {
323e0a4a 11901 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11902 U = L;
11903 }
11904 }
14f9c5c9 11905
0c9c3474
SA
11906 type = create_static_range_type (alloc_type_copy (raw_type),
11907 base_type, L, U);
f5a91472
JB
11908 /* create_static_range_type alters the resulting type's length
11909 to match the size of the base_type, which is not what we want.
11910 Set it back to the original range type's length. */
11911 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d2e4a39e 11912 TYPE_NAME (type) = name;
14f9c5c9
AS
11913 return type;
11914 }
11915}
11916
4c4b4cd2
PH
11917/* True iff NAME is the name of a range type. */
11918
14f9c5c9 11919int
d2e4a39e 11920ada_is_range_type_name (const char *name)
14f9c5c9
AS
11921{
11922 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11923}
14f9c5c9 11924\f
d2e4a39e 11925
4c4b4cd2
PH
11926 /* Modular types */
11927
11928/* True iff TYPE is an Ada modular type. */
14f9c5c9 11929
14f9c5c9 11930int
d2e4a39e 11931ada_is_modular_type (struct type *type)
14f9c5c9 11932{
18af8284 11933 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
11934
11935 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 11936 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 11937 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11938}
11939
4c4b4cd2
PH
11940/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11941
61ee279c 11942ULONGEST
0056e4d5 11943ada_modulus (struct type *type)
14f9c5c9 11944{
43bbcdc2 11945 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11946}
d2e4a39e 11947\f
f7f9143b
JB
11948
11949/* Ada exception catchpoint support:
11950 ---------------------------------
11951
11952 We support 3 kinds of exception catchpoints:
11953 . catchpoints on Ada exceptions
11954 . catchpoints on unhandled Ada exceptions
11955 . catchpoints on failed assertions
11956
11957 Exceptions raised during failed assertions, or unhandled exceptions
11958 could perfectly be caught with the general catchpoint on Ada exceptions.
11959 However, we can easily differentiate these two special cases, and having
11960 the option to distinguish these two cases from the rest can be useful
11961 to zero-in on certain situations.
11962
11963 Exception catchpoints are a specialized form of breakpoint,
11964 since they rely on inserting breakpoints inside known routines
11965 of the GNAT runtime. The implementation therefore uses a standard
11966 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11967 of breakpoint_ops.
11968
0259addd
JB
11969 Support in the runtime for exception catchpoints have been changed
11970 a few times already, and these changes affect the implementation
11971 of these catchpoints. In order to be able to support several
11972 variants of the runtime, we use a sniffer that will determine
28010a5d 11973 the runtime variant used by the program being debugged. */
f7f9143b 11974
82eacd52
JB
11975/* Ada's standard exceptions.
11976
11977 The Ada 83 standard also defined Numeric_Error. But there so many
11978 situations where it was unclear from the Ada 83 Reference Manual
11979 (RM) whether Constraint_Error or Numeric_Error should be raised,
11980 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11981 Interpretation saying that anytime the RM says that Numeric_Error
11982 should be raised, the implementation may raise Constraint_Error.
11983 Ada 95 went one step further and pretty much removed Numeric_Error
11984 from the list of standard exceptions (it made it a renaming of
11985 Constraint_Error, to help preserve compatibility when compiling
11986 an Ada83 compiler). As such, we do not include Numeric_Error from
11987 this list of standard exceptions. */
3d0b0fa3 11988
a121b7c1 11989static const char *standard_exc[] = {
3d0b0fa3
JB
11990 "constraint_error",
11991 "program_error",
11992 "storage_error",
11993 "tasking_error"
11994};
11995
0259addd
JB
11996typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11997
11998/* A structure that describes how to support exception catchpoints
11999 for a given executable. */
12000
12001struct exception_support_info
12002{
12003 /* The name of the symbol to break on in order to insert
12004 a catchpoint on exceptions. */
12005 const char *catch_exception_sym;
12006
12007 /* The name of the symbol to break on in order to insert
12008 a catchpoint on unhandled exceptions. */
12009 const char *catch_exception_unhandled_sym;
12010
12011 /* The name of the symbol to break on in order to insert
12012 a catchpoint on failed assertions. */
12013 const char *catch_assert_sym;
12014
9f757bf7
XR
12015 /* The name of the symbol to break on in order to insert
12016 a catchpoint on exception handling. */
12017 const char *catch_handlers_sym;
12018
0259addd
JB
12019 /* Assuming that the inferior just triggered an unhandled exception
12020 catchpoint, this function is responsible for returning the address
12021 in inferior memory where the name of that exception is stored.
12022 Return zero if the address could not be computed. */
12023 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
12024};
12025
12026static CORE_ADDR ada_unhandled_exception_name_addr (void);
12027static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
12028
12029/* The following exception support info structure describes how to
12030 implement exception catchpoints with the latest version of the
12031 Ada runtime (as of 2007-03-06). */
12032
12033static const struct exception_support_info default_exception_support_info =
12034{
12035 "__gnat_debug_raise_exception", /* catch_exception_sym */
12036 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
12037 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 12038 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
12039 ada_unhandled_exception_name_addr
12040};
12041
12042/* The following exception support info structure describes how to
12043 implement exception catchpoints with a slightly older version
12044 of the Ada runtime. */
12045
12046static const struct exception_support_info exception_support_info_fallback =
12047{
12048 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
12049 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
12050 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 12051 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
12052 ada_unhandled_exception_name_addr_from_raise
12053};
12054
f17011e0
JB
12055/* Return nonzero if we can detect the exception support routines
12056 described in EINFO.
12057
12058 This function errors out if an abnormal situation is detected
12059 (for instance, if we find the exception support routines, but
12060 that support is found to be incomplete). */
12061
12062static int
12063ada_has_this_exception_support (const struct exception_support_info *einfo)
12064{
12065 struct symbol *sym;
12066
12067 /* The symbol we're looking up is provided by a unit in the GNAT runtime
12068 that should be compiled with debugging information. As a result, we
12069 expect to find that symbol in the symtabs. */
12070
12071 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
12072 if (sym == NULL)
a6af7abe
JB
12073 {
12074 /* Perhaps we did not find our symbol because the Ada runtime was
12075 compiled without debugging info, or simply stripped of it.
12076 It happens on some GNU/Linux distributions for instance, where
12077 users have to install a separate debug package in order to get
12078 the runtime's debugging info. In that situation, let the user
12079 know why we cannot insert an Ada exception catchpoint.
12080
12081 Note: Just for the purpose of inserting our Ada exception
12082 catchpoint, we could rely purely on the associated minimal symbol.
12083 But we would be operating in degraded mode anyway, since we are
12084 still lacking the debugging info needed later on to extract
12085 the name of the exception being raised (this name is printed in
12086 the catchpoint message, and is also used when trying to catch
12087 a specific exception). We do not handle this case for now. */
3b7344d5 12088 struct bound_minimal_symbol msym
1c8e84b0
JB
12089 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
12090
3b7344d5 12091 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
12092 error (_("Your Ada runtime appears to be missing some debugging "
12093 "information.\nCannot insert Ada exception catchpoint "
12094 "in this configuration."));
12095
12096 return 0;
12097 }
f17011e0
JB
12098
12099 /* Make sure that the symbol we found corresponds to a function. */
12100
12101 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12102 error (_("Symbol \"%s\" is not a function (class = %d)"),
12103 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
12104
12105 return 1;
12106}
12107
0259addd
JB
12108/* Inspect the Ada runtime and determine which exception info structure
12109 should be used to provide support for exception catchpoints.
12110
3eecfa55
JB
12111 This function will always set the per-inferior exception_info,
12112 or raise an error. */
0259addd
JB
12113
12114static void
12115ada_exception_support_info_sniffer (void)
12116{
3eecfa55 12117 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
12118
12119 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 12120 if (data->exception_info != NULL)
0259addd
JB
12121 return;
12122
12123 /* Check the latest (default) exception support info. */
f17011e0 12124 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 12125 {
3eecfa55 12126 data->exception_info = &default_exception_support_info;
0259addd
JB
12127 return;
12128 }
12129
12130 /* Try our fallback exception suport info. */
f17011e0 12131 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 12132 {
3eecfa55 12133 data->exception_info = &exception_support_info_fallback;
0259addd
JB
12134 return;
12135 }
12136
12137 /* Sometimes, it is normal for us to not be able to find the routine
12138 we are looking for. This happens when the program is linked with
12139 the shared version of the GNAT runtime, and the program has not been
12140 started yet. Inform the user of these two possible causes if
12141 applicable. */
12142
ccefe4c4 12143 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
12144 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
12145
12146 /* If the symbol does not exist, then check that the program is
12147 already started, to make sure that shared libraries have been
12148 loaded. If it is not started, this may mean that the symbol is
12149 in a shared library. */
12150
e99b03dc 12151 if (inferior_ptid.pid () == 0)
0259addd
JB
12152 error (_("Unable to insert catchpoint. Try to start the program first."));
12153
12154 /* At this point, we know that we are debugging an Ada program and
12155 that the inferior has been started, but we still are not able to
0963b4bd 12156 find the run-time symbols. That can mean that we are in
0259addd
JB
12157 configurable run time mode, or that a-except as been optimized
12158 out by the linker... In any case, at this point it is not worth
12159 supporting this feature. */
12160
7dda8cff 12161 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
12162}
12163
f7f9143b
JB
12164/* True iff FRAME is very likely to be that of a function that is
12165 part of the runtime system. This is all very heuristic, but is
12166 intended to be used as advice as to what frames are uninteresting
12167 to most users. */
12168
12169static int
12170is_known_support_routine (struct frame_info *frame)
12171{
692465f1 12172 enum language func_lang;
f7f9143b 12173 int i;
f35a17b5 12174 const char *fullname;
f7f9143b 12175
4ed6b5be
JB
12176 /* If this code does not have any debugging information (no symtab),
12177 This cannot be any user code. */
f7f9143b 12178
51abb421 12179 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
12180 if (sal.symtab == NULL)
12181 return 1;
12182
4ed6b5be
JB
12183 /* If there is a symtab, but the associated source file cannot be
12184 located, then assume this is not user code: Selecting a frame
12185 for which we cannot display the code would not be very helpful
12186 for the user. This should also take care of case such as VxWorks
12187 where the kernel has some debugging info provided for a few units. */
f7f9143b 12188
f35a17b5
JK
12189 fullname = symtab_to_fullname (sal.symtab);
12190 if (access (fullname, R_OK) != 0)
f7f9143b
JB
12191 return 1;
12192
4ed6b5be
JB
12193 /* Check the unit filename againt the Ada runtime file naming.
12194 We also check the name of the objfile against the name of some
12195 known system libraries that sometimes come with debugging info
12196 too. */
12197
f7f9143b
JB
12198 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
12199 {
12200 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 12201 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 12202 return 1;
eb822aa6
DE
12203 if (SYMTAB_OBJFILE (sal.symtab) != NULL
12204 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
4ed6b5be 12205 return 1;
f7f9143b
JB
12206 }
12207
4ed6b5be 12208 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 12209
c6dc63a1
TT
12210 gdb::unique_xmalloc_ptr<char> func_name
12211 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
12212 if (func_name == NULL)
12213 return 1;
12214
12215 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
12216 {
12217 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
12218 if (re_exec (func_name.get ()))
12219 return 1;
f7f9143b
JB
12220 }
12221
12222 return 0;
12223}
12224
12225/* Find the first frame that contains debugging information and that is not
12226 part of the Ada run-time, starting from FI and moving upward. */
12227
0ef643c8 12228void
f7f9143b
JB
12229ada_find_printable_frame (struct frame_info *fi)
12230{
12231 for (; fi != NULL; fi = get_prev_frame (fi))
12232 {
12233 if (!is_known_support_routine (fi))
12234 {
12235 select_frame (fi);
12236 break;
12237 }
12238 }
12239
12240}
12241
12242/* Assuming that the inferior just triggered an unhandled exception
12243 catchpoint, return the address in inferior memory where the name
12244 of the exception is stored.
12245
12246 Return zero if the address could not be computed. */
12247
12248static CORE_ADDR
12249ada_unhandled_exception_name_addr (void)
0259addd
JB
12250{
12251 return parse_and_eval_address ("e.full_name");
12252}
12253
12254/* Same as ada_unhandled_exception_name_addr, except that this function
12255 should be used when the inferior uses an older version of the runtime,
12256 where the exception name needs to be extracted from a specific frame
12257 several frames up in the callstack. */
12258
12259static CORE_ADDR
12260ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
12261{
12262 int frame_level;
12263 struct frame_info *fi;
3eecfa55 12264 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
12265
12266 /* To determine the name of this exception, we need to select
12267 the frame corresponding to RAISE_SYM_NAME. This frame is
12268 at least 3 levels up, so we simply skip the first 3 frames
12269 without checking the name of their associated function. */
12270 fi = get_current_frame ();
12271 for (frame_level = 0; frame_level < 3; frame_level += 1)
12272 if (fi != NULL)
12273 fi = get_prev_frame (fi);
12274
12275 while (fi != NULL)
12276 {
692465f1
JB
12277 enum language func_lang;
12278
c6dc63a1
TT
12279 gdb::unique_xmalloc_ptr<char> func_name
12280 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
12281 if (func_name != NULL)
12282 {
c6dc63a1 12283 if (strcmp (func_name.get (),
55b87a52
KS
12284 data->exception_info->catch_exception_sym) == 0)
12285 break; /* We found the frame we were looking for... */
55b87a52 12286 }
fb44b1a7 12287 fi = get_prev_frame (fi);
f7f9143b
JB
12288 }
12289
12290 if (fi == NULL)
12291 return 0;
12292
12293 select_frame (fi);
12294 return parse_and_eval_address ("id.full_name");
12295}
12296
12297/* Assuming the inferior just triggered an Ada exception catchpoint
12298 (of any type), return the address in inferior memory where the name
12299 of the exception is stored, if applicable.
12300
45db7c09
PA
12301 Assumes the selected frame is the current frame.
12302
f7f9143b
JB
12303 Return zero if the address could not be computed, or if not relevant. */
12304
12305static CORE_ADDR
761269c8 12306ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12307 struct breakpoint *b)
12308{
3eecfa55
JB
12309 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12310
f7f9143b
JB
12311 switch (ex)
12312 {
761269c8 12313 case ada_catch_exception:
f7f9143b
JB
12314 return (parse_and_eval_address ("e.full_name"));
12315 break;
12316
761269c8 12317 case ada_catch_exception_unhandled:
3eecfa55 12318 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b 12319 break;
9f757bf7
XR
12320
12321 case ada_catch_handlers:
12322 return 0; /* The runtimes does not provide access to the exception
12323 name. */
12324 break;
12325
761269c8 12326 case ada_catch_assert:
f7f9143b
JB
12327 return 0; /* Exception name is not relevant in this case. */
12328 break;
12329
12330 default:
12331 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12332 break;
12333 }
12334
12335 return 0; /* Should never be reached. */
12336}
12337
e547c119
JB
12338/* Assuming the inferior is stopped at an exception catchpoint,
12339 return the message which was associated to the exception, if
12340 available. Return NULL if the message could not be retrieved.
12341
e547c119
JB
12342 Note: The exception message can be associated to an exception
12343 either through the use of the Raise_Exception function, or
12344 more simply (Ada 2005 and later), via:
12345
12346 raise Exception_Name with "exception message";
12347
12348 */
12349
6f46ac85 12350static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12351ada_exception_message_1 (void)
12352{
12353 struct value *e_msg_val;
e547c119 12354 int e_msg_len;
e547c119
JB
12355
12356 /* For runtimes that support this feature, the exception message
12357 is passed as an unbounded string argument called "message". */
12358 e_msg_val = parse_and_eval ("message");
12359 if (e_msg_val == NULL)
12360 return NULL; /* Exception message not supported. */
12361
12362 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
12363 gdb_assert (e_msg_val != NULL);
12364 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
12365
12366 /* If the message string is empty, then treat it as if there was
12367 no exception message. */
12368 if (e_msg_len <= 0)
12369 return NULL;
12370
6f46ac85
TT
12371 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
12372 read_memory_string (value_address (e_msg_val), e_msg.get (), e_msg_len + 1);
12373 e_msg.get ()[e_msg_len] = '\0';
e547c119 12374
e547c119
JB
12375 return e_msg;
12376}
12377
12378/* Same as ada_exception_message_1, except that all exceptions are
12379 contained here (returning NULL instead). */
12380
6f46ac85 12381static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12382ada_exception_message (void)
12383{
6f46ac85 12384 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119 12385
a70b8144 12386 try
e547c119
JB
12387 {
12388 e_msg = ada_exception_message_1 ();
12389 }
230d2906 12390 catch (const gdb_exception_error &e)
e547c119 12391 {
6f46ac85 12392 e_msg.reset (nullptr);
e547c119 12393 }
e547c119
JB
12394
12395 return e_msg;
12396}
12397
f7f9143b
JB
12398/* Same as ada_exception_name_addr_1, except that it intercepts and contains
12399 any error that ada_exception_name_addr_1 might cause to be thrown.
12400 When an error is intercepted, a warning with the error message is printed,
12401 and zero is returned. */
12402
12403static CORE_ADDR
761269c8 12404ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12405 struct breakpoint *b)
12406{
f7f9143b
JB
12407 CORE_ADDR result = 0;
12408
a70b8144 12409 try
f7f9143b
JB
12410 {
12411 result = ada_exception_name_addr_1 (ex, b);
12412 }
12413
230d2906 12414 catch (const gdb_exception_error &e)
f7f9143b 12415 {
3d6e9d23 12416 warning (_("failed to get exception name: %s"), e.what ());
f7f9143b
JB
12417 return 0;
12418 }
12419
12420 return result;
12421}
12422
cb7de75e 12423static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
12424 (const char *excep_string,
12425 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
12426
12427/* Ada catchpoints.
12428
12429 In the case of catchpoints on Ada exceptions, the catchpoint will
12430 stop the target on every exception the program throws. When a user
12431 specifies the name of a specific exception, we translate this
12432 request into a condition expression (in text form), and then parse
12433 it into an expression stored in each of the catchpoint's locations.
12434 We then use this condition to check whether the exception that was
12435 raised is the one the user is interested in. If not, then the
12436 target is resumed again. We store the name of the requested
12437 exception, in order to be able to re-set the condition expression
12438 when symbols change. */
12439
12440/* An instance of this type is used to represent an Ada catchpoint
5625a286 12441 breakpoint location. */
28010a5d 12442
5625a286 12443class ada_catchpoint_location : public bp_location
28010a5d 12444{
5625a286 12445public:
5f486660
TT
12446 ada_catchpoint_location (breakpoint *owner)
12447 : bp_location (owner)
5625a286 12448 {}
28010a5d
PA
12449
12450 /* The condition that checks whether the exception that was raised
12451 is the specific exception the user specified on catchpoint
12452 creation. */
4d01a485 12453 expression_up excep_cond_expr;
28010a5d
PA
12454};
12455
c1fc2657 12456/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 12457
c1fc2657 12458struct ada_catchpoint : public breakpoint
28010a5d 12459{
28010a5d 12460 /* The name of the specific exception the user specified. */
bc18fbb5 12461 std::string excep_string;
28010a5d
PA
12462};
12463
12464/* Parse the exception condition string in the context of each of the
12465 catchpoint's locations, and store them for later evaluation. */
12466
12467static void
9f757bf7
XR
12468create_excep_cond_exprs (struct ada_catchpoint *c,
12469 enum ada_exception_catchpoint_kind ex)
28010a5d 12470{
28010a5d 12471 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 12472 if (c->excep_string.empty ())
28010a5d
PA
12473 return;
12474
12475 /* Same if there are no locations... */
c1fc2657 12476 if (c->loc == NULL)
28010a5d
PA
12477 return;
12478
2ff0a947
TT
12479 /* We have to compute the expression once for each program space,
12480 because the expression may hold the addresses of multiple symbols
12481 in some cases. */
12482 std::multimap<program_space *, struct bp_location *> loc_map;
12483 for (struct bp_location *bl = c->loc; bl != NULL; bl = bl->next)
12484 loc_map.emplace (bl->pspace, bl);
28010a5d 12485
2ff0a947
TT
12486 scoped_restore_current_program_space save_pspace;
12487
12488 std::string cond_string;
12489 program_space *last_ps = nullptr;
12490 for (auto iter : loc_map)
28010a5d
PA
12491 {
12492 struct ada_catchpoint_location *ada_loc
2ff0a947
TT
12493 = (struct ada_catchpoint_location *) iter.second;
12494
12495 if (ada_loc->pspace != last_ps)
12496 {
12497 last_ps = ada_loc->pspace;
12498 set_current_program_space (last_ps);
12499
12500 /* Compute the condition expression in text form, from the
12501 specific expection we want to catch. */
12502 cond_string
12503 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (),
12504 ex);
12505 }
12506
4d01a485 12507 expression_up exp;
28010a5d 12508
2ff0a947 12509 if (!ada_loc->shlib_disabled)
28010a5d 12510 {
bbc13ae3 12511 const char *s;
28010a5d 12512
cb7de75e 12513 s = cond_string.c_str ();
a70b8144 12514 try
28010a5d 12515 {
2ff0a947
TT
12516 exp = parse_exp_1 (&s, ada_loc->address,
12517 block_for_pc (ada_loc->address),
036e657b 12518 0);
28010a5d 12519 }
230d2906 12520 catch (const gdb_exception_error &e)
849f2b52
JB
12521 {
12522 warning (_("failed to reevaluate internal exception condition "
12523 "for catchpoint %d: %s"),
3d6e9d23 12524 c->number, e.what ());
849f2b52 12525 }
28010a5d
PA
12526 }
12527
b22e99fd 12528 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 12529 }
28010a5d
PA
12530}
12531
28010a5d
PA
12532/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12533 structure for all exception catchpoint kinds. */
12534
12535static struct bp_location *
761269c8 12536allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
12537 struct breakpoint *self)
12538{
5f486660 12539 return new ada_catchpoint_location (self);
28010a5d
PA
12540}
12541
12542/* Implement the RE_SET method in the breakpoint_ops structure for all
12543 exception catchpoint kinds. */
12544
12545static void
761269c8 12546re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
12547{
12548 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12549
12550 /* Call the base class's method. This updates the catchpoint's
12551 locations. */
2060206e 12552 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12553
12554 /* Reparse the exception conditional expressions. One for each
12555 location. */
9f757bf7 12556 create_excep_cond_exprs (c, ex);
28010a5d
PA
12557}
12558
12559/* Returns true if we should stop for this breakpoint hit. If the
12560 user specified a specific exception, we only want to cause a stop
12561 if the program thrown that exception. */
12562
12563static int
12564should_stop_exception (const struct bp_location *bl)
12565{
12566 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12567 const struct ada_catchpoint_location *ada_loc
12568 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12569 int stop;
12570
12571 /* With no specific exception, should always stop. */
bc18fbb5 12572 if (c->excep_string.empty ())
28010a5d
PA
12573 return 1;
12574
12575 if (ada_loc->excep_cond_expr == NULL)
12576 {
12577 /* We will have a NULL expression if back when we were creating
12578 the expressions, this location's had failed to parse. */
12579 return 1;
12580 }
12581
12582 stop = 1;
a70b8144 12583 try
28010a5d
PA
12584 {
12585 struct value *mark;
12586
12587 mark = value_mark ();
4d01a485 12588 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12589 value_free_to_mark (mark);
12590 }
230d2906 12591 catch (const gdb_exception &ex)
492d29ea
PA
12592 {
12593 exception_fprintf (gdb_stderr, ex,
12594 _("Error in testing exception condition:\n"));
12595 }
492d29ea 12596
28010a5d
PA
12597 return stop;
12598}
12599
12600/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12601 for all exception catchpoint kinds. */
12602
12603static void
761269c8 12604check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
12605{
12606 bs->stop = should_stop_exception (bs->bp_location_at);
12607}
12608
f7f9143b
JB
12609/* Implement the PRINT_IT method in the breakpoint_ops structure
12610 for all exception catchpoint kinds. */
12611
12612static enum print_stop_action
761269c8 12613print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 12614{
79a45e25 12615 struct ui_out *uiout = current_uiout;
348d480f
PA
12616 struct breakpoint *b = bs->breakpoint_at;
12617
956a9fb9 12618 annotate_catchpoint (b->number);
f7f9143b 12619
112e8700 12620 if (uiout->is_mi_like_p ())
f7f9143b 12621 {
112e8700 12622 uiout->field_string ("reason",
956a9fb9 12623 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12624 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12625 }
12626
112e8700
SM
12627 uiout->text (b->disposition == disp_del
12628 ? "\nTemporary catchpoint " : "\nCatchpoint ");
12629 uiout->field_int ("bkptno", b->number);
12630 uiout->text (", ");
f7f9143b 12631
45db7c09
PA
12632 /* ada_exception_name_addr relies on the selected frame being the
12633 current frame. Need to do this here because this function may be
12634 called more than once when printing a stop, and below, we'll
12635 select the first frame past the Ada run-time (see
12636 ada_find_printable_frame). */
12637 select_frame (get_current_frame ());
12638
f7f9143b
JB
12639 switch (ex)
12640 {
761269c8
JB
12641 case ada_catch_exception:
12642 case ada_catch_exception_unhandled:
9f757bf7 12643 case ada_catch_handlers:
956a9fb9
JB
12644 {
12645 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12646 char exception_name[256];
12647
12648 if (addr != 0)
12649 {
c714b426
PA
12650 read_memory (addr, (gdb_byte *) exception_name,
12651 sizeof (exception_name) - 1);
956a9fb9
JB
12652 exception_name [sizeof (exception_name) - 1] = '\0';
12653 }
12654 else
12655 {
12656 /* For some reason, we were unable to read the exception
12657 name. This could happen if the Runtime was compiled
12658 without debugging info, for instance. In that case,
12659 just replace the exception name by the generic string
12660 "exception" - it will read as "an exception" in the
12661 notification we are about to print. */
967cff16 12662 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12663 }
12664 /* In the case of unhandled exception breakpoints, we print
12665 the exception name as "unhandled EXCEPTION_NAME", to make
12666 it clearer to the user which kind of catchpoint just got
12667 hit. We used ui_out_text to make sure that this extra
12668 info does not pollute the exception name in the MI case. */
761269c8 12669 if (ex == ada_catch_exception_unhandled)
112e8700
SM
12670 uiout->text ("unhandled ");
12671 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12672 }
12673 break;
761269c8 12674 case ada_catch_assert:
956a9fb9
JB
12675 /* In this case, the name of the exception is not really
12676 important. Just print "failed assertion" to make it clearer
12677 that his program just hit an assertion-failure catchpoint.
12678 We used ui_out_text because this info does not belong in
12679 the MI output. */
112e8700 12680 uiout->text ("failed assertion");
956a9fb9 12681 break;
f7f9143b 12682 }
e547c119 12683
6f46ac85 12684 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12685 if (exception_message != NULL)
12686 {
e547c119 12687 uiout->text (" (");
6f46ac85 12688 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12689 uiout->text (")");
e547c119
JB
12690 }
12691
112e8700 12692 uiout->text (" at ");
956a9fb9 12693 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12694
12695 return PRINT_SRC_AND_LOC;
12696}
12697
12698/* Implement the PRINT_ONE method in the breakpoint_ops structure
12699 for all exception catchpoint kinds. */
12700
12701static void
761269c8 12702print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 12703 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12704{
79a45e25 12705 struct ui_out *uiout = current_uiout;
28010a5d 12706 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12707 struct value_print_options opts;
12708
12709 get_user_print_options (&opts);
12710 if (opts.addressprint)
f7f9143b
JB
12711 {
12712 annotate_field (4);
112e8700 12713 uiout->field_core_addr ("addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
12714 }
12715
12716 annotate_field (5);
a6d9a66e 12717 *last_loc = b->loc;
f7f9143b
JB
12718 switch (ex)
12719 {
761269c8 12720 case ada_catch_exception:
bc18fbb5 12721 if (!c->excep_string.empty ())
f7f9143b 12722 {
bc18fbb5
TT
12723 std::string msg = string_printf (_("`%s' Ada exception"),
12724 c->excep_string.c_str ());
28010a5d 12725
112e8700 12726 uiout->field_string ("what", msg);
f7f9143b
JB
12727 }
12728 else
112e8700 12729 uiout->field_string ("what", "all Ada exceptions");
f7f9143b
JB
12730
12731 break;
12732
761269c8 12733 case ada_catch_exception_unhandled:
112e8700 12734 uiout->field_string ("what", "unhandled Ada exceptions");
f7f9143b
JB
12735 break;
12736
9f757bf7 12737 case ada_catch_handlers:
bc18fbb5 12738 if (!c->excep_string.empty ())
9f757bf7
XR
12739 {
12740 uiout->field_fmt ("what",
12741 _("`%s' Ada exception handlers"),
bc18fbb5 12742 c->excep_string.c_str ());
9f757bf7
XR
12743 }
12744 else
12745 uiout->field_string ("what", "all Ada exceptions handlers");
12746 break;
12747
761269c8 12748 case ada_catch_assert:
112e8700 12749 uiout->field_string ("what", "failed Ada assertions");
f7f9143b
JB
12750 break;
12751
12752 default:
12753 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12754 break;
12755 }
12756}
12757
12758/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12759 for all exception catchpoint kinds. */
12760
12761static void
761269c8 12762print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12763 struct breakpoint *b)
12764{
28010a5d 12765 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12766 struct ui_out *uiout = current_uiout;
28010a5d 12767
112e8700 12768 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
00eb2c4a 12769 : _("Catchpoint "));
112e8700
SM
12770 uiout->field_int ("bkptno", b->number);
12771 uiout->text (": ");
00eb2c4a 12772
f7f9143b
JB
12773 switch (ex)
12774 {
761269c8 12775 case ada_catch_exception:
bc18fbb5 12776 if (!c->excep_string.empty ())
00eb2c4a 12777 {
862d101a 12778 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12779 c->excep_string.c_str ());
862d101a 12780 uiout->text (info.c_str ());
00eb2c4a 12781 }
f7f9143b 12782 else
112e8700 12783 uiout->text (_("all Ada exceptions"));
f7f9143b
JB
12784 break;
12785
761269c8 12786 case ada_catch_exception_unhandled:
112e8700 12787 uiout->text (_("unhandled Ada exceptions"));
f7f9143b 12788 break;
9f757bf7
XR
12789
12790 case ada_catch_handlers:
bc18fbb5 12791 if (!c->excep_string.empty ())
9f757bf7
XR
12792 {
12793 std::string info
12794 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12795 c->excep_string.c_str ());
9f757bf7
XR
12796 uiout->text (info.c_str ());
12797 }
12798 else
12799 uiout->text (_("all Ada exceptions handlers"));
12800 break;
12801
761269c8 12802 case ada_catch_assert:
112e8700 12803 uiout->text (_("failed Ada assertions"));
f7f9143b
JB
12804 break;
12805
12806 default:
12807 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12808 break;
12809 }
12810}
12811
6149aea9
PA
12812/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12813 for all exception catchpoint kinds. */
12814
12815static void
761269c8 12816print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
12817 struct breakpoint *b, struct ui_file *fp)
12818{
28010a5d
PA
12819 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12820
6149aea9
PA
12821 switch (ex)
12822 {
761269c8 12823 case ada_catch_exception:
6149aea9 12824 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12825 if (!c->excep_string.empty ())
12826 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12827 break;
12828
761269c8 12829 case ada_catch_exception_unhandled:
78076abc 12830 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12831 break;
12832
9f757bf7
XR
12833 case ada_catch_handlers:
12834 fprintf_filtered (fp, "catch handlers");
12835 break;
12836
761269c8 12837 case ada_catch_assert:
6149aea9
PA
12838 fprintf_filtered (fp, "catch assert");
12839 break;
12840
12841 default:
12842 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12843 }
d9b3f62e 12844 print_recreate_thread (b, fp);
6149aea9
PA
12845}
12846
f7f9143b
JB
12847/* Virtual table for "catch exception" breakpoints. */
12848
28010a5d
PA
12849static struct bp_location *
12850allocate_location_catch_exception (struct breakpoint *self)
12851{
761269c8 12852 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
12853}
12854
12855static void
12856re_set_catch_exception (struct breakpoint *b)
12857{
761269c8 12858 re_set_exception (ada_catch_exception, b);
28010a5d
PA
12859}
12860
12861static void
12862check_status_catch_exception (bpstat bs)
12863{
761269c8 12864 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
12865}
12866
f7f9143b 12867static enum print_stop_action
348d480f 12868print_it_catch_exception (bpstat bs)
f7f9143b 12869{
761269c8 12870 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
12871}
12872
12873static void
a6d9a66e 12874print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12875{
761269c8 12876 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
12877}
12878
12879static void
12880print_mention_catch_exception (struct breakpoint *b)
12881{
761269c8 12882 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
12883}
12884
6149aea9
PA
12885static void
12886print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12887{
761269c8 12888 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
12889}
12890
2060206e 12891static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
12892
12893/* Virtual table for "catch exception unhandled" breakpoints. */
12894
28010a5d
PA
12895static struct bp_location *
12896allocate_location_catch_exception_unhandled (struct breakpoint *self)
12897{
761269c8 12898 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
12899}
12900
12901static void
12902re_set_catch_exception_unhandled (struct breakpoint *b)
12903{
761269c8 12904 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12905}
12906
12907static void
12908check_status_catch_exception_unhandled (bpstat bs)
12909{
761269c8 12910 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
12911}
12912
f7f9143b 12913static enum print_stop_action
348d480f 12914print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 12915{
761269c8 12916 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
12917}
12918
12919static void
a6d9a66e
UW
12920print_one_catch_exception_unhandled (struct breakpoint *b,
12921 struct bp_location **last_loc)
f7f9143b 12922{
761269c8 12923 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
12924}
12925
12926static void
12927print_mention_catch_exception_unhandled (struct breakpoint *b)
12928{
761269c8 12929 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
12930}
12931
6149aea9
PA
12932static void
12933print_recreate_catch_exception_unhandled (struct breakpoint *b,
12934 struct ui_file *fp)
12935{
761269c8 12936 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
12937}
12938
2060206e 12939static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
12940
12941/* Virtual table for "catch assert" breakpoints. */
12942
28010a5d
PA
12943static struct bp_location *
12944allocate_location_catch_assert (struct breakpoint *self)
12945{
761269c8 12946 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
12947}
12948
12949static void
12950re_set_catch_assert (struct breakpoint *b)
12951{
761269c8 12952 re_set_exception (ada_catch_assert, b);
28010a5d
PA
12953}
12954
12955static void
12956check_status_catch_assert (bpstat bs)
12957{
761269c8 12958 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
12959}
12960
f7f9143b 12961static enum print_stop_action
348d480f 12962print_it_catch_assert (bpstat bs)
f7f9143b 12963{
761269c8 12964 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
12965}
12966
12967static void
a6d9a66e 12968print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12969{
761269c8 12970 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
12971}
12972
12973static void
12974print_mention_catch_assert (struct breakpoint *b)
12975{
761269c8 12976 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
12977}
12978
6149aea9
PA
12979static void
12980print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12981{
761269c8 12982 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
12983}
12984
2060206e 12985static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 12986
9f757bf7
XR
12987/* Virtual table for "catch handlers" breakpoints. */
12988
12989static struct bp_location *
12990allocate_location_catch_handlers (struct breakpoint *self)
12991{
12992 return allocate_location_exception (ada_catch_handlers, self);
12993}
12994
12995static void
12996re_set_catch_handlers (struct breakpoint *b)
12997{
12998 re_set_exception (ada_catch_handlers, b);
12999}
13000
13001static void
13002check_status_catch_handlers (bpstat bs)
13003{
13004 check_status_exception (ada_catch_handlers, bs);
13005}
13006
13007static enum print_stop_action
13008print_it_catch_handlers (bpstat bs)
13009{
13010 return print_it_exception (ada_catch_handlers, bs);
13011}
13012
13013static void
13014print_one_catch_handlers (struct breakpoint *b,
13015 struct bp_location **last_loc)
13016{
13017 print_one_exception (ada_catch_handlers, b, last_loc);
13018}
13019
13020static void
13021print_mention_catch_handlers (struct breakpoint *b)
13022{
13023 print_mention_exception (ada_catch_handlers, b);
13024}
13025
13026static void
13027print_recreate_catch_handlers (struct breakpoint *b,
13028 struct ui_file *fp)
13029{
13030 print_recreate_exception (ada_catch_handlers, b, fp);
13031}
13032
13033static struct breakpoint_ops catch_handlers_breakpoint_ops;
13034
f7f9143b
JB
13035/* Split the arguments specified in a "catch exception" command.
13036 Set EX to the appropriate catchpoint type.
28010a5d 13037 Set EXCEP_STRING to the name of the specific exception if
5845583d 13038 specified by the user.
9f757bf7
XR
13039 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
13040 "catch handlers" command. False otherwise.
5845583d
JB
13041 If a condition is found at the end of the arguments, the condition
13042 expression is stored in COND_STRING (memory must be deallocated
13043 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
13044
13045static void
a121b7c1 13046catch_ada_exception_command_split (const char *args,
9f757bf7 13047 bool is_catch_handlers_cmd,
761269c8 13048 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
13049 std::string *excep_string,
13050 std::string *cond_string)
f7f9143b 13051{
bc18fbb5 13052 std::string exception_name;
f7f9143b 13053
bc18fbb5
TT
13054 exception_name = extract_arg (&args);
13055 if (exception_name == "if")
5845583d
JB
13056 {
13057 /* This is not an exception name; this is the start of a condition
13058 expression for a catchpoint on all exceptions. So, "un-get"
13059 this token, and set exception_name to NULL. */
bc18fbb5 13060 exception_name.clear ();
5845583d
JB
13061 args -= 2;
13062 }
f7f9143b 13063
5845583d 13064 /* Check to see if we have a condition. */
f7f9143b 13065
f1735a53 13066 args = skip_spaces (args);
61012eef 13067 if (startswith (args, "if")
5845583d
JB
13068 && (isspace (args[2]) || args[2] == '\0'))
13069 {
13070 args += 2;
f1735a53 13071 args = skip_spaces (args);
5845583d
JB
13072
13073 if (args[0] == '\0')
13074 error (_("Condition missing after `if' keyword"));
bc18fbb5 13075 *cond_string = args;
5845583d
JB
13076
13077 args += strlen (args);
13078 }
13079
13080 /* Check that we do not have any more arguments. Anything else
13081 is unexpected. */
f7f9143b
JB
13082
13083 if (args[0] != '\0')
13084 error (_("Junk at end of expression"));
13085
9f757bf7
XR
13086 if (is_catch_handlers_cmd)
13087 {
13088 /* Catch handling of exceptions. */
13089 *ex = ada_catch_handlers;
13090 *excep_string = exception_name;
13091 }
bc18fbb5 13092 else if (exception_name.empty ())
f7f9143b
JB
13093 {
13094 /* Catch all exceptions. */
761269c8 13095 *ex = ada_catch_exception;
bc18fbb5 13096 excep_string->clear ();
f7f9143b 13097 }
bc18fbb5 13098 else if (exception_name == "unhandled")
f7f9143b
JB
13099 {
13100 /* Catch unhandled exceptions. */
761269c8 13101 *ex = ada_catch_exception_unhandled;
bc18fbb5 13102 excep_string->clear ();
f7f9143b
JB
13103 }
13104 else
13105 {
13106 /* Catch a specific exception. */
761269c8 13107 *ex = ada_catch_exception;
28010a5d 13108 *excep_string = exception_name;
f7f9143b
JB
13109 }
13110}
13111
13112/* Return the name of the symbol on which we should break in order to
13113 implement a catchpoint of the EX kind. */
13114
13115static const char *
761269c8 13116ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 13117{
3eecfa55
JB
13118 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
13119
13120 gdb_assert (data->exception_info != NULL);
0259addd 13121
f7f9143b
JB
13122 switch (ex)
13123 {
761269c8 13124 case ada_catch_exception:
3eecfa55 13125 return (data->exception_info->catch_exception_sym);
f7f9143b 13126 break;
761269c8 13127 case ada_catch_exception_unhandled:
3eecfa55 13128 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 13129 break;
761269c8 13130 case ada_catch_assert:
3eecfa55 13131 return (data->exception_info->catch_assert_sym);
f7f9143b 13132 break;
9f757bf7
XR
13133 case ada_catch_handlers:
13134 return (data->exception_info->catch_handlers_sym);
13135 break;
f7f9143b
JB
13136 default:
13137 internal_error (__FILE__, __LINE__,
13138 _("unexpected catchpoint kind (%d)"), ex);
13139 }
13140}
13141
13142/* Return the breakpoint ops "virtual table" used for catchpoints
13143 of the EX kind. */
13144
c0a91b2b 13145static const struct breakpoint_ops *
761269c8 13146ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
13147{
13148 switch (ex)
13149 {
761269c8 13150 case ada_catch_exception:
f7f9143b
JB
13151 return (&catch_exception_breakpoint_ops);
13152 break;
761269c8 13153 case ada_catch_exception_unhandled:
f7f9143b
JB
13154 return (&catch_exception_unhandled_breakpoint_ops);
13155 break;
761269c8 13156 case ada_catch_assert:
f7f9143b
JB
13157 return (&catch_assert_breakpoint_ops);
13158 break;
9f757bf7
XR
13159 case ada_catch_handlers:
13160 return (&catch_handlers_breakpoint_ops);
13161 break;
f7f9143b
JB
13162 default:
13163 internal_error (__FILE__, __LINE__,
13164 _("unexpected catchpoint kind (%d)"), ex);
13165 }
13166}
13167
13168/* Return the condition that will be used to match the current exception
13169 being raised with the exception that the user wants to catch. This
13170 assumes that this condition is used when the inferior just triggered
13171 an exception catchpoint.
cb7de75e 13172 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 13173
cb7de75e 13174static std::string
9f757bf7
XR
13175ada_exception_catchpoint_cond_string (const char *excep_string,
13176 enum ada_exception_catchpoint_kind ex)
f7f9143b 13177{
3d0b0fa3 13178 int i;
cb7de75e 13179 std::string result;
2ff0a947 13180 const char *name;
9f757bf7
XR
13181
13182 if (ex == ada_catch_handlers)
13183 {
13184 /* For exception handlers catchpoints, the condition string does
13185 not use the same parameter as for the other exceptions. */
2ff0a947
TT
13186 name = ("long_integer (GNAT_GCC_exception_Access"
13187 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
13188 }
13189 else
2ff0a947 13190 name = "long_integer (e)";
3d0b0fa3 13191
0963b4bd 13192 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 13193 runtime units that have been compiled without debugging info; if
28010a5d 13194 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
13195 exception (e.g. "constraint_error") then, during the evaluation
13196 of the condition expression, the symbol lookup on this name would
0963b4bd 13197 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
13198 may then be set only on user-defined exceptions which have the
13199 same not-fully-qualified name (e.g. my_package.constraint_error).
13200
13201 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 13202 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
13203 exception constraint_error" is rewritten into "catch exception
13204 standard.constraint_error".
13205
13206 If an exception named contraint_error is defined in another package of
13207 the inferior program, then the only way to specify this exception as a
13208 breakpoint condition is to use its fully-qualified named:
2ff0a947
TT
13209 e.g. my_package.constraint_error.
13210
13211 Furthermore, in some situations a standard exception's symbol may
13212 be present in more than one objfile, because the compiler may
13213 choose to emit copy relocations for them. So, we have to compare
13214 against all the possible addresses. */
3d0b0fa3 13215
2ff0a947
TT
13216 /* Storage for a rewritten symbol name. */
13217 std::string std_name;
3d0b0fa3
JB
13218 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
13219 {
28010a5d 13220 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 13221 {
2ff0a947
TT
13222 std_name = std::string ("standard.") + excep_string;
13223 excep_string = std_name.c_str ();
9f757bf7 13224 break;
3d0b0fa3
JB
13225 }
13226 }
9f757bf7 13227
2ff0a947
TT
13228 excep_string = ada_encode (excep_string);
13229 std::vector<struct bound_minimal_symbol> symbols
13230 = ada_lookup_simple_minsyms (excep_string);
13231 for (const struct bound_minimal_symbol &msym : symbols)
13232 {
13233 if (!result.empty ())
13234 result += " or ";
13235 string_appendf (result, "%s = %s", name,
13236 pulongest (BMSYMBOL_VALUE_ADDRESS (msym)));
13237 }
9f757bf7 13238
9f757bf7 13239 return result;
f7f9143b
JB
13240}
13241
13242/* Return the symtab_and_line that should be used to insert an exception
13243 catchpoint of the TYPE kind.
13244
28010a5d
PA
13245 ADDR_STRING returns the name of the function where the real
13246 breakpoint that implements the catchpoints is set, depending on the
13247 type of catchpoint we need to create. */
f7f9143b
JB
13248
13249static struct symtab_and_line
bc18fbb5 13250ada_exception_sal (enum ada_exception_catchpoint_kind ex,
cc12f4a8 13251 std::string *addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
13252{
13253 const char *sym_name;
13254 struct symbol *sym;
f7f9143b 13255
0259addd
JB
13256 /* First, find out which exception support info to use. */
13257 ada_exception_support_info_sniffer ();
13258
13259 /* Then lookup the function on which we will break in order to catch
f7f9143b 13260 the Ada exceptions requested by the user. */
f7f9143b
JB
13261 sym_name = ada_exception_sym_name (ex);
13262 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
13263
57aff202
JB
13264 if (sym == NULL)
13265 error (_("Catchpoint symbol not found: %s"), sym_name);
13266
13267 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
13268 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
13269
13270 /* Set ADDR_STRING. */
cc12f4a8 13271 *addr_string = sym_name;
f7f9143b 13272
f7f9143b 13273 /* Set OPS. */
4b9eee8c 13274 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 13275
f17011e0 13276 return find_function_start_sal (sym, 1);
f7f9143b
JB
13277}
13278
b4a5b78b 13279/* Create an Ada exception catchpoint.
f7f9143b 13280
b4a5b78b 13281 EX_KIND is the kind of exception catchpoint to be created.
5845583d 13282
bc18fbb5 13283 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 13284 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 13285 of the exception to which this catchpoint applies.
2df4d1d5 13286
bc18fbb5 13287 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 13288
b4a5b78b
JB
13289 TEMPFLAG, if nonzero, means that the underlying breakpoint
13290 should be temporary.
28010a5d 13291
b4a5b78b 13292 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 13293
349774ef 13294void
28010a5d 13295create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 13296 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 13297 const std::string &excep_string,
56ecd069 13298 const std::string &cond_string,
28010a5d 13299 int tempflag,
349774ef 13300 int disabled,
28010a5d
PA
13301 int from_tty)
13302{
cc12f4a8 13303 std::string addr_string;
b4a5b78b 13304 const struct breakpoint_ops *ops = NULL;
bc18fbb5 13305 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 13306
b270e6f9 13307 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint ());
cc12f4a8 13308 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
349774ef 13309 ops, tempflag, disabled, from_tty);
28010a5d 13310 c->excep_string = excep_string;
9f757bf7 13311 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069
XR
13312 if (!cond_string.empty ())
13313 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty);
b270e6f9 13314 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
13315}
13316
9ac4176b
PA
13317/* Implement the "catch exception" command. */
13318
13319static void
eb4c3f4a 13320catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
13321 struct cmd_list_element *command)
13322{
a121b7c1 13323 const char *arg = arg_entry;
9ac4176b
PA
13324 struct gdbarch *gdbarch = get_current_arch ();
13325 int tempflag;
761269c8 13326 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 13327 std::string excep_string;
56ecd069 13328 std::string cond_string;
9ac4176b
PA
13329
13330 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13331
13332 if (!arg)
13333 arg = "";
9f757bf7 13334 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 13335 &cond_string);
9f757bf7
XR
13336 create_ada_exception_catchpoint (gdbarch, ex_kind,
13337 excep_string, cond_string,
13338 tempflag, 1 /* enabled */,
13339 from_tty);
13340}
13341
13342/* Implement the "catch handlers" command. */
13343
13344static void
13345catch_ada_handlers_command (const char *arg_entry, int from_tty,
13346 struct cmd_list_element *command)
13347{
13348 const char *arg = arg_entry;
13349 struct gdbarch *gdbarch = get_current_arch ();
13350 int tempflag;
13351 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 13352 std::string excep_string;
56ecd069 13353 std::string cond_string;
9f757bf7
XR
13354
13355 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13356
13357 if (!arg)
13358 arg = "";
13359 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 13360 &cond_string);
b4a5b78b
JB
13361 create_ada_exception_catchpoint (gdbarch, ex_kind,
13362 excep_string, cond_string,
349774ef
JB
13363 tempflag, 1 /* enabled */,
13364 from_tty);
9ac4176b
PA
13365}
13366
b4a5b78b 13367/* Split the arguments specified in a "catch assert" command.
5845583d 13368
b4a5b78b
JB
13369 ARGS contains the command's arguments (or the empty string if
13370 no arguments were passed).
5845583d
JB
13371
13372 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 13373 (the memory needs to be deallocated after use). */
5845583d 13374
b4a5b78b 13375static void
56ecd069 13376catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 13377{
f1735a53 13378 args = skip_spaces (args);
f7f9143b 13379
5845583d 13380 /* Check whether a condition was provided. */
61012eef 13381 if (startswith (args, "if")
5845583d 13382 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 13383 {
5845583d 13384 args += 2;
f1735a53 13385 args = skip_spaces (args);
5845583d
JB
13386 if (args[0] == '\0')
13387 error (_("condition missing after `if' keyword"));
56ecd069 13388 cond_string.assign (args);
f7f9143b
JB
13389 }
13390
5845583d
JB
13391 /* Otherwise, there should be no other argument at the end of
13392 the command. */
13393 else if (args[0] != '\0')
13394 error (_("Junk at end of arguments."));
f7f9143b
JB
13395}
13396
9ac4176b
PA
13397/* Implement the "catch assert" command. */
13398
13399static void
eb4c3f4a 13400catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
13401 struct cmd_list_element *command)
13402{
a121b7c1 13403 const char *arg = arg_entry;
9ac4176b
PA
13404 struct gdbarch *gdbarch = get_current_arch ();
13405 int tempflag;
56ecd069 13406 std::string cond_string;
9ac4176b
PA
13407
13408 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13409
13410 if (!arg)
13411 arg = "";
56ecd069 13412 catch_ada_assert_command_split (arg, cond_string);
761269c8 13413 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 13414 "", cond_string,
349774ef
JB
13415 tempflag, 1 /* enabled */,
13416 from_tty);
9ac4176b 13417}
778865d3
JB
13418
13419/* Return non-zero if the symbol SYM is an Ada exception object. */
13420
13421static int
13422ada_is_exception_sym (struct symbol *sym)
13423{
a737d952 13424 const char *type_name = TYPE_NAME (SYMBOL_TYPE (sym));
778865d3
JB
13425
13426 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
13427 && SYMBOL_CLASS (sym) != LOC_BLOCK
13428 && SYMBOL_CLASS (sym) != LOC_CONST
13429 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13430 && type_name != NULL && strcmp (type_name, "exception") == 0);
13431}
13432
13433/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13434 Ada exception object. This matches all exceptions except the ones
13435 defined by the Ada language. */
13436
13437static int
13438ada_is_non_standard_exception_sym (struct symbol *sym)
13439{
13440 int i;
13441
13442 if (!ada_is_exception_sym (sym))
13443 return 0;
13444
13445 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13446 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
13447 return 0; /* A standard exception. */
13448
13449 /* Numeric_Error is also a standard exception, so exclude it.
13450 See the STANDARD_EXC description for more details as to why
13451 this exception is not listed in that array. */
13452 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
13453 return 0;
13454
13455 return 1;
13456}
13457
ab816a27 13458/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
13459 objects.
13460
13461 The comparison is determined first by exception name, and then
13462 by exception address. */
13463
ab816a27 13464bool
cc536b21 13465ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 13466{
778865d3
JB
13467 int result;
13468
ab816a27
TT
13469 result = strcmp (name, other.name);
13470 if (result < 0)
13471 return true;
13472 if (result == 0 && addr < other.addr)
13473 return true;
13474 return false;
13475}
778865d3 13476
ab816a27 13477bool
cc536b21 13478ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
13479{
13480 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
13481}
13482
13483/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13484 routine, but keeping the first SKIP elements untouched.
13485
13486 All duplicates are also removed. */
13487
13488static void
ab816a27 13489sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
13490 int skip)
13491{
ab816a27
TT
13492 std::sort (exceptions->begin () + skip, exceptions->end ());
13493 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
13494 exceptions->end ());
778865d3
JB
13495}
13496
778865d3
JB
13497/* Add all exceptions defined by the Ada standard whose name match
13498 a regular expression.
13499
13500 If PREG is not NULL, then this regexp_t object is used to
13501 perform the symbol name matching. Otherwise, no name-based
13502 filtering is performed.
13503
13504 EXCEPTIONS is a vector of exceptions to which matching exceptions
13505 gets pushed. */
13506
13507static void
2d7cc5c7 13508ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 13509 std::vector<ada_exc_info> *exceptions)
778865d3
JB
13510{
13511 int i;
13512
13513 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13514 {
13515 if (preg == NULL
2d7cc5c7 13516 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
13517 {
13518 struct bound_minimal_symbol msymbol
13519 = ada_lookup_simple_minsym (standard_exc[i]);
13520
13521 if (msymbol.minsym != NULL)
13522 {
13523 struct ada_exc_info info
77e371c0 13524 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 13525
ab816a27 13526 exceptions->push_back (info);
778865d3
JB
13527 }
13528 }
13529 }
13530}
13531
13532/* Add all Ada exceptions defined locally and accessible from the given
13533 FRAME.
13534
13535 If PREG is not NULL, then this regexp_t object is used to
13536 perform the symbol name matching. Otherwise, no name-based
13537 filtering is performed.
13538
13539 EXCEPTIONS is a vector of exceptions to which matching exceptions
13540 gets pushed. */
13541
13542static void
2d7cc5c7
PA
13543ada_add_exceptions_from_frame (compiled_regex *preg,
13544 struct frame_info *frame,
ab816a27 13545 std::vector<ada_exc_info> *exceptions)
778865d3 13546{
3977b71f 13547 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
13548
13549 while (block != 0)
13550 {
13551 struct block_iterator iter;
13552 struct symbol *sym;
13553
13554 ALL_BLOCK_SYMBOLS (block, iter, sym)
13555 {
13556 switch (SYMBOL_CLASS (sym))
13557 {
13558 case LOC_TYPEDEF:
13559 case LOC_BLOCK:
13560 case LOC_CONST:
13561 break;
13562 default:
13563 if (ada_is_exception_sym (sym))
13564 {
13565 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13566 SYMBOL_VALUE_ADDRESS (sym)};
13567
ab816a27 13568 exceptions->push_back (info);
778865d3
JB
13569 }
13570 }
13571 }
13572 if (BLOCK_FUNCTION (block) != NULL)
13573 break;
13574 block = BLOCK_SUPERBLOCK (block);
13575 }
13576}
13577
14bc53a8
PA
13578/* Return true if NAME matches PREG or if PREG is NULL. */
13579
13580static bool
2d7cc5c7 13581name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
13582{
13583 return (preg == NULL
2d7cc5c7 13584 || preg->exec (ada_decode (name), 0, NULL, 0) == 0);
14bc53a8
PA
13585}
13586
778865d3
JB
13587/* Add all exceptions defined globally whose name name match
13588 a regular expression, excluding standard exceptions.
13589
13590 The reason we exclude standard exceptions is that they need
13591 to be handled separately: Standard exceptions are defined inside
13592 a runtime unit which is normally not compiled with debugging info,
13593 and thus usually do not show up in our symbol search. However,
13594 if the unit was in fact built with debugging info, we need to
13595 exclude them because they would duplicate the entry we found
13596 during the special loop that specifically searches for those
13597 standard exceptions.
13598
13599 If PREG is not NULL, then this regexp_t object is used to
13600 perform the symbol name matching. Otherwise, no name-based
13601 filtering is performed.
13602
13603 EXCEPTIONS is a vector of exceptions to which matching exceptions
13604 gets pushed. */
13605
13606static void
2d7cc5c7 13607ada_add_global_exceptions (compiled_regex *preg,
ab816a27 13608 std::vector<ada_exc_info> *exceptions)
778865d3 13609{
14bc53a8
PA
13610 /* In Ada, the symbol "search name" is a linkage name, whereas the
13611 regular expression used to do the matching refers to the natural
13612 name. So match against the decoded name. */
13613 expand_symtabs_matching (NULL,
b5ec771e 13614 lookup_name_info::match_any (),
14bc53a8
PA
13615 [&] (const char *search_name)
13616 {
13617 const char *decoded = ada_decode (search_name);
13618 return name_matches_regex (decoded, preg);
13619 },
13620 NULL,
13621 VARIABLES_DOMAIN);
778865d3 13622
2030c079 13623 for (objfile *objfile : current_program_space->objfiles ())
778865d3 13624 {
b669c953 13625 for (compunit_symtab *s : objfile->compunits ())
778865d3 13626 {
d8aeb77f
TT
13627 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13628 int i;
778865d3 13629
d8aeb77f
TT
13630 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13631 {
582942f4 13632 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
d8aeb77f
TT
13633 struct block_iterator iter;
13634 struct symbol *sym;
778865d3 13635
d8aeb77f
TT
13636 ALL_BLOCK_SYMBOLS (b, iter, sym)
13637 if (ada_is_non_standard_exception_sym (sym)
13638 && name_matches_regex (SYMBOL_NATURAL_NAME (sym), preg))
13639 {
13640 struct ada_exc_info info
13641 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13642
13643 exceptions->push_back (info);
13644 }
13645 }
778865d3
JB
13646 }
13647 }
13648}
13649
13650/* Implements ada_exceptions_list with the regular expression passed
13651 as a regex_t, rather than a string.
13652
13653 If not NULL, PREG is used to filter out exceptions whose names
13654 do not match. Otherwise, all exceptions are listed. */
13655
ab816a27 13656static std::vector<ada_exc_info>
2d7cc5c7 13657ada_exceptions_list_1 (compiled_regex *preg)
778865d3 13658{
ab816a27 13659 std::vector<ada_exc_info> result;
778865d3
JB
13660 int prev_len;
13661
13662 /* First, list the known standard exceptions. These exceptions
13663 need to be handled separately, as they are usually defined in
13664 runtime units that have been compiled without debugging info. */
13665
13666 ada_add_standard_exceptions (preg, &result);
13667
13668 /* Next, find all exceptions whose scope is local and accessible
13669 from the currently selected frame. */
13670
13671 if (has_stack_frames ())
13672 {
ab816a27 13673 prev_len = result.size ();
778865d3
JB
13674 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13675 &result);
ab816a27 13676 if (result.size () > prev_len)
778865d3
JB
13677 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13678 }
13679
13680 /* Add all exceptions whose scope is global. */
13681
ab816a27 13682 prev_len = result.size ();
778865d3 13683 ada_add_global_exceptions (preg, &result);
ab816a27 13684 if (result.size () > prev_len)
778865d3
JB
13685 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13686
778865d3
JB
13687 return result;
13688}
13689
13690/* Return a vector of ada_exc_info.
13691
13692 If REGEXP is NULL, all exceptions are included in the result.
13693 Otherwise, it should contain a valid regular expression,
13694 and only the exceptions whose names match that regular expression
13695 are included in the result.
13696
13697 The exceptions are sorted in the following order:
13698 - Standard exceptions (defined by the Ada language), in
13699 alphabetical order;
13700 - Exceptions only visible from the current frame, in
13701 alphabetical order;
13702 - Exceptions whose scope is global, in alphabetical order. */
13703
ab816a27 13704std::vector<ada_exc_info>
778865d3
JB
13705ada_exceptions_list (const char *regexp)
13706{
2d7cc5c7
PA
13707 if (regexp == NULL)
13708 return ada_exceptions_list_1 (NULL);
778865d3 13709
2d7cc5c7
PA
13710 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13711 return ada_exceptions_list_1 (&reg);
778865d3
JB
13712}
13713
13714/* Implement the "info exceptions" command. */
13715
13716static void
1d12d88f 13717info_exceptions_command (const char *regexp, int from_tty)
778865d3 13718{
778865d3 13719 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13720
ab816a27 13721 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13722
13723 if (regexp != NULL)
13724 printf_filtered
13725 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13726 else
13727 printf_filtered (_("All defined Ada exceptions:\n"));
13728
ab816a27
TT
13729 for (const ada_exc_info &info : exceptions)
13730 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13731}
13732
4c4b4cd2
PH
13733 /* Operators */
13734/* Information about operators given special treatment in functions
13735 below. */
13736/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13737
13738#define ADA_OPERATORS \
13739 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13740 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13741 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13742 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13743 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13744 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13745 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13746 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13747 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13748 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13749 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13750 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13751 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13752 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13753 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13754 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13755 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13756 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13757 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13758
13759static void
554794dc
SDJ
13760ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13761 int *argsp)
4c4b4cd2
PH
13762{
13763 switch (exp->elts[pc - 1].opcode)
13764 {
76a01679 13765 default:
4c4b4cd2
PH
13766 operator_length_standard (exp, pc, oplenp, argsp);
13767 break;
13768
13769#define OP_DEFN(op, len, args, binop) \
13770 case op: *oplenp = len; *argsp = args; break;
13771 ADA_OPERATORS;
13772#undef OP_DEFN
52ce6436
PH
13773
13774 case OP_AGGREGATE:
13775 *oplenp = 3;
13776 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13777 break;
13778
13779 case OP_CHOICES:
13780 *oplenp = 3;
13781 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13782 break;
4c4b4cd2
PH
13783 }
13784}
13785
c0201579
JK
13786/* Implementation of the exp_descriptor method operator_check. */
13787
13788static int
13789ada_operator_check (struct expression *exp, int pos,
13790 int (*objfile_func) (struct objfile *objfile, void *data),
13791 void *data)
13792{
13793 const union exp_element *const elts = exp->elts;
13794 struct type *type = NULL;
13795
13796 switch (elts[pos].opcode)
13797 {
13798 case UNOP_IN_RANGE:
13799 case UNOP_QUAL:
13800 type = elts[pos + 1].type;
13801 break;
13802
13803 default:
13804 return operator_check_standard (exp, pos, objfile_func, data);
13805 }
13806
13807 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13808
13809 if (type && TYPE_OBJFILE (type)
13810 && (*objfile_func) (TYPE_OBJFILE (type), data))
13811 return 1;
13812
13813 return 0;
13814}
13815
a121b7c1 13816static const char *
4c4b4cd2
PH
13817ada_op_name (enum exp_opcode opcode)
13818{
13819 switch (opcode)
13820 {
76a01679 13821 default:
4c4b4cd2 13822 return op_name_standard (opcode);
52ce6436 13823
4c4b4cd2
PH
13824#define OP_DEFN(op, len, args, binop) case op: return #op;
13825 ADA_OPERATORS;
13826#undef OP_DEFN
52ce6436
PH
13827
13828 case OP_AGGREGATE:
13829 return "OP_AGGREGATE";
13830 case OP_CHOICES:
13831 return "OP_CHOICES";
13832 case OP_NAME:
13833 return "OP_NAME";
4c4b4cd2
PH
13834 }
13835}
13836
13837/* As for operator_length, but assumes PC is pointing at the first
13838 element of the operator, and gives meaningful results only for the
52ce6436 13839 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13840
13841static void
76a01679
JB
13842ada_forward_operator_length (struct expression *exp, int pc,
13843 int *oplenp, int *argsp)
4c4b4cd2 13844{
76a01679 13845 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13846 {
13847 default:
13848 *oplenp = *argsp = 0;
13849 break;
52ce6436 13850
4c4b4cd2
PH
13851#define OP_DEFN(op, len, args, binop) \
13852 case op: *oplenp = len; *argsp = args; break;
13853 ADA_OPERATORS;
13854#undef OP_DEFN
52ce6436
PH
13855
13856 case OP_AGGREGATE:
13857 *oplenp = 3;
13858 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13859 break;
13860
13861 case OP_CHOICES:
13862 *oplenp = 3;
13863 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13864 break;
13865
13866 case OP_STRING:
13867 case OP_NAME:
13868 {
13869 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13870
52ce6436
PH
13871 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13872 *argsp = 0;
13873 break;
13874 }
4c4b4cd2
PH
13875 }
13876}
13877
13878static int
13879ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13880{
13881 enum exp_opcode op = exp->elts[elt].opcode;
13882 int oplen, nargs;
13883 int pc = elt;
13884 int i;
76a01679 13885
4c4b4cd2
PH
13886 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13887
76a01679 13888 switch (op)
4c4b4cd2 13889 {
76a01679 13890 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13891 case OP_ATR_FIRST:
13892 case OP_ATR_LAST:
13893 case OP_ATR_LENGTH:
13894 case OP_ATR_IMAGE:
13895 case OP_ATR_MAX:
13896 case OP_ATR_MIN:
13897 case OP_ATR_MODULUS:
13898 case OP_ATR_POS:
13899 case OP_ATR_SIZE:
13900 case OP_ATR_TAG:
13901 case OP_ATR_VAL:
13902 break;
13903
13904 case UNOP_IN_RANGE:
13905 case UNOP_QUAL:
323e0a4a
AC
13906 /* XXX: gdb_sprint_host_address, type_sprint */
13907 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13908 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13909 fprintf_filtered (stream, " (");
13910 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13911 fprintf_filtered (stream, ")");
13912 break;
13913 case BINOP_IN_BOUNDS:
52ce6436
PH
13914 fprintf_filtered (stream, " (%d)",
13915 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13916 break;
13917 case TERNOP_IN_RANGE:
13918 break;
13919
52ce6436
PH
13920 case OP_AGGREGATE:
13921 case OP_OTHERS:
13922 case OP_DISCRETE_RANGE:
13923 case OP_POSITIONAL:
13924 case OP_CHOICES:
13925 break;
13926
13927 case OP_NAME:
13928 case OP_STRING:
13929 {
13930 char *name = &exp->elts[elt + 2].string;
13931 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13932
52ce6436
PH
13933 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13934 break;
13935 }
13936
4c4b4cd2
PH
13937 default:
13938 return dump_subexp_body_standard (exp, stream, elt);
13939 }
13940
13941 elt += oplen;
13942 for (i = 0; i < nargs; i += 1)
13943 elt = dump_subexp (exp, stream, elt);
13944
13945 return elt;
13946}
13947
13948/* The Ada extension of print_subexp (q.v.). */
13949
76a01679
JB
13950static void
13951ada_print_subexp (struct expression *exp, int *pos,
13952 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13953{
52ce6436 13954 int oplen, nargs, i;
4c4b4cd2
PH
13955 int pc = *pos;
13956 enum exp_opcode op = exp->elts[pc].opcode;
13957
13958 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13959
52ce6436 13960 *pos += oplen;
4c4b4cd2
PH
13961 switch (op)
13962 {
13963 default:
52ce6436 13964 *pos -= oplen;
4c4b4cd2
PH
13965 print_subexp_standard (exp, pos, stream, prec);
13966 return;
13967
13968 case OP_VAR_VALUE:
4c4b4cd2
PH
13969 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13970 return;
13971
13972 case BINOP_IN_BOUNDS:
323e0a4a 13973 /* XXX: sprint_subexp */
4c4b4cd2 13974 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13975 fputs_filtered (" in ", stream);
4c4b4cd2 13976 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13977 fputs_filtered ("'range", stream);
4c4b4cd2 13978 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13979 fprintf_filtered (stream, "(%ld)",
13980 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13981 return;
13982
13983 case TERNOP_IN_RANGE:
4c4b4cd2 13984 if (prec >= PREC_EQUAL)
76a01679 13985 fputs_filtered ("(", stream);
323e0a4a 13986 /* XXX: sprint_subexp */
4c4b4cd2 13987 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13988 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13989 print_subexp (exp, pos, stream, PREC_EQUAL);
13990 fputs_filtered (" .. ", stream);
13991 print_subexp (exp, pos, stream, PREC_EQUAL);
13992 if (prec >= PREC_EQUAL)
76a01679
JB
13993 fputs_filtered (")", stream);
13994 return;
4c4b4cd2
PH
13995
13996 case OP_ATR_FIRST:
13997 case OP_ATR_LAST:
13998 case OP_ATR_LENGTH:
13999 case OP_ATR_IMAGE:
14000 case OP_ATR_MAX:
14001 case OP_ATR_MIN:
14002 case OP_ATR_MODULUS:
14003 case OP_ATR_POS:
14004 case OP_ATR_SIZE:
14005 case OP_ATR_TAG:
14006 case OP_ATR_VAL:
4c4b4cd2 14007 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
14008 {
14009 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
14010 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
14011 &type_print_raw_options);
76a01679
JB
14012 *pos += 3;
14013 }
4c4b4cd2 14014 else
76a01679 14015 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
14016 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
14017 if (nargs > 1)
76a01679
JB
14018 {
14019 int tem;
5b4ee69b 14020
76a01679
JB
14021 for (tem = 1; tem < nargs; tem += 1)
14022 {
14023 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
14024 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
14025 }
14026 fputs_filtered (")", stream);
14027 }
4c4b4cd2 14028 return;
14f9c5c9 14029
4c4b4cd2 14030 case UNOP_QUAL:
4c4b4cd2
PH
14031 type_print (exp->elts[pc + 1].type, "", stream, 0);
14032 fputs_filtered ("'(", stream);
14033 print_subexp (exp, pos, stream, PREC_PREFIX);
14034 fputs_filtered (")", stream);
14035 return;
14f9c5c9 14036
4c4b4cd2 14037 case UNOP_IN_RANGE:
323e0a4a 14038 /* XXX: sprint_subexp */
4c4b4cd2 14039 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 14040 fputs_filtered (" in ", stream);
79d43c61
TT
14041 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
14042 &type_print_raw_options);
4c4b4cd2 14043 return;
52ce6436
PH
14044
14045 case OP_DISCRETE_RANGE:
14046 print_subexp (exp, pos, stream, PREC_SUFFIX);
14047 fputs_filtered ("..", stream);
14048 print_subexp (exp, pos, stream, PREC_SUFFIX);
14049 return;
14050
14051 case OP_OTHERS:
14052 fputs_filtered ("others => ", stream);
14053 print_subexp (exp, pos, stream, PREC_SUFFIX);
14054 return;
14055
14056 case OP_CHOICES:
14057 for (i = 0; i < nargs-1; i += 1)
14058 {
14059 if (i > 0)
14060 fputs_filtered ("|", stream);
14061 print_subexp (exp, pos, stream, PREC_SUFFIX);
14062 }
14063 fputs_filtered (" => ", stream);
14064 print_subexp (exp, pos, stream, PREC_SUFFIX);
14065 return;
14066
14067 case OP_POSITIONAL:
14068 print_subexp (exp, pos, stream, PREC_SUFFIX);
14069 return;
14070
14071 case OP_AGGREGATE:
14072 fputs_filtered ("(", stream);
14073 for (i = 0; i < nargs; i += 1)
14074 {
14075 if (i > 0)
14076 fputs_filtered (", ", stream);
14077 print_subexp (exp, pos, stream, PREC_SUFFIX);
14078 }
14079 fputs_filtered (")", stream);
14080 return;
4c4b4cd2
PH
14081 }
14082}
14f9c5c9
AS
14083
14084/* Table mapping opcodes into strings for printing operators
14085 and precedences of the operators. */
14086
d2e4a39e
AS
14087static const struct op_print ada_op_print_tab[] = {
14088 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
14089 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
14090 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
14091 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
14092 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
14093 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
14094 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
14095 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
14096 {"<=", BINOP_LEQ, PREC_ORDER, 0},
14097 {">=", BINOP_GEQ, PREC_ORDER, 0},
14098 {">", BINOP_GTR, PREC_ORDER, 0},
14099 {"<", BINOP_LESS, PREC_ORDER, 0},
14100 {">>", BINOP_RSH, PREC_SHIFT, 0},
14101 {"<<", BINOP_LSH, PREC_SHIFT, 0},
14102 {"+", BINOP_ADD, PREC_ADD, 0},
14103 {"-", BINOP_SUB, PREC_ADD, 0},
14104 {"&", BINOP_CONCAT, PREC_ADD, 0},
14105 {"*", BINOP_MUL, PREC_MUL, 0},
14106 {"/", BINOP_DIV, PREC_MUL, 0},
14107 {"rem", BINOP_REM, PREC_MUL, 0},
14108 {"mod", BINOP_MOD, PREC_MUL, 0},
14109 {"**", BINOP_EXP, PREC_REPEAT, 0},
14110 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
14111 {"-", UNOP_NEG, PREC_PREFIX, 0},
14112 {"+", UNOP_PLUS, PREC_PREFIX, 0},
14113 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
14114 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
14115 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
14116 {".all", UNOP_IND, PREC_SUFFIX, 1},
14117 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
14118 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 14119 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9
AS
14120};
14121\f
72d5681a
PH
14122enum ada_primitive_types {
14123 ada_primitive_type_int,
14124 ada_primitive_type_long,
14125 ada_primitive_type_short,
14126 ada_primitive_type_char,
14127 ada_primitive_type_float,
14128 ada_primitive_type_double,
14129 ada_primitive_type_void,
14130 ada_primitive_type_long_long,
14131 ada_primitive_type_long_double,
14132 ada_primitive_type_natural,
14133 ada_primitive_type_positive,
14134 ada_primitive_type_system_address,
08f49010 14135 ada_primitive_type_storage_offset,
72d5681a
PH
14136 nr_ada_primitive_types
14137};
6c038f32
PH
14138
14139static void
d4a9a881 14140ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
14141 struct language_arch_info *lai)
14142{
d4a9a881 14143 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 14144
72d5681a 14145 lai->primitive_type_vector
d4a9a881 14146 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 14147 struct type *);
e9bb382b
UW
14148
14149 lai->primitive_type_vector [ada_primitive_type_int]
14150 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14151 0, "integer");
14152 lai->primitive_type_vector [ada_primitive_type_long]
14153 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
14154 0, "long_integer");
14155 lai->primitive_type_vector [ada_primitive_type_short]
14156 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
14157 0, "short_integer");
14158 lai->string_char_type
14159 = lai->primitive_type_vector [ada_primitive_type_char]
cd7c1778 14160 = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
e9bb382b
UW
14161 lai->primitive_type_vector [ada_primitive_type_float]
14162 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
49f190bc 14163 "float", gdbarch_float_format (gdbarch));
e9bb382b
UW
14164 lai->primitive_type_vector [ada_primitive_type_double]
14165 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
49f190bc 14166 "long_float", gdbarch_double_format (gdbarch));
e9bb382b
UW
14167 lai->primitive_type_vector [ada_primitive_type_long_long]
14168 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
14169 0, "long_long_integer");
14170 lai->primitive_type_vector [ada_primitive_type_long_double]
5f3bceb6 14171 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
49f190bc 14172 "long_long_float", gdbarch_long_double_format (gdbarch));
e9bb382b
UW
14173 lai->primitive_type_vector [ada_primitive_type_natural]
14174 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14175 0, "natural");
14176 lai->primitive_type_vector [ada_primitive_type_positive]
14177 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14178 0, "positive");
14179 lai->primitive_type_vector [ada_primitive_type_void]
14180 = builtin->builtin_void;
14181
14182 lai->primitive_type_vector [ada_primitive_type_system_address]
77b7c781
UW
14183 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
14184 "void"));
72d5681a
PH
14185 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
14186 = "system__address";
fbb06eb1 14187
08f49010
XR
14188 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
14189 type. This is a signed integral type whose size is the same as
14190 the size of addresses. */
14191 {
14192 unsigned int addr_length = TYPE_LENGTH
14193 (lai->primitive_type_vector [ada_primitive_type_system_address]);
14194
14195 lai->primitive_type_vector [ada_primitive_type_storage_offset]
14196 = arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
14197 "storage_offset");
14198 }
14199
47e729a8 14200 lai->bool_type_symbol = NULL;
fbb06eb1 14201 lai->bool_type_default = builtin->builtin_bool;
6c038f32 14202}
6c038f32
PH
14203\f
14204 /* Language vector */
14205
14206/* Not really used, but needed in the ada_language_defn. */
14207
14208static void
6c7a06a3 14209emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 14210{
6c7a06a3 14211 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
14212}
14213
14214static int
410a0ff2 14215parse (struct parser_state *ps)
6c038f32
PH
14216{
14217 warnings_issued = 0;
410a0ff2 14218 return ada_parse (ps);
6c038f32
PH
14219}
14220
14221static const struct exp_descriptor ada_exp_descriptor = {
14222 ada_print_subexp,
14223 ada_operator_length,
c0201579 14224 ada_operator_check,
6c038f32
PH
14225 ada_op_name,
14226 ada_dump_subexp_body,
14227 ada_evaluate_subexp
14228};
14229
b5ec771e
PA
14230/* symbol_name_matcher_ftype adapter for wild_match. */
14231
14232static bool
14233do_wild_match (const char *symbol_search_name,
14234 const lookup_name_info &lookup_name,
a207cff2 14235 completion_match_result *comp_match_res)
b5ec771e
PA
14236{
14237 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
14238}
14239
14240/* symbol_name_matcher_ftype adapter for full_match. */
14241
14242static bool
14243do_full_match (const char *symbol_search_name,
14244 const lookup_name_info &lookup_name,
a207cff2 14245 completion_match_result *comp_match_res)
b5ec771e
PA
14246{
14247 return full_match (symbol_search_name, ada_lookup_name (lookup_name));
14248}
14249
a2cd4f14
JB
14250/* symbol_name_matcher_ftype for exact (verbatim) matches. */
14251
14252static bool
14253do_exact_match (const char *symbol_search_name,
14254 const lookup_name_info &lookup_name,
14255 completion_match_result *comp_match_res)
14256{
14257 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
14258}
14259
b5ec771e
PA
14260/* Build the Ada lookup name for LOOKUP_NAME. */
14261
14262ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
14263{
14264 const std::string &user_name = lookup_name.name ();
14265
14266 if (user_name[0] == '<')
14267 {
14268 if (user_name.back () == '>')
14269 m_encoded_name = user_name.substr (1, user_name.size () - 2);
14270 else
14271 m_encoded_name = user_name.substr (1, user_name.size () - 1);
14272 m_encoded_p = true;
14273 m_verbatim_p = true;
14274 m_wild_match_p = false;
14275 m_standard_p = false;
14276 }
14277 else
14278 {
14279 m_verbatim_p = false;
14280
14281 m_encoded_p = user_name.find ("__") != std::string::npos;
14282
14283 if (!m_encoded_p)
14284 {
14285 const char *folded = ada_fold_name (user_name.c_str ());
14286 const char *encoded = ada_encode_1 (folded, false);
14287 if (encoded != NULL)
14288 m_encoded_name = encoded;
14289 else
14290 m_encoded_name = user_name;
14291 }
14292 else
14293 m_encoded_name = user_name;
14294
14295 /* Handle the 'package Standard' special case. See description
14296 of m_standard_p. */
14297 if (startswith (m_encoded_name.c_str (), "standard__"))
14298 {
14299 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
14300 m_standard_p = true;
14301 }
14302 else
14303 m_standard_p = false;
74ccd7f5 14304
b5ec771e
PA
14305 /* If the name contains a ".", then the user is entering a fully
14306 qualified entity name, and the match must not be done in wild
14307 mode. Similarly, if the user wants to complete what looks
14308 like an encoded name, the match must not be done in wild
14309 mode. Also, in the standard__ special case always do
14310 non-wild matching. */
14311 m_wild_match_p
14312 = (lookup_name.match_type () != symbol_name_match_type::FULL
14313 && !m_encoded_p
14314 && !m_standard_p
14315 && user_name.find ('.') == std::string::npos);
14316 }
14317}
14318
14319/* symbol_name_matcher_ftype method for Ada. This only handles
14320 completion mode. */
14321
14322static bool
14323ada_symbol_name_matches (const char *symbol_search_name,
14324 const lookup_name_info &lookup_name,
a207cff2 14325 completion_match_result *comp_match_res)
74ccd7f5 14326{
b5ec771e
PA
14327 return lookup_name.ada ().matches (symbol_search_name,
14328 lookup_name.match_type (),
a207cff2 14329 comp_match_res);
b5ec771e
PA
14330}
14331
de63c46b
PA
14332/* A name matcher that matches the symbol name exactly, with
14333 strcmp. */
14334
14335static bool
14336literal_symbol_name_matcher (const char *symbol_search_name,
14337 const lookup_name_info &lookup_name,
14338 completion_match_result *comp_match_res)
14339{
14340 const std::string &name = lookup_name.name ();
14341
14342 int cmp = (lookup_name.completion_mode ()
14343 ? strncmp (symbol_search_name, name.c_str (), name.size ())
14344 : strcmp (symbol_search_name, name.c_str ()));
14345 if (cmp == 0)
14346 {
14347 if (comp_match_res != NULL)
14348 comp_match_res->set_match (symbol_search_name);
14349 return true;
14350 }
14351 else
14352 return false;
14353}
14354
b5ec771e
PA
14355/* Implement the "la_get_symbol_name_matcher" language_defn method for
14356 Ada. */
14357
14358static symbol_name_matcher_ftype *
14359ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
14360{
de63c46b
PA
14361 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
14362 return literal_symbol_name_matcher;
14363
b5ec771e
PA
14364 if (lookup_name.completion_mode ())
14365 return ada_symbol_name_matches;
74ccd7f5 14366 else
b5ec771e
PA
14367 {
14368 if (lookup_name.ada ().wild_match_p ())
14369 return do_wild_match;
a2cd4f14
JB
14370 else if (lookup_name.ada ().verbatim_p ())
14371 return do_exact_match;
b5ec771e
PA
14372 else
14373 return do_full_match;
14374 }
74ccd7f5
JB
14375}
14376
a5ee536b
JB
14377/* Implement the "la_read_var_value" language_defn method for Ada. */
14378
14379static struct value *
63e43d3a
PMR
14380ada_read_var_value (struct symbol *var, const struct block *var_block,
14381 struct frame_info *frame)
a5ee536b 14382{
3977b71f 14383 const struct block *frame_block = NULL;
a5ee536b
JB
14384 struct symbol *renaming_sym = NULL;
14385
14386 /* The only case where default_read_var_value is not sufficient
14387 is when VAR is a renaming... */
14388 if (frame)
14389 frame_block = get_frame_block (frame, NULL);
14390 if (frame_block)
14391 renaming_sym = ada_find_renaming_symbol (var, frame_block);
14392 if (renaming_sym != NULL)
14393 return ada_read_renaming_var_value (renaming_sym, frame_block);
14394
14395 /* This is a typical case where we expect the default_read_var_value
14396 function to work. */
63e43d3a 14397 return default_read_var_value (var, var_block, frame);
a5ee536b
JB
14398}
14399
56618e20
TT
14400static const char *ada_extensions[] =
14401{
14402 ".adb", ".ads", ".a", ".ada", ".dg", NULL
14403};
14404
47e77640 14405extern const struct language_defn ada_language_defn = {
6c038f32 14406 "ada", /* Language name */
6abde28f 14407 "Ada",
6c038f32 14408 language_ada,
6c038f32 14409 range_check_off,
6c038f32
PH
14410 case_sensitive_on, /* Yes, Ada is case-insensitive, but
14411 that's not quite what this means. */
6c038f32 14412 array_row_major,
9a044a89 14413 macro_expansion_no,
56618e20 14414 ada_extensions,
6c038f32
PH
14415 &ada_exp_descriptor,
14416 parse,
6c038f32
PH
14417 resolve,
14418 ada_printchar, /* Print a character constant */
14419 ada_printstr, /* Function to print string constant */
14420 emit_char, /* Function to print single char (not used) */
6c038f32 14421 ada_print_type, /* Print a type using appropriate syntax */
be942545 14422 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
14423 ada_val_print, /* Print a value using appropriate syntax */
14424 ada_value_print, /* Print a top-level value */
a5ee536b 14425 ada_read_var_value, /* la_read_var_value */
6c038f32 14426 NULL, /* Language specific skip_trampoline */
2b2d9e11 14427 NULL, /* name_of_this */
59cc4834 14428 true, /* la_store_sym_names_in_linkage_form_p */
6c038f32
PH
14429 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
14430 basic_lookup_transparent_type, /* lookup_transparent_type */
14431 ada_la_decode, /* Language specific symbol demangler */
8b302db8 14432 ada_sniff_from_mangled_name,
0963b4bd
MS
14433 NULL, /* Language specific
14434 class_name_from_physname */
6c038f32
PH
14435 ada_op_print_tab, /* expression operators for printing */
14436 0, /* c-style arrays */
14437 1, /* String lower bound */
6c038f32 14438 ada_get_gdb_completer_word_break_characters,
eb3ff9a5 14439 ada_collect_symbol_completion_matches,
72d5681a 14440 ada_language_arch_info,
e79af960 14441 ada_print_array_index,
41f1b697 14442 default_pass_by_reference,
ae6a3a4c 14443 c_get_string,
e2b7af72 14444 ada_watch_location_expression,
b5ec771e 14445 ada_get_symbol_name_matcher, /* la_get_symbol_name_matcher */
f8eba3c6 14446 ada_iterate_over_symbols,
5ffa0793 14447 default_search_name_hash,
a53b64ea 14448 &ada_varobj_ops,
bb2ec1b3 14449 NULL,
721b08c6 14450 NULL,
4be290b2 14451 ada_is_string_type,
721b08c6 14452 "(...)" /* la_struct_too_deep_ellipsis */
6c038f32
PH
14453};
14454
5bf03f13
JB
14455/* Command-list for the "set/show ada" prefix command. */
14456static struct cmd_list_element *set_ada_list;
14457static struct cmd_list_element *show_ada_list;
14458
14459/* Implement the "set ada" prefix command. */
14460
14461static void
981a3fb3 14462set_ada_command (const char *arg, int from_tty)
5bf03f13
JB
14463{
14464 printf_unfiltered (_(\
14465"\"set ada\" must be followed by the name of a setting.\n"));
635c7e8a 14466 help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
5bf03f13
JB
14467}
14468
14469/* Implement the "show ada" prefix command. */
14470
14471static void
981a3fb3 14472show_ada_command (const char *args, int from_tty)
5bf03f13
JB
14473{
14474 cmd_show_list (show_ada_list, from_tty, "");
14475}
14476
2060206e
PA
14477static void
14478initialize_ada_catchpoint_ops (void)
14479{
14480 struct breakpoint_ops *ops;
14481
14482 initialize_breakpoint_ops ();
14483
14484 ops = &catch_exception_breakpoint_ops;
14485 *ops = bkpt_breakpoint_ops;
2060206e
PA
14486 ops->allocate_location = allocate_location_catch_exception;
14487 ops->re_set = re_set_catch_exception;
14488 ops->check_status = check_status_catch_exception;
14489 ops->print_it = print_it_catch_exception;
14490 ops->print_one = print_one_catch_exception;
14491 ops->print_mention = print_mention_catch_exception;
14492 ops->print_recreate = print_recreate_catch_exception;
14493
14494 ops = &catch_exception_unhandled_breakpoint_ops;
14495 *ops = bkpt_breakpoint_ops;
2060206e
PA
14496 ops->allocate_location = allocate_location_catch_exception_unhandled;
14497 ops->re_set = re_set_catch_exception_unhandled;
14498 ops->check_status = check_status_catch_exception_unhandled;
14499 ops->print_it = print_it_catch_exception_unhandled;
14500 ops->print_one = print_one_catch_exception_unhandled;
14501 ops->print_mention = print_mention_catch_exception_unhandled;
14502 ops->print_recreate = print_recreate_catch_exception_unhandled;
14503
14504 ops = &catch_assert_breakpoint_ops;
14505 *ops = bkpt_breakpoint_ops;
2060206e
PA
14506 ops->allocate_location = allocate_location_catch_assert;
14507 ops->re_set = re_set_catch_assert;
14508 ops->check_status = check_status_catch_assert;
14509 ops->print_it = print_it_catch_assert;
14510 ops->print_one = print_one_catch_assert;
14511 ops->print_mention = print_mention_catch_assert;
14512 ops->print_recreate = print_recreate_catch_assert;
9f757bf7
XR
14513
14514 ops = &catch_handlers_breakpoint_ops;
14515 *ops = bkpt_breakpoint_ops;
14516 ops->allocate_location = allocate_location_catch_handlers;
14517 ops->re_set = re_set_catch_handlers;
14518 ops->check_status = check_status_catch_handlers;
14519 ops->print_it = print_it_catch_handlers;
14520 ops->print_one = print_one_catch_handlers;
14521 ops->print_mention = print_mention_catch_handlers;
14522 ops->print_recreate = print_recreate_catch_handlers;
2060206e
PA
14523}
14524
3d9434b5
JB
14525/* This module's 'new_objfile' observer. */
14526
14527static void
14528ada_new_objfile_observer (struct objfile *objfile)
14529{
14530 ada_clear_symbol_cache ();
14531}
14532
14533/* This module's 'free_objfile' observer. */
14534
14535static void
14536ada_free_objfile_observer (struct objfile *objfile)
14537{
14538 ada_clear_symbol_cache ();
14539}
14540
d2e4a39e 14541void
6c038f32 14542_initialize_ada_language (void)
14f9c5c9 14543{
2060206e
PA
14544 initialize_ada_catchpoint_ops ();
14545
5bf03f13 14546 add_prefix_cmd ("ada", no_class, set_ada_command,
470678d7 14547 _("Prefix command for changing Ada-specific settings"),
5bf03f13
JB
14548 &set_ada_list, "set ada ", 0, &setlist);
14549
14550 add_prefix_cmd ("ada", no_class, show_ada_command,
14551 _("Generic command for showing Ada-specific settings."),
14552 &show_ada_list, "show ada ", 0, &showlist);
14553
14554 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14555 &trust_pad_over_xvs, _("\
14556Enable or disable an optimization trusting PAD types over XVS types"), _("\
14557Show whether an optimization trusting PAD types over XVS types is activated"),
14558 _("\
14559This is related to the encoding used by the GNAT compiler. The debugger\n\
14560should normally trust the contents of PAD types, but certain older versions\n\
14561of GNAT have a bug that sometimes causes the information in the PAD type\n\
14562to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14563work around this bug. It is always safe to turn this option \"off\", but\n\
14564this incurs a slight performance penalty, so it is recommended to NOT change\n\
14565this option to \"off\" unless necessary."),
14566 NULL, NULL, &set_ada_list, &show_ada_list);
14567
d72413e6
PMR
14568 add_setshow_boolean_cmd ("print-signatures", class_vars,
14569 &print_signatures, _("\
14570Enable or disable the output of formal and return types for functions in the \
14571overloads selection menu"), _("\
14572Show whether the output of formal and return types for functions in the \
14573overloads selection menu is activated"),
14574 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14575
9ac4176b
PA
14576 add_catch_command ("exception", _("\
14577Catch Ada exceptions, when raised.\n\
60a90376
JB
14578Usage: catch exception [ ARG ]\n\
14579\n\
14580Without any argument, stop when any Ada exception is raised.\n\
14581If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14582being raised does not have a handler (and will therefore lead to the task's\n\
14583termination).\n\
14584Otherwise, the catchpoint only stops when the name of the exception being\n\
14585raised is the same as ARG."),
9ac4176b
PA
14586 catch_ada_exception_command,
14587 NULL,
14588 CATCH_PERMANENT,
14589 CATCH_TEMPORARY);
9f757bf7
XR
14590
14591 add_catch_command ("handlers", _("\
14592Catch Ada exceptions, when handled.\n\
14593With an argument, catch only exceptions with the given name."),
14594 catch_ada_handlers_command,
14595 NULL,
14596 CATCH_PERMANENT,
14597 CATCH_TEMPORARY);
9ac4176b
PA
14598 add_catch_command ("assert", _("\
14599Catch failed Ada assertions, when raised.\n\
14600With an argument, catch only exceptions with the given name."),
14601 catch_assert_command,
14602 NULL,
14603 CATCH_PERMANENT,
14604 CATCH_TEMPORARY);
14605
6c038f32 14606 varsize_limit = 65536;
3fcded8f
JB
14607 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14608 &varsize_limit, _("\
14609Set the maximum number of bytes allowed in a variable-size object."), _("\
14610Show the maximum number of bytes allowed in a variable-size object."), _("\
14611Attempts to access an object whose size is not a compile-time constant\n\
14612and exceeds this limit will cause an error."),
14613 NULL, NULL, &setlist, &showlist);
6c038f32 14614
778865d3
JB
14615 add_info ("exceptions", info_exceptions_command,
14616 _("\
14617List all Ada exception names.\n\
14618If a regular expression is passed as an argument, only those matching\n\
14619the regular expression are listed."));
14620
c6044dd1
JB
14621 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
14622 _("Set Ada maintenance-related variables."),
14623 &maint_set_ada_cmdlist, "maintenance set ada ",
14624 0/*allow-unknown*/, &maintenance_set_cmdlist);
14625
14626 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
14627 _("Show Ada maintenance-related variables"),
14628 &maint_show_ada_cmdlist, "maintenance show ada ",
14629 0/*allow-unknown*/, &maintenance_show_cmdlist);
14630
14631 add_setshow_boolean_cmd
14632 ("ignore-descriptive-types", class_maintenance,
14633 &ada_ignore_descriptive_types_p,
14634 _("Set whether descriptive types generated by GNAT should be ignored."),
14635 _("Show whether descriptive types generated by GNAT should be ignored."),
14636 _("\
14637When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14638DWARF attribute."),
14639 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14640
459a2e4c
TT
14641 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14642 NULL, xcalloc, xfree);
6b69afc4 14643
3d9434b5 14644 /* The ada-lang observers. */
76727919
TT
14645 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14646 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14647 gdb::observers::inferior_exit.attach (ada_inferior_exit);
ee01b665
JB
14648
14649 /* Setup various context-specific data. */
e802dbe0 14650 ada_inferior_data
8e260fc0 14651 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
ee01b665
JB
14652 ada_pspace_data_handle
14653 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14f9c5c9 14654}