RISC-V: Fix unnamed arg alignment in registers.
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
e2882c85 3 Copyright (C) 1992-2018 Free Software Foundation, Inc.
14f9c5c9 4
a9762ec7 5 This file is part of GDB.
14f9c5c9 6
a9762ec7
JB
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
14f9c5c9 11
a9762ec7
JB
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
14f9c5c9 16
a9762ec7
JB
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
14f9c5c9 19
96d887e8 20
4c4b4cd2 21#include "defs.h"
14f9c5c9 22#include <ctype.h>
14f9c5c9 23#include "demangle.h"
4c4b4cd2
PH
24#include "gdb_regex.h"
25#include "frame.h"
14f9c5c9
AS
26#include "symtab.h"
27#include "gdbtypes.h"
28#include "gdbcmd.h"
29#include "expression.h"
30#include "parser-defs.h"
31#include "language.h"
a53b64ea 32#include "varobj.h"
14f9c5c9
AS
33#include "c-lang.h"
34#include "inferior.h"
35#include "symfile.h"
36#include "objfiles.h"
37#include "breakpoint.h"
38#include "gdbcore.h"
4c4b4cd2
PH
39#include "hashtab.h"
40#include "gdb_obstack.h"
14f9c5c9 41#include "ada-lang.h"
4c4b4cd2 42#include "completer.h"
53ce3c39 43#include <sys/stat.h>
14f9c5c9 44#include "ui-out.h"
fe898f56 45#include "block.h"
04714b91 46#include "infcall.h"
de4f826b 47#include "dictionary.h"
f7f9143b
JB
48#include "annotate.h"
49#include "valprint.h"
9bbc9174 50#include "source.h"
76727919 51#include "observable.h"
2ba95b9b 52#include "vec.h"
692465f1 53#include "stack.h"
fa864999 54#include "gdb_vecs.h"
79d43c61 55#include "typeprint.h"
22cee43f 56#include "namespace.h"
14f9c5c9 57
ccefe4c4 58#include "psymtab.h"
40bc484c 59#include "value.h"
956a9fb9 60#include "mi/mi-common.h"
9ac4176b 61#include "arch-utils.h"
0fcd72ba 62#include "cli/cli-utils.h"
14bc53a8 63#include "common/function-view.h"
d5722aa2 64#include "common/byte-vector.h"
ab816a27 65#include <algorithm>
ccefe4c4 66
4c4b4cd2 67/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 68 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
69 Copied from valarith.c. */
70
71#ifndef TRUNCATION_TOWARDS_ZERO
72#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
73#endif
74
d2e4a39e 75static struct type *desc_base_type (struct type *);
14f9c5c9 76
d2e4a39e 77static struct type *desc_bounds_type (struct type *);
14f9c5c9 78
d2e4a39e 79static struct value *desc_bounds (struct value *);
14f9c5c9 80
d2e4a39e 81static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 82
d2e4a39e 83static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 84
556bdfd4 85static struct type *desc_data_target_type (struct type *);
14f9c5c9 86
d2e4a39e 87static struct value *desc_data (struct value *);
14f9c5c9 88
d2e4a39e 89static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 90
d2e4a39e 91static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 92
d2e4a39e 93static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 94
d2e4a39e 95static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 96
d2e4a39e 97static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 98
d2e4a39e 99static struct type *desc_index_type (struct type *, int);
14f9c5c9 100
d2e4a39e 101static int desc_arity (struct type *);
14f9c5c9 102
d2e4a39e 103static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 104
d2e4a39e 105static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 106
40bc484c 107static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 108
4c4b4cd2 109static void ada_add_block_symbols (struct obstack *,
b5ec771e
PA
110 const struct block *,
111 const lookup_name_info &lookup_name,
112 domain_enum, struct objfile *);
14f9c5c9 113
22cee43f 114static void ada_add_all_symbols (struct obstack *, const struct block *,
b5ec771e
PA
115 const lookup_name_info &lookup_name,
116 domain_enum, int, int *);
22cee43f 117
d12307c1 118static int is_nonfunction (struct block_symbol *, int);
14f9c5c9 119
76a01679 120static void add_defn_to_vec (struct obstack *, struct symbol *,
f0c5f9b2 121 const struct block *);
14f9c5c9 122
4c4b4cd2
PH
123static int num_defns_collected (struct obstack *);
124
d12307c1 125static struct block_symbol *defns_collected (struct obstack *, int);
14f9c5c9 126
e9d9f57e 127static struct value *resolve_subexp (expression_up *, int *, int,
76a01679 128 struct type *);
14f9c5c9 129
e9d9f57e 130static void replace_operator_with_call (expression_up *, int, int, int,
270140bd 131 struct symbol *, const struct block *);
14f9c5c9 132
d2e4a39e 133static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 134
a121b7c1 135static const char *ada_op_name (enum exp_opcode);
4c4b4cd2
PH
136
137static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 138
d2e4a39e 139static int numeric_type_p (struct type *);
14f9c5c9 140
d2e4a39e 141static int integer_type_p (struct type *);
14f9c5c9 142
d2e4a39e 143static int scalar_type_p (struct type *);
14f9c5c9 144
d2e4a39e 145static int discrete_type_p (struct type *);
14f9c5c9 146
aeb5907d
JB
147static enum ada_renaming_category parse_old_style_renaming (struct type *,
148 const char **,
149 int *,
150 const char **);
151
152static struct symbol *find_old_style_renaming_symbol (const char *,
270140bd 153 const struct block *);
aeb5907d 154
a121b7c1 155static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
988f6b3d 156 int, int);
4c4b4cd2 157
d2e4a39e 158static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 159
b4ba55a1
JB
160static struct type *ada_find_parallel_type_with_name (struct type *,
161 const char *);
162
d2e4a39e 163static int is_dynamic_field (struct type *, int);
14f9c5c9 164
10a2c479 165static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 166 const gdb_byte *,
4c4b4cd2
PH
167 CORE_ADDR, struct value *);
168
169static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 170
28c85d6c 171static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 172
d2e4a39e 173static struct type *to_static_fixed_type (struct type *);
f192137b 174static struct type *static_unwrap_type (struct type *type);
14f9c5c9 175
d2e4a39e 176static struct value *unwrap_value (struct value *);
14f9c5c9 177
ad82864c 178static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 179
ad82864c 180static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 181
ad82864c
JB
182static long decode_packed_array_bitsize (struct type *);
183
184static struct value *decode_constrained_packed_array (struct value *);
185
186static int ada_is_packed_array_type (struct type *);
187
188static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 189
d2e4a39e 190static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 191 struct value **);
14f9c5c9 192
50810684 193static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
52ce6436 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
PH
229 struct value **, int, const char *,
230 struct type *);
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/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2673 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2674 not overlap. */
14f9c5c9 2675static void
fc1a4b47 2676move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2677 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2678{
2679 unsigned int accum, mask;
2680 int accum_bits, chunk_size;
2681
2682 target += targ_offset / HOST_CHAR_BIT;
2683 targ_offset %= HOST_CHAR_BIT;
2684 source += src_offset / HOST_CHAR_BIT;
2685 src_offset %= HOST_CHAR_BIT;
50810684 2686 if (bits_big_endian_p)
14f9c5c9
AS
2687 {
2688 accum = (unsigned char) *source;
2689 source += 1;
2690 accum_bits = HOST_CHAR_BIT - src_offset;
2691
d2e4a39e 2692 while (n > 0)
4c4b4cd2
PH
2693 {
2694 int unused_right;
5b4ee69b 2695
4c4b4cd2
PH
2696 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2697 accum_bits += HOST_CHAR_BIT;
2698 source += 1;
2699 chunk_size = HOST_CHAR_BIT - targ_offset;
2700 if (chunk_size > n)
2701 chunk_size = n;
2702 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2703 mask = ((1 << chunk_size) - 1) << unused_right;
2704 *target =
2705 (*target & ~mask)
2706 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2707 n -= chunk_size;
2708 accum_bits -= chunk_size;
2709 target += 1;
2710 targ_offset = 0;
2711 }
14f9c5c9
AS
2712 }
2713 else
2714 {
2715 accum = (unsigned char) *source >> src_offset;
2716 source += 1;
2717 accum_bits = HOST_CHAR_BIT - src_offset;
2718
d2e4a39e 2719 while (n > 0)
4c4b4cd2
PH
2720 {
2721 accum = accum + ((unsigned char) *source << accum_bits);
2722 accum_bits += HOST_CHAR_BIT;
2723 source += 1;
2724 chunk_size = HOST_CHAR_BIT - targ_offset;
2725 if (chunk_size > n)
2726 chunk_size = n;
2727 mask = ((1 << chunk_size) - 1) << targ_offset;
2728 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2729 n -= chunk_size;
2730 accum_bits -= chunk_size;
2731 accum >>= chunk_size;
2732 target += 1;
2733 targ_offset = 0;
2734 }
14f9c5c9
AS
2735 }
2736}
2737
14f9c5c9
AS
2738/* Store the contents of FROMVAL into the location of TOVAL.
2739 Return a new value with the location of TOVAL and contents of
2740 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2741 floating-point or non-scalar types. */
14f9c5c9 2742
d2e4a39e
AS
2743static struct value *
2744ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2745{
df407dfe
AC
2746 struct type *type = value_type (toval);
2747 int bits = value_bitsize (toval);
14f9c5c9 2748
52ce6436
PH
2749 toval = ada_coerce_ref (toval);
2750 fromval = ada_coerce_ref (fromval);
2751
2752 if (ada_is_direct_array_type (value_type (toval)))
2753 toval = ada_coerce_to_simple_array (toval);
2754 if (ada_is_direct_array_type (value_type (fromval)))
2755 fromval = ada_coerce_to_simple_array (fromval);
2756
88e3b34b 2757 if (!deprecated_value_modifiable (toval))
323e0a4a 2758 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2759
d2e4a39e 2760 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2761 && bits > 0
d2e4a39e 2762 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2763 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2764 {
df407dfe
AC
2765 int len = (value_bitpos (toval)
2766 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2767 int from_size;
224c3ddb 2768 gdb_byte *buffer = (gdb_byte *) alloca (len);
d2e4a39e 2769 struct value *val;
42ae5230 2770 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2771
2772 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2773 fromval = value_cast (type, fromval);
14f9c5c9 2774
52ce6436 2775 read_memory (to_addr, buffer, len);
aced2898
PH
2776 from_size = value_bitsize (fromval);
2777 if (from_size == 0)
2778 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2779 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2780 move_bits (buffer, value_bitpos (toval),
50810684 2781 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2782 else
50810684
UW
2783 move_bits (buffer, value_bitpos (toval),
2784 value_contents (fromval), 0, bits, 0);
972daa01 2785 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2786
14f9c5c9 2787 val = value_copy (toval);
0fd88904 2788 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2789 TYPE_LENGTH (type));
04624583 2790 deprecated_set_value_type (val, type);
d2e4a39e 2791
14f9c5c9
AS
2792 return val;
2793 }
2794
2795 return value_assign (toval, fromval);
2796}
2797
2798
7c512744
JB
2799/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2800 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2801 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2802 COMPONENT, and not the inferior's memory. The current contents
2803 of COMPONENT are ignored.
2804
2805 Although not part of the initial design, this function also works
2806 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2807 had a null address, and COMPONENT had an address which is equal to
2808 its offset inside CONTAINER. */
2809
52ce6436
PH
2810static void
2811value_assign_to_component (struct value *container, struct value *component,
2812 struct value *val)
2813{
2814 LONGEST offset_in_container =
42ae5230 2815 (LONGEST) (value_address (component) - value_address (container));
7c512744 2816 int bit_offset_in_container =
52ce6436
PH
2817 value_bitpos (component) - value_bitpos (container);
2818 int bits;
7c512744 2819
52ce6436
PH
2820 val = value_cast (value_type (component), val);
2821
2822 if (value_bitsize (component) == 0)
2823 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2824 else
2825 bits = value_bitsize (component);
2826
50810684 2827 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
2a62dfa9
JB
2828 {
2829 int src_offset;
2830
2831 if (is_scalar_type (check_typedef (value_type (component))))
2832 src_offset
2833 = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2834 else
2835 src_offset = 0;
2836 move_bits (value_contents_writeable (container) + offset_in_container,
2837 value_bitpos (container) + bit_offset_in_container,
2838 value_contents (val), src_offset, bits, 1);
2839 }
52ce6436 2840 else
7c512744 2841 move_bits (value_contents_writeable (container) + offset_in_container,
52ce6436 2842 value_bitpos (container) + bit_offset_in_container,
50810684 2843 value_contents (val), 0, bits, 0);
7c512744
JB
2844}
2845
736ade86
XR
2846/* Determine if TYPE is an access to an unconstrained array. */
2847
d91e9ea8 2848bool
736ade86
XR
2849ada_is_access_to_unconstrained_array (struct type *type)
2850{
2851 return (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
2852 && is_thick_pntr (ada_typedef_target_type (type)));
2853}
2854
4c4b4cd2
PH
2855/* The value of the element of array ARR at the ARITY indices given in IND.
2856 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2857 thereto. */
2858
d2e4a39e
AS
2859struct value *
2860ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2861{
2862 int k;
d2e4a39e
AS
2863 struct value *elt;
2864 struct type *elt_type;
14f9c5c9
AS
2865
2866 elt = ada_coerce_to_simple_array (arr);
2867
df407dfe 2868 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2869 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2870 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2871 return value_subscript_packed (elt, arity, ind);
2872
2873 for (k = 0; k < arity; k += 1)
2874 {
b9c50e9a
XR
2875 struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2876
14f9c5c9 2877 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2878 error (_("too many subscripts (%d expected)"), k);
b9c50e9a 2879
2497b498 2880 elt = value_subscript (elt, pos_atr (ind[k]));
b9c50e9a
XR
2881
2882 if (ada_is_access_to_unconstrained_array (saved_elt_type)
2883 && TYPE_CODE (value_type (elt)) != TYPE_CODE_TYPEDEF)
2884 {
2885 /* The element is a typedef to an unconstrained array,
2886 except that the value_subscript call stripped the
2887 typedef layer. The typedef layer is GNAT's way to
2888 specify that the element is, at the source level, an
2889 access to the unconstrained array, rather than the
2890 unconstrained array. So, we need to restore that
2891 typedef layer, which we can do by forcing the element's
2892 type back to its original type. Otherwise, the returned
2893 value is going to be printed as the array, rather
2894 than as an access. Another symptom of the same issue
2895 would be that an expression trying to dereference the
2896 element would also be improperly rejected. */
2897 deprecated_set_value_type (elt, saved_elt_type);
2898 }
2899
2900 elt_type = ada_check_typedef (value_type (elt));
14f9c5c9 2901 }
b9c50e9a 2902
14f9c5c9
AS
2903 return elt;
2904}
2905
deede10c
JB
2906/* Assuming ARR is a pointer to a GDB array, the value of the element
2907 of *ARR at the ARITY indices given in IND.
919e6dbe
PMR
2908 Does not read the entire array into memory.
2909
2910 Note: Unlike what one would expect, this function is used instead of
2911 ada_value_subscript for basically all non-packed array types. The reason
2912 for this is that a side effect of doing our own pointer arithmetics instead
2913 of relying on value_subscript is that there is no implicit typedef peeling.
2914 This is important for arrays of array accesses, where it allows us to
2915 preserve the fact that the array's element is an array access, where the
2916 access part os encoded in a typedef layer. */
14f9c5c9 2917
2c0b251b 2918static struct value *
deede10c 2919ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2920{
2921 int k;
919e6dbe 2922 struct value *array_ind = ada_value_ind (arr);
deede10c 2923 struct type *type
919e6dbe
PMR
2924 = check_typedef (value_enclosing_type (array_ind));
2925
2926 if (TYPE_CODE (type) == TYPE_CODE_ARRAY
2927 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2928 return value_subscript_packed (array_ind, arity, ind);
14f9c5c9
AS
2929
2930 for (k = 0; k < arity; k += 1)
2931 {
2932 LONGEST lwb, upb;
aa715135 2933 struct value *lwb_value;
14f9c5c9
AS
2934
2935 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2936 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2937 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2938 value_copy (arr));
14f9c5c9 2939 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
aa715135
JG
2940 lwb_value = value_from_longest (value_type(ind[k]), lwb);
2941 arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
14f9c5c9
AS
2942 type = TYPE_TARGET_TYPE (type);
2943 }
2944
2945 return value_ind (arr);
2946}
2947
0b5d8877 2948/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2949 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2950 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2951 this array is LOW, as per Ada rules. */
0b5d8877 2952static struct value *
f5938064
JG
2953ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2954 int low, int high)
0b5d8877 2955{
b0dd7688 2956 struct type *type0 = ada_check_typedef (type);
aa715135 2957 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
0c9c3474 2958 struct type *index_type
aa715135 2959 = create_static_range_type (NULL, base_index_type, low, high);
9fe561ab
JB
2960 struct type *slice_type = create_array_type_with_stride
2961 (NULL, TYPE_TARGET_TYPE (type0), index_type,
2962 get_dyn_prop (DYN_PROP_BYTE_STRIDE, type0),
2963 TYPE_FIELD_BITSIZE (type0, 0));
aa715135
JG
2964 int base_low = ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2965 LONGEST base_low_pos, low_pos;
2966 CORE_ADDR base;
2967
2968 if (!discrete_position (base_index_type, low, &low_pos)
2969 || !discrete_position (base_index_type, base_low, &base_low_pos))
2970 {
2971 warning (_("unable to get positions in slice, use bounds instead"));
2972 low_pos = low;
2973 base_low_pos = base_low;
2974 }
5b4ee69b 2975
aa715135
JG
2976 base = value_as_address (array_ptr)
2977 + ((low_pos - base_low_pos)
2978 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
f5938064 2979 return value_at_lazy (slice_type, base);
0b5d8877
PH
2980}
2981
2982
2983static struct value *
2984ada_value_slice (struct value *array, int low, int high)
2985{
b0dd7688 2986 struct type *type = ada_check_typedef (value_type (array));
aa715135 2987 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
0c9c3474
SA
2988 struct type *index_type
2989 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
9fe561ab
JB
2990 struct type *slice_type = create_array_type_with_stride
2991 (NULL, TYPE_TARGET_TYPE (type), index_type,
2992 get_dyn_prop (DYN_PROP_BYTE_STRIDE, type),
2993 TYPE_FIELD_BITSIZE (type, 0));
aa715135 2994 LONGEST low_pos, high_pos;
5b4ee69b 2995
aa715135
JG
2996 if (!discrete_position (base_index_type, low, &low_pos)
2997 || !discrete_position (base_index_type, high, &high_pos))
2998 {
2999 warning (_("unable to get positions in slice, use bounds instead"));
3000 low_pos = low;
3001 high_pos = high;
3002 }
3003
3004 return value_cast (slice_type,
3005 value_slice (array, low, high_pos - low_pos + 1));
0b5d8877
PH
3006}
3007
14f9c5c9
AS
3008/* If type is a record type in the form of a standard GNAT array
3009 descriptor, returns the number of dimensions for type. If arr is a
3010 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 3011 type designation. Otherwise, returns 0. */
14f9c5c9
AS
3012
3013int
d2e4a39e 3014ada_array_arity (struct type *type)
14f9c5c9
AS
3015{
3016 int arity;
3017
3018 if (type == NULL)
3019 return 0;
3020
3021 type = desc_base_type (type);
3022
3023 arity = 0;
d2e4a39e 3024 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 3025 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
3026 else
3027 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 3028 {
4c4b4cd2 3029 arity += 1;
61ee279c 3030 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 3031 }
d2e4a39e 3032
14f9c5c9
AS
3033 return arity;
3034}
3035
3036/* If TYPE is a record type in the form of a standard GNAT array
3037 descriptor or a simple array type, returns the element type for
3038 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 3039 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 3040
d2e4a39e
AS
3041struct type *
3042ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
3043{
3044 type = desc_base_type (type);
3045
d2e4a39e 3046 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
3047 {
3048 int k;
d2e4a39e 3049 struct type *p_array_type;
14f9c5c9 3050
556bdfd4 3051 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
3052
3053 k = ada_array_arity (type);
3054 if (k == 0)
4c4b4cd2 3055 return NULL;
d2e4a39e 3056
4c4b4cd2 3057 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 3058 if (nindices >= 0 && k > nindices)
4c4b4cd2 3059 k = nindices;
d2e4a39e 3060 while (k > 0 && p_array_type != NULL)
4c4b4cd2 3061 {
61ee279c 3062 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
3063 k -= 1;
3064 }
14f9c5c9
AS
3065 return p_array_type;
3066 }
3067 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
3068 {
3069 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
3070 {
3071 type = TYPE_TARGET_TYPE (type);
3072 nindices -= 1;
3073 }
14f9c5c9
AS
3074 return type;
3075 }
3076
3077 return NULL;
3078}
3079
4c4b4cd2 3080/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
3081 Does not examine memory. Throws an error if N is invalid or TYPE
3082 is not an array type. NAME is the name of the Ada attribute being
3083 evaluated ('range, 'first, 'last, or 'length); it is used in building
3084 the error message. */
14f9c5c9 3085
1eea4ebd
UW
3086static struct type *
3087ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 3088{
4c4b4cd2
PH
3089 struct type *result_type;
3090
14f9c5c9
AS
3091 type = desc_base_type (type);
3092
1eea4ebd
UW
3093 if (n < 0 || n > ada_array_arity (type))
3094 error (_("invalid dimension number to '%s"), name);
14f9c5c9 3095
4c4b4cd2 3096 if (ada_is_simple_array_type (type))
14f9c5c9
AS
3097 {
3098 int i;
3099
3100 for (i = 1; i < n; i += 1)
4c4b4cd2 3101 type = TYPE_TARGET_TYPE (type);
262452ec 3102 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
3103 /* FIXME: The stabs type r(0,0);bound;bound in an array type
3104 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 3105 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
3106 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
3107 result_type = NULL;
14f9c5c9 3108 }
d2e4a39e 3109 else
1eea4ebd
UW
3110 {
3111 result_type = desc_index_type (desc_bounds_type (type), n);
3112 if (result_type == NULL)
3113 error (_("attempt to take bound of something that is not an array"));
3114 }
3115
3116 return result_type;
14f9c5c9
AS
3117}
3118
3119/* Given that arr is an array type, returns the lower bound of the
3120 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 3121 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
3122 array-descriptor type. It works for other arrays with bounds supplied
3123 by run-time quantities other than discriminants. */
14f9c5c9 3124
abb68b3e 3125static LONGEST
fb5e3d5c 3126ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 3127{
8a48ac95 3128 struct type *type, *index_type_desc, *index_type;
1ce677a4 3129 int i;
262452ec
JK
3130
3131 gdb_assert (which == 0 || which == 1);
14f9c5c9 3132
ad82864c
JB
3133 if (ada_is_constrained_packed_array_type (arr_type))
3134 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 3135
4c4b4cd2 3136 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 3137 return (LONGEST) - which;
14f9c5c9
AS
3138
3139 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
3140 type = TYPE_TARGET_TYPE (arr_type);
3141 else
3142 type = arr_type;
3143
bafffb51
JB
3144 if (TYPE_FIXED_INSTANCE (type))
3145 {
3146 /* The array has already been fixed, so we do not need to
3147 check the parallel ___XA type again. That encoding has
3148 already been applied, so ignore it now. */
3149 index_type_desc = NULL;
3150 }
3151 else
3152 {
3153 index_type_desc = ada_find_parallel_type (type, "___XA");
3154 ada_fixup_array_indexes_type (index_type_desc);
3155 }
3156
262452ec 3157 if (index_type_desc != NULL)
28c85d6c
JB
3158 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
3159 NULL);
262452ec 3160 else
8a48ac95
JB
3161 {
3162 struct type *elt_type = check_typedef (type);
3163
3164 for (i = 1; i < n; i++)
3165 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
3166
3167 index_type = TYPE_INDEX_TYPE (elt_type);
3168 }
262452ec 3169
43bbcdc2
PH
3170 return
3171 (LONGEST) (which == 0
3172 ? ada_discrete_type_low_bound (index_type)
3173 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
3174}
3175
3176/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
3177 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3178 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3179 supplied by run-time quantities other than discriminants. */
14f9c5c9 3180
1eea4ebd 3181static LONGEST
4dc81987 3182ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3183{
eb479039
JB
3184 struct type *arr_type;
3185
3186 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3187 arr = value_ind (arr);
3188 arr_type = value_enclosing_type (arr);
14f9c5c9 3189
ad82864c
JB
3190 if (ada_is_constrained_packed_array_type (arr_type))
3191 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3192 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3193 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3194 else
1eea4ebd 3195 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3196}
3197
3198/* Given that arr is an array value, returns the length of the
3199 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3200 supplied by run-time quantities other than discriminants.
3201 Does not work for arrays indexed by enumeration types with representation
3202 clauses at the moment. */
14f9c5c9 3203
1eea4ebd 3204static LONGEST
d2e4a39e 3205ada_array_length (struct value *arr, int n)
14f9c5c9 3206{
aa715135
JG
3207 struct type *arr_type, *index_type;
3208 int low, high;
eb479039
JB
3209
3210 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3211 arr = value_ind (arr);
3212 arr_type = value_enclosing_type (arr);
14f9c5c9 3213
ad82864c
JB
3214 if (ada_is_constrained_packed_array_type (arr_type))
3215 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3216
4c4b4cd2 3217 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3218 {
3219 low = ada_array_bound_from_type (arr_type, n, 0);
3220 high = ada_array_bound_from_type (arr_type, n, 1);
3221 }
14f9c5c9 3222 else
aa715135
JG
3223 {
3224 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3225 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3226 }
3227
f168693b 3228 arr_type = check_typedef (arr_type);
7150d33c 3229 index_type = ada_index_type (arr_type, n, "length");
aa715135
JG
3230 if (index_type != NULL)
3231 {
3232 struct type *base_type;
3233 if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
3234 base_type = TYPE_TARGET_TYPE (index_type);
3235 else
3236 base_type = index_type;
3237
3238 low = pos_atr (value_from_longest (base_type, low));
3239 high = pos_atr (value_from_longest (base_type, high));
3240 }
3241 return high - low + 1;
4c4b4cd2
PH
3242}
3243
3244/* An empty array whose type is that of ARR_TYPE (an array type),
3245 with bounds LOW to LOW-1. */
3246
3247static struct value *
3248empty_array (struct type *arr_type, int low)
3249{
b0dd7688 3250 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3251 struct type *index_type
3252 = create_static_range_type
3253 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, low - 1);
b0dd7688 3254 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3255
0b5d8877 3256 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3257}
14f9c5c9 3258\f
d2e4a39e 3259
4c4b4cd2 3260 /* Name resolution */
14f9c5c9 3261
4c4b4cd2
PH
3262/* The "decoded" name for the user-definable Ada operator corresponding
3263 to OP. */
14f9c5c9 3264
d2e4a39e 3265static const char *
4c4b4cd2 3266ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3267{
3268 int i;
3269
4c4b4cd2 3270 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3271 {
3272 if (ada_opname_table[i].op == op)
4c4b4cd2 3273 return ada_opname_table[i].decoded;
14f9c5c9 3274 }
323e0a4a 3275 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3276}
3277
3278
4c4b4cd2
PH
3279/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3280 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3281 undefined namespace) and converts operators that are
3282 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
3283 non-null, it provides a preferred result type [at the moment, only
3284 type void has any effect---causing procedures to be preferred over
3285 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 3286 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3287
4c4b4cd2 3288static void
e9d9f57e 3289resolve (expression_up *expp, int void_context_p)
14f9c5c9 3290{
30b15541
UW
3291 struct type *context_type = NULL;
3292 int pc = 0;
3293
3294 if (void_context_p)
3295 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3296
3297 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
3298}
3299
4c4b4cd2
PH
3300/* Resolve the operator of the subexpression beginning at
3301 position *POS of *EXPP. "Resolving" consists of replacing
3302 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3303 with their resolutions, replacing built-in operators with
3304 function calls to user-defined operators, where appropriate, and,
3305 when DEPROCEDURE_P is non-zero, converting function-valued variables
3306 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3307 are as in ada_resolve, above. */
14f9c5c9 3308
d2e4a39e 3309static struct value *
e9d9f57e 3310resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
76a01679 3311 struct type *context_type)
14f9c5c9
AS
3312{
3313 int pc = *pos;
3314 int i;
4c4b4cd2 3315 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 3316 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
3317 struct value **argvec; /* Vector of operand types (alloca'ed). */
3318 int nargs; /* Number of operands. */
52ce6436 3319 int oplen;
14f9c5c9
AS
3320
3321 argvec = NULL;
3322 nargs = 0;
e9d9f57e 3323 exp = expp->get ();
14f9c5c9 3324
52ce6436
PH
3325 /* Pass one: resolve operands, saving their types and updating *pos,
3326 if needed. */
14f9c5c9
AS
3327 switch (op)
3328 {
4c4b4cd2
PH
3329 case OP_FUNCALL:
3330 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
3331 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3332 *pos += 7;
4c4b4cd2
PH
3333 else
3334 {
3335 *pos += 3;
3336 resolve_subexp (expp, pos, 0, NULL);
3337 }
3338 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
3339 break;
3340
14f9c5c9 3341 case UNOP_ADDR:
4c4b4cd2
PH
3342 *pos += 1;
3343 resolve_subexp (expp, pos, 0, NULL);
3344 break;
3345
52ce6436
PH
3346 case UNOP_QUAL:
3347 *pos += 3;
17466c1a 3348 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
3349 break;
3350
52ce6436 3351 case OP_ATR_MODULUS:
4c4b4cd2
PH
3352 case OP_ATR_SIZE:
3353 case OP_ATR_TAG:
4c4b4cd2
PH
3354 case OP_ATR_FIRST:
3355 case OP_ATR_LAST:
3356 case OP_ATR_LENGTH:
3357 case OP_ATR_POS:
3358 case OP_ATR_VAL:
4c4b4cd2
PH
3359 case OP_ATR_MIN:
3360 case OP_ATR_MAX:
52ce6436
PH
3361 case TERNOP_IN_RANGE:
3362 case BINOP_IN_BOUNDS:
3363 case UNOP_IN_RANGE:
3364 case OP_AGGREGATE:
3365 case OP_OTHERS:
3366 case OP_CHOICES:
3367 case OP_POSITIONAL:
3368 case OP_DISCRETE_RANGE:
3369 case OP_NAME:
3370 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3371 *pos += oplen;
14f9c5c9
AS
3372 break;
3373
3374 case BINOP_ASSIGN:
3375 {
4c4b4cd2
PH
3376 struct value *arg1;
3377
3378 *pos += 1;
3379 arg1 = resolve_subexp (expp, pos, 0, NULL);
3380 if (arg1 == NULL)
3381 resolve_subexp (expp, pos, 1, NULL);
3382 else
df407dfe 3383 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 3384 break;
14f9c5c9
AS
3385 }
3386
4c4b4cd2 3387 case UNOP_CAST:
4c4b4cd2
PH
3388 *pos += 3;
3389 nargs = 1;
3390 break;
14f9c5c9 3391
4c4b4cd2
PH
3392 case BINOP_ADD:
3393 case BINOP_SUB:
3394 case BINOP_MUL:
3395 case BINOP_DIV:
3396 case BINOP_REM:
3397 case BINOP_MOD:
3398 case BINOP_EXP:
3399 case BINOP_CONCAT:
3400 case BINOP_LOGICAL_AND:
3401 case BINOP_LOGICAL_OR:
3402 case BINOP_BITWISE_AND:
3403 case BINOP_BITWISE_IOR:
3404 case BINOP_BITWISE_XOR:
14f9c5c9 3405
4c4b4cd2
PH
3406 case BINOP_EQUAL:
3407 case BINOP_NOTEQUAL:
3408 case BINOP_LESS:
3409 case BINOP_GTR:
3410 case BINOP_LEQ:
3411 case BINOP_GEQ:
14f9c5c9 3412
4c4b4cd2
PH
3413 case BINOP_REPEAT:
3414 case BINOP_SUBSCRIPT:
3415 case BINOP_COMMA:
40c8aaa9
JB
3416 *pos += 1;
3417 nargs = 2;
3418 break;
14f9c5c9 3419
4c4b4cd2
PH
3420 case UNOP_NEG:
3421 case UNOP_PLUS:
3422 case UNOP_LOGICAL_NOT:
3423 case UNOP_ABS:
3424 case UNOP_IND:
3425 *pos += 1;
3426 nargs = 1;
3427 break;
14f9c5c9 3428
4c4b4cd2 3429 case OP_LONG:
edd079d9 3430 case OP_FLOAT:
4c4b4cd2 3431 case OP_VAR_VALUE:
74ea4be4 3432 case OP_VAR_MSYM_VALUE:
4c4b4cd2
PH
3433 *pos += 4;
3434 break;
14f9c5c9 3435
4c4b4cd2
PH
3436 case OP_TYPE:
3437 case OP_BOOL:
3438 case OP_LAST:
4c4b4cd2
PH
3439 case OP_INTERNALVAR:
3440 *pos += 3;
3441 break;
14f9c5c9 3442
4c4b4cd2
PH
3443 case UNOP_MEMVAL:
3444 *pos += 3;
3445 nargs = 1;
3446 break;
3447
67f3407f
DJ
3448 case OP_REGISTER:
3449 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3450 break;
3451
4c4b4cd2
PH
3452 case STRUCTOP_STRUCT:
3453 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3454 nargs = 1;
3455 break;
3456
4c4b4cd2 3457 case TERNOP_SLICE:
4c4b4cd2
PH
3458 *pos += 1;
3459 nargs = 3;
3460 break;
3461
52ce6436 3462 case OP_STRING:
14f9c5c9 3463 break;
4c4b4cd2
PH
3464
3465 default:
323e0a4a 3466 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3467 }
3468
8d749320 3469 argvec = XALLOCAVEC (struct value *, nargs + 1);
4c4b4cd2
PH
3470 for (i = 0; i < nargs; i += 1)
3471 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3472 argvec[i] = NULL;
e9d9f57e 3473 exp = expp->get ();
4c4b4cd2
PH
3474
3475 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3476 switch (op)
3477 {
3478 default:
3479 break;
3480
14f9c5c9 3481 case OP_VAR_VALUE:
4c4b4cd2 3482 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679 3483 {
54d343a2 3484 std::vector<struct block_symbol> candidates;
76a01679
JB
3485 int n_candidates;
3486
3487 n_candidates =
3488 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3489 (exp->elts[pc + 2].symbol),
3490 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3491 &candidates);
76a01679
JB
3492
3493 if (n_candidates > 1)
3494 {
3495 /* Types tend to get re-introduced locally, so if there
3496 are any local symbols that are not types, first filter
3497 out all types. */
3498 int j;
3499 for (j = 0; j < n_candidates; j += 1)
d12307c1 3500 switch (SYMBOL_CLASS (candidates[j].symbol))
76a01679
JB
3501 {
3502 case LOC_REGISTER:
3503 case LOC_ARG:
3504 case LOC_REF_ARG:
76a01679
JB
3505 case LOC_REGPARM_ADDR:
3506 case LOC_LOCAL:
76a01679 3507 case LOC_COMPUTED:
76a01679
JB
3508 goto FoundNonType;
3509 default:
3510 break;
3511 }
3512 FoundNonType:
3513 if (j < n_candidates)
3514 {
3515 j = 0;
3516 while (j < n_candidates)
3517 {
d12307c1 3518 if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
76a01679
JB
3519 {
3520 candidates[j] = candidates[n_candidates - 1];
3521 n_candidates -= 1;
3522 }
3523 else
3524 j += 1;
3525 }
3526 }
3527 }
3528
3529 if (n_candidates == 0)
323e0a4a 3530 error (_("No definition found for %s"),
76a01679
JB
3531 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3532 else if (n_candidates == 1)
3533 i = 0;
3534 else if (deprocedure_p
54d343a2 3535 && !is_nonfunction (candidates.data (), n_candidates))
76a01679 3536 {
06d5cf63 3537 i = ada_resolve_function
54d343a2 3538 (candidates.data (), n_candidates, NULL, 0,
06d5cf63
JB
3539 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3540 context_type);
76a01679 3541 if (i < 0)
323e0a4a 3542 error (_("Could not find a match for %s"),
76a01679
JB
3543 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3544 }
3545 else
3546 {
323e0a4a 3547 printf_filtered (_("Multiple matches for %s\n"),
76a01679 3548 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
54d343a2 3549 user_select_syms (candidates.data (), n_candidates, 1);
76a01679
JB
3550 i = 0;
3551 }
3552
3553 exp->elts[pc + 1].block = candidates[i].block;
d12307c1 3554 exp->elts[pc + 2].symbol = candidates[i].symbol;
aee1fcdf 3555 innermost_block.update (candidates[i]);
76a01679
JB
3556 }
3557
3558 if (deprocedure_p
3559 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3560 == TYPE_CODE_FUNC))
3561 {
424da6cf 3562 replace_operator_with_call (expp, pc, 0, 4,
76a01679
JB
3563 exp->elts[pc + 2].symbol,
3564 exp->elts[pc + 1].block);
e9d9f57e 3565 exp = expp->get ();
76a01679 3566 }
14f9c5c9
AS
3567 break;
3568
3569 case OP_FUNCALL:
3570 {
4c4b4cd2 3571 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3572 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2 3573 {
54d343a2 3574 std::vector<struct block_symbol> candidates;
4c4b4cd2
PH
3575 int n_candidates;
3576
3577 n_candidates =
76a01679
JB
3578 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3579 (exp->elts[pc + 5].symbol),
3580 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3581 &candidates);
ec6a20c2 3582
4c4b4cd2
PH
3583 if (n_candidates == 1)
3584 i = 0;
3585 else
3586 {
06d5cf63 3587 i = ada_resolve_function
54d343a2 3588 (candidates.data (), n_candidates,
06d5cf63
JB
3589 argvec, nargs,
3590 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3591 context_type);
4c4b4cd2 3592 if (i < 0)
323e0a4a 3593 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3594 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3595 }
3596
3597 exp->elts[pc + 4].block = candidates[i].block;
d12307c1 3598 exp->elts[pc + 5].symbol = candidates[i].symbol;
aee1fcdf 3599 innermost_block.update (candidates[i]);
4c4b4cd2 3600 }
14f9c5c9
AS
3601 }
3602 break;
3603 case BINOP_ADD:
3604 case BINOP_SUB:
3605 case BINOP_MUL:
3606 case BINOP_DIV:
3607 case BINOP_REM:
3608 case BINOP_MOD:
3609 case BINOP_CONCAT:
3610 case BINOP_BITWISE_AND:
3611 case BINOP_BITWISE_IOR:
3612 case BINOP_BITWISE_XOR:
3613 case BINOP_EQUAL:
3614 case BINOP_NOTEQUAL:
3615 case BINOP_LESS:
3616 case BINOP_GTR:
3617 case BINOP_LEQ:
3618 case BINOP_GEQ:
3619 case BINOP_EXP:
3620 case UNOP_NEG:
3621 case UNOP_PLUS:
3622 case UNOP_LOGICAL_NOT:
3623 case UNOP_ABS:
3624 if (possible_user_operator_p (op, argvec))
4c4b4cd2 3625 {
54d343a2 3626 std::vector<struct block_symbol> candidates;
4c4b4cd2
PH
3627 int n_candidates;
3628
3629 n_candidates =
b5ec771e 3630 ada_lookup_symbol_list (ada_decoded_op_name (op),
4c4b4cd2 3631 (struct block *) NULL, VAR_DOMAIN,
4eeaa230 3632 &candidates);
ec6a20c2 3633
54d343a2
TT
3634 i = ada_resolve_function (candidates.data (), n_candidates, argvec,
3635 nargs, ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3636 if (i < 0)
3637 break;
3638
d12307c1
PMR
3639 replace_operator_with_call (expp, pc, nargs, 1,
3640 candidates[i].symbol,
3641 candidates[i].block);
e9d9f57e 3642 exp = expp->get ();
4c4b4cd2 3643 }
14f9c5c9 3644 break;
4c4b4cd2
PH
3645
3646 case OP_TYPE:
b3dbf008 3647 case OP_REGISTER:
4c4b4cd2 3648 return NULL;
14f9c5c9
AS
3649 }
3650
3651 *pos = pc;
ced9779b
JB
3652 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3653 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3654 exp->elts[pc + 1].objfile,
3655 exp->elts[pc + 2].msymbol);
3656 else
3657 return evaluate_subexp_type (exp, pos);
14f9c5c9
AS
3658}
3659
3660/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3661 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3662 a non-pointer. */
14f9c5c9 3663/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3664 liberal. */
14f9c5c9
AS
3665
3666static int
4dc81987 3667ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3668{
61ee279c
PH
3669 ftype = ada_check_typedef (ftype);
3670 atype = ada_check_typedef (atype);
14f9c5c9
AS
3671
3672 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3673 ftype = TYPE_TARGET_TYPE (ftype);
3674 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3675 atype = TYPE_TARGET_TYPE (atype);
3676
d2e4a39e 3677 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3678 {
3679 default:
5b3d5b7d 3680 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3681 case TYPE_CODE_PTR:
3682 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3683 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3684 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3685 else
1265e4aa
JB
3686 return (may_deref
3687 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3688 case TYPE_CODE_INT:
3689 case TYPE_CODE_ENUM:
3690 case TYPE_CODE_RANGE:
3691 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3692 {
3693 case TYPE_CODE_INT:
3694 case TYPE_CODE_ENUM:
3695 case TYPE_CODE_RANGE:
3696 return 1;
3697 default:
3698 return 0;
3699 }
14f9c5c9
AS
3700
3701 case TYPE_CODE_ARRAY:
d2e4a39e 3702 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3703 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3704
3705 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3706 if (ada_is_array_descriptor_type (ftype))
3707 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3708 || ada_is_array_descriptor_type (atype));
14f9c5c9 3709 else
4c4b4cd2
PH
3710 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3711 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3712
3713 case TYPE_CODE_UNION:
3714 case TYPE_CODE_FLT:
3715 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3716 }
3717}
3718
3719/* Return non-zero if the formals of FUNC "sufficiently match" the
3720 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3721 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3722 argument function. */
14f9c5c9
AS
3723
3724static int
d2e4a39e 3725ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3726{
3727 int i;
d2e4a39e 3728 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3729
1265e4aa
JB
3730 if (SYMBOL_CLASS (func) == LOC_CONST
3731 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3732 return (n_actuals == 0);
3733 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3734 return 0;
3735
3736 if (TYPE_NFIELDS (func_type) != n_actuals)
3737 return 0;
3738
3739 for (i = 0; i < n_actuals; i += 1)
3740 {
4c4b4cd2 3741 if (actuals[i] == NULL)
76a01679
JB
3742 return 0;
3743 else
3744 {
5b4ee69b
MS
3745 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3746 i));
df407dfe 3747 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3748
76a01679
JB
3749 if (!ada_type_match (ftype, atype, 1))
3750 return 0;
3751 }
14f9c5c9
AS
3752 }
3753 return 1;
3754}
3755
3756/* False iff function type FUNC_TYPE definitely does not produce a value
3757 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3758 FUNC_TYPE is not a valid function type with a non-null return type
3759 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3760
3761static int
d2e4a39e 3762return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3763{
d2e4a39e 3764 struct type *return_type;
14f9c5c9
AS
3765
3766 if (func_type == NULL)
3767 return 1;
3768
4c4b4cd2 3769 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3770 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3771 else
18af8284 3772 return_type = get_base_type (func_type);
14f9c5c9
AS
3773 if (return_type == NULL)
3774 return 1;
3775
18af8284 3776 context_type = get_base_type (context_type);
14f9c5c9
AS
3777
3778 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3779 return context_type == NULL || return_type == context_type;
3780 else if (context_type == NULL)
3781 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3782 else
3783 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3784}
3785
3786
4c4b4cd2 3787/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3788 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3789 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3790 that returns that type, then eliminate matches that don't. If
3791 CONTEXT_TYPE is void and there is at least one match that does not
3792 return void, eliminate all matches that do.
3793
14f9c5c9
AS
3794 Asks the user if there is more than one match remaining. Returns -1
3795 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3796 solely for messages. May re-arrange and modify SYMS in
3797 the process; the index returned is for the modified vector. */
14f9c5c9 3798
4c4b4cd2 3799static int
d12307c1 3800ada_resolve_function (struct block_symbol syms[],
4c4b4cd2
PH
3801 int nsyms, struct value **args, int nargs,
3802 const char *name, struct type *context_type)
14f9c5c9 3803{
30b15541 3804 int fallback;
14f9c5c9 3805 int k;
4c4b4cd2 3806 int m; /* Number of hits */
14f9c5c9 3807
d2e4a39e 3808 m = 0;
30b15541
UW
3809 /* In the first pass of the loop, we only accept functions matching
3810 context_type. If none are found, we add a second pass of the loop
3811 where every function is accepted. */
3812 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3813 {
3814 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3815 {
d12307c1 3816 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
4c4b4cd2 3817
d12307c1 3818 if (ada_args_match (syms[k].symbol, args, nargs)
30b15541 3819 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3820 {
3821 syms[m] = syms[k];
3822 m += 1;
3823 }
3824 }
14f9c5c9
AS
3825 }
3826
dc5c8746
PMR
3827 /* If we got multiple matches, ask the user which one to use. Don't do this
3828 interactive thing during completion, though, as the purpose of the
3829 completion is providing a list of all possible matches. Prompting the
3830 user to filter it down would be completely unexpected in this case. */
14f9c5c9
AS
3831 if (m == 0)
3832 return -1;
dc5c8746 3833 else if (m > 1 && !parse_completion)
14f9c5c9 3834 {
323e0a4a 3835 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3836 user_select_syms (syms, m, 1);
14f9c5c9
AS
3837 return 0;
3838 }
3839 return 0;
3840}
3841
4c4b4cd2
PH
3842/* Returns true (non-zero) iff decoded name N0 should appear before N1
3843 in a listing of choices during disambiguation (see sort_choices, below).
3844 The idea is that overloadings of a subprogram name from the
3845 same package should sort in their source order. We settle for ordering
3846 such symbols by their trailing number (__N or $N). */
3847
14f9c5c9 3848static int
0d5cff50 3849encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3850{
3851 if (N1 == NULL)
3852 return 0;
3853 else if (N0 == NULL)
3854 return 1;
3855 else
3856 {
3857 int k0, k1;
5b4ee69b 3858
d2e4a39e 3859 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3860 ;
d2e4a39e 3861 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3862 ;
d2e4a39e 3863 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3864 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3865 {
3866 int n0, n1;
5b4ee69b 3867
4c4b4cd2
PH
3868 n0 = k0;
3869 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3870 n0 -= 1;
3871 n1 = k1;
3872 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3873 n1 -= 1;
3874 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3875 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3876 }
14f9c5c9
AS
3877 return (strcmp (N0, N1) < 0);
3878 }
3879}
d2e4a39e 3880
4c4b4cd2
PH
3881/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3882 encoded names. */
3883
d2e4a39e 3884static void
d12307c1 3885sort_choices (struct block_symbol syms[], int nsyms)
14f9c5c9 3886{
4c4b4cd2 3887 int i;
5b4ee69b 3888
d2e4a39e 3889 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3890 {
d12307c1 3891 struct block_symbol sym = syms[i];
14f9c5c9
AS
3892 int j;
3893
d2e4a39e 3894 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2 3895 {
d12307c1
PMR
3896 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].symbol),
3897 SYMBOL_LINKAGE_NAME (sym.symbol)))
4c4b4cd2
PH
3898 break;
3899 syms[j + 1] = syms[j];
3900 }
d2e4a39e 3901 syms[j + 1] = sym;
14f9c5c9
AS
3902 }
3903}
3904
d72413e6
PMR
3905/* Whether GDB should display formals and return types for functions in the
3906 overloads selection menu. */
3907static int print_signatures = 1;
3908
3909/* Print the signature for SYM on STREAM according to the FLAGS options. For
3910 all but functions, the signature is just the name of the symbol. For
3911 functions, this is the name of the function, the list of types for formals
3912 and the return type (if any). */
3913
3914static void
3915ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3916 const struct type_print_options *flags)
3917{
3918 struct type *type = SYMBOL_TYPE (sym);
3919
3920 fprintf_filtered (stream, "%s", SYMBOL_PRINT_NAME (sym));
3921 if (!print_signatures
3922 || type == NULL
3923 || TYPE_CODE (type) != TYPE_CODE_FUNC)
3924 return;
3925
3926 if (TYPE_NFIELDS (type) > 0)
3927 {
3928 int i;
3929
3930 fprintf_filtered (stream, " (");
3931 for (i = 0; i < TYPE_NFIELDS (type); ++i)
3932 {
3933 if (i > 0)
3934 fprintf_filtered (stream, "; ");
3935 ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0,
3936 flags);
3937 }
3938 fprintf_filtered (stream, ")");
3939 }
3940 if (TYPE_TARGET_TYPE (type) != NULL
3941 && TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
3942 {
3943 fprintf_filtered (stream, " return ");
3944 ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3945 }
3946}
3947
4c4b4cd2
PH
3948/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3949 by asking the user (if necessary), returning the number selected,
3950 and setting the first elements of SYMS items. Error if no symbols
3951 selected. */
14f9c5c9
AS
3952
3953/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3954 to be re-integrated one of these days. */
14f9c5c9
AS
3955
3956int
d12307c1 3957user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
14f9c5c9
AS
3958{
3959 int i;
8d749320 3960 int *chosen = XALLOCAVEC (int , nsyms);
14f9c5c9
AS
3961 int n_chosen;
3962 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3963 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3964
3965 if (max_results < 1)
323e0a4a 3966 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3967 if (nsyms <= 1)
3968 return nsyms;
3969
717d2f5a
JB
3970 if (select_mode == multiple_symbols_cancel)
3971 error (_("\
3972canceled because the command is ambiguous\n\
3973See set/show multiple-symbol."));
3974
3975 /* If select_mode is "all", then return all possible symbols.
3976 Only do that if more than one symbol can be selected, of course.
3977 Otherwise, display the menu as usual. */
3978 if (select_mode == multiple_symbols_all && max_results > 1)
3979 return nsyms;
3980
323e0a4a 3981 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3982 if (max_results > 1)
323e0a4a 3983 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3984
4c4b4cd2 3985 sort_choices (syms, nsyms);
14f9c5c9
AS
3986
3987 for (i = 0; i < nsyms; i += 1)
3988 {
d12307c1 3989 if (syms[i].symbol == NULL)
4c4b4cd2
PH
3990 continue;
3991
d12307c1 3992 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
4c4b4cd2 3993 {
76a01679 3994 struct symtab_and_line sal =
d12307c1 3995 find_function_start_sal (syms[i].symbol, 1);
5b4ee69b 3996
d72413e6
PMR
3997 printf_unfiltered ("[%d] ", i + first_choice);
3998 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3999 &type_print_raw_options);
323e0a4a 4000 if (sal.symtab == NULL)
d72413e6 4001 printf_unfiltered (_(" at <no source file available>:%d\n"),
323e0a4a
AC
4002 sal.line);
4003 else
d72413e6 4004 printf_unfiltered (_(" at %s:%d\n"),
05cba821
JK
4005 symtab_to_filename_for_display (sal.symtab),
4006 sal.line);
4c4b4cd2
PH
4007 continue;
4008 }
d2e4a39e 4009 else
4c4b4cd2
PH
4010 {
4011 int is_enumeral =
d12307c1
PMR
4012 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
4013 && SYMBOL_TYPE (syms[i].symbol) != NULL
4014 && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM);
1994afbf
DE
4015 struct symtab *symtab = NULL;
4016
d12307c1
PMR
4017 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
4018 symtab = symbol_symtab (syms[i].symbol);
4c4b4cd2 4019
d12307c1 4020 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
d72413e6
PMR
4021 {
4022 printf_unfiltered ("[%d] ", i + first_choice);
4023 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
4024 &type_print_raw_options);
4025 printf_unfiltered (_(" at %s:%d\n"),
4026 symtab_to_filename_for_display (symtab),
4027 SYMBOL_LINE (syms[i].symbol));
4028 }
76a01679 4029 else if (is_enumeral
d12307c1 4030 && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL)
4c4b4cd2 4031 {
a3f17187 4032 printf_unfiltered (("[%d] "), i + first_choice);
d12307c1 4033 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
79d43c61 4034 gdb_stdout, -1, 0, &type_print_raw_options);
323e0a4a 4035 printf_unfiltered (_("'(%s) (enumeral)\n"),
d12307c1 4036 SYMBOL_PRINT_NAME (syms[i].symbol));
4c4b4cd2 4037 }
d72413e6
PMR
4038 else
4039 {
4040 printf_unfiltered ("[%d] ", i + first_choice);
4041 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
4042 &type_print_raw_options);
4043
4044 if (symtab != NULL)
4045 printf_unfiltered (is_enumeral
4046 ? _(" in %s (enumeral)\n")
4047 : _(" at %s:?\n"),
4048 symtab_to_filename_for_display (symtab));
4049 else
4050 printf_unfiltered (is_enumeral
4051 ? _(" (enumeral)\n")
4052 : _(" at ?\n"));
4053 }
4c4b4cd2 4054 }
14f9c5c9 4055 }
d2e4a39e 4056
14f9c5c9 4057 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 4058 "overload-choice");
14f9c5c9
AS
4059
4060 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 4061 syms[i] = syms[chosen[i]];
14f9c5c9
AS
4062
4063 return n_chosen;
4064}
4065
4066/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 4067 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
4068 order in CHOICES[0 .. N-1], and return N.
4069
4070 The user types choices as a sequence of numbers on one line
4071 separated by blanks, encoding them as follows:
4072
4c4b4cd2 4073 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
4074 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
4075 + The user chooses k by typing k+IS_ALL_CHOICE+1.
4076
4c4b4cd2 4077 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
4078
4079 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 4080 prompts (for use with the -f switch). */
14f9c5c9
AS
4081
4082int
d2e4a39e 4083get_selections (int *choices, int n_choices, int max_results,
a121b7c1 4084 int is_all_choice, const char *annotation_suffix)
14f9c5c9 4085{
d2e4a39e 4086 char *args;
a121b7c1 4087 const char *prompt;
14f9c5c9
AS
4088 int n_chosen;
4089 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 4090
14f9c5c9
AS
4091 prompt = getenv ("PS2");
4092 if (prompt == NULL)
0bcd0149 4093 prompt = "> ";
14f9c5c9 4094
89fbedf3 4095 args = command_line_input (prompt, annotation_suffix);
d2e4a39e 4096
14f9c5c9 4097 if (args == NULL)
323e0a4a 4098 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
4099
4100 n_chosen = 0;
76a01679 4101
4c4b4cd2
PH
4102 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
4103 order, as given in args. Choices are validated. */
14f9c5c9
AS
4104 while (1)
4105 {
d2e4a39e 4106 char *args2;
14f9c5c9
AS
4107 int choice, j;
4108
0fcd72ba 4109 args = skip_spaces (args);
14f9c5c9 4110 if (*args == '\0' && n_chosen == 0)
323e0a4a 4111 error_no_arg (_("one or more choice numbers"));
14f9c5c9 4112 else if (*args == '\0')
4c4b4cd2 4113 break;
14f9c5c9
AS
4114
4115 choice = strtol (args, &args2, 10);
d2e4a39e 4116 if (args == args2 || choice < 0
4c4b4cd2 4117 || choice > n_choices + first_choice - 1)
323e0a4a 4118 error (_("Argument must be choice number"));
14f9c5c9
AS
4119 args = args2;
4120
d2e4a39e 4121 if (choice == 0)
323e0a4a 4122 error (_("cancelled"));
14f9c5c9
AS
4123
4124 if (choice < first_choice)
4c4b4cd2
PH
4125 {
4126 n_chosen = n_choices;
4127 for (j = 0; j < n_choices; j += 1)
4128 choices[j] = j;
4129 break;
4130 }
14f9c5c9
AS
4131 choice -= first_choice;
4132
d2e4a39e 4133 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
4134 {
4135 }
14f9c5c9
AS
4136
4137 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
4138 {
4139 int k;
5b4ee69b 4140
4c4b4cd2
PH
4141 for (k = n_chosen - 1; k > j; k -= 1)
4142 choices[k + 1] = choices[k];
4143 choices[j + 1] = choice;
4144 n_chosen += 1;
4145 }
14f9c5c9
AS
4146 }
4147
4148 if (n_chosen > max_results)
323e0a4a 4149 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 4150
14f9c5c9
AS
4151 return n_chosen;
4152}
4153
4c4b4cd2
PH
4154/* Replace the operator of length OPLEN at position PC in *EXPP with a call
4155 on the function identified by SYM and BLOCK, and taking NARGS
4156 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
4157
4158static void
e9d9f57e 4159replace_operator_with_call (expression_up *expp, int pc, int nargs,
4c4b4cd2 4160 int oplen, struct symbol *sym,
270140bd 4161 const struct block *block)
14f9c5c9
AS
4162{
4163 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 4164 symbol, -oplen for operator being replaced). */
d2e4a39e 4165 struct expression *newexp = (struct expression *)
8c1a34e7 4166 xzalloc (sizeof (struct expression)
4c4b4cd2 4167 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
e9d9f57e 4168 struct expression *exp = expp->get ();
14f9c5c9
AS
4169
4170 newexp->nelts = exp->nelts + 7 - oplen;
4171 newexp->language_defn = exp->language_defn;
3489610d 4172 newexp->gdbarch = exp->gdbarch;
14f9c5c9 4173 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 4174 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 4175 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
4176
4177 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
4178 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
4179
4180 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
4181 newexp->elts[pc + 4].block = block;
4182 newexp->elts[pc + 5].symbol = sym;
4183
e9d9f57e 4184 expp->reset (newexp);
d2e4a39e 4185}
14f9c5c9
AS
4186
4187/* Type-class predicates */
4188
4c4b4cd2
PH
4189/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4190 or FLOAT). */
14f9c5c9
AS
4191
4192static int
d2e4a39e 4193numeric_type_p (struct type *type)
14f9c5c9
AS
4194{
4195 if (type == NULL)
4196 return 0;
d2e4a39e
AS
4197 else
4198 {
4199 switch (TYPE_CODE (type))
4c4b4cd2
PH
4200 {
4201 case TYPE_CODE_INT:
4202 case TYPE_CODE_FLT:
4203 return 1;
4204 case TYPE_CODE_RANGE:
4205 return (type == TYPE_TARGET_TYPE (type)
4206 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4207 default:
4208 return 0;
4209 }
d2e4a39e 4210 }
14f9c5c9
AS
4211}
4212
4c4b4cd2 4213/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4214
4215static int
d2e4a39e 4216integer_type_p (struct type *type)
14f9c5c9
AS
4217{
4218 if (type == NULL)
4219 return 0;
d2e4a39e
AS
4220 else
4221 {
4222 switch (TYPE_CODE (type))
4c4b4cd2
PH
4223 {
4224 case TYPE_CODE_INT:
4225 return 1;
4226 case TYPE_CODE_RANGE:
4227 return (type == TYPE_TARGET_TYPE (type)
4228 || integer_type_p (TYPE_TARGET_TYPE (type)));
4229 default:
4230 return 0;
4231 }
d2e4a39e 4232 }
14f9c5c9
AS
4233}
4234
4c4b4cd2 4235/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4236
4237static int
d2e4a39e 4238scalar_type_p (struct type *type)
14f9c5c9
AS
4239{
4240 if (type == NULL)
4241 return 0;
d2e4a39e
AS
4242 else
4243 {
4244 switch (TYPE_CODE (type))
4c4b4cd2
PH
4245 {
4246 case TYPE_CODE_INT:
4247 case TYPE_CODE_RANGE:
4248 case TYPE_CODE_ENUM:
4249 case TYPE_CODE_FLT:
4250 return 1;
4251 default:
4252 return 0;
4253 }
d2e4a39e 4254 }
14f9c5c9
AS
4255}
4256
4c4b4cd2 4257/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4258
4259static int
d2e4a39e 4260discrete_type_p (struct type *type)
14f9c5c9
AS
4261{
4262 if (type == NULL)
4263 return 0;
d2e4a39e
AS
4264 else
4265 {
4266 switch (TYPE_CODE (type))
4c4b4cd2
PH
4267 {
4268 case TYPE_CODE_INT:
4269 case TYPE_CODE_RANGE:
4270 case TYPE_CODE_ENUM:
872f0337 4271 case TYPE_CODE_BOOL:
4c4b4cd2
PH
4272 return 1;
4273 default:
4274 return 0;
4275 }
d2e4a39e 4276 }
14f9c5c9
AS
4277}
4278
4c4b4cd2
PH
4279/* Returns non-zero if OP with operands in the vector ARGS could be
4280 a user-defined function. Errs on the side of pre-defined operators
4281 (i.e., result 0). */
14f9c5c9
AS
4282
4283static int
d2e4a39e 4284possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4285{
76a01679 4286 struct type *type0 =
df407dfe 4287 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4288 struct type *type1 =
df407dfe 4289 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4290
4c4b4cd2
PH
4291 if (type0 == NULL)
4292 return 0;
4293
14f9c5c9
AS
4294 switch (op)
4295 {
4296 default:
4297 return 0;
4298
4299 case BINOP_ADD:
4300 case BINOP_SUB:
4301 case BINOP_MUL:
4302 case BINOP_DIV:
d2e4a39e 4303 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4304
4305 case BINOP_REM:
4306 case BINOP_MOD:
4307 case BINOP_BITWISE_AND:
4308 case BINOP_BITWISE_IOR:
4309 case BINOP_BITWISE_XOR:
d2e4a39e 4310 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4311
4312 case BINOP_EQUAL:
4313 case BINOP_NOTEQUAL:
4314 case BINOP_LESS:
4315 case BINOP_GTR:
4316 case BINOP_LEQ:
4317 case BINOP_GEQ:
d2e4a39e 4318 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4319
4320 case BINOP_CONCAT:
ee90b9ab 4321 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4322
4323 case BINOP_EXP:
d2e4a39e 4324 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4325
4326 case UNOP_NEG:
4327 case UNOP_PLUS:
4328 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4329 case UNOP_ABS:
4330 return (!numeric_type_p (type0));
14f9c5c9
AS
4331
4332 }
4333}
4334\f
4c4b4cd2 4335 /* Renaming */
14f9c5c9 4336
aeb5907d
JB
4337/* NOTES:
4338
4339 1. In the following, we assume that a renaming type's name may
4340 have an ___XD suffix. It would be nice if this went away at some
4341 point.
4342 2. We handle both the (old) purely type-based representation of
4343 renamings and the (new) variable-based encoding. At some point,
4344 it is devoutly to be hoped that the former goes away
4345 (FIXME: hilfinger-2007-07-09).
4346 3. Subprogram renamings are not implemented, although the XRS
4347 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4348
4349/* If SYM encodes a renaming,
4350
4351 <renaming> renames <renamed entity>,
4352
4353 sets *LEN to the length of the renamed entity's name,
4354 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4355 the string describing the subcomponent selected from the renamed
0963b4bd 4356 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4357 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4358 are undefined). Otherwise, returns a value indicating the category
4359 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4360 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4361 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4362 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4363 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4364 may be NULL, in which case they are not assigned.
4365
4366 [Currently, however, GCC does not generate subprogram renamings.] */
4367
4368enum ada_renaming_category
4369ada_parse_renaming (struct symbol *sym,
4370 const char **renamed_entity, int *len,
4371 const char **renaming_expr)
4372{
4373 enum ada_renaming_category kind;
4374 const char *info;
4375 const char *suffix;
4376
4377 if (sym == NULL)
4378 return ADA_NOT_RENAMING;
4379 switch (SYMBOL_CLASS (sym))
14f9c5c9 4380 {
aeb5907d
JB
4381 default:
4382 return ADA_NOT_RENAMING;
4383 case LOC_TYPEDEF:
4384 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4385 renamed_entity, len, renaming_expr);
4386 case LOC_LOCAL:
4387 case LOC_STATIC:
4388 case LOC_COMPUTED:
4389 case LOC_OPTIMIZED_OUT:
4390 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4391 if (info == NULL)
4392 return ADA_NOT_RENAMING;
4393 switch (info[5])
4394 {
4395 case '_':
4396 kind = ADA_OBJECT_RENAMING;
4397 info += 6;
4398 break;
4399 case 'E':
4400 kind = ADA_EXCEPTION_RENAMING;
4401 info += 7;
4402 break;
4403 case 'P':
4404 kind = ADA_PACKAGE_RENAMING;
4405 info += 7;
4406 break;
4407 case 'S':
4408 kind = ADA_SUBPROGRAM_RENAMING;
4409 info += 7;
4410 break;
4411 default:
4412 return ADA_NOT_RENAMING;
4413 }
14f9c5c9 4414 }
4c4b4cd2 4415
aeb5907d
JB
4416 if (renamed_entity != NULL)
4417 *renamed_entity = info;
4418 suffix = strstr (info, "___XE");
4419 if (suffix == NULL || suffix == info)
4420 return ADA_NOT_RENAMING;
4421 if (len != NULL)
4422 *len = strlen (info) - strlen (suffix);
4423 suffix += 5;
4424 if (renaming_expr != NULL)
4425 *renaming_expr = suffix;
4426 return kind;
4427}
4428
4429/* Assuming TYPE encodes a renaming according to the old encoding in
4430 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4431 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4432 ADA_NOT_RENAMING otherwise. */
4433static enum ada_renaming_category
4434parse_old_style_renaming (struct type *type,
4435 const char **renamed_entity, int *len,
4436 const char **renaming_expr)
4437{
4438 enum ada_renaming_category kind;
4439 const char *name;
4440 const char *info;
4441 const char *suffix;
14f9c5c9 4442
aeb5907d
JB
4443 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4444 || TYPE_NFIELDS (type) != 1)
4445 return ADA_NOT_RENAMING;
14f9c5c9 4446
a737d952 4447 name = TYPE_NAME (type);
aeb5907d
JB
4448 if (name == NULL)
4449 return ADA_NOT_RENAMING;
4450
4451 name = strstr (name, "___XR");
4452 if (name == NULL)
4453 return ADA_NOT_RENAMING;
4454 switch (name[5])
4455 {
4456 case '\0':
4457 case '_':
4458 kind = ADA_OBJECT_RENAMING;
4459 break;
4460 case 'E':
4461 kind = ADA_EXCEPTION_RENAMING;
4462 break;
4463 case 'P':
4464 kind = ADA_PACKAGE_RENAMING;
4465 break;
4466 case 'S':
4467 kind = ADA_SUBPROGRAM_RENAMING;
4468 break;
4469 default:
4470 return ADA_NOT_RENAMING;
4471 }
14f9c5c9 4472
aeb5907d
JB
4473 info = TYPE_FIELD_NAME (type, 0);
4474 if (info == NULL)
4475 return ADA_NOT_RENAMING;
4476 if (renamed_entity != NULL)
4477 *renamed_entity = info;
4478 suffix = strstr (info, "___XE");
4479 if (renaming_expr != NULL)
4480 *renaming_expr = suffix + 5;
4481 if (suffix == NULL || suffix == info)
4482 return ADA_NOT_RENAMING;
4483 if (len != NULL)
4484 *len = suffix - info;
4485 return kind;
a5ee536b
JB
4486}
4487
4488/* Compute the value of the given RENAMING_SYM, which is expected to
4489 be a symbol encoding a renaming expression. BLOCK is the block
4490 used to evaluate the renaming. */
52ce6436 4491
a5ee536b
JB
4492static struct value *
4493ada_read_renaming_var_value (struct symbol *renaming_sym,
3977b71f 4494 const struct block *block)
a5ee536b 4495{
bbc13ae3 4496 const char *sym_name;
a5ee536b 4497
bbc13ae3 4498 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
4d01a485
PA
4499 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4500 return evaluate_expression (expr.get ());
a5ee536b 4501}
14f9c5c9 4502\f
d2e4a39e 4503
4c4b4cd2 4504 /* Evaluation: Function Calls */
14f9c5c9 4505
4c4b4cd2 4506/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4507 lvalues, and otherwise has the side-effect of allocating memory
4508 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4509
d2e4a39e 4510static struct value *
40bc484c 4511ensure_lval (struct value *val)
14f9c5c9 4512{
40bc484c
JB
4513 if (VALUE_LVAL (val) == not_lval
4514 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4515 {
df407dfe 4516 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4517 const CORE_ADDR addr =
4518 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4519
a84a8a0d 4520 VALUE_LVAL (val) = lval_memory;
1a088441 4521 set_value_address (val, addr);
40bc484c 4522 write_memory (addr, value_contents (val), len);
c3e5cd34 4523 }
14f9c5c9
AS
4524
4525 return val;
4526}
4527
4528/* Return the value ACTUAL, converted to be an appropriate value for a
4529 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4530 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4531 values not residing in memory, updating it as needed. */
14f9c5c9 4532
a93c0eb6 4533struct value *
40bc484c 4534ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4535{
df407dfe 4536 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4537 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4538 struct type *formal_target =
4539 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4540 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4541 struct type *actual_target =
4542 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4543 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4544
4c4b4cd2 4545 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4546 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4547 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4548 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4549 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4550 {
a84a8a0d 4551 struct value *result;
5b4ee69b 4552
14f9c5c9 4553 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4554 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4555 result = desc_data (actual);
cb923fcc 4556 else if (TYPE_CODE (formal_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4557 {
4558 if (VALUE_LVAL (actual) != lval_memory)
4559 {
4560 struct value *val;
5b4ee69b 4561
df407dfe 4562 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4563 val = allocate_value (actual_type);
990a07ab 4564 memcpy ((char *) value_contents_raw (val),
0fd88904 4565 (char *) value_contents (actual),
4c4b4cd2 4566 TYPE_LENGTH (actual_type));
40bc484c 4567 actual = ensure_lval (val);
4c4b4cd2 4568 }
a84a8a0d 4569 result = value_addr (actual);
4c4b4cd2 4570 }
a84a8a0d
JB
4571 else
4572 return actual;
b1af9e97 4573 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4574 }
4575 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4576 return ada_value_ind (actual);
8344af1e
JB
4577 else if (ada_is_aligner_type (formal_type))
4578 {
4579 /* We need to turn this parameter into an aligner type
4580 as well. */
4581 struct value *aligner = allocate_value (formal_type);
4582 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4583
4584 value_assign_to_component (aligner, component, actual);
4585 return aligner;
4586 }
14f9c5c9
AS
4587
4588 return actual;
4589}
4590
438c98a1
JB
4591/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4592 type TYPE. This is usually an inefficient no-op except on some targets
4593 (such as AVR) where the representation of a pointer and an address
4594 differs. */
4595
4596static CORE_ADDR
4597value_pointer (struct value *value, struct type *type)
4598{
4599 struct gdbarch *gdbarch = get_type_arch (type);
4600 unsigned len = TYPE_LENGTH (type);
224c3ddb 4601 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4602 CORE_ADDR addr;
4603
4604 addr = value_address (value);
4605 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4606 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4607 return addr;
4608}
4609
14f9c5c9 4610
4c4b4cd2
PH
4611/* Push a descriptor of type TYPE for array value ARR on the stack at
4612 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4613 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4614 to-descriptor type rather than a descriptor type), a struct value *
4615 representing a pointer to this descriptor. */
14f9c5c9 4616
d2e4a39e 4617static struct value *
40bc484c 4618make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4619{
d2e4a39e
AS
4620 struct type *bounds_type = desc_bounds_type (type);
4621 struct type *desc_type = desc_base_type (type);
4622 struct value *descriptor = allocate_value (desc_type);
4623 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4624 int i;
d2e4a39e 4625
0963b4bd
MS
4626 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4627 i > 0; i -= 1)
14f9c5c9 4628 {
19f220c3
JK
4629 modify_field (value_type (bounds), value_contents_writeable (bounds),
4630 ada_array_bound (arr, i, 0),
4631 desc_bound_bitpos (bounds_type, i, 0),
4632 desc_bound_bitsize (bounds_type, i, 0));
4633 modify_field (value_type (bounds), value_contents_writeable (bounds),
4634 ada_array_bound (arr, i, 1),
4635 desc_bound_bitpos (bounds_type, i, 1),
4636 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4637 }
d2e4a39e 4638
40bc484c 4639 bounds = ensure_lval (bounds);
d2e4a39e 4640
19f220c3
JK
4641 modify_field (value_type (descriptor),
4642 value_contents_writeable (descriptor),
4643 value_pointer (ensure_lval (arr),
4644 TYPE_FIELD_TYPE (desc_type, 0)),
4645 fat_pntr_data_bitpos (desc_type),
4646 fat_pntr_data_bitsize (desc_type));
4647
4648 modify_field (value_type (descriptor),
4649 value_contents_writeable (descriptor),
4650 value_pointer (bounds,
4651 TYPE_FIELD_TYPE (desc_type, 1)),
4652 fat_pntr_bounds_bitpos (desc_type),
4653 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4654
40bc484c 4655 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4656
4657 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4658 return value_addr (descriptor);
4659 else
4660 return descriptor;
4661}
14f9c5c9 4662\f
3d9434b5
JB
4663 /* Symbol Cache Module */
4664
3d9434b5 4665/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4666 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4667 on the type of entity being printed, the cache can make it as much
4668 as an order of magnitude faster than without it.
4669
4670 The descriptive type DWARF extension has significantly reduced
4671 the need for this cache, at least when DWARF is being used. However,
4672 even in this case, some expensive name-based symbol searches are still
4673 sometimes necessary - to find an XVZ variable, mostly. */
4674
ee01b665 4675/* Initialize the contents of SYM_CACHE. */
3d9434b5 4676
ee01b665
JB
4677static void
4678ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4679{
4680 obstack_init (&sym_cache->cache_space);
4681 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4682}
3d9434b5 4683
ee01b665
JB
4684/* Free the memory used by SYM_CACHE. */
4685
4686static void
4687ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4688{
ee01b665
JB
4689 obstack_free (&sym_cache->cache_space, NULL);
4690 xfree (sym_cache);
4691}
3d9434b5 4692
ee01b665
JB
4693/* Return the symbol cache associated to the given program space PSPACE.
4694 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4695
ee01b665
JB
4696static struct ada_symbol_cache *
4697ada_get_symbol_cache (struct program_space *pspace)
4698{
4699 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4700
66c168ae 4701 if (pspace_data->sym_cache == NULL)
ee01b665 4702 {
66c168ae
JB
4703 pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4704 ada_init_symbol_cache (pspace_data->sym_cache);
ee01b665
JB
4705 }
4706
66c168ae 4707 return pspace_data->sym_cache;
ee01b665 4708}
3d9434b5
JB
4709
4710/* Clear all entries from the symbol cache. */
4711
4712static void
4713ada_clear_symbol_cache (void)
4714{
ee01b665
JB
4715 struct ada_symbol_cache *sym_cache
4716 = ada_get_symbol_cache (current_program_space);
4717
4718 obstack_free (&sym_cache->cache_space, NULL);
4719 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4720}
4721
fe978cb0 4722/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4723 Return it if found, or NULL otherwise. */
4724
4725static struct cache_entry **
fe978cb0 4726find_entry (const char *name, domain_enum domain)
3d9434b5 4727{
ee01b665
JB
4728 struct ada_symbol_cache *sym_cache
4729 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4730 int h = msymbol_hash (name) % HASH_SIZE;
4731 struct cache_entry **e;
4732
ee01b665 4733 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4734 {
fe978cb0 4735 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
3d9434b5
JB
4736 return e;
4737 }
4738 return NULL;
4739}
4740
fe978cb0 4741/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4742 Return 1 if found, 0 otherwise.
4743
4744 If an entry was found and SYM is not NULL, set *SYM to the entry's
4745 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4746
96d887e8 4747static int
fe978cb0 4748lookup_cached_symbol (const char *name, domain_enum domain,
f0c5f9b2 4749 struct symbol **sym, const struct block **block)
96d887e8 4750{
fe978cb0 4751 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4752
4753 if (e == NULL)
4754 return 0;
4755 if (sym != NULL)
4756 *sym = (*e)->sym;
4757 if (block != NULL)
4758 *block = (*e)->block;
4759 return 1;
96d887e8
PH
4760}
4761
3d9434b5 4762/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4763 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4764
96d887e8 4765static void
fe978cb0 4766cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
270140bd 4767 const struct block *block)
96d887e8 4768{
ee01b665
JB
4769 struct ada_symbol_cache *sym_cache
4770 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4771 int h;
4772 char *copy;
4773 struct cache_entry *e;
4774
1994afbf
DE
4775 /* Symbols for builtin types don't have a block.
4776 For now don't cache such symbols. */
4777 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4778 return;
4779
3d9434b5
JB
4780 /* If the symbol is a local symbol, then do not cache it, as a search
4781 for that symbol depends on the context. To determine whether
4782 the symbol is local or not, we check the block where we found it
4783 against the global and static blocks of its associated symtab. */
4784 if (sym
08be3fe3 4785 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4786 GLOBAL_BLOCK) != block
08be3fe3 4787 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4788 STATIC_BLOCK) != block)
3d9434b5
JB
4789 return;
4790
4791 h = msymbol_hash (name) % HASH_SIZE;
e39db4db 4792 e = XOBNEW (&sym_cache->cache_space, cache_entry);
ee01b665
JB
4793 e->next = sym_cache->root[h];
4794 sym_cache->root[h] = e;
224c3ddb
SM
4795 e->name = copy
4796 = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
3d9434b5
JB
4797 strcpy (copy, name);
4798 e->sym = sym;
fe978cb0 4799 e->domain = domain;
3d9434b5 4800 e->block = block;
96d887e8 4801}
4c4b4cd2
PH
4802\f
4803 /* Symbol Lookup */
4804
b5ec771e
PA
4805/* Return the symbol name match type that should be used used when
4806 searching for all symbols matching LOOKUP_NAME.
c0431670
JB
4807
4808 LOOKUP_NAME is expected to be a symbol name after transformation
f98b2e33 4809 for Ada lookups. */
c0431670 4810
b5ec771e
PA
4811static symbol_name_match_type
4812name_match_type_from_name (const char *lookup_name)
c0431670 4813{
b5ec771e
PA
4814 return (strstr (lookup_name, "__") == NULL
4815 ? symbol_name_match_type::WILD
4816 : symbol_name_match_type::FULL);
c0431670
JB
4817}
4818
4c4b4cd2
PH
4819/* Return the result of a standard (literal, C-like) lookup of NAME in
4820 given DOMAIN, visible from lexical block BLOCK. */
4821
4822static struct symbol *
4823standard_lookup (const char *name, const struct block *block,
4824 domain_enum domain)
4825{
acbd605d 4826 /* Initialize it just to avoid a GCC false warning. */
d12307c1 4827 struct block_symbol sym = {NULL, NULL};
4c4b4cd2 4828
d12307c1
PMR
4829 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4830 return sym.symbol;
2570f2b7 4831 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
d12307c1
PMR
4832 cache_symbol (name, domain, sym.symbol, sym.block);
4833 return sym.symbol;
4c4b4cd2
PH
4834}
4835
4836
4837/* Non-zero iff there is at least one non-function/non-enumeral symbol
4838 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4839 since they contend in overloading in the same way. */
4840static int
d12307c1 4841is_nonfunction (struct block_symbol syms[], int n)
4c4b4cd2
PH
4842{
4843 int i;
4844
4845 for (i = 0; i < n; i += 1)
d12307c1
PMR
4846 if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC
4847 && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM
4848 || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
14f9c5c9
AS
4849 return 1;
4850
4851 return 0;
4852}
4853
4854/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4855 struct types. Otherwise, they may not. */
14f9c5c9
AS
4856
4857static int
d2e4a39e 4858equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4859{
d2e4a39e 4860 if (type0 == type1)
14f9c5c9 4861 return 1;
d2e4a39e 4862 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4863 || TYPE_CODE (type0) != TYPE_CODE (type1))
4864 return 0;
d2e4a39e 4865 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4866 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4867 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4868 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4869 return 1;
d2e4a39e 4870
14f9c5c9
AS
4871 return 0;
4872}
4873
4874/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4875 no more defined than that of SYM1. */
14f9c5c9
AS
4876
4877static int
d2e4a39e 4878lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4879{
4880 if (sym0 == sym1)
4881 return 1;
176620f1 4882 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4883 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4884 return 0;
4885
d2e4a39e 4886 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4887 {
4888 case LOC_UNDEF:
4889 return 1;
4890 case LOC_TYPEDEF:
4891 {
4c4b4cd2
PH
4892 struct type *type0 = SYMBOL_TYPE (sym0);
4893 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4894 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4895 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4896 int len0 = strlen (name0);
5b4ee69b 4897
4c4b4cd2
PH
4898 return
4899 TYPE_CODE (type0) == TYPE_CODE (type1)
4900 && (equiv_types (type0, type1)
4901 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
61012eef 4902 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4903 }
4904 case LOC_CONST:
4905 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4906 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4907 default:
4908 return 0;
14f9c5c9
AS
4909 }
4910}
4911
d12307c1 4912/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4c4b4cd2 4913 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4914
4915static void
76a01679
JB
4916add_defn_to_vec (struct obstack *obstackp,
4917 struct symbol *sym,
f0c5f9b2 4918 const struct block *block)
14f9c5c9
AS
4919{
4920 int i;
d12307c1 4921 struct block_symbol *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4922
529cad9c
PH
4923 /* Do not try to complete stub types, as the debugger is probably
4924 already scanning all symbols matching a certain name at the
4925 time when this function is called. Trying to replace the stub
4926 type by its associated full type will cause us to restart a scan
4927 which may lead to an infinite recursion. Instead, the client
4928 collecting the matching symbols will end up collecting several
4929 matches, with at least one of them complete. It can then filter
4930 out the stub ones if needed. */
4931
4c4b4cd2
PH
4932 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4933 {
d12307c1 4934 if (lesseq_defined_than (sym, prevDefns[i].symbol))
4c4b4cd2 4935 return;
d12307c1 4936 else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4c4b4cd2 4937 {
d12307c1 4938 prevDefns[i].symbol = sym;
4c4b4cd2 4939 prevDefns[i].block = block;
4c4b4cd2 4940 return;
76a01679 4941 }
4c4b4cd2
PH
4942 }
4943
4944 {
d12307c1 4945 struct block_symbol info;
4c4b4cd2 4946
d12307c1 4947 info.symbol = sym;
4c4b4cd2 4948 info.block = block;
d12307c1 4949 obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4c4b4cd2
PH
4950 }
4951}
4952
d12307c1
PMR
4953/* Number of block_symbol structures currently collected in current vector in
4954 OBSTACKP. */
4c4b4cd2 4955
76a01679
JB
4956static int
4957num_defns_collected (struct obstack *obstackp)
4c4b4cd2 4958{
d12307c1 4959 return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4c4b4cd2
PH
4960}
4961
d12307c1
PMR
4962/* Vector of block_symbol structures currently collected in current vector in
4963 OBSTACKP. If FINISH, close off the vector and return its final address. */
4c4b4cd2 4964
d12307c1 4965static struct block_symbol *
4c4b4cd2
PH
4966defns_collected (struct obstack *obstackp, int finish)
4967{
4968 if (finish)
224c3ddb 4969 return (struct block_symbol *) obstack_finish (obstackp);
4c4b4cd2 4970 else
d12307c1 4971 return (struct block_symbol *) obstack_base (obstackp);
4c4b4cd2
PH
4972}
4973
7c7b6655
TT
4974/* Return a bound minimal symbol matching NAME according to Ada
4975 decoding rules. Returns an invalid symbol if there is no such
4976 minimal symbol. Names prefixed with "standard__" are handled
4977 specially: "standard__" is first stripped off, and only static and
4978 global symbols are searched. */
4c4b4cd2 4979
7c7b6655 4980struct bound_minimal_symbol
96d887e8 4981ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4982{
7c7b6655 4983 struct bound_minimal_symbol result;
4c4b4cd2 4984 struct objfile *objfile;
96d887e8 4985 struct minimal_symbol *msymbol;
4c4b4cd2 4986
7c7b6655
TT
4987 memset (&result, 0, sizeof (result));
4988
b5ec771e
PA
4989 symbol_name_match_type match_type = name_match_type_from_name (name);
4990 lookup_name_info lookup_name (name, match_type);
4991
4992 symbol_name_matcher_ftype *match_name
4993 = ada_get_symbol_name_matcher (lookup_name);
4c4b4cd2 4994
96d887e8
PH
4995 ALL_MSYMBOLS (objfile, msymbol)
4996 {
b5ec771e 4997 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), lookup_name, NULL)
96d887e8 4998 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
7c7b6655
TT
4999 {
5000 result.minsym = msymbol;
5001 result.objfile = objfile;
5002 break;
5003 }
96d887e8 5004 }
4c4b4cd2 5005
7c7b6655 5006 return result;
96d887e8 5007}
4c4b4cd2 5008
96d887e8
PH
5009/* For all subprograms that statically enclose the subprogram of the
5010 selected frame, add symbols matching identifier NAME in DOMAIN
5011 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
5012 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
5013 with a wildcard prefix. */
4c4b4cd2 5014
96d887e8
PH
5015static void
5016add_symbols_from_enclosing_procs (struct obstack *obstackp,
b5ec771e
PA
5017 const lookup_name_info &lookup_name,
5018 domain_enum domain)
96d887e8 5019{
96d887e8 5020}
14f9c5c9 5021
96d887e8
PH
5022/* True if TYPE is definitely an artificial type supplied to a symbol
5023 for which no debugging information was given in the symbol file. */
14f9c5c9 5024
96d887e8
PH
5025static int
5026is_nondebugging_type (struct type *type)
5027{
0d5cff50 5028 const char *name = ada_type_name (type);
5b4ee69b 5029
96d887e8
PH
5030 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
5031}
4c4b4cd2 5032
8f17729f
JB
5033/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
5034 that are deemed "identical" for practical purposes.
5035
5036 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
5037 types and that their number of enumerals is identical (in other
5038 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
5039
5040static int
5041ada_identical_enum_types_p (struct type *type1, struct type *type2)
5042{
5043 int i;
5044
5045 /* The heuristic we use here is fairly conservative. We consider
5046 that 2 enumerate types are identical if they have the same
5047 number of enumerals and that all enumerals have the same
5048 underlying value and name. */
5049
5050 /* All enums in the type should have an identical underlying value. */
5051 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 5052 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
5053 return 0;
5054
5055 /* All enumerals should also have the same name (modulo any numerical
5056 suffix). */
5057 for (i = 0; i < TYPE_NFIELDS (type1); i++)
5058 {
0d5cff50
DE
5059 const char *name_1 = TYPE_FIELD_NAME (type1, i);
5060 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
5061 int len_1 = strlen (name_1);
5062 int len_2 = strlen (name_2);
5063
5064 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
5065 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
5066 if (len_1 != len_2
5067 || strncmp (TYPE_FIELD_NAME (type1, i),
5068 TYPE_FIELD_NAME (type2, i),
5069 len_1) != 0)
5070 return 0;
5071 }
5072
5073 return 1;
5074}
5075
5076/* Return nonzero if all the symbols in SYMS are all enumeral symbols
5077 that are deemed "identical" for practical purposes. Sometimes,
5078 enumerals are not strictly identical, but their types are so similar
5079 that they can be considered identical.
5080
5081 For instance, consider the following code:
5082
5083 type Color is (Black, Red, Green, Blue, White);
5084 type RGB_Color is new Color range Red .. Blue;
5085
5086 Type RGB_Color is a subrange of an implicit type which is a copy
5087 of type Color. If we call that implicit type RGB_ColorB ("B" is
5088 for "Base Type"), then type RGB_ColorB is a copy of type Color.
5089 As a result, when an expression references any of the enumeral
5090 by name (Eg. "print green"), the expression is technically
5091 ambiguous and the user should be asked to disambiguate. But
5092 doing so would only hinder the user, since it wouldn't matter
5093 what choice he makes, the outcome would always be the same.
5094 So, for practical purposes, we consider them as the same. */
5095
5096static int
54d343a2 5097symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
8f17729f
JB
5098{
5099 int i;
5100
5101 /* Before performing a thorough comparison check of each type,
5102 we perform a series of inexpensive checks. We expect that these
5103 checks will quickly fail in the vast majority of cases, and thus
5104 help prevent the unnecessary use of a more expensive comparison.
5105 Said comparison also expects us to make some of these checks
5106 (see ada_identical_enum_types_p). */
5107
5108 /* Quick check: All symbols should have an enum type. */
54d343a2 5109 for (i = 0; i < syms.size (); i++)
d12307c1 5110 if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM)
8f17729f
JB
5111 return 0;
5112
5113 /* Quick check: They should all have the same value. */
54d343a2 5114 for (i = 1; i < syms.size (); i++)
d12307c1 5115 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
5116 return 0;
5117
5118 /* Quick check: They should all have the same number of enumerals. */
54d343a2 5119 for (i = 1; i < syms.size (); i++)
d12307c1
PMR
5120 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol))
5121 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
5122 return 0;
5123
5124 /* All the sanity checks passed, so we might have a set of
5125 identical enumeration types. Perform a more complete
5126 comparison of the type of each symbol. */
54d343a2 5127 for (i = 1; i < syms.size (); i++)
d12307c1
PMR
5128 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
5129 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
5130 return 0;
5131
5132 return 1;
5133}
5134
54d343a2 5135/* Remove any non-debugging symbols in SYMS that definitely
96d887e8
PH
5136 duplicate other symbols in the list (The only case I know of where
5137 this happens is when object files containing stabs-in-ecoff are
5138 linked with files containing ordinary ecoff debugging symbols (or no
5139 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
5140 Returns the number of items in the modified list. */
4c4b4cd2 5141
96d887e8 5142static int
54d343a2 5143remove_extra_symbols (std::vector<struct block_symbol> *syms)
96d887e8
PH
5144{
5145 int i, j;
4c4b4cd2 5146
8f17729f
JB
5147 /* We should never be called with less than 2 symbols, as there
5148 cannot be any extra symbol in that case. But it's easy to
5149 handle, since we have nothing to do in that case. */
54d343a2
TT
5150 if (syms->size () < 2)
5151 return syms->size ();
8f17729f 5152
96d887e8 5153 i = 0;
54d343a2 5154 while (i < syms->size ())
96d887e8 5155 {
a35ddb44 5156 int remove_p = 0;
339c13b6
JB
5157
5158 /* If two symbols have the same name and one of them is a stub type,
5159 the get rid of the stub. */
5160
54d343a2
TT
5161 if (TYPE_STUB (SYMBOL_TYPE ((*syms)[i].symbol))
5162 && SYMBOL_LINKAGE_NAME ((*syms)[i].symbol) != NULL)
339c13b6 5163 {
54d343a2 5164 for (j = 0; j < syms->size (); j++)
339c13b6
JB
5165 {
5166 if (j != i
54d343a2
TT
5167 && !TYPE_STUB (SYMBOL_TYPE ((*syms)[j].symbol))
5168 && SYMBOL_LINKAGE_NAME ((*syms)[j].symbol) != NULL
5169 && strcmp (SYMBOL_LINKAGE_NAME ((*syms)[i].symbol),
5170 SYMBOL_LINKAGE_NAME ((*syms)[j].symbol)) == 0)
a35ddb44 5171 remove_p = 1;
339c13b6
JB
5172 }
5173 }
5174
5175 /* Two symbols with the same name, same class and same address
5176 should be identical. */
5177
54d343a2
TT
5178 else if (SYMBOL_LINKAGE_NAME ((*syms)[i].symbol) != NULL
5179 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5180 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
96d887e8 5181 {
54d343a2 5182 for (j = 0; j < syms->size (); j += 1)
96d887e8
PH
5183 {
5184 if (i != j
54d343a2
TT
5185 && SYMBOL_LINKAGE_NAME ((*syms)[j].symbol) != NULL
5186 && strcmp (SYMBOL_LINKAGE_NAME ((*syms)[i].symbol),
5187 SYMBOL_LINKAGE_NAME ((*syms)[j].symbol)) == 0
5188 && SYMBOL_CLASS ((*syms)[i].symbol)
5189 == SYMBOL_CLASS ((*syms)[j].symbol)
5190 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5191 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
a35ddb44 5192 remove_p = 1;
4c4b4cd2 5193 }
4c4b4cd2 5194 }
339c13b6 5195
a35ddb44 5196 if (remove_p)
54d343a2 5197 syms->erase (syms->begin () + i);
339c13b6 5198
96d887e8 5199 i += 1;
14f9c5c9 5200 }
8f17729f
JB
5201
5202 /* If all the remaining symbols are identical enumerals, then
5203 just keep the first one and discard the rest.
5204
5205 Unlike what we did previously, we do not discard any entry
5206 unless they are ALL identical. This is because the symbol
5207 comparison is not a strict comparison, but rather a practical
5208 comparison. If all symbols are considered identical, then
5209 we can just go ahead and use the first one and discard the rest.
5210 But if we cannot reduce the list to a single element, we have
5211 to ask the user to disambiguate anyways. And if we have to
5212 present a multiple-choice menu, it's less confusing if the list
5213 isn't missing some choices that were identical and yet distinct. */
54d343a2
TT
5214 if (symbols_are_identical_enums (*syms))
5215 syms->resize (1);
8f17729f 5216
54d343a2 5217 return syms->size ();
14f9c5c9
AS
5218}
5219
96d887e8
PH
5220/* Given a type that corresponds to a renaming entity, use the type name
5221 to extract the scope (package name or function name, fully qualified,
5222 and following the GNAT encoding convention) where this renaming has been
49d83361 5223 defined. */
4c4b4cd2 5224
49d83361 5225static std::string
96d887e8 5226xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5227{
96d887e8 5228 /* The renaming types adhere to the following convention:
0963b4bd 5229 <scope>__<rename>___<XR extension>.
96d887e8
PH
5230 So, to extract the scope, we search for the "___XR" extension,
5231 and then backtrack until we find the first "__". */
76a01679 5232
a737d952 5233 const char *name = TYPE_NAME (renaming_type);
108d56a4
SM
5234 const char *suffix = strstr (name, "___XR");
5235 const char *last;
14f9c5c9 5236
96d887e8
PH
5237 /* Now, backtrack a bit until we find the first "__". Start looking
5238 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5239
96d887e8
PH
5240 for (last = suffix - 3; last > name; last--)
5241 if (last[0] == '_' && last[1] == '_')
5242 break;
76a01679 5243
96d887e8 5244 /* Make a copy of scope and return it. */
49d83361 5245 return std::string (name, last);
4c4b4cd2
PH
5246}
5247
96d887e8 5248/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5249
96d887e8
PH
5250static int
5251is_package_name (const char *name)
4c4b4cd2 5252{
96d887e8
PH
5253 /* Here, We take advantage of the fact that no symbols are generated
5254 for packages, while symbols are generated for each function.
5255 So the condition for NAME represent a package becomes equivalent
5256 to NAME not existing in our list of symbols. There is only one
5257 small complication with library-level functions (see below). */
4c4b4cd2 5258
96d887e8
PH
5259 /* If it is a function that has not been defined at library level,
5260 then we should be able to look it up in the symbols. */
5261 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5262 return 0;
14f9c5c9 5263
96d887e8
PH
5264 /* Library-level function names start with "_ada_". See if function
5265 "_ada_" followed by NAME can be found. */
14f9c5c9 5266
96d887e8 5267 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5268 functions names cannot contain "__" in them. */
96d887e8
PH
5269 if (strstr (name, "__") != NULL)
5270 return 0;
4c4b4cd2 5271
528e1572 5272 std::string fun_name = string_printf ("_ada_%s", name);
14f9c5c9 5273
528e1572 5274 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
96d887e8 5275}
14f9c5c9 5276
96d887e8 5277/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5278 not visible from FUNCTION_NAME. */
14f9c5c9 5279
96d887e8 5280static int
0d5cff50 5281old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5282{
aeb5907d
JB
5283 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5284 return 0;
5285
49d83361 5286 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
14f9c5c9 5287
96d887e8 5288 /* If the rename has been defined in a package, then it is visible. */
49d83361
TT
5289 if (is_package_name (scope.c_str ()))
5290 return 0;
14f9c5c9 5291
96d887e8
PH
5292 /* Check that the rename is in the current function scope by checking
5293 that its name starts with SCOPE. */
76a01679 5294
96d887e8
PH
5295 /* If the function name starts with "_ada_", it means that it is
5296 a library-level function. Strip this prefix before doing the
5297 comparison, as the encoding for the renaming does not contain
5298 this prefix. */
61012eef 5299 if (startswith (function_name, "_ada_"))
96d887e8 5300 function_name += 5;
f26caa11 5301
49d83361 5302 return !startswith (function_name, scope.c_str ());
f26caa11
PH
5303}
5304
aeb5907d
JB
5305/* Remove entries from SYMS that corresponds to a renaming entity that
5306 is not visible from the function associated with CURRENT_BLOCK or
5307 that is superfluous due to the presence of more specific renaming
5308 information. Places surviving symbols in the initial entries of
5309 SYMS and returns the number of surviving symbols.
96d887e8
PH
5310
5311 Rationale:
aeb5907d
JB
5312 First, in cases where an object renaming is implemented as a
5313 reference variable, GNAT may produce both the actual reference
5314 variable and the renaming encoding. In this case, we discard the
5315 latter.
5316
5317 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5318 entity. Unfortunately, STABS currently does not support the definition
5319 of types that are local to a given lexical block, so all renamings types
5320 are emitted at library level. As a consequence, if an application
5321 contains two renaming entities using the same name, and a user tries to
5322 print the value of one of these entities, the result of the ada symbol
5323 lookup will also contain the wrong renaming type.
f26caa11 5324
96d887e8
PH
5325 This function partially covers for this limitation by attempting to
5326 remove from the SYMS list renaming symbols that should be visible
5327 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5328 method with the current information available. The implementation
5329 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5330
5331 - When the user tries to print a rename in a function while there
5332 is another rename entity defined in a package: Normally, the
5333 rename in the function has precedence over the rename in the
5334 package, so the latter should be removed from the list. This is
5335 currently not the case.
5336
5337 - This function will incorrectly remove valid renames if
5338 the CURRENT_BLOCK corresponds to a function which symbol name
5339 has been changed by an "Export" pragma. As a consequence,
5340 the user will be unable to print such rename entities. */
4c4b4cd2 5341
14f9c5c9 5342static int
54d343a2
TT
5343remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5344 const struct block *current_block)
4c4b4cd2
PH
5345{
5346 struct symbol *current_function;
0d5cff50 5347 const char *current_function_name;
4c4b4cd2 5348 int i;
aeb5907d
JB
5349 int is_new_style_renaming;
5350
5351 /* If there is both a renaming foo___XR... encoded as a variable and
5352 a simple variable foo in the same block, discard the latter.
0963b4bd 5353 First, zero out such symbols, then compress. */
aeb5907d 5354 is_new_style_renaming = 0;
54d343a2 5355 for (i = 0; i < syms->size (); i += 1)
aeb5907d 5356 {
54d343a2
TT
5357 struct symbol *sym = (*syms)[i].symbol;
5358 const struct block *block = (*syms)[i].block;
aeb5907d
JB
5359 const char *name;
5360 const char *suffix;
5361
5362 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5363 continue;
5364 name = SYMBOL_LINKAGE_NAME (sym);
5365 suffix = strstr (name, "___XR");
5366
5367 if (suffix != NULL)
5368 {
5369 int name_len = suffix - name;
5370 int j;
5b4ee69b 5371
aeb5907d 5372 is_new_style_renaming = 1;
54d343a2
TT
5373 for (j = 0; j < syms->size (); j += 1)
5374 if (i != j && (*syms)[j].symbol != NULL
5375 && strncmp (name, SYMBOL_LINKAGE_NAME ((*syms)[j].symbol),
aeb5907d 5376 name_len) == 0
54d343a2
TT
5377 && block == (*syms)[j].block)
5378 (*syms)[j].symbol = NULL;
aeb5907d
JB
5379 }
5380 }
5381 if (is_new_style_renaming)
5382 {
5383 int j, k;
5384
54d343a2
TT
5385 for (j = k = 0; j < syms->size (); j += 1)
5386 if ((*syms)[j].symbol != NULL)
aeb5907d 5387 {
54d343a2 5388 (*syms)[k] = (*syms)[j];
aeb5907d
JB
5389 k += 1;
5390 }
5391 return k;
5392 }
4c4b4cd2
PH
5393
5394 /* Extract the function name associated to CURRENT_BLOCK.
5395 Abort if unable to do so. */
76a01679 5396
4c4b4cd2 5397 if (current_block == NULL)
54d343a2 5398 return syms->size ();
76a01679 5399
7f0df278 5400 current_function = block_linkage_function (current_block);
4c4b4cd2 5401 if (current_function == NULL)
54d343a2 5402 return syms->size ();
4c4b4cd2
PH
5403
5404 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5405 if (current_function_name == NULL)
54d343a2 5406 return syms->size ();
4c4b4cd2
PH
5407
5408 /* Check each of the symbols, and remove it from the list if it is
5409 a type corresponding to a renaming that is out of the scope of
5410 the current block. */
5411
5412 i = 0;
54d343a2 5413 while (i < syms->size ())
4c4b4cd2 5414 {
54d343a2 5415 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
aeb5907d 5416 == ADA_OBJECT_RENAMING
54d343a2
TT
5417 && old_renaming_is_invisible ((*syms)[i].symbol,
5418 current_function_name))
5419 syms->erase (syms->begin () + i);
4c4b4cd2
PH
5420 else
5421 i += 1;
5422 }
5423
54d343a2 5424 return syms->size ();
4c4b4cd2
PH
5425}
5426
339c13b6
JB
5427/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5428 whose name and domain match NAME and DOMAIN respectively.
5429 If no match was found, then extend the search to "enclosing"
5430 routines (in other words, if we're inside a nested function,
5431 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5432 If WILD_MATCH_P is nonzero, perform the naming matching in
5433 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5434
5435 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5436
5437static void
b5ec771e
PA
5438ada_add_local_symbols (struct obstack *obstackp,
5439 const lookup_name_info &lookup_name,
5440 const struct block *block, domain_enum domain)
339c13b6
JB
5441{
5442 int block_depth = 0;
5443
5444 while (block != NULL)
5445 {
5446 block_depth += 1;
b5ec771e 5447 ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
339c13b6
JB
5448
5449 /* If we found a non-function match, assume that's the one. */
5450 if (is_nonfunction (defns_collected (obstackp, 0),
5451 num_defns_collected (obstackp)))
5452 return;
5453
5454 block = BLOCK_SUPERBLOCK (block);
5455 }
5456
5457 /* If no luck so far, try to find NAME as a local symbol in some lexically
5458 enclosing subprogram. */
5459 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
b5ec771e 5460 add_symbols_from_enclosing_procs (obstackp, lookup_name, domain);
339c13b6
JB
5461}
5462
ccefe4c4 5463/* An object of this type is used as the user_data argument when
40658b94 5464 calling the map_matching_symbols method. */
ccefe4c4 5465
40658b94 5466struct match_data
ccefe4c4 5467{
40658b94 5468 struct objfile *objfile;
ccefe4c4 5469 struct obstack *obstackp;
40658b94
PH
5470 struct symbol *arg_sym;
5471 int found_sym;
ccefe4c4
TT
5472};
5473
22cee43f 5474/* A callback for add_nonlocal_symbols that adds SYM, found in BLOCK,
40658b94
PH
5475 to a list of symbols. DATA0 is a pointer to a struct match_data *
5476 containing the obstack that collects the symbol list, the file that SYM
5477 must come from, a flag indicating whether a non-argument symbol has
5478 been found in the current block, and the last argument symbol
5479 passed in SYM within the current block (if any). When SYM is null,
5480 marking the end of a block, the argument symbol is added if no
5481 other has been found. */
ccefe4c4 5482
40658b94
PH
5483static int
5484aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 5485{
40658b94
PH
5486 struct match_data *data = (struct match_data *) data0;
5487
5488 if (sym == NULL)
5489 {
5490 if (!data->found_sym && data->arg_sym != NULL)
5491 add_defn_to_vec (data->obstackp,
5492 fixup_symbol_section (data->arg_sym, data->objfile),
5493 block);
5494 data->found_sym = 0;
5495 data->arg_sym = NULL;
5496 }
5497 else
5498 {
5499 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5500 return 0;
5501 else if (SYMBOL_IS_ARGUMENT (sym))
5502 data->arg_sym = sym;
5503 else
5504 {
5505 data->found_sym = 1;
5506 add_defn_to_vec (data->obstackp,
5507 fixup_symbol_section (sym, data->objfile),
5508 block);
5509 }
5510 }
5511 return 0;
5512}
5513
b5ec771e
PA
5514/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5515 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
5516 symbols to OBSTACKP. Return whether we found such symbols. */
22cee43f
PMR
5517
5518static int
5519ada_add_block_renamings (struct obstack *obstackp,
5520 const struct block *block,
b5ec771e
PA
5521 const lookup_name_info &lookup_name,
5522 domain_enum domain)
22cee43f
PMR
5523{
5524 struct using_direct *renaming;
5525 int defns_mark = num_defns_collected (obstackp);
5526
b5ec771e
PA
5527 symbol_name_matcher_ftype *name_match
5528 = ada_get_symbol_name_matcher (lookup_name);
5529
22cee43f
PMR
5530 for (renaming = block_using (block);
5531 renaming != NULL;
5532 renaming = renaming->next)
5533 {
5534 const char *r_name;
22cee43f
PMR
5535
5536 /* Avoid infinite recursions: skip this renaming if we are actually
5537 already traversing it.
5538
5539 Currently, symbol lookup in Ada don't use the namespace machinery from
5540 C++/Fortran support: skip namespace imports that use them. */
5541 if (renaming->searched
5542 || (renaming->import_src != NULL
5543 && renaming->import_src[0] != '\0')
5544 || (renaming->import_dest != NULL
5545 && renaming->import_dest[0] != '\0'))
5546 continue;
5547 renaming->searched = 1;
5548
5549 /* TODO: here, we perform another name-based symbol lookup, which can
5550 pull its own multiple overloads. In theory, we should be able to do
5551 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5552 not a simple name. But in order to do this, we would need to enhance
5553 the DWARF reader to associate a symbol to this renaming, instead of a
5554 name. So, for now, we do something simpler: re-use the C++/Fortran
5555 namespace machinery. */
5556 r_name = (renaming->alias != NULL
5557 ? renaming->alias
5558 : renaming->declaration);
b5ec771e
PA
5559 if (name_match (r_name, lookup_name, NULL))
5560 {
5561 lookup_name_info decl_lookup_name (renaming->declaration,
5562 lookup_name.match_type ());
5563 ada_add_all_symbols (obstackp, block, decl_lookup_name, domain,
5564 1, NULL);
5565 }
22cee43f
PMR
5566 renaming->searched = 0;
5567 }
5568 return num_defns_collected (obstackp) != defns_mark;
5569}
5570
db230ce3
JB
5571/* Implements compare_names, but only applying the comparision using
5572 the given CASING. */
5b4ee69b 5573
40658b94 5574static int
db230ce3
JB
5575compare_names_with_case (const char *string1, const char *string2,
5576 enum case_sensitivity casing)
40658b94
PH
5577{
5578 while (*string1 != '\0' && *string2 != '\0')
5579 {
db230ce3
JB
5580 char c1, c2;
5581
40658b94
PH
5582 if (isspace (*string1) || isspace (*string2))
5583 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5584
5585 if (casing == case_sensitive_off)
5586 {
5587 c1 = tolower (*string1);
5588 c2 = tolower (*string2);
5589 }
5590 else
5591 {
5592 c1 = *string1;
5593 c2 = *string2;
5594 }
5595 if (c1 != c2)
40658b94 5596 break;
db230ce3 5597
40658b94
PH
5598 string1 += 1;
5599 string2 += 1;
5600 }
db230ce3 5601
40658b94
PH
5602 switch (*string1)
5603 {
5604 case '(':
5605 return strcmp_iw_ordered (string1, string2);
5606 case '_':
5607 if (*string2 == '\0')
5608 {
052874e8 5609 if (is_name_suffix (string1))
40658b94
PH
5610 return 0;
5611 else
1a1d5513 5612 return 1;
40658b94 5613 }
dbb8534f 5614 /* FALLTHROUGH */
40658b94
PH
5615 default:
5616 if (*string2 == '(')
5617 return strcmp_iw_ordered (string1, string2);
5618 else
db230ce3
JB
5619 {
5620 if (casing == case_sensitive_off)
5621 return tolower (*string1) - tolower (*string2);
5622 else
5623 return *string1 - *string2;
5624 }
40658b94 5625 }
ccefe4c4
TT
5626}
5627
db230ce3
JB
5628/* Compare STRING1 to STRING2, with results as for strcmp.
5629 Compatible with strcmp_iw_ordered in that...
5630
5631 strcmp_iw_ordered (STRING1, STRING2) <= 0
5632
5633 ... implies...
5634
5635 compare_names (STRING1, STRING2) <= 0
5636
5637 (they may differ as to what symbols compare equal). */
5638
5639static int
5640compare_names (const char *string1, const char *string2)
5641{
5642 int result;
5643
5644 /* Similar to what strcmp_iw_ordered does, we need to perform
5645 a case-insensitive comparison first, and only resort to
5646 a second, case-sensitive, comparison if the first one was
5647 not sufficient to differentiate the two strings. */
5648
5649 result = compare_names_with_case (string1, string2, case_sensitive_off);
5650 if (result == 0)
5651 result = compare_names_with_case (string1, string2, case_sensitive_on);
5652
5653 return result;
5654}
5655
b5ec771e
PA
5656/* Convenience function to get at the Ada encoded lookup name for
5657 LOOKUP_NAME, as a C string. */
5658
5659static const char *
5660ada_lookup_name (const lookup_name_info &lookup_name)
5661{
5662 return lookup_name.ada ().lookup_name ().c_str ();
5663}
5664
339c13b6 5665/* Add to OBSTACKP all non-local symbols whose name and domain match
b5ec771e
PA
5666 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5667 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5668 symbols otherwise. */
339c13b6
JB
5669
5670static void
b5ec771e
PA
5671add_nonlocal_symbols (struct obstack *obstackp,
5672 const lookup_name_info &lookup_name,
5673 domain_enum domain, int global)
339c13b6
JB
5674{
5675 struct objfile *objfile;
22cee43f 5676 struct compunit_symtab *cu;
40658b94 5677 struct match_data data;
339c13b6 5678
6475f2fe 5679 memset (&data, 0, sizeof data);
ccefe4c4 5680 data.obstackp = obstackp;
339c13b6 5681
b5ec771e
PA
5682 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5683
ccefe4c4 5684 ALL_OBJFILES (objfile)
40658b94
PH
5685 {
5686 data.objfile = objfile;
5687
5688 if (is_wild_match)
b5ec771e
PA
5689 objfile->sf->qf->map_matching_symbols (objfile, lookup_name.name ().c_str (),
5690 domain, global,
4186eb54 5691 aux_add_nonlocal_symbols, &data,
b5ec771e
PA
5692 symbol_name_match_type::WILD,
5693 NULL);
40658b94 5694 else
b5ec771e
PA
5695 objfile->sf->qf->map_matching_symbols (objfile, lookup_name.name ().c_str (),
5696 domain, global,
4186eb54 5697 aux_add_nonlocal_symbols, &data,
b5ec771e
PA
5698 symbol_name_match_type::FULL,
5699 compare_names);
22cee43f
PMR
5700
5701 ALL_OBJFILE_COMPUNITS (objfile, cu)
5702 {
5703 const struct block *global_block
5704 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5705
b5ec771e
PA
5706 if (ada_add_block_renamings (obstackp, global_block, lookup_name,
5707 domain))
22cee43f
PMR
5708 data.found_sym = 1;
5709 }
40658b94
PH
5710 }
5711
5712 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5713 {
b5ec771e
PA
5714 const char *name = ada_lookup_name (lookup_name);
5715 std::string name1 = std::string ("<_ada_") + name + '>';
5716
40658b94
PH
5717 ALL_OBJFILES (objfile)
5718 {
40658b94 5719 data.objfile = objfile;
b5ec771e
PA
5720 objfile->sf->qf->map_matching_symbols (objfile, name1.c_str (),
5721 domain, global,
0963b4bd
MS
5722 aux_add_nonlocal_symbols,
5723 &data,
b5ec771e
PA
5724 symbol_name_match_type::FULL,
5725 compare_names);
40658b94
PH
5726 }
5727 }
339c13b6
JB
5728}
5729
b5ec771e
PA
5730/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5731 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
5732 returning the number of matches. Add these to OBSTACKP.
4eeaa230 5733
22cee43f
PMR
5734 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5735 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5736 is the one match returned (no other matches in that or
d9680e73 5737 enclosing blocks is returned). If there are any matches in or
22cee43f 5738 surrounding BLOCK, then these alone are returned.
4eeaa230 5739
b5ec771e
PA
5740 Names prefixed with "standard__" are handled specially:
5741 "standard__" is first stripped off (by the lookup_name
5742 constructor), and only static and global symbols are searched.
14f9c5c9 5743
22cee43f
PMR
5744 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5745 to lookup global symbols. */
5746
5747static void
5748ada_add_all_symbols (struct obstack *obstackp,
5749 const struct block *block,
b5ec771e 5750 const lookup_name_info &lookup_name,
22cee43f
PMR
5751 domain_enum domain,
5752 int full_search,
5753 int *made_global_lookup_p)
14f9c5c9
AS
5754{
5755 struct symbol *sym;
14f9c5c9 5756
22cee43f
PMR
5757 if (made_global_lookup_p)
5758 *made_global_lookup_p = 0;
339c13b6
JB
5759
5760 /* Special case: If the user specifies a symbol name inside package
5761 Standard, do a non-wild matching of the symbol name without
5762 the "standard__" prefix. This was primarily introduced in order
5763 to allow the user to specifically access the standard exceptions
5764 using, for instance, Standard.Constraint_Error when Constraint_Error
5765 is ambiguous (due to the user defining its own Constraint_Error
5766 entity inside its program). */
b5ec771e
PA
5767 if (lookup_name.ada ().standard_p ())
5768 block = NULL;
4c4b4cd2 5769
339c13b6 5770 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5771
4eeaa230
DE
5772 if (block != NULL)
5773 {
5774 if (full_search)
b5ec771e 5775 ada_add_local_symbols (obstackp, lookup_name, block, domain);
4eeaa230
DE
5776 else
5777 {
5778 /* In the !full_search case we're are being called by
5779 ada_iterate_over_symbols, and we don't want to search
5780 superblocks. */
b5ec771e 5781 ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
4eeaa230 5782 }
22cee43f
PMR
5783 if (num_defns_collected (obstackp) > 0 || !full_search)
5784 return;
4eeaa230 5785 }
d2e4a39e 5786
339c13b6
JB
5787 /* No non-global symbols found. Check our cache to see if we have
5788 already performed this search before. If we have, then return
5789 the same result. */
5790
b5ec771e
PA
5791 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5792 domain, &sym, &block))
4c4b4cd2
PH
5793 {
5794 if (sym != NULL)
b5ec771e 5795 add_defn_to_vec (obstackp, sym, block);
22cee43f 5796 return;
4c4b4cd2 5797 }
14f9c5c9 5798
22cee43f
PMR
5799 if (made_global_lookup_p)
5800 *made_global_lookup_p = 1;
b1eedac9 5801
339c13b6
JB
5802 /* Search symbols from all global blocks. */
5803
b5ec771e 5804 add_nonlocal_symbols (obstackp, lookup_name, domain, 1);
d2e4a39e 5805
4c4b4cd2 5806 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5807 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5808
22cee43f 5809 if (num_defns_collected (obstackp) == 0)
b5ec771e 5810 add_nonlocal_symbols (obstackp, lookup_name, domain, 0);
22cee43f
PMR
5811}
5812
b5ec771e
PA
5813/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
5814 is non-zero, enclosing scope and in global scopes, returning the number of
22cee43f 5815 matches.
54d343a2
TT
5816 Fills *RESULTS with (SYM,BLOCK) tuples, indicating the symbols
5817 found and the blocks and symbol tables (if any) in which they were
5818 found.
22cee43f
PMR
5819
5820 When full_search is non-zero, any non-function/non-enumeral
5821 symbol match within the nest of blocks whose innermost member is BLOCK,
5822 is the one match returned (no other matches in that or
5823 enclosing blocks is returned). If there are any matches in or
5824 surrounding BLOCK, then these alone are returned.
5825
5826 Names prefixed with "standard__" are handled specially: "standard__"
5827 is first stripped off, and only static and global symbols are searched. */
5828
5829static int
b5ec771e
PA
5830ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5831 const struct block *block,
22cee43f 5832 domain_enum domain,
54d343a2 5833 std::vector<struct block_symbol> *results,
22cee43f
PMR
5834 int full_search)
5835{
22cee43f
PMR
5836 int syms_from_global_search;
5837 int ndefns;
ec6a20c2 5838 auto_obstack obstack;
22cee43f 5839
ec6a20c2 5840 ada_add_all_symbols (&obstack, block, lookup_name,
b5ec771e 5841 domain, full_search, &syms_from_global_search);
14f9c5c9 5842
ec6a20c2
JB
5843 ndefns = num_defns_collected (&obstack);
5844
54d343a2
TT
5845 struct block_symbol *base = defns_collected (&obstack, 1);
5846 for (int i = 0; i < ndefns; ++i)
5847 results->push_back (base[i]);
4c4b4cd2 5848
54d343a2 5849 ndefns = remove_extra_symbols (results);
4c4b4cd2 5850
b1eedac9 5851 if (ndefns == 0 && full_search && syms_from_global_search)
b5ec771e 5852 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
14f9c5c9 5853
b1eedac9 5854 if (ndefns == 1 && full_search && syms_from_global_search)
b5ec771e
PA
5855 cache_symbol (ada_lookup_name (lookup_name), domain,
5856 (*results)[0].symbol, (*results)[0].block);
14f9c5c9 5857
54d343a2 5858 ndefns = remove_irrelevant_renamings (results, block);
ec6a20c2 5859
14f9c5c9
AS
5860 return ndefns;
5861}
5862
b5ec771e 5863/* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
54d343a2
TT
5864 in global scopes, returning the number of matches, and filling *RESULTS
5865 with (SYM,BLOCK) tuples.
ec6a20c2 5866
4eeaa230
DE
5867 See ada_lookup_symbol_list_worker for further details. */
5868
5869int
b5ec771e 5870ada_lookup_symbol_list (const char *name, const struct block *block,
54d343a2
TT
5871 domain_enum domain,
5872 std::vector<struct block_symbol> *results)
4eeaa230 5873{
b5ec771e
PA
5874 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5875 lookup_name_info lookup_name (name, name_match_type);
5876
5877 return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1);
4eeaa230
DE
5878}
5879
5880/* Implementation of the la_iterate_over_symbols method. */
5881
5882static void
14bc53a8 5883ada_iterate_over_symbols
b5ec771e
PA
5884 (const struct block *block, const lookup_name_info &name,
5885 domain_enum domain,
14bc53a8 5886 gdb::function_view<symbol_found_callback_ftype> callback)
4eeaa230
DE
5887{
5888 int ndefs, i;
54d343a2 5889 std::vector<struct block_symbol> results;
4eeaa230
DE
5890
5891 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
ec6a20c2 5892
4eeaa230
DE
5893 for (i = 0; i < ndefs; ++i)
5894 {
7e41c8db 5895 if (!callback (&results[i]))
4eeaa230
DE
5896 break;
5897 }
5898}
5899
4e5c77fe
JB
5900/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5901 to 1, but choosing the first symbol found if there are multiple
5902 choices.
5903
5e2336be
JB
5904 The result is stored in *INFO, which must be non-NULL.
5905 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5906
5907void
5908ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5909 domain_enum domain,
d12307c1 5910 struct block_symbol *info)
14f9c5c9 5911{
b5ec771e
PA
5912 /* Since we already have an encoded name, wrap it in '<>' to force a
5913 verbatim match. Otherwise, if the name happens to not look like
5914 an encoded name (because it doesn't include a "__"),
5915 ada_lookup_name_info would re-encode/fold it again, and that
5916 would e.g., incorrectly lowercase object renaming names like
5917 "R28b" -> "r28b". */
5918 std::string verbatim = std::string ("<") + name + '>';
5919
5e2336be 5920 gdb_assert (info != NULL);
f98fc17b 5921 *info = ada_lookup_symbol (verbatim.c_str (), block, domain, NULL);
4e5c77fe 5922}
aeb5907d
JB
5923
5924/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5925 scope and in global scopes, or NULL if none. NAME is folded and
5926 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5927 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5928 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5929
d12307c1 5930struct block_symbol
aeb5907d 5931ada_lookup_symbol (const char *name, const struct block *block0,
fe978cb0 5932 domain_enum domain, int *is_a_field_of_this)
aeb5907d
JB
5933{
5934 if (is_a_field_of_this != NULL)
5935 *is_a_field_of_this = 0;
5936
54d343a2 5937 std::vector<struct block_symbol> candidates;
f98fc17b 5938 int n_candidates;
f98fc17b
PA
5939
5940 n_candidates = ada_lookup_symbol_list (name, block0, domain, &candidates);
f98fc17b
PA
5941
5942 if (n_candidates == 0)
54d343a2 5943 return {};
f98fc17b
PA
5944
5945 block_symbol info = candidates[0];
5946 info.symbol = fixup_symbol_section (info.symbol, NULL);
d12307c1 5947 return info;
4c4b4cd2 5948}
14f9c5c9 5949
d12307c1 5950static struct block_symbol
f606139a
DE
5951ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5952 const char *name,
76a01679 5953 const struct block *block,
21b556f4 5954 const domain_enum domain)
4c4b4cd2 5955{
d12307c1 5956 struct block_symbol sym;
04dccad0
JB
5957
5958 sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
d12307c1 5959 if (sym.symbol != NULL)
04dccad0
JB
5960 return sym;
5961
5962 /* If we haven't found a match at this point, try the primitive
5963 types. In other languages, this search is performed before
5964 searching for global symbols in order to short-circuit that
5965 global-symbol search if it happens that the name corresponds
5966 to a primitive type. But we cannot do the same in Ada, because
5967 it is perfectly legitimate for a program to declare a type which
5968 has the same name as a standard type. If looking up a type in
5969 that situation, we have traditionally ignored the primitive type
5970 in favor of user-defined types. This is why, unlike most other
5971 languages, we search the primitive types this late and only after
5972 having searched the global symbols without success. */
5973
5974 if (domain == VAR_DOMAIN)
5975 {
5976 struct gdbarch *gdbarch;
5977
5978 if (block == NULL)
5979 gdbarch = target_gdbarch ();
5980 else
5981 gdbarch = block_gdbarch (block);
d12307c1
PMR
5982 sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5983 if (sym.symbol != NULL)
04dccad0
JB
5984 return sym;
5985 }
5986
d12307c1 5987 return (struct block_symbol) {NULL, NULL};
14f9c5c9
AS
5988}
5989
5990
4c4b4cd2
PH
5991/* True iff STR is a possible encoded suffix of a normal Ada name
5992 that is to be ignored for matching purposes. Suffixes of parallel
5993 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5994 are given by any of the regular expressions:
4c4b4cd2 5995
babe1480
JB
5996 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5997 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5998 TKB [subprogram suffix for task bodies]
babe1480 5999 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 6000 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
6001
6002 Also, any leading "__[0-9]+" sequence is skipped before the suffix
6003 match is performed. This sequence is used to differentiate homonyms,
6004 is an optional part of a valid name suffix. */
4c4b4cd2 6005
14f9c5c9 6006static int
d2e4a39e 6007is_name_suffix (const char *str)
14f9c5c9
AS
6008{
6009 int k;
4c4b4cd2
PH
6010 const char *matching;
6011 const int len = strlen (str);
6012
babe1480
JB
6013 /* Skip optional leading __[0-9]+. */
6014
4c4b4cd2
PH
6015 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
6016 {
babe1480
JB
6017 str += 3;
6018 while (isdigit (str[0]))
6019 str += 1;
4c4b4cd2 6020 }
babe1480
JB
6021
6022 /* [.$][0-9]+ */
4c4b4cd2 6023
babe1480 6024 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 6025 {
babe1480 6026 matching = str + 1;
4c4b4cd2
PH
6027 while (isdigit (matching[0]))
6028 matching += 1;
6029 if (matching[0] == '\0')
6030 return 1;
6031 }
6032
6033 /* ___[0-9]+ */
babe1480 6034
4c4b4cd2
PH
6035 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
6036 {
6037 matching = str + 3;
6038 while (isdigit (matching[0]))
6039 matching += 1;
6040 if (matching[0] == '\0')
6041 return 1;
6042 }
6043
9ac7f98e
JB
6044 /* "TKB" suffixes are used for subprograms implementing task bodies. */
6045
6046 if (strcmp (str, "TKB") == 0)
6047 return 1;
6048
529cad9c
PH
6049#if 0
6050 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
6051 with a N at the end. Unfortunately, the compiler uses the same
6052 convention for other internal types it creates. So treating
529cad9c 6053 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
6054 some regressions. For instance, consider the case of an enumerated
6055 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
6056 name ends with N.
6057 Having a single character like this as a suffix carrying some
0963b4bd 6058 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
6059 to be something like "_N" instead. In the meantime, do not do
6060 the following check. */
6061 /* Protected Object Subprograms */
6062 if (len == 1 && str [0] == 'N')
6063 return 1;
6064#endif
6065
6066 /* _E[0-9]+[bs]$ */
6067 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
6068 {
6069 matching = str + 3;
6070 while (isdigit (matching[0]))
6071 matching += 1;
6072 if ((matching[0] == 'b' || matching[0] == 's')
6073 && matching [1] == '\0')
6074 return 1;
6075 }
6076
4c4b4cd2
PH
6077 /* ??? We should not modify STR directly, as we are doing below. This
6078 is fine in this case, but may become problematic later if we find
6079 that this alternative did not work, and want to try matching
6080 another one from the begining of STR. Since we modified it, we
6081 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
6082 if (str[0] == 'X')
6083 {
6084 str += 1;
d2e4a39e 6085 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
6086 {
6087 if (str[0] != 'n' && str[0] != 'b')
6088 return 0;
6089 str += 1;
6090 }
14f9c5c9 6091 }
babe1480 6092
14f9c5c9
AS
6093 if (str[0] == '\000')
6094 return 1;
babe1480 6095
d2e4a39e 6096 if (str[0] == '_')
14f9c5c9
AS
6097 {
6098 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 6099 return 0;
d2e4a39e 6100 if (str[2] == '_')
4c4b4cd2 6101 {
61ee279c
PH
6102 if (strcmp (str + 3, "JM") == 0)
6103 return 1;
6104 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
6105 the LJM suffix in favor of the JM one. But we will
6106 still accept LJM as a valid suffix for a reasonable
6107 amount of time, just to allow ourselves to debug programs
6108 compiled using an older version of GNAT. */
4c4b4cd2
PH
6109 if (strcmp (str + 3, "LJM") == 0)
6110 return 1;
6111 if (str[3] != 'X')
6112 return 0;
1265e4aa
JB
6113 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
6114 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
6115 return 1;
6116 if (str[4] == 'R' && str[5] != 'T')
6117 return 1;
6118 return 0;
6119 }
6120 if (!isdigit (str[2]))
6121 return 0;
6122 for (k = 3; str[k] != '\0'; k += 1)
6123 if (!isdigit (str[k]) && str[k] != '_')
6124 return 0;
14f9c5c9
AS
6125 return 1;
6126 }
4c4b4cd2 6127 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 6128 {
4c4b4cd2
PH
6129 for (k = 2; str[k] != '\0'; k += 1)
6130 if (!isdigit (str[k]) && str[k] != '_')
6131 return 0;
14f9c5c9
AS
6132 return 1;
6133 }
6134 return 0;
6135}
d2e4a39e 6136
aeb5907d
JB
6137/* Return non-zero if the string starting at NAME and ending before
6138 NAME_END contains no capital letters. */
529cad9c
PH
6139
6140static int
6141is_valid_name_for_wild_match (const char *name0)
6142{
6143 const char *decoded_name = ada_decode (name0);
6144 int i;
6145
5823c3ef
JB
6146 /* If the decoded name starts with an angle bracket, it means that
6147 NAME0 does not follow the GNAT encoding format. It should then
6148 not be allowed as a possible wild match. */
6149 if (decoded_name[0] == '<')
6150 return 0;
6151
529cad9c
PH
6152 for (i=0; decoded_name[i] != '\0'; i++)
6153 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
6154 return 0;
6155
6156 return 1;
6157}
6158
73589123
PH
6159/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
6160 that could start a simple name. Assumes that *NAMEP points into
6161 the string beginning at NAME0. */
4c4b4cd2 6162
14f9c5c9 6163static int
73589123 6164advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 6165{
73589123 6166 const char *name = *namep;
5b4ee69b 6167
5823c3ef 6168 while (1)
14f9c5c9 6169 {
aa27d0b3 6170 int t0, t1;
73589123
PH
6171
6172 t0 = *name;
6173 if (t0 == '_')
6174 {
6175 t1 = name[1];
6176 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
6177 {
6178 name += 1;
61012eef 6179 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
6180 break;
6181 else
6182 name += 1;
6183 }
aa27d0b3
JB
6184 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
6185 || name[2] == target0))
73589123
PH
6186 {
6187 name += 2;
6188 break;
6189 }
6190 else
6191 return 0;
6192 }
6193 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
6194 name += 1;
6195 else
5823c3ef 6196 return 0;
73589123
PH
6197 }
6198
6199 *namep = name;
6200 return 1;
6201}
6202
b5ec771e
PA
6203/* Return true iff NAME encodes a name of the form prefix.PATN.
6204 Ignores any informational suffixes of NAME (i.e., for which
6205 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
6206 simple name. */
73589123 6207
b5ec771e 6208static bool
73589123
PH
6209wild_match (const char *name, const char *patn)
6210{
22e048c9 6211 const char *p;
73589123
PH
6212 const char *name0 = name;
6213
6214 while (1)
6215 {
6216 const char *match = name;
6217
6218 if (*name == *patn)
6219 {
6220 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6221 if (*p != *name)
6222 break;
6223 if (*p == '\0' && is_name_suffix (name))
b5ec771e 6224 return match == name0 || is_valid_name_for_wild_match (name0);
73589123
PH
6225
6226 if (name[-1] == '_')
6227 name -= 1;
6228 }
6229 if (!advance_wild_match (&name, name0, *patn))
b5ec771e 6230 return false;
96d887e8 6231 }
96d887e8
PH
6232}
6233
b5ec771e
PA
6234/* Returns true iff symbol name SYM_NAME matches SEARCH_NAME, ignoring
6235 any trailing suffixes that encode debugging information or leading
6236 _ada_ on SYM_NAME (see is_name_suffix commentary for the debugging
6237 information that is ignored). */
40658b94 6238
b5ec771e 6239static bool
c4d840bd
PH
6240full_match (const char *sym_name, const char *search_name)
6241{
b5ec771e
PA
6242 size_t search_name_len = strlen (search_name);
6243
6244 if (strncmp (sym_name, search_name, search_name_len) == 0
6245 && is_name_suffix (sym_name + search_name_len))
6246 return true;
6247
6248 if (startswith (sym_name, "_ada_")
6249 && strncmp (sym_name + 5, search_name, search_name_len) == 0
6250 && is_name_suffix (sym_name + search_name_len + 5))
6251 return true;
c4d840bd 6252
b5ec771e
PA
6253 return false;
6254}
c4d840bd 6255
b5ec771e
PA
6256/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to vector
6257 *defn_symbols, updating the list of symbols in OBSTACKP (if
6258 necessary). OBJFILE is the section containing BLOCK. */
96d887e8
PH
6259
6260static void
6261ada_add_block_symbols (struct obstack *obstackp,
b5ec771e
PA
6262 const struct block *block,
6263 const lookup_name_info &lookup_name,
6264 domain_enum domain, struct objfile *objfile)
96d887e8 6265{
8157b174 6266 struct block_iterator iter;
96d887e8
PH
6267 /* A matching argument symbol, if any. */
6268 struct symbol *arg_sym;
6269 /* Set true when we find a matching non-argument symbol. */
6270 int found_sym;
6271 struct symbol *sym;
6272
6273 arg_sym = NULL;
6274 found_sym = 0;
b5ec771e
PA
6275 for (sym = block_iter_match_first (block, lookup_name, &iter);
6276 sym != NULL;
6277 sym = block_iter_match_next (lookup_name, &iter))
96d887e8 6278 {
b5ec771e
PA
6279 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6280 SYMBOL_DOMAIN (sym), domain))
6281 {
6282 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6283 {
6284 if (SYMBOL_IS_ARGUMENT (sym))
6285 arg_sym = sym;
6286 else
6287 {
6288 found_sym = 1;
6289 add_defn_to_vec (obstackp,
6290 fixup_symbol_section (sym, objfile),
6291 block);
6292 }
6293 }
6294 }
96d887e8
PH
6295 }
6296
22cee43f
PMR
6297 /* Handle renamings. */
6298
b5ec771e 6299 if (ada_add_block_renamings (obstackp, block, lookup_name, domain))
22cee43f
PMR
6300 found_sym = 1;
6301
96d887e8
PH
6302 if (!found_sym && arg_sym != NULL)
6303 {
76a01679
JB
6304 add_defn_to_vec (obstackp,
6305 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6306 block);
96d887e8
PH
6307 }
6308
b5ec771e 6309 if (!lookup_name.ada ().wild_match_p ())
96d887e8
PH
6310 {
6311 arg_sym = NULL;
6312 found_sym = 0;
b5ec771e
PA
6313 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6314 const char *name = ada_lookup_name.c_str ();
6315 size_t name_len = ada_lookup_name.size ();
96d887e8
PH
6316
6317 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6318 {
4186eb54
KS
6319 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6320 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
6321 {
6322 int cmp;
6323
6324 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6325 if (cmp == 0)
6326 {
61012eef 6327 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
76a01679
JB
6328 if (cmp == 0)
6329 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6330 name_len);
6331 }
6332
6333 if (cmp == 0
6334 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6335 {
2a2d4dc3
AS
6336 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6337 {
6338 if (SYMBOL_IS_ARGUMENT (sym))
6339 arg_sym = sym;
6340 else
6341 {
6342 found_sym = 1;
6343 add_defn_to_vec (obstackp,
6344 fixup_symbol_section (sym, objfile),
6345 block);
6346 }
6347 }
76a01679
JB
6348 }
6349 }
76a01679 6350 }
96d887e8
PH
6351
6352 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6353 They aren't parameters, right? */
6354 if (!found_sym && arg_sym != NULL)
6355 {
6356 add_defn_to_vec (obstackp,
76a01679 6357 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6358 block);
96d887e8
PH
6359 }
6360 }
6361}
6362\f
41d27058
JB
6363
6364 /* Symbol Completion */
6365
b5ec771e 6366/* See symtab.h. */
41d27058 6367
b5ec771e
PA
6368bool
6369ada_lookup_name_info::matches
6370 (const char *sym_name,
6371 symbol_name_match_type match_type,
a207cff2 6372 completion_match_result *comp_match_res) const
41d27058 6373{
b5ec771e
PA
6374 bool match = false;
6375 const char *text = m_encoded_name.c_str ();
6376 size_t text_len = m_encoded_name.size ();
41d27058
JB
6377
6378 /* First, test against the fully qualified name of the symbol. */
6379
6380 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6381 match = true;
41d27058 6382
b5ec771e 6383 if (match && !m_encoded_p)
41d27058
JB
6384 {
6385 /* One needed check before declaring a positive match is to verify
6386 that iff we are doing a verbatim match, the decoded version
6387 of the symbol name starts with '<'. Otherwise, this symbol name
6388 is not a suitable completion. */
6389 const char *sym_name_copy = sym_name;
b5ec771e 6390 bool has_angle_bracket;
41d27058
JB
6391
6392 sym_name = ada_decode (sym_name);
6393 has_angle_bracket = (sym_name[0] == '<');
b5ec771e 6394 match = (has_angle_bracket == m_verbatim_p);
41d27058
JB
6395 sym_name = sym_name_copy;
6396 }
6397
b5ec771e 6398 if (match && !m_verbatim_p)
41d27058
JB
6399 {
6400 /* When doing non-verbatim match, another check that needs to
6401 be done is to verify that the potentially matching symbol name
6402 does not include capital letters, because the ada-mode would
6403 not be able to understand these symbol names without the
6404 angle bracket notation. */
6405 const char *tmp;
6406
6407 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6408 if (*tmp != '\0')
b5ec771e 6409 match = false;
41d27058
JB
6410 }
6411
6412 /* Second: Try wild matching... */
6413
b5ec771e 6414 if (!match && m_wild_match_p)
41d27058
JB
6415 {
6416 /* Since we are doing wild matching, this means that TEXT
6417 may represent an unqualified symbol name. We therefore must
6418 also compare TEXT against the unqualified name of the symbol. */
6419 sym_name = ada_unqualified_name (ada_decode (sym_name));
6420
6421 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6422 match = true;
41d27058
JB
6423 }
6424
b5ec771e 6425 /* Finally: If we found a match, prepare the result to return. */
41d27058
JB
6426
6427 if (!match)
b5ec771e 6428 return false;
41d27058 6429
a207cff2 6430 if (comp_match_res != NULL)
b5ec771e 6431 {
a207cff2 6432 std::string &match_str = comp_match_res->match.storage ();
41d27058 6433
b5ec771e 6434 if (!m_encoded_p)
a207cff2 6435 match_str = ada_decode (sym_name);
b5ec771e
PA
6436 else
6437 {
6438 if (m_verbatim_p)
6439 match_str = add_angle_brackets (sym_name);
6440 else
6441 match_str = sym_name;
41d27058 6442
b5ec771e 6443 }
a207cff2
PA
6444
6445 comp_match_res->set_match (match_str.c_str ());
41d27058
JB
6446 }
6447
b5ec771e 6448 return true;
41d27058
JB
6449}
6450
b5ec771e 6451/* Add the list of possible symbol names completing TEXT to TRACKER.
eb3ff9a5 6452 WORD is the entire command on which completion is made. */
41d27058 6453
eb3ff9a5
PA
6454static void
6455ada_collect_symbol_completion_matches (completion_tracker &tracker,
c6756f62 6456 complete_symbol_mode mode,
b5ec771e
PA
6457 symbol_name_match_type name_match_type,
6458 const char *text, const char *word,
eb3ff9a5 6459 enum type_code code)
41d27058 6460{
41d27058 6461 struct symbol *sym;
43f3e411 6462 struct compunit_symtab *s;
41d27058
JB
6463 struct minimal_symbol *msymbol;
6464 struct objfile *objfile;
3977b71f 6465 const struct block *b, *surrounding_static_block = 0;
8157b174 6466 struct block_iterator iter;
41d27058 6467
2f68a895
TT
6468 gdb_assert (code == TYPE_CODE_UNDEF);
6469
1b026119 6470 lookup_name_info lookup_name (text, name_match_type, true);
41d27058
JB
6471
6472 /* First, look at the partial symtab symbols. */
14bc53a8 6473 expand_symtabs_matching (NULL,
b5ec771e
PA
6474 lookup_name,
6475 NULL,
14bc53a8
PA
6476 NULL,
6477 ALL_DOMAIN);
41d27058
JB
6478
6479 /* At this point scan through the misc symbol vectors and add each
6480 symbol you find to the list. Eventually we want to ignore
6481 anything that isn't a text symbol (everything else will be
6482 handled by the psymtab code above). */
6483
6484 ALL_MSYMBOLS (objfile, msymbol)
6485 {
6486 QUIT;
b5ec771e 6487
f9d67a22
PA
6488 if (completion_skip_symbol (mode, msymbol))
6489 continue;
6490
d4c2a405
PA
6491 language symbol_language = MSYMBOL_LANGUAGE (msymbol);
6492
6493 /* Ada minimal symbols won't have their language set to Ada. If
6494 we let completion_list_add_name compare using the
6495 default/C-like matcher, then when completing e.g., symbols in a
6496 package named "pck", we'd match internal Ada symbols like
6497 "pckS", which are invalid in an Ada expression, unless you wrap
6498 them in '<' '>' to request a verbatim match.
6499
6500 Unfortunately, some Ada encoded names successfully demangle as
6501 C++ symbols (using an old mangling scheme), such as "name__2Xn"
6502 -> "Xn::name(void)" and thus some Ada minimal symbols end up
6503 with the wrong language set. Paper over that issue here. */
6504 if (symbol_language == language_auto
6505 || symbol_language == language_cplus)
6506 symbol_language = language_ada;
6507
b5ec771e 6508 completion_list_add_name (tracker,
d4c2a405 6509 symbol_language,
b5ec771e 6510 MSYMBOL_LINKAGE_NAME (msymbol),
1b026119 6511 lookup_name, text, word);
41d27058
JB
6512 }
6513
6514 /* Search upwards from currently selected frame (so that we can
6515 complete on local vars. */
6516
6517 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6518 {
6519 if (!BLOCK_SUPERBLOCK (b))
6520 surrounding_static_block = b; /* For elmin of dups */
6521
6522 ALL_BLOCK_SYMBOLS (b, iter, sym)
6523 {
f9d67a22
PA
6524 if (completion_skip_symbol (mode, sym))
6525 continue;
6526
b5ec771e
PA
6527 completion_list_add_name (tracker,
6528 SYMBOL_LANGUAGE (sym),
6529 SYMBOL_LINKAGE_NAME (sym),
1b026119 6530 lookup_name, text, word);
41d27058
JB
6531 }
6532 }
6533
6534 /* Go through the symtabs and check the externs and statics for
43f3e411 6535 symbols which match. */
41d27058 6536
43f3e411 6537 ALL_COMPUNITS (objfile, s)
41d27058
JB
6538 {
6539 QUIT;
43f3e411 6540 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
41d27058
JB
6541 ALL_BLOCK_SYMBOLS (b, iter, sym)
6542 {
f9d67a22
PA
6543 if (completion_skip_symbol (mode, sym))
6544 continue;
6545
b5ec771e
PA
6546 completion_list_add_name (tracker,
6547 SYMBOL_LANGUAGE (sym),
6548 SYMBOL_LINKAGE_NAME (sym),
1b026119 6549 lookup_name, text, word);
41d27058
JB
6550 }
6551 }
6552
43f3e411 6553 ALL_COMPUNITS (objfile, s)
41d27058
JB
6554 {
6555 QUIT;
43f3e411 6556 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
41d27058
JB
6557 /* Don't do this block twice. */
6558 if (b == surrounding_static_block)
6559 continue;
6560 ALL_BLOCK_SYMBOLS (b, iter, sym)
6561 {
f9d67a22
PA
6562 if (completion_skip_symbol (mode, sym))
6563 continue;
6564
b5ec771e
PA
6565 completion_list_add_name (tracker,
6566 SYMBOL_LANGUAGE (sym),
6567 SYMBOL_LINKAGE_NAME (sym),
1b026119 6568 lookup_name, text, word);
41d27058
JB
6569 }
6570 }
41d27058
JB
6571}
6572
963a6417 6573 /* Field Access */
96d887e8 6574
73fb9985
JB
6575/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6576 for tagged types. */
6577
6578static int
6579ada_is_dispatch_table_ptr_type (struct type *type)
6580{
0d5cff50 6581 const char *name;
73fb9985
JB
6582
6583 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6584 return 0;
6585
6586 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6587 if (name == NULL)
6588 return 0;
6589
6590 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6591}
6592
ac4a2da4
JG
6593/* Return non-zero if TYPE is an interface tag. */
6594
6595static int
6596ada_is_interface_tag (struct type *type)
6597{
6598 const char *name = TYPE_NAME (type);
6599
6600 if (name == NULL)
6601 return 0;
6602
6603 return (strcmp (name, "ada__tags__interface_tag") == 0);
6604}
6605
963a6417
PH
6606/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6607 to be invisible to users. */
96d887e8 6608
963a6417
PH
6609int
6610ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6611{
963a6417
PH
6612 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6613 return 1;
ffde82bf 6614
73fb9985
JB
6615 /* Check the name of that field. */
6616 {
6617 const char *name = TYPE_FIELD_NAME (type, field_num);
6618
6619 /* Anonymous field names should not be printed.
6620 brobecker/2007-02-20: I don't think this can actually happen
6621 but we don't want to print the value of annonymous fields anyway. */
6622 if (name == NULL)
6623 return 1;
6624
ffde82bf
JB
6625 /* Normally, fields whose name start with an underscore ("_")
6626 are fields that have been internally generated by the compiler,
6627 and thus should not be printed. The "_parent" field is special,
6628 however: This is a field internally generated by the compiler
6629 for tagged types, and it contains the components inherited from
6630 the parent type. This field should not be printed as is, but
6631 should not be ignored either. */
61012eef 6632 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6633 return 1;
6634 }
6635
ac4a2da4
JG
6636 /* If this is the dispatch table of a tagged type or an interface tag,
6637 then ignore. */
73fb9985 6638 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6639 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6640 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6641 return 1;
6642
6643 /* Not a special field, so it should not be ignored. */
6644 return 0;
963a6417 6645}
96d887e8 6646
963a6417 6647/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6648 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6649
963a6417
PH
6650int
6651ada_is_tagged_type (struct type *type, int refok)
6652{
988f6b3d 6653 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
963a6417 6654}
96d887e8 6655
963a6417 6656/* True iff TYPE represents the type of X'Tag */
96d887e8 6657
963a6417
PH
6658int
6659ada_is_tag_type (struct type *type)
6660{
460efde1
JB
6661 type = ada_check_typedef (type);
6662
963a6417
PH
6663 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6664 return 0;
6665 else
96d887e8 6666 {
963a6417 6667 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6668
963a6417
PH
6669 return (name != NULL
6670 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6671 }
96d887e8
PH
6672}
6673
963a6417 6674/* The type of the tag on VAL. */
76a01679 6675
963a6417
PH
6676struct type *
6677ada_tag_type (struct value *val)
96d887e8 6678{
988f6b3d 6679 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
963a6417 6680}
96d887e8 6681
b50d69b5
JG
6682/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6683 retired at Ada 05). */
6684
6685static int
6686is_ada95_tag (struct value *tag)
6687{
6688 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6689}
6690
963a6417 6691/* The value of the tag on VAL. */
96d887e8 6692
963a6417
PH
6693struct value *
6694ada_value_tag (struct value *val)
6695{
03ee6b2e 6696 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6697}
6698
963a6417
PH
6699/* The value of the tag on the object of type TYPE whose contents are
6700 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6701 ADDRESS. */
96d887e8 6702
963a6417 6703static struct value *
10a2c479 6704value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6705 const gdb_byte *valaddr,
963a6417 6706 CORE_ADDR address)
96d887e8 6707{
b5385fc0 6708 int tag_byte_offset;
963a6417 6709 struct type *tag_type;
5b4ee69b 6710
963a6417 6711 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6712 NULL, NULL, NULL))
96d887e8 6713 {
fc1a4b47 6714 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6715 ? NULL
6716 : valaddr + tag_byte_offset);
963a6417 6717 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6718
963a6417 6719 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6720 }
963a6417
PH
6721 return NULL;
6722}
96d887e8 6723
963a6417
PH
6724static struct type *
6725type_from_tag (struct value *tag)
6726{
6727 const char *type_name = ada_tag_name (tag);
5b4ee69b 6728
963a6417
PH
6729 if (type_name != NULL)
6730 return ada_find_any_type (ada_encode (type_name));
6731 return NULL;
6732}
96d887e8 6733
b50d69b5
JG
6734/* Given a value OBJ of a tagged type, return a value of this
6735 type at the base address of the object. The base address, as
6736 defined in Ada.Tags, it is the address of the primary tag of
6737 the object, and therefore where the field values of its full
6738 view can be fetched. */
6739
6740struct value *
6741ada_tag_value_at_base_address (struct value *obj)
6742{
b50d69b5
JG
6743 struct value *val;
6744 LONGEST offset_to_top = 0;
6745 struct type *ptr_type, *obj_type;
6746 struct value *tag;
6747 CORE_ADDR base_address;
6748
6749 obj_type = value_type (obj);
6750
6751 /* It is the responsability of the caller to deref pointers. */
6752
6753 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6754 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6755 return obj;
6756
6757 tag = ada_value_tag (obj);
6758 if (!tag)
6759 return obj;
6760
6761 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6762
6763 if (is_ada95_tag (tag))
6764 return obj;
6765
08f49010
XR
6766 ptr_type = language_lookup_primitive_type
6767 (language_def (language_ada), target_gdbarch(), "storage_offset");
b50d69b5
JG
6768 ptr_type = lookup_pointer_type (ptr_type);
6769 val = value_cast (ptr_type, tag);
6770 if (!val)
6771 return obj;
6772
6773 /* It is perfectly possible that an exception be raised while
6774 trying to determine the base address, just like for the tag;
6775 see ada_tag_name for more details. We do not print the error
6776 message for the same reason. */
6777
492d29ea 6778 TRY
b50d69b5
JG
6779 {
6780 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6781 }
6782
492d29ea
PA
6783 CATCH (e, RETURN_MASK_ERROR)
6784 {
6785 return obj;
6786 }
6787 END_CATCH
b50d69b5
JG
6788
6789 /* If offset is null, nothing to do. */
6790
6791 if (offset_to_top == 0)
6792 return obj;
6793
6794 /* -1 is a special case in Ada.Tags; however, what should be done
6795 is not quite clear from the documentation. So do nothing for
6796 now. */
6797
6798 if (offset_to_top == -1)
6799 return obj;
6800
08f49010
XR
6801 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6802 from the base address. This was however incompatible with
6803 C++ dispatch table: C++ uses a *negative* value to *add*
6804 to the base address. Ada's convention has therefore been
6805 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6806 use the same convention. Here, we support both cases by
6807 checking the sign of OFFSET_TO_TOP. */
6808
6809 if (offset_to_top > 0)
6810 offset_to_top = -offset_to_top;
6811
6812 base_address = value_address (obj) + offset_to_top;
b50d69b5
JG
6813 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6814
6815 /* Make sure that we have a proper tag at the new address.
6816 Otherwise, offset_to_top is bogus (which can happen when
6817 the object is not initialized yet). */
6818
6819 if (!tag)
6820 return obj;
6821
6822 obj_type = type_from_tag (tag);
6823
6824 if (!obj_type)
6825 return obj;
6826
6827 return value_from_contents_and_address (obj_type, NULL, base_address);
6828}
6829
1b611343
JB
6830/* Return the "ada__tags__type_specific_data" type. */
6831
6832static struct type *
6833ada_get_tsd_type (struct inferior *inf)
963a6417 6834{
1b611343 6835 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6836
1b611343
JB
6837 if (data->tsd_type == 0)
6838 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6839 return data->tsd_type;
6840}
529cad9c 6841
1b611343
JB
6842/* Return the TSD (type-specific data) associated to the given TAG.
6843 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6844
1b611343 6845 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6846
1b611343
JB
6847static struct value *
6848ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6849{
4c4b4cd2 6850 struct value *val;
1b611343 6851 struct type *type;
5b4ee69b 6852
1b611343
JB
6853 /* First option: The TSD is simply stored as a field of our TAG.
6854 Only older versions of GNAT would use this format, but we have
6855 to test it first, because there are no visible markers for
6856 the current approach except the absence of that field. */
529cad9c 6857
1b611343
JB
6858 val = ada_value_struct_elt (tag, "tsd", 1);
6859 if (val)
6860 return val;
e802dbe0 6861
1b611343
JB
6862 /* Try the second representation for the dispatch table (in which
6863 there is no explicit 'tsd' field in the referent of the tag pointer,
6864 and instead the tsd pointer is stored just before the dispatch
6865 table. */
e802dbe0 6866
1b611343
JB
6867 type = ada_get_tsd_type (current_inferior());
6868 if (type == NULL)
6869 return NULL;
6870 type = lookup_pointer_type (lookup_pointer_type (type));
6871 val = value_cast (type, tag);
6872 if (val == NULL)
6873 return NULL;
6874 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6875}
6876
1b611343
JB
6877/* Given the TSD of a tag (type-specific data), return a string
6878 containing the name of the associated type.
6879
6880 The returned value is good until the next call. May return NULL
6881 if we are unable to determine the tag name. */
6882
6883static char *
6884ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6885{
529cad9c
PH
6886 static char name[1024];
6887 char *p;
1b611343 6888 struct value *val;
529cad9c 6889
1b611343 6890 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6891 if (val == NULL)
1b611343 6892 return NULL;
4c4b4cd2
PH
6893 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6894 for (p = name; *p != '\0'; p += 1)
6895 if (isalpha (*p))
6896 *p = tolower (*p);
1b611343 6897 return name;
4c4b4cd2
PH
6898}
6899
6900/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6901 a C string.
6902
6903 Return NULL if the TAG is not an Ada tag, or if we were unable to
6904 determine the name of that tag. The result is good until the next
6905 call. */
4c4b4cd2
PH
6906
6907const char *
6908ada_tag_name (struct value *tag)
6909{
1b611343 6910 char *name = NULL;
5b4ee69b 6911
df407dfe 6912 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6913 return NULL;
1b611343
JB
6914
6915 /* It is perfectly possible that an exception be raised while trying
6916 to determine the TAG's name, even under normal circumstances:
6917 The associated variable may be uninitialized or corrupted, for
6918 instance. We do not let any exception propagate past this point.
6919 instead we return NULL.
6920
6921 We also do not print the error message either (which often is very
6922 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6923 the caller print a more meaningful message if necessary. */
492d29ea 6924 TRY
1b611343
JB
6925 {
6926 struct value *tsd = ada_get_tsd_from_tag (tag);
6927
6928 if (tsd != NULL)
6929 name = ada_tag_name_from_tsd (tsd);
6930 }
492d29ea
PA
6931 CATCH (e, RETURN_MASK_ERROR)
6932 {
6933 }
6934 END_CATCH
1b611343
JB
6935
6936 return name;
4c4b4cd2
PH
6937}
6938
6939/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6940
d2e4a39e 6941struct type *
ebf56fd3 6942ada_parent_type (struct type *type)
14f9c5c9
AS
6943{
6944 int i;
6945
61ee279c 6946 type = ada_check_typedef (type);
14f9c5c9
AS
6947
6948 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6949 return NULL;
6950
6951 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6952 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6953 {
6954 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6955
6956 /* If the _parent field is a pointer, then dereference it. */
6957 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6958 parent_type = TYPE_TARGET_TYPE (parent_type);
6959 /* If there is a parallel XVS type, get the actual base type. */
6960 parent_type = ada_get_base_type (parent_type);
6961
6962 return ada_check_typedef (parent_type);
6963 }
14f9c5c9
AS
6964
6965 return NULL;
6966}
6967
4c4b4cd2
PH
6968/* True iff field number FIELD_NUM of structure type TYPE contains the
6969 parent-type (inherited) fields of a derived type. Assumes TYPE is
6970 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6971
6972int
ebf56fd3 6973ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6974{
61ee279c 6975 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6976
4c4b4cd2 6977 return (name != NULL
61012eef
GB
6978 && (startswith (name, "PARENT")
6979 || startswith (name, "_parent")));
14f9c5c9
AS
6980}
6981
4c4b4cd2 6982/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6983 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6984 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6985 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6986 structures. */
14f9c5c9
AS
6987
6988int
ebf56fd3 6989ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6990{
d2e4a39e 6991 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6992
dddc0e16
JB
6993 if (name != NULL && strcmp (name, "RETVAL") == 0)
6994 {
6995 /* This happens in functions with "out" or "in out" parameters
6996 which are passed by copy. For such functions, GNAT describes
6997 the function's return type as being a struct where the return
6998 value is in a field called RETVAL, and where the other "out"
6999 or "in out" parameters are fields of that struct. This is not
7000 a wrapper. */
7001 return 0;
7002 }
7003
d2e4a39e 7004 return (name != NULL
61012eef 7005 && (startswith (name, "PARENT")
4c4b4cd2 7006 || strcmp (name, "REP") == 0
61012eef 7007 || startswith (name, "_parent")
4c4b4cd2 7008 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
7009}
7010
4c4b4cd2
PH
7011/* True iff field number FIELD_NUM of structure or union type TYPE
7012 is a variant wrapper. Assumes TYPE is a structure type with at least
7013 FIELD_NUM+1 fields. */
14f9c5c9
AS
7014
7015int
ebf56fd3 7016ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 7017{
d2e4a39e 7018 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 7019
14f9c5c9 7020 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 7021 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
7022 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
7023 == TYPE_CODE_UNION)));
14f9c5c9
AS
7024}
7025
7026/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 7027 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
7028 returns the type of the controlling discriminant for the variant.
7029 May return NULL if the type could not be found. */
14f9c5c9 7030
d2e4a39e 7031struct type *
ebf56fd3 7032ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 7033{
a121b7c1 7034 const char *name = ada_variant_discrim_name (var_type);
5b4ee69b 7035
988f6b3d 7036 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
14f9c5c9
AS
7037}
7038
4c4b4cd2 7039/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 7040 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 7041 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
7042
7043int
ebf56fd3 7044ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 7045{
d2e4a39e 7046 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 7047
14f9c5c9
AS
7048 return (name != NULL && name[0] == 'O');
7049}
7050
7051/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
7052 returns the name of the discriminant controlling the variant.
7053 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 7054
a121b7c1 7055const char *
ebf56fd3 7056ada_variant_discrim_name (struct type *type0)
14f9c5c9 7057{
d2e4a39e 7058 static char *result = NULL;
14f9c5c9 7059 static size_t result_len = 0;
d2e4a39e
AS
7060 struct type *type;
7061 const char *name;
7062 const char *discrim_end;
7063 const char *discrim_start;
14f9c5c9
AS
7064
7065 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
7066 type = TYPE_TARGET_TYPE (type0);
7067 else
7068 type = type0;
7069
7070 name = ada_type_name (type);
7071
7072 if (name == NULL || name[0] == '\000')
7073 return "";
7074
7075 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
7076 discrim_end -= 1)
7077 {
61012eef 7078 if (startswith (discrim_end, "___XVN"))
4c4b4cd2 7079 break;
14f9c5c9
AS
7080 }
7081 if (discrim_end == name)
7082 return "";
7083
d2e4a39e 7084 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
7085 discrim_start -= 1)
7086 {
d2e4a39e 7087 if (discrim_start == name + 1)
4c4b4cd2 7088 return "";
76a01679 7089 if ((discrim_start > name + 3
61012eef 7090 && startswith (discrim_start - 3, "___"))
4c4b4cd2
PH
7091 || discrim_start[-1] == '.')
7092 break;
14f9c5c9
AS
7093 }
7094
7095 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
7096 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 7097 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
7098 return result;
7099}
7100
4c4b4cd2
PH
7101/* Scan STR for a subtype-encoded number, beginning at position K.
7102 Put the position of the character just past the number scanned in
7103 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
7104 Return 1 if there was a valid number at the given position, and 0
7105 otherwise. A "subtype-encoded" number consists of the absolute value
7106 in decimal, followed by the letter 'm' to indicate a negative number.
7107 Assumes 0m does not occur. */
14f9c5c9
AS
7108
7109int
d2e4a39e 7110ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
7111{
7112 ULONGEST RU;
7113
d2e4a39e 7114 if (!isdigit (str[k]))
14f9c5c9
AS
7115 return 0;
7116
4c4b4cd2 7117 /* Do it the hard way so as not to make any assumption about
14f9c5c9 7118 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 7119 LONGEST. */
14f9c5c9
AS
7120 RU = 0;
7121 while (isdigit (str[k]))
7122 {
d2e4a39e 7123 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
7124 k += 1;
7125 }
7126
d2e4a39e 7127 if (str[k] == 'm')
14f9c5c9
AS
7128 {
7129 if (R != NULL)
4c4b4cd2 7130 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
7131 k += 1;
7132 }
7133 else if (R != NULL)
7134 *R = (LONGEST) RU;
7135
4c4b4cd2 7136 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
7137 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
7138 number representable as a LONGEST (although either would probably work
7139 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 7140 above is always equivalent to the negative of RU. */
14f9c5c9
AS
7141
7142 if (new_k != NULL)
7143 *new_k = k;
7144 return 1;
7145}
7146
4c4b4cd2
PH
7147/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
7148 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
7149 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 7150
d2e4a39e 7151int
ebf56fd3 7152ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 7153{
d2e4a39e 7154 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
7155 int p;
7156
7157 p = 0;
7158 while (1)
7159 {
d2e4a39e 7160 switch (name[p])
4c4b4cd2
PH
7161 {
7162 case '\0':
7163 return 0;
7164 case 'S':
7165 {
7166 LONGEST W;
5b4ee69b 7167
4c4b4cd2
PH
7168 if (!ada_scan_number (name, p + 1, &W, &p))
7169 return 0;
7170 if (val == W)
7171 return 1;
7172 break;
7173 }
7174 case 'R':
7175 {
7176 LONGEST L, U;
5b4ee69b 7177
4c4b4cd2
PH
7178 if (!ada_scan_number (name, p + 1, &L, &p)
7179 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
7180 return 0;
7181 if (val >= L && val <= U)
7182 return 1;
7183 break;
7184 }
7185 case 'O':
7186 return 1;
7187 default:
7188 return 0;
7189 }
7190 }
7191}
7192
0963b4bd 7193/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
7194
7195/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
7196 ARG_TYPE, extract and return the value of one of its (non-static)
7197 fields. FIELDNO says which field. Differs from value_primitive_field
7198 only in that it can handle packed values of arbitrary type. */
14f9c5c9 7199
4c4b4cd2 7200static struct value *
d2e4a39e 7201ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 7202 struct type *arg_type)
14f9c5c9 7203{
14f9c5c9
AS
7204 struct type *type;
7205
61ee279c 7206 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
7207 type = TYPE_FIELD_TYPE (arg_type, fieldno);
7208
4c4b4cd2 7209 /* Handle packed fields. */
14f9c5c9
AS
7210
7211 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
7212 {
7213 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7214 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 7215
0fd88904 7216 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
7217 offset + bit_pos / 8,
7218 bit_pos % 8, bit_size, type);
14f9c5c9
AS
7219 }
7220 else
7221 return value_primitive_field (arg1, offset, fieldno, arg_type);
7222}
7223
52ce6436
PH
7224/* Find field with name NAME in object of type TYPE. If found,
7225 set the following for each argument that is non-null:
7226 - *FIELD_TYPE_P to the field's type;
7227 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
7228 an object of that type;
7229 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
7230 - *BIT_SIZE_P to its size in bits if the field is packed, and
7231 0 otherwise;
7232 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7233 fields up to but not including the desired field, or by the total
7234 number of fields if not found. A NULL value of NAME never
7235 matches; the function just counts visible fields in this case.
7236
828d5846
XR
7237 Notice that we need to handle when a tagged record hierarchy
7238 has some components with the same name, like in this scenario:
7239
7240 type Top_T is tagged record
7241 N : Integer := 1;
7242 U : Integer := 974;
7243 A : Integer := 48;
7244 end record;
7245
7246 type Middle_T is new Top.Top_T with record
7247 N : Character := 'a';
7248 C : Integer := 3;
7249 end record;
7250
7251 type Bottom_T is new Middle.Middle_T with record
7252 N : Float := 4.0;
7253 C : Character := '5';
7254 X : Integer := 6;
7255 A : Character := 'J';
7256 end record;
7257
7258 Let's say we now have a variable declared and initialized as follow:
7259
7260 TC : Top_A := new Bottom_T;
7261
7262 And then we use this variable to call this function
7263
7264 procedure Assign (Obj: in out Top_T; TV : Integer);
7265
7266 as follow:
7267
7268 Assign (Top_T (B), 12);
7269
7270 Now, we're in the debugger, and we're inside that procedure
7271 then and we want to print the value of obj.c:
7272
7273 Usually, the tagged record or one of the parent type owns the
7274 component to print and there's no issue but in this particular
7275 case, what does it mean to ask for Obj.C? Since the actual
7276 type for object is type Bottom_T, it could mean two things: type
7277 component C from the Middle_T view, but also component C from
7278 Bottom_T. So in that "undefined" case, when the component is
7279 not found in the non-resolved type (which includes all the
7280 components of the parent type), then resolve it and see if we
7281 get better luck once expanded.
7282
7283 In the case of homonyms in the derived tagged type, we don't
7284 guaranty anything, and pick the one that's easiest for us
7285 to program.
7286
0963b4bd 7287 Returns 1 if found, 0 otherwise. */
52ce6436 7288
4c4b4cd2 7289static int
0d5cff50 7290find_struct_field (const char *name, struct type *type, int offset,
76a01679 7291 struct type **field_type_p,
52ce6436
PH
7292 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7293 int *index_p)
4c4b4cd2
PH
7294{
7295 int i;
828d5846 7296 int parent_offset = -1;
4c4b4cd2 7297
61ee279c 7298 type = ada_check_typedef (type);
76a01679 7299
52ce6436
PH
7300 if (field_type_p != NULL)
7301 *field_type_p = NULL;
7302 if (byte_offset_p != NULL)
d5d6fca5 7303 *byte_offset_p = 0;
52ce6436
PH
7304 if (bit_offset_p != NULL)
7305 *bit_offset_p = 0;
7306 if (bit_size_p != NULL)
7307 *bit_size_p = 0;
7308
7309 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
7310 {
7311 int bit_pos = TYPE_FIELD_BITPOS (type, i);
7312 int fld_offset = offset + bit_pos / 8;
0d5cff50 7313 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 7314
4c4b4cd2
PH
7315 if (t_field_name == NULL)
7316 continue;
7317
828d5846
XR
7318 else if (ada_is_parent_field (type, i))
7319 {
7320 /* This is a field pointing us to the parent type of a tagged
7321 type. As hinted in this function's documentation, we give
7322 preference to fields in the current record first, so what
7323 we do here is just record the index of this field before
7324 we skip it. If it turns out we couldn't find our field
7325 in the current record, then we'll get back to it and search
7326 inside it whether the field might exist in the parent. */
7327
7328 parent_offset = i;
7329 continue;
7330 }
7331
52ce6436 7332 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
7333 {
7334 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 7335
52ce6436
PH
7336 if (field_type_p != NULL)
7337 *field_type_p = TYPE_FIELD_TYPE (type, i);
7338 if (byte_offset_p != NULL)
7339 *byte_offset_p = fld_offset;
7340 if (bit_offset_p != NULL)
7341 *bit_offset_p = bit_pos % 8;
7342 if (bit_size_p != NULL)
7343 *bit_size_p = bit_size;
76a01679
JB
7344 return 1;
7345 }
4c4b4cd2
PH
7346 else if (ada_is_wrapper_field (type, i))
7347 {
52ce6436
PH
7348 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7349 field_type_p, byte_offset_p, bit_offset_p,
7350 bit_size_p, index_p))
76a01679
JB
7351 return 1;
7352 }
4c4b4cd2
PH
7353 else if (ada_is_variant_part (type, i))
7354 {
52ce6436
PH
7355 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7356 fixed type?? */
4c4b4cd2 7357 int j;
52ce6436
PH
7358 struct type *field_type
7359 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7360
52ce6436 7361 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7362 {
76a01679
JB
7363 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7364 fld_offset
7365 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7366 field_type_p, byte_offset_p,
52ce6436 7367 bit_offset_p, bit_size_p, index_p))
76a01679 7368 return 1;
4c4b4cd2
PH
7369 }
7370 }
52ce6436
PH
7371 else if (index_p != NULL)
7372 *index_p += 1;
4c4b4cd2 7373 }
828d5846
XR
7374
7375 /* Field not found so far. If this is a tagged type which
7376 has a parent, try finding that field in the parent now. */
7377
7378 if (parent_offset != -1)
7379 {
7380 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
7381 int fld_offset = offset + bit_pos / 8;
7382
7383 if (find_struct_field (name, TYPE_FIELD_TYPE (type, parent_offset),
7384 fld_offset, field_type_p, byte_offset_p,
7385 bit_offset_p, bit_size_p, index_p))
7386 return 1;
7387 }
7388
4c4b4cd2
PH
7389 return 0;
7390}
7391
0963b4bd 7392/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7393
52ce6436
PH
7394static int
7395num_visible_fields (struct type *type)
7396{
7397 int n;
5b4ee69b 7398
52ce6436
PH
7399 n = 0;
7400 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7401 return n;
7402}
14f9c5c9 7403
4c4b4cd2 7404/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7405 and search in it assuming it has (class) type TYPE.
7406 If found, return value, else return NULL.
7407
828d5846
XR
7408 Searches recursively through wrapper fields (e.g., '_parent').
7409
7410 In the case of homonyms in the tagged types, please refer to the
7411 long explanation in find_struct_field's function documentation. */
14f9c5c9 7412
4c4b4cd2 7413static struct value *
108d56a4 7414ada_search_struct_field (const char *name, struct value *arg, int offset,
4c4b4cd2 7415 struct type *type)
14f9c5c9
AS
7416{
7417 int i;
828d5846 7418 int parent_offset = -1;
14f9c5c9 7419
5b4ee69b 7420 type = ada_check_typedef (type);
52ce6436 7421 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 7422 {
0d5cff50 7423 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7424
7425 if (t_field_name == NULL)
4c4b4cd2 7426 continue;
14f9c5c9 7427
828d5846
XR
7428 else if (ada_is_parent_field (type, i))
7429 {
7430 /* This is a field pointing us to the parent type of a tagged
7431 type. As hinted in this function's documentation, we give
7432 preference to fields in the current record first, so what
7433 we do here is just record the index of this field before
7434 we skip it. If it turns out we couldn't find our field
7435 in the current record, then we'll get back to it and search
7436 inside it whether the field might exist in the parent. */
7437
7438 parent_offset = i;
7439 continue;
7440 }
7441
14f9c5c9 7442 else if (field_name_match (t_field_name, name))
4c4b4cd2 7443 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7444
7445 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7446 {
0963b4bd 7447 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
7448 ada_search_struct_field (name, arg,
7449 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7450 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7451
4c4b4cd2
PH
7452 if (v != NULL)
7453 return v;
7454 }
14f9c5c9
AS
7455
7456 else if (ada_is_variant_part (type, i))
4c4b4cd2 7457 {
0963b4bd 7458 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7459 int j;
5b4ee69b
MS
7460 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7461 i));
4c4b4cd2
PH
7462 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7463
52ce6436 7464 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7465 {
0963b4bd
MS
7466 struct value *v = ada_search_struct_field /* Force line
7467 break. */
06d5cf63
JB
7468 (name, arg,
7469 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7470 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7471
4c4b4cd2
PH
7472 if (v != NULL)
7473 return v;
7474 }
7475 }
14f9c5c9 7476 }
828d5846
XR
7477
7478 /* Field not found so far. If this is a tagged type which
7479 has a parent, try finding that field in the parent now. */
7480
7481 if (parent_offset != -1)
7482 {
7483 struct value *v = ada_search_struct_field (
7484 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
7485 TYPE_FIELD_TYPE (type, parent_offset));
7486
7487 if (v != NULL)
7488 return v;
7489 }
7490
14f9c5c9
AS
7491 return NULL;
7492}
d2e4a39e 7493
52ce6436
PH
7494static struct value *ada_index_struct_field_1 (int *, struct value *,
7495 int, struct type *);
7496
7497
7498/* Return field #INDEX in ARG, where the index is that returned by
7499 * find_struct_field through its INDEX_P argument. Adjust the address
7500 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7501 * If found, return value, else return NULL. */
52ce6436
PH
7502
7503static struct value *
7504ada_index_struct_field (int index, struct value *arg, int offset,
7505 struct type *type)
7506{
7507 return ada_index_struct_field_1 (&index, arg, offset, type);
7508}
7509
7510
7511/* Auxiliary function for ada_index_struct_field. Like
7512 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7513 * *INDEX_P. */
52ce6436
PH
7514
7515static struct value *
7516ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7517 struct type *type)
7518{
7519 int i;
7520 type = ada_check_typedef (type);
7521
7522 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7523 {
7524 if (TYPE_FIELD_NAME (type, i) == NULL)
7525 continue;
7526 else if (ada_is_wrapper_field (type, i))
7527 {
0963b4bd 7528 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7529 ada_index_struct_field_1 (index_p, arg,
7530 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7531 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7532
52ce6436
PH
7533 if (v != NULL)
7534 return v;
7535 }
7536
7537 else if (ada_is_variant_part (type, i))
7538 {
7539 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7540 find_struct_field. */
52ce6436
PH
7541 error (_("Cannot assign this kind of variant record"));
7542 }
7543 else if (*index_p == 0)
7544 return ada_value_primitive_field (arg, offset, i, type);
7545 else
7546 *index_p -= 1;
7547 }
7548 return NULL;
7549}
7550
4c4b4cd2
PH
7551/* Given ARG, a value of type (pointer or reference to a)*
7552 structure/union, extract the component named NAME from the ultimate
7553 target structure/union and return it as a value with its
f5938064 7554 appropriate type.
14f9c5c9 7555
4c4b4cd2
PH
7556 The routine searches for NAME among all members of the structure itself
7557 and (recursively) among all members of any wrapper members
14f9c5c9
AS
7558 (e.g., '_parent').
7559
03ee6b2e
PH
7560 If NO_ERR, then simply return NULL in case of error, rather than
7561 calling error. */
14f9c5c9 7562
d2e4a39e 7563struct value *
a121b7c1 7564ada_value_struct_elt (struct value *arg, const char *name, int no_err)
14f9c5c9 7565{
4c4b4cd2 7566 struct type *t, *t1;
d2e4a39e 7567 struct value *v;
1f5d1570 7568 int check_tag;
14f9c5c9 7569
4c4b4cd2 7570 v = NULL;
df407dfe 7571 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
7572 if (TYPE_CODE (t) == TYPE_CODE_REF)
7573 {
7574 t1 = TYPE_TARGET_TYPE (t);
7575 if (t1 == NULL)
03ee6b2e 7576 goto BadValue;
61ee279c 7577 t1 = ada_check_typedef (t1);
4c4b4cd2 7578 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 7579 {
994b9211 7580 arg = coerce_ref (arg);
76a01679
JB
7581 t = t1;
7582 }
4c4b4cd2 7583 }
14f9c5c9 7584
4c4b4cd2
PH
7585 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7586 {
7587 t1 = TYPE_TARGET_TYPE (t);
7588 if (t1 == NULL)
03ee6b2e 7589 goto BadValue;
61ee279c 7590 t1 = ada_check_typedef (t1);
4c4b4cd2 7591 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
7592 {
7593 arg = value_ind (arg);
7594 t = t1;
7595 }
4c4b4cd2 7596 else
76a01679 7597 break;
4c4b4cd2 7598 }
14f9c5c9 7599
4c4b4cd2 7600 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 7601 goto BadValue;
14f9c5c9 7602
4c4b4cd2
PH
7603 if (t1 == t)
7604 v = ada_search_struct_field (name, arg, 0, t);
7605 else
7606 {
7607 int bit_offset, bit_size, byte_offset;
7608 struct type *field_type;
7609 CORE_ADDR address;
7610
76a01679 7611 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 7612 address = value_address (ada_value_ind (arg));
4c4b4cd2 7613 else
b50d69b5 7614 address = value_address (ada_coerce_ref (arg));
14f9c5c9 7615
828d5846
XR
7616 /* Check to see if this is a tagged type. We also need to handle
7617 the case where the type is a reference to a tagged type, but
7618 we have to be careful to exclude pointers to tagged types.
7619 The latter should be shown as usual (as a pointer), whereas
7620 a reference should mostly be transparent to the user. */
7621
7622 if (ada_is_tagged_type (t1, 0)
7623 || (TYPE_CODE (t1) == TYPE_CODE_REF
7624 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
7625 {
7626 /* We first try to find the searched field in the current type.
7627 If not found then let's look in the fixed type. */
7628
7629 if (!find_struct_field (name, t1, 0,
7630 &field_type, &byte_offset, &bit_offset,
7631 &bit_size, NULL))
1f5d1570
JG
7632 check_tag = 1;
7633 else
7634 check_tag = 0;
828d5846
XR
7635 }
7636 else
1f5d1570
JG
7637 check_tag = 0;
7638
7639 /* Convert to fixed type in all cases, so that we have proper
7640 offsets to each field in unconstrained record types. */
7641 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
7642 address, NULL, check_tag);
828d5846 7643
76a01679
JB
7644 if (find_struct_field (name, t1, 0,
7645 &field_type, &byte_offset, &bit_offset,
52ce6436 7646 &bit_size, NULL))
76a01679
JB
7647 {
7648 if (bit_size != 0)
7649 {
714e53ab
PH
7650 if (TYPE_CODE (t) == TYPE_CODE_REF)
7651 arg = ada_coerce_ref (arg);
7652 else
7653 arg = ada_value_ind (arg);
76a01679
JB
7654 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7655 bit_offset, bit_size,
7656 field_type);
7657 }
7658 else
f5938064 7659 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
7660 }
7661 }
7662
03ee6b2e
PH
7663 if (v != NULL || no_err)
7664 return v;
7665 else
323e0a4a 7666 error (_("There is no member named %s."), name);
14f9c5c9 7667
03ee6b2e
PH
7668 BadValue:
7669 if (no_err)
7670 return NULL;
7671 else
0963b4bd
MS
7672 error (_("Attempt to extract a component of "
7673 "a value that is not a record."));
14f9c5c9
AS
7674}
7675
3b4de39c 7676/* Return a string representation of type TYPE. */
99bbb428 7677
3b4de39c 7678static std::string
99bbb428
PA
7679type_as_string (struct type *type)
7680{
d7e74731 7681 string_file tmp_stream;
99bbb428 7682
d7e74731 7683 type_print (type, "", &tmp_stream, -1);
99bbb428 7684
d7e74731 7685 return std::move (tmp_stream.string ());
99bbb428
PA
7686}
7687
14f9c5c9 7688/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7689 If DISPP is non-null, add its byte displacement from the beginning of a
7690 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7691 work for packed fields).
7692
7693 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7694 followed by "___".
14f9c5c9 7695
0963b4bd 7696 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7697 be a (pointer or reference)+ to a struct or union, and the
7698 ultimate target type will be searched.
14f9c5c9
AS
7699
7700 Looks recursively into variant clauses and parent types.
7701
828d5846
XR
7702 In the case of homonyms in the tagged types, please refer to the
7703 long explanation in find_struct_field's function documentation.
7704
4c4b4cd2
PH
7705 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7706 TYPE is not a type of the right kind. */
14f9c5c9 7707
4c4b4cd2 7708static struct type *
a121b7c1 7709ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
988f6b3d 7710 int noerr)
14f9c5c9
AS
7711{
7712 int i;
828d5846 7713 int parent_offset = -1;
14f9c5c9
AS
7714
7715 if (name == NULL)
7716 goto BadName;
7717
76a01679 7718 if (refok && type != NULL)
4c4b4cd2
PH
7719 while (1)
7720 {
61ee279c 7721 type = ada_check_typedef (type);
76a01679
JB
7722 if (TYPE_CODE (type) != TYPE_CODE_PTR
7723 && TYPE_CODE (type) != TYPE_CODE_REF)
7724 break;
7725 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7726 }
14f9c5c9 7727
76a01679 7728 if (type == NULL
1265e4aa
JB
7729 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7730 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 7731 {
4c4b4cd2 7732 if (noerr)
76a01679 7733 return NULL;
99bbb428 7734
3b4de39c
PA
7735 error (_("Type %s is not a structure or union type"),
7736 type != NULL ? type_as_string (type).c_str () : _("(null)"));
14f9c5c9
AS
7737 }
7738
7739 type = to_static_fixed_type (type);
7740
7741 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7742 {
0d5cff50 7743 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9 7744 struct type *t;
d2e4a39e 7745
14f9c5c9 7746 if (t_field_name == NULL)
4c4b4cd2 7747 continue;
14f9c5c9 7748
828d5846
XR
7749 else if (ada_is_parent_field (type, i))
7750 {
7751 /* This is a field pointing us to the parent type of a tagged
7752 type. As hinted in this function's documentation, we give
7753 preference to fields in the current record first, so what
7754 we do here is just record the index of this field before
7755 we skip it. If it turns out we couldn't find our field
7756 in the current record, then we'll get back to it and search
7757 inside it whether the field might exist in the parent. */
7758
7759 parent_offset = i;
7760 continue;
7761 }
7762
14f9c5c9 7763 else if (field_name_match (t_field_name, name))
988f6b3d 7764 return TYPE_FIELD_TYPE (type, i);
14f9c5c9
AS
7765
7766 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7767 {
4c4b4cd2 7768 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
988f6b3d 7769 0, 1);
4c4b4cd2 7770 if (t != NULL)
988f6b3d 7771 return t;
4c4b4cd2 7772 }
14f9c5c9
AS
7773
7774 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7775 {
7776 int j;
5b4ee69b
MS
7777 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7778 i));
4c4b4cd2
PH
7779
7780 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7781 {
b1f33ddd
JB
7782 /* FIXME pnh 2008/01/26: We check for a field that is
7783 NOT wrapped in a struct, since the compiler sometimes
7784 generates these for unchecked variant types. Revisit
0963b4bd 7785 if the compiler changes this practice. */
0d5cff50 7786 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
988f6b3d 7787
b1f33ddd
JB
7788 if (v_field_name != NULL
7789 && field_name_match (v_field_name, name))
460efde1 7790 t = TYPE_FIELD_TYPE (field_type, j);
b1f33ddd 7791 else
0963b4bd
MS
7792 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7793 j),
988f6b3d 7794 name, 0, 1);
b1f33ddd 7795
4c4b4cd2 7796 if (t != NULL)
988f6b3d 7797 return t;
4c4b4cd2
PH
7798 }
7799 }
14f9c5c9
AS
7800
7801 }
7802
828d5846
XR
7803 /* Field not found so far. If this is a tagged type which
7804 has a parent, try finding that field in the parent now. */
7805
7806 if (parent_offset != -1)
7807 {
7808 struct type *t;
7809
7810 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, parent_offset),
7811 name, 0, 1);
7812 if (t != NULL)
7813 return t;
7814 }
7815
14f9c5c9 7816BadName:
d2e4a39e 7817 if (!noerr)
14f9c5c9 7818 {
2b2798cc 7819 const char *name_str = name != NULL ? name : _("<null>");
99bbb428
PA
7820
7821 error (_("Type %s has no component named %s"),
3b4de39c 7822 type_as_string (type).c_str (), name_str);
14f9c5c9
AS
7823 }
7824
7825 return NULL;
7826}
7827
b1f33ddd
JB
7828/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7829 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7830 represents an unchecked union (that is, the variant part of a
0963b4bd 7831 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7832
7833static int
7834is_unchecked_variant (struct type *var_type, struct type *outer_type)
7835{
a121b7c1 7836 const char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7837
988f6b3d 7838 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
b1f33ddd
JB
7839}
7840
7841
14f9c5c9
AS
7842/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7843 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7844 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7845 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7846
d2e4a39e 7847int
ebf56fd3 7848ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7849 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7850{
7851 int others_clause;
7852 int i;
a121b7c1 7853 const char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7854 struct value *outer;
7855 struct value *discrim;
14f9c5c9
AS
7856 LONGEST discrim_val;
7857
012370f6
TT
7858 /* Using plain value_from_contents_and_address here causes problems
7859 because we will end up trying to resolve a type that is currently
7860 being constructed. */
7861 outer = value_from_contents_and_address_unresolved (outer_type,
7862 outer_valaddr, 0);
0c281816
JB
7863 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7864 if (discrim == NULL)
14f9c5c9 7865 return -1;
0c281816 7866 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7867
7868 others_clause = -1;
7869 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7870 {
7871 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7872 others_clause = i;
14f9c5c9 7873 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7874 return i;
14f9c5c9
AS
7875 }
7876
7877 return others_clause;
7878}
d2e4a39e 7879\f
14f9c5c9
AS
7880
7881
4c4b4cd2 7882 /* Dynamic-Sized Records */
14f9c5c9
AS
7883
7884/* Strategy: The type ostensibly attached to a value with dynamic size
7885 (i.e., a size that is not statically recorded in the debugging
7886 data) does not accurately reflect the size or layout of the value.
7887 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7888 conventional types that are constructed on the fly. */
14f9c5c9
AS
7889
7890/* There is a subtle and tricky problem here. In general, we cannot
7891 determine the size of dynamic records without its data. However,
7892 the 'struct value' data structure, which GDB uses to represent
7893 quantities in the inferior process (the target), requires the size
7894 of the type at the time of its allocation in order to reserve space
7895 for GDB's internal copy of the data. That's why the
7896 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7897 rather than struct value*s.
14f9c5c9
AS
7898
7899 However, GDB's internal history variables ($1, $2, etc.) are
7900 struct value*s containing internal copies of the data that are not, in
7901 general, the same as the data at their corresponding addresses in
7902 the target. Fortunately, the types we give to these values are all
7903 conventional, fixed-size types (as per the strategy described
7904 above), so that we don't usually have to perform the
7905 'to_fixed_xxx_type' conversions to look at their values.
7906 Unfortunately, there is one exception: if one of the internal
7907 history variables is an array whose elements are unconstrained
7908 records, then we will need to create distinct fixed types for each
7909 element selected. */
7910
7911/* The upshot of all of this is that many routines take a (type, host
7912 address, target address) triple as arguments to represent a value.
7913 The host address, if non-null, is supposed to contain an internal
7914 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7915 target at the target address. */
14f9c5c9
AS
7916
7917/* Assuming that VAL0 represents a pointer value, the result of
7918 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7919 dynamic-sized types. */
14f9c5c9 7920
d2e4a39e
AS
7921struct value *
7922ada_value_ind (struct value *val0)
14f9c5c9 7923{
c48db5ca 7924 struct value *val = value_ind (val0);
5b4ee69b 7925
b50d69b5
JG
7926 if (ada_is_tagged_type (value_type (val), 0))
7927 val = ada_tag_value_at_base_address (val);
7928
4c4b4cd2 7929 return ada_to_fixed_value (val);
14f9c5c9
AS
7930}
7931
7932/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7933 qualifiers on VAL0. */
7934
d2e4a39e
AS
7935static struct value *
7936ada_coerce_ref (struct value *val0)
7937{
df407dfe 7938 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7939 {
7940 struct value *val = val0;
5b4ee69b 7941
994b9211 7942 val = coerce_ref (val);
b50d69b5
JG
7943
7944 if (ada_is_tagged_type (value_type (val), 0))
7945 val = ada_tag_value_at_base_address (val);
7946
4c4b4cd2 7947 return ada_to_fixed_value (val);
d2e4a39e
AS
7948 }
7949 else
14f9c5c9
AS
7950 return val0;
7951}
7952
7953/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7954 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7955
7956static unsigned int
ebf56fd3 7957align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7958{
7959 return (off + alignment - 1) & ~(alignment - 1);
7960}
7961
4c4b4cd2 7962/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7963
7964static unsigned int
ebf56fd3 7965field_alignment (struct type *type, int f)
14f9c5c9 7966{
d2e4a39e 7967 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7968 int len;
14f9c5c9
AS
7969 int align_offset;
7970
64a1bf19
JB
7971 /* The field name should never be null, unless the debugging information
7972 is somehow malformed. In this case, we assume the field does not
7973 require any alignment. */
7974 if (name == NULL)
7975 return 1;
7976
7977 len = strlen (name);
7978
4c4b4cd2
PH
7979 if (!isdigit (name[len - 1]))
7980 return 1;
14f9c5c9 7981
d2e4a39e 7982 if (isdigit (name[len - 2]))
14f9c5c9
AS
7983 align_offset = len - 2;
7984 else
7985 align_offset = len - 1;
7986
61012eef 7987 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7988 return TARGET_CHAR_BIT;
7989
4c4b4cd2
PH
7990 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7991}
7992
852dff6c 7993/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7994
852dff6c
JB
7995static struct symbol *
7996ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7997{
7998 struct symbol *sym;
7999
8000 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 8001 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
8002 return sym;
8003
4186eb54
KS
8004 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
8005 return sym;
14f9c5c9
AS
8006}
8007
dddfab26
UW
8008/* Find a type named NAME. Ignores ambiguity. This routine will look
8009 solely for types defined by debug info, it will not search the GDB
8010 primitive types. */
4c4b4cd2 8011
852dff6c 8012static struct type *
ebf56fd3 8013ada_find_any_type (const char *name)
14f9c5c9 8014{
852dff6c 8015 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 8016
14f9c5c9 8017 if (sym != NULL)
dddfab26 8018 return SYMBOL_TYPE (sym);
14f9c5c9 8019
dddfab26 8020 return NULL;
14f9c5c9
AS
8021}
8022
739593e0
JB
8023/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
8024 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
8025 symbol, in which case it is returned. Otherwise, this looks for
8026 symbols whose name is that of NAME_SYM suffixed with "___XR".
8027 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
8028
8029struct symbol *
270140bd 8030ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 8031{
739593e0 8032 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
8033 struct symbol *sym;
8034
739593e0
JB
8035 if (strstr (name, "___XR") != NULL)
8036 return name_sym;
8037
aeb5907d
JB
8038 sym = find_old_style_renaming_symbol (name, block);
8039
8040 if (sym != NULL)
8041 return sym;
8042
0963b4bd 8043 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 8044 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
8045 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
8046 return sym;
8047 else
8048 return NULL;
8049}
8050
8051static struct symbol *
270140bd 8052find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 8053{
7f0df278 8054 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
8055 char *rename;
8056
8057 if (function_sym != NULL)
8058 {
8059 /* If the symbol is defined inside a function, NAME is not fully
8060 qualified. This means we need to prepend the function name
8061 as well as adding the ``___XR'' suffix to build the name of
8062 the associated renaming symbol. */
0d5cff50 8063 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
8064 /* Function names sometimes contain suffixes used
8065 for instance to qualify nested subprograms. When building
8066 the XR type name, we need to make sure that this suffix is
8067 not included. So do not include any suffix in the function
8068 name length below. */
69fadcdf 8069 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
8070 const int rename_len = function_name_len + 2 /* "__" */
8071 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 8072
529cad9c 8073 /* Strip the suffix if necessary. */
69fadcdf
JB
8074 ada_remove_trailing_digits (function_name, &function_name_len);
8075 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
8076 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 8077
4c4b4cd2
PH
8078 /* Library-level functions are a special case, as GNAT adds
8079 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 8080 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
8081 have this prefix, so we need to skip this prefix if present. */
8082 if (function_name_len > 5 /* "_ada_" */
8083 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
8084 {
8085 function_name += 5;
8086 function_name_len -= 5;
8087 }
4c4b4cd2
PH
8088
8089 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
8090 strncpy (rename, function_name, function_name_len);
8091 xsnprintf (rename + function_name_len, rename_len - function_name_len,
8092 "__%s___XR", name);
4c4b4cd2
PH
8093 }
8094 else
8095 {
8096 const int rename_len = strlen (name) + 6;
5b4ee69b 8097
4c4b4cd2 8098 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 8099 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
8100 }
8101
852dff6c 8102 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
8103}
8104
14f9c5c9 8105/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 8106 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 8107 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
8108 otherwise return 0. */
8109
14f9c5c9 8110int
d2e4a39e 8111ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
8112{
8113 if (type1 == NULL)
8114 return 1;
8115 else if (type0 == NULL)
8116 return 0;
8117 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
8118 return 1;
8119 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
8120 return 0;
4c4b4cd2
PH
8121 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
8122 return 1;
ad82864c 8123 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 8124 return 1;
4c4b4cd2
PH
8125 else if (ada_is_array_descriptor_type (type0)
8126 && !ada_is_array_descriptor_type (type1))
14f9c5c9 8127 return 1;
aeb5907d
JB
8128 else
8129 {
a737d952
TT
8130 const char *type0_name = TYPE_NAME (type0);
8131 const char *type1_name = TYPE_NAME (type1);
aeb5907d
JB
8132
8133 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
8134 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
8135 return 1;
8136 }
14f9c5c9
AS
8137 return 0;
8138}
8139
e86ca25f
TT
8140/* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
8141 null. */
4c4b4cd2 8142
0d5cff50 8143const char *
d2e4a39e 8144ada_type_name (struct type *type)
14f9c5c9 8145{
d2e4a39e 8146 if (type == NULL)
14f9c5c9 8147 return NULL;
e86ca25f 8148 return TYPE_NAME (type);
14f9c5c9
AS
8149}
8150
b4ba55a1
JB
8151/* Search the list of "descriptive" types associated to TYPE for a type
8152 whose name is NAME. */
8153
8154static struct type *
8155find_parallel_type_by_descriptive_type (struct type *type, const char *name)
8156{
931e5bc3 8157 struct type *result, *tmp;
b4ba55a1 8158
c6044dd1
JB
8159 if (ada_ignore_descriptive_types_p)
8160 return NULL;
8161
b4ba55a1
JB
8162 /* If there no descriptive-type info, then there is no parallel type
8163 to be found. */
8164 if (!HAVE_GNAT_AUX_INFO (type))
8165 return NULL;
8166
8167 result = TYPE_DESCRIPTIVE_TYPE (type);
8168 while (result != NULL)
8169 {
0d5cff50 8170 const char *result_name = ada_type_name (result);
b4ba55a1
JB
8171
8172 if (result_name == NULL)
8173 {
8174 warning (_("unexpected null name on descriptive type"));
8175 return NULL;
8176 }
8177
8178 /* If the names match, stop. */
8179 if (strcmp (result_name, name) == 0)
8180 break;
8181
8182 /* Otherwise, look at the next item on the list, if any. */
8183 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
8184 tmp = TYPE_DESCRIPTIVE_TYPE (result);
8185 else
8186 tmp = NULL;
8187
8188 /* If not found either, try after having resolved the typedef. */
8189 if (tmp != NULL)
8190 result = tmp;
b4ba55a1 8191 else
931e5bc3 8192 {
f168693b 8193 result = check_typedef (result);
931e5bc3
JG
8194 if (HAVE_GNAT_AUX_INFO (result))
8195 result = TYPE_DESCRIPTIVE_TYPE (result);
8196 else
8197 result = NULL;
8198 }
b4ba55a1
JB
8199 }
8200
8201 /* If we didn't find a match, see whether this is a packed array. With
8202 older compilers, the descriptive type information is either absent or
8203 irrelevant when it comes to packed arrays so the above lookup fails.
8204 Fall back to using a parallel lookup by name in this case. */
12ab9e09 8205 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
8206 return ada_find_any_type (name);
8207
8208 return result;
8209}
8210
8211/* Find a parallel type to TYPE with the specified NAME, using the
8212 descriptive type taken from the debugging information, if available,
8213 and otherwise using the (slower) name-based method. */
8214
8215static struct type *
8216ada_find_parallel_type_with_name (struct type *type, const char *name)
8217{
8218 struct type *result = NULL;
8219
8220 if (HAVE_GNAT_AUX_INFO (type))
8221 result = find_parallel_type_by_descriptive_type (type, name);
8222 else
8223 result = ada_find_any_type (name);
8224
8225 return result;
8226}
8227
8228/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 8229 SUFFIX to the name of TYPE. */
14f9c5c9 8230
d2e4a39e 8231struct type *
ebf56fd3 8232ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 8233{
0d5cff50 8234 char *name;
fe978cb0 8235 const char *type_name = ada_type_name (type);
14f9c5c9 8236 int len;
d2e4a39e 8237
fe978cb0 8238 if (type_name == NULL)
14f9c5c9
AS
8239 return NULL;
8240
fe978cb0 8241 len = strlen (type_name);
14f9c5c9 8242
b4ba55a1 8243 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 8244
fe978cb0 8245 strcpy (name, type_name);
14f9c5c9
AS
8246 strcpy (name + len, suffix);
8247
b4ba55a1 8248 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
8249}
8250
14f9c5c9 8251/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 8252 type describing its fields. Otherwise, return NULL. */
14f9c5c9 8253
d2e4a39e
AS
8254static struct type *
8255dynamic_template_type (struct type *type)
14f9c5c9 8256{
61ee279c 8257 type = ada_check_typedef (type);
14f9c5c9
AS
8258
8259 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 8260 || ada_type_name (type) == NULL)
14f9c5c9 8261 return NULL;
d2e4a39e 8262 else
14f9c5c9
AS
8263 {
8264 int len = strlen (ada_type_name (type));
5b4ee69b 8265
4c4b4cd2
PH
8266 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
8267 return type;
14f9c5c9 8268 else
4c4b4cd2 8269 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
8270 }
8271}
8272
8273/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 8274 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 8275
d2e4a39e
AS
8276static int
8277is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
8278{
8279 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 8280
d2e4a39e 8281 return name != NULL
14f9c5c9
AS
8282 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
8283 && strstr (name, "___XVL") != NULL;
8284}
8285
4c4b4cd2
PH
8286/* The index of the variant field of TYPE, or -1 if TYPE does not
8287 represent a variant record type. */
14f9c5c9 8288
d2e4a39e 8289static int
4c4b4cd2 8290variant_field_index (struct type *type)
14f9c5c9
AS
8291{
8292 int f;
8293
4c4b4cd2
PH
8294 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
8295 return -1;
8296
8297 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
8298 {
8299 if (ada_is_variant_part (type, f))
8300 return f;
8301 }
8302 return -1;
14f9c5c9
AS
8303}
8304
4c4b4cd2
PH
8305/* A record type with no fields. */
8306
d2e4a39e 8307static struct type *
fe978cb0 8308empty_record (struct type *templ)
14f9c5c9 8309{
fe978cb0 8310 struct type *type = alloc_type_copy (templ);
5b4ee69b 8311
14f9c5c9
AS
8312 TYPE_CODE (type) = TYPE_CODE_STRUCT;
8313 TYPE_NFIELDS (type) = 0;
8314 TYPE_FIELDS (type) = NULL;
b1f33ddd 8315 INIT_CPLUS_SPECIFIC (type);
14f9c5c9 8316 TYPE_NAME (type) = "<empty>";
14f9c5c9
AS
8317 TYPE_LENGTH (type) = 0;
8318 return type;
8319}
8320
8321/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
8322 the value of type TYPE at VALADDR or ADDRESS (see comments at
8323 the beginning of this section) VAL according to GNAT conventions.
8324 DVAL0 should describe the (portion of a) record that contains any
df407dfe 8325 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
8326 an outer-level type (i.e., as opposed to a branch of a variant.) A
8327 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 8328 of the variant.
14f9c5c9 8329
4c4b4cd2
PH
8330 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
8331 length are not statically known are discarded. As a consequence,
8332 VALADDR, ADDRESS and DVAL0 are ignored.
8333
8334 NOTE: Limitations: For now, we assume that dynamic fields and
8335 variants occupy whole numbers of bytes. However, they need not be
8336 byte-aligned. */
8337
8338struct type *
10a2c479 8339ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 8340 const gdb_byte *valaddr,
4c4b4cd2
PH
8341 CORE_ADDR address, struct value *dval0,
8342 int keep_dynamic_fields)
14f9c5c9 8343{
d2e4a39e
AS
8344 struct value *mark = value_mark ();
8345 struct value *dval;
8346 struct type *rtype;
14f9c5c9 8347 int nfields, bit_len;
4c4b4cd2 8348 int variant_field;
14f9c5c9 8349 long off;
d94e4f4f 8350 int fld_bit_len;
14f9c5c9
AS
8351 int f;
8352
4c4b4cd2
PH
8353 /* Compute the number of fields in this record type that are going
8354 to be processed: unless keep_dynamic_fields, this includes only
8355 fields whose position and length are static will be processed. */
8356 if (keep_dynamic_fields)
8357 nfields = TYPE_NFIELDS (type);
8358 else
8359 {
8360 nfields = 0;
76a01679 8361 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
8362 && !ada_is_variant_part (type, nfields)
8363 && !is_dynamic_field (type, nfields))
8364 nfields++;
8365 }
8366
e9bb382b 8367 rtype = alloc_type_copy (type);
14f9c5c9
AS
8368 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8369 INIT_CPLUS_SPECIFIC (rtype);
8370 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 8371 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
8372 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8373 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
8374 TYPE_NAME (rtype) = ada_type_name (type);
876cecd0 8375 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 8376
d2e4a39e
AS
8377 off = 0;
8378 bit_len = 0;
4c4b4cd2
PH
8379 variant_field = -1;
8380
14f9c5c9
AS
8381 for (f = 0; f < nfields; f += 1)
8382 {
6c038f32
PH
8383 off = align_value (off, field_alignment (type, f))
8384 + TYPE_FIELD_BITPOS (type, f);
945b3a32 8385 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 8386 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 8387
d2e4a39e 8388 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
8389 {
8390 variant_field = f;
d94e4f4f 8391 fld_bit_len = 0;
4c4b4cd2 8392 }
14f9c5c9 8393 else if (is_dynamic_field (type, f))
4c4b4cd2 8394 {
284614f0
JB
8395 const gdb_byte *field_valaddr = valaddr;
8396 CORE_ADDR field_address = address;
8397 struct type *field_type =
8398 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8399
4c4b4cd2 8400 if (dval0 == NULL)
b5304971
JG
8401 {
8402 /* rtype's length is computed based on the run-time
8403 value of discriminants. If the discriminants are not
8404 initialized, the type size may be completely bogus and
0963b4bd 8405 GDB may fail to allocate a value for it. So check the
b5304971 8406 size first before creating the value. */
c1b5a1a6 8407 ada_ensure_varsize_limit (rtype);
012370f6
TT
8408 /* Using plain value_from_contents_and_address here
8409 causes problems because we will end up trying to
8410 resolve a type that is currently being
8411 constructed. */
8412 dval = value_from_contents_and_address_unresolved (rtype,
8413 valaddr,
8414 address);
9f1f738a 8415 rtype = value_type (dval);
b5304971 8416 }
4c4b4cd2
PH
8417 else
8418 dval = dval0;
8419
284614f0
JB
8420 /* If the type referenced by this field is an aligner type, we need
8421 to unwrap that aligner type, because its size might not be set.
8422 Keeping the aligner type would cause us to compute the wrong
8423 size for this field, impacting the offset of the all the fields
8424 that follow this one. */
8425 if (ada_is_aligner_type (field_type))
8426 {
8427 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8428
8429 field_valaddr = cond_offset_host (field_valaddr, field_offset);
8430 field_address = cond_offset_target (field_address, field_offset);
8431 field_type = ada_aligned_type (field_type);
8432 }
8433
8434 field_valaddr = cond_offset_host (field_valaddr,
8435 off / TARGET_CHAR_BIT);
8436 field_address = cond_offset_target (field_address,
8437 off / TARGET_CHAR_BIT);
8438
8439 /* Get the fixed type of the field. Note that, in this case,
8440 we do not want to get the real type out of the tag: if
8441 the current field is the parent part of a tagged record,
8442 we will get the tag of the object. Clearly wrong: the real
8443 type of the parent is not the real type of the child. We
8444 would end up in an infinite loop. */
8445 field_type = ada_get_base_type (field_type);
8446 field_type = ada_to_fixed_type (field_type, field_valaddr,
8447 field_address, dval, 0);
27f2a97b
JB
8448 /* If the field size is already larger than the maximum
8449 object size, then the record itself will necessarily
8450 be larger than the maximum object size. We need to make
8451 this check now, because the size might be so ridiculously
8452 large (due to an uninitialized variable in the inferior)
8453 that it would cause an overflow when adding it to the
8454 record size. */
c1b5a1a6 8455 ada_ensure_varsize_limit (field_type);
284614f0
JB
8456
8457 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 8458 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
8459 /* The multiplication can potentially overflow. But because
8460 the field length has been size-checked just above, and
8461 assuming that the maximum size is a reasonable value,
8462 an overflow should not happen in practice. So rather than
8463 adding overflow recovery code to this already complex code,
8464 we just assume that it's not going to happen. */
d94e4f4f 8465 fld_bit_len =
4c4b4cd2
PH
8466 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8467 }
14f9c5c9 8468 else
4c4b4cd2 8469 {
5ded5331
JB
8470 /* Note: If this field's type is a typedef, it is important
8471 to preserve the typedef layer.
8472
8473 Otherwise, we might be transforming a typedef to a fat
8474 pointer (encoding a pointer to an unconstrained array),
8475 into a basic fat pointer (encoding an unconstrained
8476 array). As both types are implemented using the same
8477 structure, the typedef is the only clue which allows us
8478 to distinguish between the two options. Stripping it
8479 would prevent us from printing this field appropriately. */
8480 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
8481 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8482 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 8483 fld_bit_len =
4c4b4cd2
PH
8484 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8485 else
5ded5331
JB
8486 {
8487 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8488
8489 /* We need to be careful of typedefs when computing
8490 the length of our field. If this is a typedef,
8491 get the length of the target type, not the length
8492 of the typedef. */
8493 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8494 field_type = ada_typedef_target_type (field_type);
8495
8496 fld_bit_len =
8497 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8498 }
4c4b4cd2 8499 }
14f9c5c9 8500 if (off + fld_bit_len > bit_len)
4c4b4cd2 8501 bit_len = off + fld_bit_len;
d94e4f4f 8502 off += fld_bit_len;
4c4b4cd2
PH
8503 TYPE_LENGTH (rtype) =
8504 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 8505 }
4c4b4cd2
PH
8506
8507 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 8508 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
8509 the record. This can happen in the presence of representation
8510 clauses. */
8511 if (variant_field >= 0)
8512 {
8513 struct type *branch_type;
8514
8515 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8516
8517 if (dval0 == NULL)
9f1f738a 8518 {
012370f6
TT
8519 /* Using plain value_from_contents_and_address here causes
8520 problems because we will end up trying to resolve a type
8521 that is currently being constructed. */
8522 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8523 address);
9f1f738a
SA
8524 rtype = value_type (dval);
8525 }
4c4b4cd2
PH
8526 else
8527 dval = dval0;
8528
8529 branch_type =
8530 to_fixed_variant_branch_type
8531 (TYPE_FIELD_TYPE (type, variant_field),
8532 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8533 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8534 if (branch_type == NULL)
8535 {
8536 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8537 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8538 TYPE_NFIELDS (rtype) -= 1;
8539 }
8540 else
8541 {
8542 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8543 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8544 fld_bit_len =
8545 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8546 TARGET_CHAR_BIT;
8547 if (off + fld_bit_len > bit_len)
8548 bit_len = off + fld_bit_len;
8549 TYPE_LENGTH (rtype) =
8550 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8551 }
8552 }
8553
714e53ab
PH
8554 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8555 should contain the alignment of that record, which should be a strictly
8556 positive value. If null or negative, then something is wrong, most
8557 probably in the debug info. In that case, we don't round up the size
0963b4bd 8558 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8559 the current RTYPE length might be good enough for our purposes. */
8560 if (TYPE_LENGTH (type) <= 0)
8561 {
323e0a4a
AC
8562 if (TYPE_NAME (rtype))
8563 warning (_("Invalid type size for `%s' detected: %d."),
8564 TYPE_NAME (rtype), TYPE_LENGTH (type));
8565 else
8566 warning (_("Invalid type size for <unnamed> detected: %d."),
8567 TYPE_LENGTH (type));
714e53ab
PH
8568 }
8569 else
8570 {
8571 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8572 TYPE_LENGTH (type));
8573 }
14f9c5c9
AS
8574
8575 value_free_to_mark (mark);
d2e4a39e 8576 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8577 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8578 return rtype;
8579}
8580
4c4b4cd2
PH
8581/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8582 of 1. */
14f9c5c9 8583
d2e4a39e 8584static struct type *
fc1a4b47 8585template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8586 CORE_ADDR address, struct value *dval0)
8587{
8588 return ada_template_to_fixed_record_type_1 (type, valaddr,
8589 address, dval0, 1);
8590}
8591
8592/* An ordinary record type in which ___XVL-convention fields and
8593 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8594 static approximations, containing all possible fields. Uses
8595 no runtime values. Useless for use in values, but that's OK,
8596 since the results are used only for type determinations. Works on both
8597 structs and unions. Representation note: to save space, we memorize
8598 the result of this function in the TYPE_TARGET_TYPE of the
8599 template type. */
8600
8601static struct type *
8602template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8603{
8604 struct type *type;
8605 int nfields;
8606 int f;
8607
9e195661
PMR
8608 /* No need no do anything if the input type is already fixed. */
8609 if (TYPE_FIXED_INSTANCE (type0))
8610 return type0;
8611
8612 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8613 if (TYPE_TARGET_TYPE (type0) != NULL)
8614 return TYPE_TARGET_TYPE (type0);
8615
9e195661 8616 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8617 type = type0;
9e195661
PMR
8618 nfields = TYPE_NFIELDS (type0);
8619
8620 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8621 recompute all over next time. */
8622 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8623
8624 for (f = 0; f < nfields; f += 1)
8625 {
460efde1 8626 struct type *field_type = TYPE_FIELD_TYPE (type0, f);
4c4b4cd2 8627 struct type *new_type;
14f9c5c9 8628
4c4b4cd2 8629 if (is_dynamic_field (type0, f))
460efde1
JB
8630 {
8631 field_type = ada_check_typedef (field_type);
8632 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8633 }
14f9c5c9 8634 else
f192137b 8635 new_type = static_unwrap_type (field_type);
9e195661
PMR
8636
8637 if (new_type != field_type)
8638 {
8639 /* Clone TYPE0 only the first time we get a new field type. */
8640 if (type == type0)
8641 {
8642 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8643 TYPE_CODE (type) = TYPE_CODE (type0);
8644 INIT_CPLUS_SPECIFIC (type);
8645 TYPE_NFIELDS (type) = nfields;
8646 TYPE_FIELDS (type) = (struct field *)
8647 TYPE_ALLOC (type, nfields * sizeof (struct field));
8648 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8649 sizeof (struct field) * nfields);
8650 TYPE_NAME (type) = ada_type_name (type0);
9e195661
PMR
8651 TYPE_FIXED_INSTANCE (type) = 1;
8652 TYPE_LENGTH (type) = 0;
8653 }
8654 TYPE_FIELD_TYPE (type, f) = new_type;
8655 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8656 }
14f9c5c9 8657 }
9e195661 8658
14f9c5c9
AS
8659 return type;
8660}
8661
4c4b4cd2 8662/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8663 whose address in memory is ADDRESS, returns a revision of TYPE,
8664 which should be a non-dynamic-sized record, in which the variant
8665 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8666 for discriminant values in DVAL0, which can be NULL if the record
8667 contains the necessary discriminant values. */
8668
d2e4a39e 8669static struct type *
fc1a4b47 8670to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8671 CORE_ADDR address, struct value *dval0)
14f9c5c9 8672{
d2e4a39e 8673 struct value *mark = value_mark ();
4c4b4cd2 8674 struct value *dval;
d2e4a39e 8675 struct type *rtype;
14f9c5c9
AS
8676 struct type *branch_type;
8677 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 8678 int variant_field = variant_field_index (type);
14f9c5c9 8679
4c4b4cd2 8680 if (variant_field == -1)
14f9c5c9
AS
8681 return type;
8682
4c4b4cd2 8683 if (dval0 == NULL)
9f1f738a
SA
8684 {
8685 dval = value_from_contents_and_address (type, valaddr, address);
8686 type = value_type (dval);
8687 }
4c4b4cd2
PH
8688 else
8689 dval = dval0;
8690
e9bb382b 8691 rtype = alloc_type_copy (type);
14f9c5c9 8692 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
8693 INIT_CPLUS_SPECIFIC (rtype);
8694 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
8695 TYPE_FIELDS (rtype) =
8696 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8697 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 8698 sizeof (struct field) * nfields);
14f9c5c9 8699 TYPE_NAME (rtype) = ada_type_name (type);
876cecd0 8700 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8701 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8702
4c4b4cd2
PH
8703 branch_type = to_fixed_variant_branch_type
8704 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8705 cond_offset_host (valaddr,
4c4b4cd2
PH
8706 TYPE_FIELD_BITPOS (type, variant_field)
8707 / TARGET_CHAR_BIT),
d2e4a39e 8708 cond_offset_target (address,
4c4b4cd2
PH
8709 TYPE_FIELD_BITPOS (type, variant_field)
8710 / TARGET_CHAR_BIT), dval);
d2e4a39e 8711 if (branch_type == NULL)
14f9c5c9 8712 {
4c4b4cd2 8713 int f;
5b4ee69b 8714
4c4b4cd2
PH
8715 for (f = variant_field + 1; f < nfields; f += 1)
8716 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 8717 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
8718 }
8719 else
8720 {
4c4b4cd2
PH
8721 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8722 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8723 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8724 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8725 }
4c4b4cd2 8726 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8727
4c4b4cd2 8728 value_free_to_mark (mark);
14f9c5c9
AS
8729 return rtype;
8730}
8731
8732/* An ordinary record type (with fixed-length fields) that describes
8733 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8734 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8735 should be in DVAL, a record value; it may be NULL if the object
8736 at ADDR itself contains any necessary discriminant values.
8737 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8738 values from the record are needed. Except in the case that DVAL,
8739 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8740 unchecked) is replaced by a particular branch of the variant.
8741
8742 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8743 is questionable and may be removed. It can arise during the
8744 processing of an unconstrained-array-of-record type where all the
8745 variant branches have exactly the same size. This is because in
8746 such cases, the compiler does not bother to use the XVS convention
8747 when encoding the record. I am currently dubious of this
8748 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8749
d2e4a39e 8750static struct type *
fc1a4b47 8751to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8752 CORE_ADDR address, struct value *dval)
14f9c5c9 8753{
d2e4a39e 8754 struct type *templ_type;
14f9c5c9 8755
876cecd0 8756 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8757 return type0;
8758
d2e4a39e 8759 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8760
8761 if (templ_type != NULL)
8762 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8763 else if (variant_field_index (type0) >= 0)
8764 {
8765 if (dval == NULL && valaddr == NULL && address == 0)
8766 return type0;
8767 return to_record_with_fixed_variant_part (type0, valaddr, address,
8768 dval);
8769 }
14f9c5c9
AS
8770 else
8771 {
876cecd0 8772 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8773 return type0;
8774 }
8775
8776}
8777
8778/* An ordinary record type (with fixed-length fields) that describes
8779 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8780 union type. Any necessary discriminants' values should be in DVAL,
8781 a record value. That is, this routine selects the appropriate
8782 branch of the union at ADDR according to the discriminant value
b1f33ddd 8783 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8784 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8785
d2e4a39e 8786static struct type *
fc1a4b47 8787to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8788 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8789{
8790 int which;
d2e4a39e
AS
8791 struct type *templ_type;
8792 struct type *var_type;
14f9c5c9
AS
8793
8794 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8795 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8796 else
14f9c5c9
AS
8797 var_type = var_type0;
8798
8799 templ_type = ada_find_parallel_type (var_type, "___XVU");
8800
8801 if (templ_type != NULL)
8802 var_type = templ_type;
8803
b1f33ddd
JB
8804 if (is_unchecked_variant (var_type, value_type (dval)))
8805 return var_type0;
d2e4a39e
AS
8806 which =
8807 ada_which_variant_applies (var_type,
0fd88904 8808 value_type (dval), value_contents (dval));
14f9c5c9
AS
8809
8810 if (which < 0)
e9bb382b 8811 return empty_record (var_type);
14f9c5c9 8812 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8813 return to_fixed_record_type
d2e4a39e
AS
8814 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8815 valaddr, address, dval);
4c4b4cd2 8816 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8817 return
8818 to_fixed_record_type
8819 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8820 else
8821 return TYPE_FIELD_TYPE (var_type, which);
8822}
8823
8908fca5
JB
8824/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8825 ENCODING_TYPE, a type following the GNAT conventions for discrete
8826 type encodings, only carries redundant information. */
8827
8828static int
8829ada_is_redundant_range_encoding (struct type *range_type,
8830 struct type *encoding_type)
8831{
108d56a4 8832 const char *bounds_str;
8908fca5
JB
8833 int n;
8834 LONGEST lo, hi;
8835
8836 gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8837
005e2509
JB
8838 if (TYPE_CODE (get_base_type (range_type))
8839 != TYPE_CODE (get_base_type (encoding_type)))
8840 {
8841 /* The compiler probably used a simple base type to describe
8842 the range type instead of the range's actual base type,
8843 expecting us to get the real base type from the encoding
8844 anyway. In this situation, the encoding cannot be ignored
8845 as redundant. */
8846 return 0;
8847 }
8848
8908fca5
JB
8849 if (is_dynamic_type (range_type))
8850 return 0;
8851
8852 if (TYPE_NAME (encoding_type) == NULL)
8853 return 0;
8854
8855 bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8856 if (bounds_str == NULL)
8857 return 0;
8858
8859 n = 8; /* Skip "___XDLU_". */
8860 if (!ada_scan_number (bounds_str, n, &lo, &n))
8861 return 0;
8862 if (TYPE_LOW_BOUND (range_type) != lo)
8863 return 0;
8864
8865 n += 2; /* Skip the "__" separator between the two bounds. */
8866 if (!ada_scan_number (bounds_str, n, &hi, &n))
8867 return 0;
8868 if (TYPE_HIGH_BOUND (range_type) != hi)
8869 return 0;
8870
8871 return 1;
8872}
8873
8874/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8875 a type following the GNAT encoding for describing array type
8876 indices, only carries redundant information. */
8877
8878static int
8879ada_is_redundant_index_type_desc (struct type *array_type,
8880 struct type *desc_type)
8881{
8882 struct type *this_layer = check_typedef (array_type);
8883 int i;
8884
8885 for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8886 {
8887 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8888 TYPE_FIELD_TYPE (desc_type, i)))
8889 return 0;
8890 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8891 }
8892
8893 return 1;
8894}
8895
14f9c5c9
AS
8896/* Assuming that TYPE0 is an array type describing the type of a value
8897 at ADDR, and that DVAL describes a record containing any
8898 discriminants used in TYPE0, returns a type for the value that
8899 contains no dynamic components (that is, no components whose sizes
8900 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8901 true, gives an error message if the resulting type's size is over
4c4b4cd2 8902 varsize_limit. */
14f9c5c9 8903
d2e4a39e
AS
8904static struct type *
8905to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8906 int ignore_too_big)
14f9c5c9 8907{
d2e4a39e
AS
8908 struct type *index_type_desc;
8909 struct type *result;
ad82864c 8910 int constrained_packed_array_p;
931e5bc3 8911 static const char *xa_suffix = "___XA";
14f9c5c9 8912
b0dd7688 8913 type0 = ada_check_typedef (type0);
284614f0 8914 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8915 return type0;
14f9c5c9 8916
ad82864c
JB
8917 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8918 if (constrained_packed_array_p)
8919 type0 = decode_constrained_packed_array_type (type0);
284614f0 8920
931e5bc3
JG
8921 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8922
8923 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8924 encoding suffixed with 'P' may still be generated. If so,
8925 it should be used to find the XA type. */
8926
8927 if (index_type_desc == NULL)
8928 {
1da0522e 8929 const char *type_name = ada_type_name (type0);
931e5bc3 8930
1da0522e 8931 if (type_name != NULL)
931e5bc3 8932 {
1da0522e 8933 const int len = strlen (type_name);
931e5bc3
JG
8934 char *name = (char *) alloca (len + strlen (xa_suffix));
8935
1da0522e 8936 if (type_name[len - 1] == 'P')
931e5bc3 8937 {
1da0522e 8938 strcpy (name, type_name);
931e5bc3
JG
8939 strcpy (name + len - 1, xa_suffix);
8940 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8941 }
8942 }
8943 }
8944
28c85d6c 8945 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8946 if (index_type_desc != NULL
8947 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8948 {
8949 /* Ignore this ___XA parallel type, as it does not bring any
8950 useful information. This allows us to avoid creating fixed
8951 versions of the array's index types, which would be identical
8952 to the original ones. This, in turn, can also help avoid
8953 the creation of fixed versions of the array itself. */
8954 index_type_desc = NULL;
8955 }
8956
14f9c5c9
AS
8957 if (index_type_desc == NULL)
8958 {
61ee279c 8959 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8960
14f9c5c9 8961 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8962 depend on the contents of the array in properly constructed
8963 debugging data. */
529cad9c
PH
8964 /* Create a fixed version of the array element type.
8965 We're not providing the address of an element here,
e1d5a0d2 8966 and thus the actual object value cannot be inspected to do
529cad9c
PH
8967 the conversion. This should not be a problem, since arrays of
8968 unconstrained objects are not allowed. In particular, all
8969 the elements of an array of a tagged type should all be of
8970 the same type specified in the debugging info. No need to
8971 consult the object tag. */
1ed6ede0 8972 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8973
284614f0
JB
8974 /* Make sure we always create a new array type when dealing with
8975 packed array types, since we're going to fix-up the array
8976 type length and element bitsize a little further down. */
ad82864c 8977 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8978 result = type0;
14f9c5c9 8979 else
e9bb382b 8980 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8981 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8982 }
8983 else
8984 {
8985 int i;
8986 struct type *elt_type0;
8987
8988 elt_type0 = type0;
8989 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8990 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8991
8992 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8993 depend on the contents of the array in properly constructed
8994 debugging data. */
529cad9c
PH
8995 /* Create a fixed version of the array element type.
8996 We're not providing the address of an element here,
e1d5a0d2 8997 and thus the actual object value cannot be inspected to do
529cad9c
PH
8998 the conversion. This should not be a problem, since arrays of
8999 unconstrained objects are not allowed. In particular, all
9000 the elements of an array of a tagged type should all be of
9001 the same type specified in the debugging info. No need to
9002 consult the object tag. */
1ed6ede0
JB
9003 result =
9004 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
9005
9006 elt_type0 = type0;
14f9c5c9 9007 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
9008 {
9009 struct type *range_type =
28c85d6c 9010 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 9011
e9bb382b 9012 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 9013 result, range_type);
1ce677a4 9014 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 9015 }
d2e4a39e 9016 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 9017 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
9018 }
9019
2e6fda7d
JB
9020 /* We want to preserve the type name. This can be useful when
9021 trying to get the type name of a value that has already been
9022 printed (for instance, if the user did "print VAR; whatis $". */
9023 TYPE_NAME (result) = TYPE_NAME (type0);
9024
ad82864c 9025 if (constrained_packed_array_p)
284614f0
JB
9026 {
9027 /* So far, the resulting type has been created as if the original
9028 type was a regular (non-packed) array type. As a result, the
9029 bitsize of the array elements needs to be set again, and the array
9030 length needs to be recomputed based on that bitsize. */
9031 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
9032 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
9033
9034 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
9035 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
9036 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
9037 TYPE_LENGTH (result)++;
9038 }
9039
876cecd0 9040 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 9041 return result;
d2e4a39e 9042}
14f9c5c9
AS
9043
9044
9045/* A standard type (containing no dynamically sized components)
9046 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
9047 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 9048 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
9049 ADDRESS or in VALADDR contains these discriminants.
9050
1ed6ede0
JB
9051 If CHECK_TAG is not null, in the case of tagged types, this function
9052 attempts to locate the object's tag and use it to compute the actual
9053 type. However, when ADDRESS is null, we cannot use it to determine the
9054 location of the tag, and therefore compute the tagged type's actual type.
9055 So we return the tagged type without consulting the tag. */
529cad9c 9056
f192137b
JB
9057static struct type *
9058ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 9059 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 9060{
61ee279c 9061 type = ada_check_typedef (type);
d2e4a39e
AS
9062 switch (TYPE_CODE (type))
9063 {
9064 default:
14f9c5c9 9065 return type;
d2e4a39e 9066 case TYPE_CODE_STRUCT:
4c4b4cd2 9067 {
76a01679 9068 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
9069 struct type *fixed_record_type =
9070 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 9071
529cad9c
PH
9072 /* If STATIC_TYPE is a tagged type and we know the object's address,
9073 then we can determine its tag, and compute the object's actual
0963b4bd 9074 type from there. Note that we have to use the fixed record
1ed6ede0
JB
9075 type (the parent part of the record may have dynamic fields
9076 and the way the location of _tag is expressed may depend on
9077 them). */
529cad9c 9078
1ed6ede0 9079 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 9080 {
b50d69b5
JG
9081 struct value *tag =
9082 value_tag_from_contents_and_address
9083 (fixed_record_type,
9084 valaddr,
9085 address);
9086 struct type *real_type = type_from_tag (tag);
9087 struct value *obj =
9088 value_from_contents_and_address (fixed_record_type,
9089 valaddr,
9090 address);
9f1f738a 9091 fixed_record_type = value_type (obj);
76a01679 9092 if (real_type != NULL)
b50d69b5
JG
9093 return to_fixed_record_type
9094 (real_type, NULL,
9095 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 9096 }
4af88198
JB
9097
9098 /* Check to see if there is a parallel ___XVZ variable.
9099 If there is, then it provides the actual size of our type. */
9100 else if (ada_type_name (fixed_record_type) != NULL)
9101 {
0d5cff50 9102 const char *name = ada_type_name (fixed_record_type);
224c3ddb
SM
9103 char *xvz_name
9104 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
eccab96d 9105 bool xvz_found = false;
4af88198
JB
9106 LONGEST size;
9107
88c15c34 9108 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
eccab96d
JB
9109 TRY
9110 {
9111 xvz_found = get_int_var_value (xvz_name, size);
9112 }
9113 CATCH (except, RETURN_MASK_ERROR)
9114 {
9115 /* We found the variable, but somehow failed to read
9116 its value. Rethrow the same error, but with a little
9117 bit more information, to help the user understand
9118 what went wrong (Eg: the variable might have been
9119 optimized out). */
9120 throw_error (except.error,
9121 _("unable to read value of %s (%s)"),
9122 xvz_name, except.message);
9123 }
9124 END_CATCH
9125
9126 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
4af88198
JB
9127 {
9128 fixed_record_type = copy_type (fixed_record_type);
9129 TYPE_LENGTH (fixed_record_type) = size;
9130
9131 /* The FIXED_RECORD_TYPE may have be a stub. We have
9132 observed this when the debugging info is STABS, and
9133 apparently it is something that is hard to fix.
9134
9135 In practice, we don't need the actual type definition
9136 at all, because the presence of the XVZ variable allows us
9137 to assume that there must be a XVS type as well, which we
9138 should be able to use later, when we need the actual type
9139 definition.
9140
9141 In the meantime, pretend that the "fixed" type we are
9142 returning is NOT a stub, because this can cause trouble
9143 when using this type to create new types targeting it.
9144 Indeed, the associated creation routines often check
9145 whether the target type is a stub and will try to replace
0963b4bd 9146 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
9147 might cause the new type to have the wrong size too.
9148 Consider the case of an array, for instance, where the size
9149 of the array is computed from the number of elements in
9150 our array multiplied by the size of its element. */
9151 TYPE_STUB (fixed_record_type) = 0;
9152 }
9153 }
1ed6ede0 9154 return fixed_record_type;
4c4b4cd2 9155 }
d2e4a39e 9156 case TYPE_CODE_ARRAY:
4c4b4cd2 9157 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
9158 case TYPE_CODE_UNION:
9159 if (dval == NULL)
4c4b4cd2 9160 return type;
d2e4a39e 9161 else
4c4b4cd2 9162 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 9163 }
14f9c5c9
AS
9164}
9165
f192137b
JB
9166/* The same as ada_to_fixed_type_1, except that it preserves the type
9167 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
9168
9169 The typedef layer needs be preserved in order to differentiate between
9170 arrays and array pointers when both types are implemented using the same
9171 fat pointer. In the array pointer case, the pointer is encoded as
9172 a typedef of the pointer type. For instance, considering:
9173
9174 type String_Access is access String;
9175 S1 : String_Access := null;
9176
9177 To the debugger, S1 is defined as a typedef of type String. But
9178 to the user, it is a pointer. So if the user tries to print S1,
9179 we should not dereference the array, but print the array address
9180 instead.
9181
9182 If we didn't preserve the typedef layer, we would lose the fact that
9183 the type is to be presented as a pointer (needs de-reference before
9184 being printed). And we would also use the source-level type name. */
f192137b
JB
9185
9186struct type *
9187ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
9188 CORE_ADDR address, struct value *dval, int check_tag)
9189
9190{
9191 struct type *fixed_type =
9192 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
9193
96dbd2c1
JB
9194 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
9195 then preserve the typedef layer.
9196
9197 Implementation note: We can only check the main-type portion of
9198 the TYPE and FIXED_TYPE, because eliminating the typedef layer
9199 from TYPE now returns a type that has the same instance flags
9200 as TYPE. For instance, if TYPE is a "typedef const", and its
9201 target type is a "struct", then the typedef elimination will return
9202 a "const" version of the target type. See check_typedef for more
9203 details about how the typedef layer elimination is done.
9204
9205 brobecker/2010-11-19: It seems to me that the only case where it is
9206 useful to preserve the typedef layer is when dealing with fat pointers.
9207 Perhaps, we could add a check for that and preserve the typedef layer
9208 only in that situation. But this seems unecessary so far, probably
9209 because we call check_typedef/ada_check_typedef pretty much everywhere.
9210 */
f192137b 9211 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 9212 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 9213 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
9214 return type;
9215
9216 return fixed_type;
9217}
9218
14f9c5c9 9219/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 9220 TYPE0, but based on no runtime data. */
14f9c5c9 9221
d2e4a39e
AS
9222static struct type *
9223to_static_fixed_type (struct type *type0)
14f9c5c9 9224{
d2e4a39e 9225 struct type *type;
14f9c5c9
AS
9226
9227 if (type0 == NULL)
9228 return NULL;
9229
876cecd0 9230 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
9231 return type0;
9232
61ee279c 9233 type0 = ada_check_typedef (type0);
d2e4a39e 9234
14f9c5c9
AS
9235 switch (TYPE_CODE (type0))
9236 {
9237 default:
9238 return type0;
9239 case TYPE_CODE_STRUCT:
9240 type = dynamic_template_type (type0);
d2e4a39e 9241 if (type != NULL)
4c4b4cd2
PH
9242 return template_to_static_fixed_type (type);
9243 else
9244 return template_to_static_fixed_type (type0);
14f9c5c9
AS
9245 case TYPE_CODE_UNION:
9246 type = ada_find_parallel_type (type0, "___XVU");
9247 if (type != NULL)
4c4b4cd2
PH
9248 return template_to_static_fixed_type (type);
9249 else
9250 return template_to_static_fixed_type (type0);
14f9c5c9
AS
9251 }
9252}
9253
4c4b4cd2
PH
9254/* A static approximation of TYPE with all type wrappers removed. */
9255
d2e4a39e
AS
9256static struct type *
9257static_unwrap_type (struct type *type)
14f9c5c9
AS
9258{
9259 if (ada_is_aligner_type (type))
9260 {
61ee279c 9261 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 9262 if (ada_type_name (type1) == NULL)
4c4b4cd2 9263 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
9264
9265 return static_unwrap_type (type1);
9266 }
d2e4a39e 9267 else
14f9c5c9 9268 {
d2e4a39e 9269 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 9270
d2e4a39e 9271 if (raw_real_type == type)
4c4b4cd2 9272 return type;
14f9c5c9 9273 else
4c4b4cd2 9274 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
9275 }
9276}
9277
9278/* In some cases, incomplete and private types require
4c4b4cd2 9279 cross-references that are not resolved as records (for example,
14f9c5c9
AS
9280 type Foo;
9281 type FooP is access Foo;
9282 V: FooP;
9283 type Foo is array ...;
4c4b4cd2 9284 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
9285 cross-references to such types, we instead substitute for FooP a
9286 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 9287 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
9288
9289/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
9290 exists, otherwise TYPE. */
9291
d2e4a39e 9292struct type *
61ee279c 9293ada_check_typedef (struct type *type)
14f9c5c9 9294{
727e3d2e
JB
9295 if (type == NULL)
9296 return NULL;
9297
736ade86
XR
9298 /* If our type is an access to an unconstrained array, which is encoded
9299 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
720d1a40
JB
9300 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
9301 what allows us to distinguish between fat pointers that represent
9302 array types, and fat pointers that represent array access types
9303 (in both cases, the compiler implements them as fat pointers). */
736ade86 9304 if (ada_is_access_to_unconstrained_array (type))
720d1a40
JB
9305 return type;
9306
f168693b 9307 type = check_typedef (type);
14f9c5c9 9308 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 9309 || !TYPE_STUB (type)
e86ca25f 9310 || TYPE_NAME (type) == NULL)
14f9c5c9 9311 return type;
d2e4a39e 9312 else
14f9c5c9 9313 {
e86ca25f 9314 const char *name = TYPE_NAME (type);
d2e4a39e 9315 struct type *type1 = ada_find_any_type (name);
5b4ee69b 9316
05e522ef
JB
9317 if (type1 == NULL)
9318 return type;
9319
9320 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
9321 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
9322 types, only for the typedef-to-array types). If that's the case,
9323 strip the typedef layer. */
9324 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
9325 type1 = ada_check_typedef (type1);
9326
9327 return type1;
14f9c5c9
AS
9328 }
9329}
9330
9331/* A value representing the data at VALADDR/ADDRESS as described by
9332 type TYPE0, but with a standard (static-sized) type that correctly
9333 describes it. If VAL0 is not NULL and TYPE0 already is a standard
9334 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 9335 creation of struct values]. */
14f9c5c9 9336
4c4b4cd2
PH
9337static struct value *
9338ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
9339 struct value *val0)
14f9c5c9 9340{
1ed6ede0 9341 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 9342
14f9c5c9
AS
9343 if (type == type0 && val0 != NULL)
9344 return val0;
cc0e770c
JB
9345
9346 if (VALUE_LVAL (val0) != lval_memory)
9347 {
9348 /* Our value does not live in memory; it could be a convenience
9349 variable, for instance. Create a not_lval value using val0's
9350 contents. */
9351 return value_from_contents (type, value_contents (val0));
9352 }
9353
9354 return value_from_contents_and_address (type, 0, address);
4c4b4cd2
PH
9355}
9356
9357/* A value representing VAL, but with a standard (static-sized) type
9358 that correctly describes it. Does not necessarily create a new
9359 value. */
9360
0c3acc09 9361struct value *
4c4b4cd2
PH
9362ada_to_fixed_value (struct value *val)
9363{
c48db5ca 9364 val = unwrap_value (val);
d8ce9127 9365 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
c48db5ca 9366 return val;
14f9c5c9 9367}
d2e4a39e 9368\f
14f9c5c9 9369
14f9c5c9
AS
9370/* Attributes */
9371
4c4b4cd2
PH
9372/* Table mapping attribute numbers to names.
9373 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 9374
d2e4a39e 9375static const char *attribute_names[] = {
14f9c5c9
AS
9376 "<?>",
9377
d2e4a39e 9378 "first",
14f9c5c9
AS
9379 "last",
9380 "length",
9381 "image",
14f9c5c9
AS
9382 "max",
9383 "min",
4c4b4cd2
PH
9384 "modulus",
9385 "pos",
9386 "size",
9387 "tag",
14f9c5c9 9388 "val",
14f9c5c9
AS
9389 0
9390};
9391
d2e4a39e 9392const char *
4c4b4cd2 9393ada_attribute_name (enum exp_opcode n)
14f9c5c9 9394{
4c4b4cd2
PH
9395 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9396 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
9397 else
9398 return attribute_names[0];
9399}
9400
4c4b4cd2 9401/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 9402
4c4b4cd2
PH
9403static LONGEST
9404pos_atr (struct value *arg)
14f9c5c9 9405{
24209737
PH
9406 struct value *val = coerce_ref (arg);
9407 struct type *type = value_type (val);
aa715135 9408 LONGEST result;
14f9c5c9 9409
d2e4a39e 9410 if (!discrete_type_p (type))
323e0a4a 9411 error (_("'POS only defined on discrete types"));
14f9c5c9 9412
aa715135
JG
9413 if (!discrete_position (type, value_as_long (val), &result))
9414 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 9415
aa715135 9416 return result;
4c4b4cd2
PH
9417}
9418
9419static struct value *
3cb382c9 9420value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 9421{
3cb382c9 9422 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
9423}
9424
4c4b4cd2 9425/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 9426
d2e4a39e
AS
9427static struct value *
9428value_val_atr (struct type *type, struct value *arg)
14f9c5c9 9429{
d2e4a39e 9430 if (!discrete_type_p (type))
323e0a4a 9431 error (_("'VAL only defined on discrete types"));
df407dfe 9432 if (!integer_type_p (value_type (arg)))
323e0a4a 9433 error (_("'VAL requires integral argument"));
14f9c5c9
AS
9434
9435 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
9436 {
9437 long pos = value_as_long (arg);
5b4ee69b 9438
14f9c5c9 9439 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 9440 error (_("argument to 'VAL out of range"));
14e75d8e 9441 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
9442 }
9443 else
9444 return value_from_longest (type, value_as_long (arg));
9445}
14f9c5c9 9446\f
d2e4a39e 9447
4c4b4cd2 9448 /* Evaluation */
14f9c5c9 9449
4c4b4cd2
PH
9450/* True if TYPE appears to be an Ada character type.
9451 [At the moment, this is true only for Character and Wide_Character;
9452 It is a heuristic test that could stand improvement]. */
14f9c5c9 9453
d2e4a39e
AS
9454int
9455ada_is_character_type (struct type *type)
14f9c5c9 9456{
7b9f71f2
JB
9457 const char *name;
9458
9459 /* If the type code says it's a character, then assume it really is,
9460 and don't check any further. */
9461 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
9462 return 1;
9463
9464 /* Otherwise, assume it's a character type iff it is a discrete type
9465 with a known character type name. */
9466 name = ada_type_name (type);
9467 return (name != NULL
9468 && (TYPE_CODE (type) == TYPE_CODE_INT
9469 || TYPE_CODE (type) == TYPE_CODE_RANGE)
9470 && (strcmp (name, "character") == 0
9471 || strcmp (name, "wide_character") == 0
5a517ebd 9472 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 9473 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
9474}
9475
4c4b4cd2 9476/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
9477
9478int
ebf56fd3 9479ada_is_string_type (struct type *type)
14f9c5c9 9480{
61ee279c 9481 type = ada_check_typedef (type);
d2e4a39e 9482 if (type != NULL
14f9c5c9 9483 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
9484 && (ada_is_simple_array_type (type)
9485 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
9486 && ada_array_arity (type) == 1)
9487 {
9488 struct type *elttype = ada_array_element_type (type, 1);
9489
9490 return ada_is_character_type (elttype);
9491 }
d2e4a39e 9492 else
14f9c5c9
AS
9493 return 0;
9494}
9495
5bf03f13
JB
9496/* The compiler sometimes provides a parallel XVS type for a given
9497 PAD type. Normally, it is safe to follow the PAD type directly,
9498 but older versions of the compiler have a bug that causes the offset
9499 of its "F" field to be wrong. Following that field in that case
9500 would lead to incorrect results, but this can be worked around
9501 by ignoring the PAD type and using the associated XVS type instead.
9502
9503 Set to True if the debugger should trust the contents of PAD types.
9504 Otherwise, ignore the PAD type if there is a parallel XVS type. */
9505static int trust_pad_over_xvs = 1;
14f9c5c9
AS
9506
9507/* True if TYPE is a struct type introduced by the compiler to force the
9508 alignment of a value. Such types have a single field with a
4c4b4cd2 9509 distinctive name. */
14f9c5c9
AS
9510
9511int
ebf56fd3 9512ada_is_aligner_type (struct type *type)
14f9c5c9 9513{
61ee279c 9514 type = ada_check_typedef (type);
714e53ab 9515
5bf03f13 9516 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
9517 return 0;
9518
14f9c5c9 9519 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
9520 && TYPE_NFIELDS (type) == 1
9521 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
9522}
9523
9524/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 9525 the parallel type. */
14f9c5c9 9526
d2e4a39e
AS
9527struct type *
9528ada_get_base_type (struct type *raw_type)
14f9c5c9 9529{
d2e4a39e
AS
9530 struct type *real_type_namer;
9531 struct type *raw_real_type;
14f9c5c9
AS
9532
9533 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9534 return raw_type;
9535
284614f0
JB
9536 if (ada_is_aligner_type (raw_type))
9537 /* The encoding specifies that we should always use the aligner type.
9538 So, even if this aligner type has an associated XVS type, we should
9539 simply ignore it.
9540
9541 According to the compiler gurus, an XVS type parallel to an aligner
9542 type may exist because of a stabs limitation. In stabs, aligner
9543 types are empty because the field has a variable-sized type, and
9544 thus cannot actually be used as an aligner type. As a result,
9545 we need the associated parallel XVS type to decode the type.
9546 Since the policy in the compiler is to not change the internal
9547 representation based on the debugging info format, we sometimes
9548 end up having a redundant XVS type parallel to the aligner type. */
9549 return raw_type;
9550
14f9c5c9 9551 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9552 if (real_type_namer == NULL
14f9c5c9
AS
9553 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9554 || TYPE_NFIELDS (real_type_namer) != 1)
9555 return raw_type;
9556
f80d3ff2
JB
9557 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9558 {
9559 /* This is an older encoding form where the base type needs to be
9560 looked up by name. We prefer the newer enconding because it is
9561 more efficient. */
9562 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9563 if (raw_real_type == NULL)
9564 return raw_type;
9565 else
9566 return raw_real_type;
9567 }
9568
9569 /* The field in our XVS type is a reference to the base type. */
9570 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 9571}
14f9c5c9 9572
4c4b4cd2 9573/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9574
d2e4a39e
AS
9575struct type *
9576ada_aligned_type (struct type *type)
14f9c5c9
AS
9577{
9578 if (ada_is_aligner_type (type))
9579 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9580 else
9581 return ada_get_base_type (type);
9582}
9583
9584
9585/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9586 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9587
fc1a4b47
AC
9588const gdb_byte *
9589ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9590{
d2e4a39e 9591 if (ada_is_aligner_type (type))
14f9c5c9 9592 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
9593 valaddr +
9594 TYPE_FIELD_BITPOS (type,
9595 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9596 else
9597 return valaddr;
9598}
9599
4c4b4cd2
PH
9600
9601
14f9c5c9 9602/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9603 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9604const char *
9605ada_enum_name (const char *name)
14f9c5c9 9606{
4c4b4cd2
PH
9607 static char *result;
9608 static size_t result_len = 0;
e6a959d6 9609 const char *tmp;
14f9c5c9 9610
4c4b4cd2
PH
9611 /* First, unqualify the enumeration name:
9612 1. Search for the last '.' character. If we find one, then skip
177b42fe 9613 all the preceding characters, the unqualified name starts
76a01679 9614 right after that dot.
4c4b4cd2 9615 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9616 translates dots into "__". Search forward for double underscores,
9617 but stop searching when we hit an overloading suffix, which is
9618 of the form "__" followed by digits. */
4c4b4cd2 9619
c3e5cd34
PH
9620 tmp = strrchr (name, '.');
9621 if (tmp != NULL)
4c4b4cd2
PH
9622 name = tmp + 1;
9623 else
14f9c5c9 9624 {
4c4b4cd2
PH
9625 while ((tmp = strstr (name, "__")) != NULL)
9626 {
9627 if (isdigit (tmp[2]))
9628 break;
9629 else
9630 name = tmp + 2;
9631 }
14f9c5c9
AS
9632 }
9633
9634 if (name[0] == 'Q')
9635 {
14f9c5c9 9636 int v;
5b4ee69b 9637
14f9c5c9 9638 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
9639 {
9640 if (sscanf (name + 2, "%x", &v) != 1)
9641 return name;
9642 }
14f9c5c9 9643 else
4c4b4cd2 9644 return name;
14f9c5c9 9645
4c4b4cd2 9646 GROW_VECT (result, result_len, 16);
14f9c5c9 9647 if (isascii (v) && isprint (v))
88c15c34 9648 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9649 else if (name[1] == 'U')
88c15c34 9650 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9651 else
88c15c34 9652 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9653
9654 return result;
9655 }
d2e4a39e 9656 else
4c4b4cd2 9657 {
c3e5cd34
PH
9658 tmp = strstr (name, "__");
9659 if (tmp == NULL)
9660 tmp = strstr (name, "$");
9661 if (tmp != NULL)
4c4b4cd2
PH
9662 {
9663 GROW_VECT (result, result_len, tmp - name + 1);
9664 strncpy (result, name, tmp - name);
9665 result[tmp - name] = '\0';
9666 return result;
9667 }
9668
9669 return name;
9670 }
14f9c5c9
AS
9671}
9672
14f9c5c9
AS
9673/* Evaluate the subexpression of EXP starting at *POS as for
9674 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9675 expression. */
14f9c5c9 9676
d2e4a39e
AS
9677static struct value *
9678evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9679{
4b27a620 9680 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9681}
9682
9683/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9684 value it wraps. */
14f9c5c9 9685
d2e4a39e
AS
9686static struct value *
9687unwrap_value (struct value *val)
14f9c5c9 9688{
df407dfe 9689 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9690
14f9c5c9
AS
9691 if (ada_is_aligner_type (type))
9692 {
de4d072f 9693 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9694 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9695
14f9c5c9 9696 if (ada_type_name (val_type) == NULL)
4c4b4cd2 9697 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
9698
9699 return unwrap_value (v);
9700 }
d2e4a39e 9701 else
14f9c5c9 9702 {
d2e4a39e 9703 struct type *raw_real_type =
61ee279c 9704 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9705
5bf03f13
JB
9706 /* If there is no parallel XVS or XVE type, then the value is
9707 already unwrapped. Return it without further modification. */
9708 if ((type == raw_real_type)
9709 && ada_find_parallel_type (type, "___XVE") == NULL)
9710 return val;
14f9c5c9 9711
d2e4a39e 9712 return
4c4b4cd2
PH
9713 coerce_unspec_val_to_type
9714 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9715 value_address (val),
1ed6ede0 9716 NULL, 1));
14f9c5c9
AS
9717 }
9718}
d2e4a39e
AS
9719
9720static struct value *
50eff16b 9721cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9722{
50eff16b
UW
9723 struct value *scale = ada_scaling_factor (value_type (arg));
9724 arg = value_cast (value_type (scale), arg);
14f9c5c9 9725
50eff16b
UW
9726 arg = value_binop (arg, scale, BINOP_MUL);
9727 return value_cast (type, arg);
14f9c5c9
AS
9728}
9729
d2e4a39e 9730static struct value *
50eff16b 9731cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9 9732{
50eff16b
UW
9733 if (type == value_type (arg))
9734 return arg;
5b4ee69b 9735
50eff16b
UW
9736 struct value *scale = ada_scaling_factor (type);
9737 if (ada_is_fixed_point_type (value_type (arg)))
9738 arg = cast_from_fixed (value_type (scale), arg);
9739 else
9740 arg = value_cast (value_type (scale), arg);
9741
9742 arg = value_binop (arg, scale, BINOP_DIV);
9743 return value_cast (type, arg);
14f9c5c9
AS
9744}
9745
d99dcf51
JB
9746/* Given two array types T1 and T2, return nonzero iff both arrays
9747 contain the same number of elements. */
9748
9749static int
9750ada_same_array_size_p (struct type *t1, struct type *t2)
9751{
9752 LONGEST lo1, hi1, lo2, hi2;
9753
9754 /* Get the array bounds in order to verify that the size of
9755 the two arrays match. */
9756 if (!get_array_bounds (t1, &lo1, &hi1)
9757 || !get_array_bounds (t2, &lo2, &hi2))
9758 error (_("unable to determine array bounds"));
9759
9760 /* To make things easier for size comparison, normalize a bit
9761 the case of empty arrays by making sure that the difference
9762 between upper bound and lower bound is always -1. */
9763 if (lo1 > hi1)
9764 hi1 = lo1 - 1;
9765 if (lo2 > hi2)
9766 hi2 = lo2 - 1;
9767
9768 return (hi1 - lo1 == hi2 - lo2);
9769}
9770
9771/* Assuming that VAL is an array of integrals, and TYPE represents
9772 an array with the same number of elements, but with wider integral
9773 elements, return an array "casted" to TYPE. In practice, this
9774 means that the returned array is built by casting each element
9775 of the original array into TYPE's (wider) element type. */
9776
9777static struct value *
9778ada_promote_array_of_integrals (struct type *type, struct value *val)
9779{
9780 struct type *elt_type = TYPE_TARGET_TYPE (type);
9781 LONGEST lo, hi;
9782 struct value *res;
9783 LONGEST i;
9784
9785 /* Verify that both val and type are arrays of scalars, and
9786 that the size of val's elements is smaller than the size
9787 of type's element. */
9788 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9789 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9790 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9791 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9792 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9793 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9794
9795 if (!get_array_bounds (type, &lo, &hi))
9796 error (_("unable to determine array bounds"));
9797
9798 res = allocate_value (type);
9799
9800 /* Promote each array element. */
9801 for (i = 0; i < hi - lo + 1; i++)
9802 {
9803 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9804
9805 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9806 value_contents_all (elt), TYPE_LENGTH (elt_type));
9807 }
9808
9809 return res;
9810}
9811
4c4b4cd2
PH
9812/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9813 return the converted value. */
9814
d2e4a39e
AS
9815static struct value *
9816coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9817{
df407dfe 9818 struct type *type2 = value_type (val);
5b4ee69b 9819
14f9c5c9
AS
9820 if (type == type2)
9821 return val;
9822
61ee279c
PH
9823 type2 = ada_check_typedef (type2);
9824 type = ada_check_typedef (type);
14f9c5c9 9825
d2e4a39e
AS
9826 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9827 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
9828 {
9829 val = ada_value_ind (val);
df407dfe 9830 type2 = value_type (val);
14f9c5c9
AS
9831 }
9832
d2e4a39e 9833 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
9834 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9835 {
d99dcf51
JB
9836 if (!ada_same_array_size_p (type, type2))
9837 error (_("cannot assign arrays of different length"));
9838
9839 if (is_integral_type (TYPE_TARGET_TYPE (type))
9840 && is_integral_type (TYPE_TARGET_TYPE (type2))
9841 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9842 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9843 {
9844 /* Allow implicit promotion of the array elements to
9845 a wider type. */
9846 return ada_promote_array_of_integrals (type, val);
9847 }
9848
9849 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9850 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9851 error (_("Incompatible types in assignment"));
04624583 9852 deprecated_set_value_type (val, type);
14f9c5c9 9853 }
d2e4a39e 9854 return val;
14f9c5c9
AS
9855}
9856
4c4b4cd2
PH
9857static struct value *
9858ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9859{
9860 struct value *val;
9861 struct type *type1, *type2;
9862 LONGEST v, v1, v2;
9863
994b9211
AC
9864 arg1 = coerce_ref (arg1);
9865 arg2 = coerce_ref (arg2);
18af8284
JB
9866 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9867 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9868
76a01679
JB
9869 if (TYPE_CODE (type1) != TYPE_CODE_INT
9870 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
9871 return value_binop (arg1, arg2, op);
9872
76a01679 9873 switch (op)
4c4b4cd2
PH
9874 {
9875 case BINOP_MOD:
9876 case BINOP_DIV:
9877 case BINOP_REM:
9878 break;
9879 default:
9880 return value_binop (arg1, arg2, op);
9881 }
9882
9883 v2 = value_as_long (arg2);
9884 if (v2 == 0)
323e0a4a 9885 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9886
9887 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9888 return value_binop (arg1, arg2, op);
9889
9890 v1 = value_as_long (arg1);
9891 switch (op)
9892 {
9893 case BINOP_DIV:
9894 v = v1 / v2;
76a01679
JB
9895 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9896 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9897 break;
9898 case BINOP_REM:
9899 v = v1 % v2;
76a01679
JB
9900 if (v * v1 < 0)
9901 v -= v2;
4c4b4cd2
PH
9902 break;
9903 default:
9904 /* Should not reach this point. */
9905 v = 0;
9906 }
9907
9908 val = allocate_value (type1);
990a07ab 9909 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9910 TYPE_LENGTH (value_type (val)),
9911 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9912 return val;
9913}
9914
9915static int
9916ada_value_equal (struct value *arg1, struct value *arg2)
9917{
df407dfe
AC
9918 if (ada_is_direct_array_type (value_type (arg1))
9919 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9920 {
79e8fcaa
JB
9921 struct type *arg1_type, *arg2_type;
9922
f58b38bf
JB
9923 /* Automatically dereference any array reference before
9924 we attempt to perform the comparison. */
9925 arg1 = ada_coerce_ref (arg1);
9926 arg2 = ada_coerce_ref (arg2);
79e8fcaa 9927
4c4b4cd2
PH
9928 arg1 = ada_coerce_to_simple_array (arg1);
9929 arg2 = ada_coerce_to_simple_array (arg2);
79e8fcaa
JB
9930
9931 arg1_type = ada_check_typedef (value_type (arg1));
9932 arg2_type = ada_check_typedef (value_type (arg2));
9933
9934 if (TYPE_CODE (arg1_type) != TYPE_CODE_ARRAY
9935 || TYPE_CODE (arg2_type) != TYPE_CODE_ARRAY)
323e0a4a 9936 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9937 /* FIXME: The following works only for types whose
76a01679
JB
9938 representations use all bits (no padding or undefined bits)
9939 and do not have user-defined equality. */
79e8fcaa
JB
9940 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9941 && memcmp (value_contents (arg1), value_contents (arg2),
9942 TYPE_LENGTH (arg1_type)) == 0);
4c4b4cd2
PH
9943 }
9944 return value_equal (arg1, arg2);
9945}
9946
52ce6436
PH
9947/* Total number of component associations in the aggregate starting at
9948 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9949 OP_AGGREGATE. */
52ce6436
PH
9950
9951static int
9952num_component_specs (struct expression *exp, int pc)
9953{
9954 int n, m, i;
5b4ee69b 9955
52ce6436
PH
9956 m = exp->elts[pc + 1].longconst;
9957 pc += 3;
9958 n = 0;
9959 for (i = 0; i < m; i += 1)
9960 {
9961 switch (exp->elts[pc].opcode)
9962 {
9963 default:
9964 n += 1;
9965 break;
9966 case OP_CHOICES:
9967 n += exp->elts[pc + 1].longconst;
9968 break;
9969 }
9970 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9971 }
9972 return n;
9973}
9974
9975/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9976 component of LHS (a simple array or a record), updating *POS past
9977 the expression, assuming that LHS is contained in CONTAINER. Does
9978 not modify the inferior's memory, nor does it modify LHS (unless
9979 LHS == CONTAINER). */
9980
9981static void
9982assign_component (struct value *container, struct value *lhs, LONGEST index,
9983 struct expression *exp, int *pos)
9984{
9985 struct value *mark = value_mark ();
9986 struct value *elt;
0e2da9f0 9987 struct type *lhs_type = check_typedef (value_type (lhs));
5b4ee69b 9988
0e2da9f0 9989 if (TYPE_CODE (lhs_type) == TYPE_CODE_ARRAY)
52ce6436 9990 {
22601c15
UW
9991 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9992 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9993
52ce6436
PH
9994 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9995 }
9996 else
9997 {
9998 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9999 elt = ada_to_fixed_value (elt);
52ce6436
PH
10000 }
10001
10002 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10003 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
10004 else
10005 value_assign_to_component (container, elt,
10006 ada_evaluate_subexp (NULL, exp, pos,
10007 EVAL_NORMAL));
10008
10009 value_free_to_mark (mark);
10010}
10011
10012/* Assuming that LHS represents an lvalue having a record or array
10013 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
10014 of that aggregate's value to LHS, advancing *POS past the
10015 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
10016 lvalue containing LHS (possibly LHS itself). Does not modify
10017 the inferior's memory, nor does it modify the contents of
0963b4bd 10018 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
10019
10020static struct value *
10021assign_aggregate (struct value *container,
10022 struct value *lhs, struct expression *exp,
10023 int *pos, enum noside noside)
10024{
10025 struct type *lhs_type;
10026 int n = exp->elts[*pos+1].longconst;
10027 LONGEST low_index, high_index;
10028 int num_specs;
10029 LONGEST *indices;
10030 int max_indices, num_indices;
52ce6436 10031 int i;
52ce6436
PH
10032
10033 *pos += 3;
10034 if (noside != EVAL_NORMAL)
10035 {
52ce6436
PH
10036 for (i = 0; i < n; i += 1)
10037 ada_evaluate_subexp (NULL, exp, pos, noside);
10038 return container;
10039 }
10040
10041 container = ada_coerce_ref (container);
10042 if (ada_is_direct_array_type (value_type (container)))
10043 container = ada_coerce_to_simple_array (container);
10044 lhs = ada_coerce_ref (lhs);
10045 if (!deprecated_value_modifiable (lhs))
10046 error (_("Left operand of assignment is not a modifiable lvalue."));
10047
0e2da9f0 10048 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
10049 if (ada_is_direct_array_type (lhs_type))
10050 {
10051 lhs = ada_coerce_to_simple_array (lhs);
0e2da9f0 10052 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
10053 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
10054 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
10055 }
10056 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
10057 {
10058 low_index = 0;
10059 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
10060 }
10061 else
10062 error (_("Left-hand side must be array or record."));
10063
10064 num_specs = num_component_specs (exp, *pos - 3);
10065 max_indices = 4 * num_specs + 4;
8d749320 10066 indices = XALLOCAVEC (LONGEST, max_indices);
52ce6436
PH
10067 indices[0] = indices[1] = low_index - 1;
10068 indices[2] = indices[3] = high_index + 1;
10069 num_indices = 4;
10070
10071 for (i = 0; i < n; i += 1)
10072 {
10073 switch (exp->elts[*pos].opcode)
10074 {
1fbf5ada
JB
10075 case OP_CHOICES:
10076 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
10077 &num_indices, max_indices,
10078 low_index, high_index);
10079 break;
10080 case OP_POSITIONAL:
10081 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
10082 &num_indices, max_indices,
10083 low_index, high_index);
1fbf5ada
JB
10084 break;
10085 case OP_OTHERS:
10086 if (i != n-1)
10087 error (_("Misplaced 'others' clause"));
10088 aggregate_assign_others (container, lhs, exp, pos, indices,
10089 num_indices, low_index, high_index);
10090 break;
10091 default:
10092 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
10093 }
10094 }
10095
10096 return container;
10097}
10098
10099/* Assign into the component of LHS indexed by the OP_POSITIONAL
10100 construct at *POS, updating *POS past the construct, given that
10101 the positions are relative to lower bound LOW, where HIGH is the
10102 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
10103 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 10104 assign_aggregate. */
52ce6436
PH
10105static void
10106aggregate_assign_positional (struct value *container,
10107 struct value *lhs, struct expression *exp,
10108 int *pos, LONGEST *indices, int *num_indices,
10109 int max_indices, LONGEST low, LONGEST high)
10110{
10111 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
10112
10113 if (ind - 1 == high)
e1d5a0d2 10114 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
10115 if (ind <= high)
10116 {
10117 add_component_interval (ind, ind, indices, num_indices, max_indices);
10118 *pos += 3;
10119 assign_component (container, lhs, ind, exp, pos);
10120 }
10121 else
10122 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10123}
10124
10125/* Assign into the components of LHS indexed by the OP_CHOICES
10126 construct at *POS, updating *POS past the construct, given that
10127 the allowable indices are LOW..HIGH. Record the indices assigned
10128 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 10129 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
10130static void
10131aggregate_assign_from_choices (struct value *container,
10132 struct value *lhs, struct expression *exp,
10133 int *pos, LONGEST *indices, int *num_indices,
10134 int max_indices, LONGEST low, LONGEST high)
10135{
10136 int j;
10137 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
10138 int choice_pos, expr_pc;
10139 int is_array = ada_is_direct_array_type (value_type (lhs));
10140
10141 choice_pos = *pos += 3;
10142
10143 for (j = 0; j < n_choices; j += 1)
10144 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10145 expr_pc = *pos;
10146 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10147
10148 for (j = 0; j < n_choices; j += 1)
10149 {
10150 LONGEST lower, upper;
10151 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 10152
52ce6436
PH
10153 if (op == OP_DISCRETE_RANGE)
10154 {
10155 choice_pos += 1;
10156 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
10157 EVAL_NORMAL));
10158 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
10159 EVAL_NORMAL));
10160 }
10161 else if (is_array)
10162 {
10163 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
10164 EVAL_NORMAL));
10165 upper = lower;
10166 }
10167 else
10168 {
10169 int ind;
0d5cff50 10170 const char *name;
5b4ee69b 10171
52ce6436
PH
10172 switch (op)
10173 {
10174 case OP_NAME:
10175 name = &exp->elts[choice_pos + 2].string;
10176 break;
10177 case OP_VAR_VALUE:
10178 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
10179 break;
10180 default:
10181 error (_("Invalid record component association."));
10182 }
10183 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
10184 ind = 0;
10185 if (! find_struct_field (name, value_type (lhs), 0,
10186 NULL, NULL, NULL, NULL, &ind))
10187 error (_("Unknown component name: %s."), name);
10188 lower = upper = ind;
10189 }
10190
10191 if (lower <= upper && (lower < low || upper > high))
10192 error (_("Index in component association out of bounds."));
10193
10194 add_component_interval (lower, upper, indices, num_indices,
10195 max_indices);
10196 while (lower <= upper)
10197 {
10198 int pos1;
5b4ee69b 10199
52ce6436
PH
10200 pos1 = expr_pc;
10201 assign_component (container, lhs, lower, exp, &pos1);
10202 lower += 1;
10203 }
10204 }
10205}
10206
10207/* Assign the value of the expression in the OP_OTHERS construct in
10208 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
10209 have not been previously assigned. The index intervals already assigned
10210 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 10211 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
10212static void
10213aggregate_assign_others (struct value *container,
10214 struct value *lhs, struct expression *exp,
10215 int *pos, LONGEST *indices, int num_indices,
10216 LONGEST low, LONGEST high)
10217{
10218 int i;
5ce64950 10219 int expr_pc = *pos + 1;
52ce6436
PH
10220
10221 for (i = 0; i < num_indices - 2; i += 2)
10222 {
10223 LONGEST ind;
5b4ee69b 10224
52ce6436
PH
10225 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
10226 {
5ce64950 10227 int localpos;
5b4ee69b 10228
5ce64950
MS
10229 localpos = expr_pc;
10230 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
10231 }
10232 }
10233 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10234}
10235
10236/* Add the interval [LOW .. HIGH] to the sorted set of intervals
10237 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
10238 modifying *SIZE as needed. It is an error if *SIZE exceeds
10239 MAX_SIZE. The resulting intervals do not overlap. */
10240static void
10241add_component_interval (LONGEST low, LONGEST high,
10242 LONGEST* indices, int *size, int max_size)
10243{
10244 int i, j;
5b4ee69b 10245
52ce6436
PH
10246 for (i = 0; i < *size; i += 2) {
10247 if (high >= indices[i] && low <= indices[i + 1])
10248 {
10249 int kh;
5b4ee69b 10250
52ce6436
PH
10251 for (kh = i + 2; kh < *size; kh += 2)
10252 if (high < indices[kh])
10253 break;
10254 if (low < indices[i])
10255 indices[i] = low;
10256 indices[i + 1] = indices[kh - 1];
10257 if (high > indices[i + 1])
10258 indices[i + 1] = high;
10259 memcpy (indices + i + 2, indices + kh, *size - kh);
10260 *size -= kh - i - 2;
10261 return;
10262 }
10263 else if (high < indices[i])
10264 break;
10265 }
10266
10267 if (*size == max_size)
10268 error (_("Internal error: miscounted aggregate components."));
10269 *size += 2;
10270 for (j = *size-1; j >= i+2; j -= 1)
10271 indices[j] = indices[j - 2];
10272 indices[i] = low;
10273 indices[i + 1] = high;
10274}
10275
6e48bd2c
JB
10276/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
10277 is different. */
10278
10279static struct value *
b7e22850 10280ada_value_cast (struct type *type, struct value *arg2)
6e48bd2c
JB
10281{
10282 if (type == ada_check_typedef (value_type (arg2)))
10283 return arg2;
10284
10285 if (ada_is_fixed_point_type (type))
95f39a5b 10286 return cast_to_fixed (type, arg2);
6e48bd2c
JB
10287
10288 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10289 return cast_from_fixed (type, arg2);
6e48bd2c
JB
10290
10291 return value_cast (type, arg2);
10292}
10293
284614f0
JB
10294/* Evaluating Ada expressions, and printing their result.
10295 ------------------------------------------------------
10296
21649b50
JB
10297 1. Introduction:
10298 ----------------
10299
284614f0
JB
10300 We usually evaluate an Ada expression in order to print its value.
10301 We also evaluate an expression in order to print its type, which
10302 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
10303 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
10304 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
10305 the evaluation compared to the EVAL_NORMAL, but is otherwise very
10306 similar.
10307
10308 Evaluating expressions is a little more complicated for Ada entities
10309 than it is for entities in languages such as C. The main reason for
10310 this is that Ada provides types whose definition might be dynamic.
10311 One example of such types is variant records. Or another example
10312 would be an array whose bounds can only be known at run time.
10313
10314 The following description is a general guide as to what should be
10315 done (and what should NOT be done) in order to evaluate an expression
10316 involving such types, and when. This does not cover how the semantic
10317 information is encoded by GNAT as this is covered separatly. For the
10318 document used as the reference for the GNAT encoding, see exp_dbug.ads
10319 in the GNAT sources.
10320
10321 Ideally, we should embed each part of this description next to its
10322 associated code. Unfortunately, the amount of code is so vast right
10323 now that it's hard to see whether the code handling a particular
10324 situation might be duplicated or not. One day, when the code is
10325 cleaned up, this guide might become redundant with the comments
10326 inserted in the code, and we might want to remove it.
10327
21649b50
JB
10328 2. ``Fixing'' an Entity, the Simple Case:
10329 -----------------------------------------
10330
284614f0
JB
10331 When evaluating Ada expressions, the tricky issue is that they may
10332 reference entities whose type contents and size are not statically
10333 known. Consider for instance a variant record:
10334
10335 type Rec (Empty : Boolean := True) is record
10336 case Empty is
10337 when True => null;
10338 when False => Value : Integer;
10339 end case;
10340 end record;
10341 Yes : Rec := (Empty => False, Value => 1);
10342 No : Rec := (empty => True);
10343
10344 The size and contents of that record depends on the value of the
10345 descriminant (Rec.Empty). At this point, neither the debugging
10346 information nor the associated type structure in GDB are able to
10347 express such dynamic types. So what the debugger does is to create
10348 "fixed" versions of the type that applies to the specific object.
10349 We also informally refer to this opperation as "fixing" an object,
10350 which means creating its associated fixed type.
10351
10352 Example: when printing the value of variable "Yes" above, its fixed
10353 type would look like this:
10354
10355 type Rec is record
10356 Empty : Boolean;
10357 Value : Integer;
10358 end record;
10359
10360 On the other hand, if we printed the value of "No", its fixed type
10361 would become:
10362
10363 type Rec is record
10364 Empty : Boolean;
10365 end record;
10366
10367 Things become a little more complicated when trying to fix an entity
10368 with a dynamic type that directly contains another dynamic type,
10369 such as an array of variant records, for instance. There are
10370 two possible cases: Arrays, and records.
10371
21649b50
JB
10372 3. ``Fixing'' Arrays:
10373 ---------------------
10374
10375 The type structure in GDB describes an array in terms of its bounds,
10376 and the type of its elements. By design, all elements in the array
10377 have the same type and we cannot represent an array of variant elements
10378 using the current type structure in GDB. When fixing an array,
10379 we cannot fix the array element, as we would potentially need one
10380 fixed type per element of the array. As a result, the best we can do
10381 when fixing an array is to produce an array whose bounds and size
10382 are correct (allowing us to read it from memory), but without having
10383 touched its element type. Fixing each element will be done later,
10384 when (if) necessary.
10385
10386 Arrays are a little simpler to handle than records, because the same
10387 amount of memory is allocated for each element of the array, even if
1b536f04 10388 the amount of space actually used by each element differs from element
21649b50 10389 to element. Consider for instance the following array of type Rec:
284614f0
JB
10390
10391 type Rec_Array is array (1 .. 2) of Rec;
10392
1b536f04
JB
10393 The actual amount of memory occupied by each element might be different
10394 from element to element, depending on the value of their discriminant.
21649b50 10395 But the amount of space reserved for each element in the array remains
1b536f04 10396 fixed regardless. So we simply need to compute that size using
21649b50
JB
10397 the debugging information available, from which we can then determine
10398 the array size (we multiply the number of elements of the array by
10399 the size of each element).
10400
10401 The simplest case is when we have an array of a constrained element
10402 type. For instance, consider the following type declarations:
10403
10404 type Bounded_String (Max_Size : Integer) is
10405 Length : Integer;
10406 Buffer : String (1 .. Max_Size);
10407 end record;
10408 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10409
10410 In this case, the compiler describes the array as an array of
10411 variable-size elements (identified by its XVS suffix) for which
10412 the size can be read in the parallel XVZ variable.
10413
10414 In the case of an array of an unconstrained element type, the compiler
10415 wraps the array element inside a private PAD type. This type should not
10416 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
10417 that we also use the adjective "aligner" in our code to designate
10418 these wrapper types.
10419
1b536f04 10420 In some cases, the size allocated for each element is statically
21649b50
JB
10421 known. In that case, the PAD type already has the correct size,
10422 and the array element should remain unfixed.
10423
10424 But there are cases when this size is not statically known.
10425 For instance, assuming that "Five" is an integer variable:
284614f0
JB
10426
10427 type Dynamic is array (1 .. Five) of Integer;
10428 type Wrapper (Has_Length : Boolean := False) is record
10429 Data : Dynamic;
10430 case Has_Length is
10431 when True => Length : Integer;
10432 when False => null;
10433 end case;
10434 end record;
10435 type Wrapper_Array is array (1 .. 2) of Wrapper;
10436
10437 Hello : Wrapper_Array := (others => (Has_Length => True,
10438 Data => (others => 17),
10439 Length => 1));
10440
10441
10442 The debugging info would describe variable Hello as being an
10443 array of a PAD type. The size of that PAD type is not statically
10444 known, but can be determined using a parallel XVZ variable.
10445 In that case, a copy of the PAD type with the correct size should
10446 be used for the fixed array.
10447
21649b50
JB
10448 3. ``Fixing'' record type objects:
10449 ----------------------------------
10450
10451 Things are slightly different from arrays in the case of dynamic
284614f0
JB
10452 record types. In this case, in order to compute the associated
10453 fixed type, we need to determine the size and offset of each of
10454 its components. This, in turn, requires us to compute the fixed
10455 type of each of these components.
10456
10457 Consider for instance the example:
10458
10459 type Bounded_String (Max_Size : Natural) is record
10460 Str : String (1 .. Max_Size);
10461 Length : Natural;
10462 end record;
10463 My_String : Bounded_String (Max_Size => 10);
10464
10465 In that case, the position of field "Length" depends on the size
10466 of field Str, which itself depends on the value of the Max_Size
21649b50 10467 discriminant. In order to fix the type of variable My_String,
284614f0
JB
10468 we need to fix the type of field Str. Therefore, fixing a variant
10469 record requires us to fix each of its components.
10470
10471 However, if a component does not have a dynamic size, the component
10472 should not be fixed. In particular, fields that use a PAD type
10473 should not fixed. Here is an example where this might happen
10474 (assuming type Rec above):
10475
10476 type Container (Big : Boolean) is record
10477 First : Rec;
10478 After : Integer;
10479 case Big is
10480 when True => Another : Integer;
10481 when False => null;
10482 end case;
10483 end record;
10484 My_Container : Container := (Big => False,
10485 First => (Empty => True),
10486 After => 42);
10487
10488 In that example, the compiler creates a PAD type for component First,
10489 whose size is constant, and then positions the component After just
10490 right after it. The offset of component After is therefore constant
10491 in this case.
10492
10493 The debugger computes the position of each field based on an algorithm
10494 that uses, among other things, the actual position and size of the field
21649b50
JB
10495 preceding it. Let's now imagine that the user is trying to print
10496 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
10497 end up computing the offset of field After based on the size of the
10498 fixed version of field First. And since in our example First has
10499 only one actual field, the size of the fixed type is actually smaller
10500 than the amount of space allocated to that field, and thus we would
10501 compute the wrong offset of field After.
10502
21649b50
JB
10503 To make things more complicated, we need to watch out for dynamic
10504 components of variant records (identified by the ___XVL suffix in
10505 the component name). Even if the target type is a PAD type, the size
10506 of that type might not be statically known. So the PAD type needs
10507 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10508 we might end up with the wrong size for our component. This can be
10509 observed with the following type declarations:
284614f0
JB
10510
10511 type Octal is new Integer range 0 .. 7;
10512 type Octal_Array is array (Positive range <>) of Octal;
10513 pragma Pack (Octal_Array);
10514
10515 type Octal_Buffer (Size : Positive) is record
10516 Buffer : Octal_Array (1 .. Size);
10517 Length : Integer;
10518 end record;
10519
10520 In that case, Buffer is a PAD type whose size is unset and needs
10521 to be computed by fixing the unwrapped type.
10522
21649b50
JB
10523 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10524 ----------------------------------------------------------
10525
10526 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
10527 thus far, be actually fixed?
10528
10529 The answer is: Only when referencing that element. For instance
10530 when selecting one component of a record, this specific component
10531 should be fixed at that point in time. Or when printing the value
10532 of a record, each component should be fixed before its value gets
10533 printed. Similarly for arrays, the element of the array should be
10534 fixed when printing each element of the array, or when extracting
10535 one element out of that array. On the other hand, fixing should
10536 not be performed on the elements when taking a slice of an array!
10537
31432a67 10538 Note that one of the side effects of miscomputing the offset and
284614f0
JB
10539 size of each field is that we end up also miscomputing the size
10540 of the containing type. This can have adverse results when computing
10541 the value of an entity. GDB fetches the value of an entity based
10542 on the size of its type, and thus a wrong size causes GDB to fetch
10543 the wrong amount of memory. In the case where the computed size is
10544 too small, GDB fetches too little data to print the value of our
31432a67 10545 entity. Results in this case are unpredictable, as we usually read
284614f0
JB
10546 past the buffer containing the data =:-o. */
10547
ced9779b
JB
10548/* Evaluate a subexpression of EXP, at index *POS, and return a value
10549 for that subexpression cast to TO_TYPE. Advance *POS over the
10550 subexpression. */
10551
10552static value *
10553ada_evaluate_subexp_for_cast (expression *exp, int *pos,
10554 enum noside noside, struct type *to_type)
10555{
10556 int pc = *pos;
10557
10558 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
10559 || exp->elts[pc].opcode == OP_VAR_VALUE)
10560 {
10561 (*pos) += 4;
10562
10563 value *val;
10564 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
10565 {
10566 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10567 return value_zero (to_type, not_lval);
10568
10569 val = evaluate_var_msym_value (noside,
10570 exp->elts[pc + 1].objfile,
10571 exp->elts[pc + 2].msymbol);
10572 }
10573 else
10574 val = evaluate_var_value (noside,
10575 exp->elts[pc + 1].block,
10576 exp->elts[pc + 2].symbol);
10577
10578 if (noside == EVAL_SKIP)
10579 return eval_skip_value (exp);
10580
10581 val = ada_value_cast (to_type, val);
10582
10583 /* Follow the Ada language semantics that do not allow taking
10584 an address of the result of a cast (view conversion in Ada). */
10585 if (VALUE_LVAL (val) == lval_memory)
10586 {
10587 if (value_lazy (val))
10588 value_fetch_lazy (val);
10589 VALUE_LVAL (val) = not_lval;
10590 }
10591 return val;
10592 }
10593
10594 value *val = evaluate_subexp (to_type, exp, pos, noside);
10595 if (noside == EVAL_SKIP)
10596 return eval_skip_value (exp);
10597 return ada_value_cast (to_type, val);
10598}
10599
284614f0
JB
10600/* Implement the evaluate_exp routine in the exp_descriptor structure
10601 for the Ada language. */
10602
52ce6436 10603static struct value *
ebf56fd3 10604ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 10605 int *pos, enum noside noside)
14f9c5c9
AS
10606{
10607 enum exp_opcode op;
b5385fc0 10608 int tem;
14f9c5c9 10609 int pc;
5ec18f2b 10610 int preeval_pos;
14f9c5c9
AS
10611 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10612 struct type *type;
52ce6436 10613 int nargs, oplen;
d2e4a39e 10614 struct value **argvec;
14f9c5c9 10615
d2e4a39e
AS
10616 pc = *pos;
10617 *pos += 1;
14f9c5c9
AS
10618 op = exp->elts[pc].opcode;
10619
d2e4a39e 10620 switch (op)
14f9c5c9
AS
10621 {
10622 default:
10623 *pos -= 1;
6e48bd2c 10624 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10625
10626 if (noside == EVAL_NORMAL)
10627 arg1 = unwrap_value (arg1);
6e48bd2c 10628
edd079d9 10629 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
6e48bd2c
JB
10630 then we need to perform the conversion manually, because
10631 evaluate_subexp_standard doesn't do it. This conversion is
10632 necessary in Ada because the different kinds of float/fixed
10633 types in Ada have different representations.
10634
10635 Similarly, we need to perform the conversion from OP_LONG
10636 ourselves. */
edd079d9 10637 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
b7e22850 10638 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10639
10640 return arg1;
4c4b4cd2
PH
10641
10642 case OP_STRING:
10643 {
76a01679 10644 struct value *result;
5b4ee69b 10645
76a01679
JB
10646 *pos -= 1;
10647 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10648 /* The result type will have code OP_STRING, bashed there from
10649 OP_ARRAY. Bash it back. */
df407dfe
AC
10650 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10651 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 10652 return result;
4c4b4cd2 10653 }
14f9c5c9
AS
10654
10655 case UNOP_CAST:
10656 (*pos) += 2;
10657 type = exp->elts[pc + 1].type;
ced9779b 10658 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10659
4c4b4cd2
PH
10660 case UNOP_QUAL:
10661 (*pos) += 2;
10662 type = exp->elts[pc + 1].type;
10663 return ada_evaluate_subexp (type, exp, pos, noside);
10664
14f9c5c9
AS
10665 case BINOP_ASSIGN:
10666 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
10667 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10668 {
10669 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10670 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10671 return arg1;
10672 return ada_value_assign (arg1, arg1);
10673 }
003f3813
JB
10674 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10675 except if the lhs of our assignment is a convenience variable.
10676 In the case of assigning to a convenience variable, the lhs
10677 should be exactly the result of the evaluation of the rhs. */
10678 type = value_type (arg1);
10679 if (VALUE_LVAL (arg1) == lval_internalvar)
10680 type = NULL;
10681 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10682 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10683 return arg1;
df407dfe
AC
10684 if (ada_is_fixed_point_type (value_type (arg1)))
10685 arg2 = cast_to_fixed (value_type (arg1), arg2);
10686 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 10687 error
323e0a4a 10688 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 10689 else
df407dfe 10690 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10691 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10692
10693 case BINOP_ADD:
10694 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10695 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10696 if (noside == EVAL_SKIP)
4c4b4cd2 10697 goto nosideret;
2ac8a782
JB
10698 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10699 return (value_from_longest
10700 (value_type (arg1),
10701 value_as_long (arg1) + value_as_long (arg2)));
c40cc657
JB
10702 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10703 return (value_from_longest
10704 (value_type (arg2),
10705 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
10706 if ((ada_is_fixed_point_type (value_type (arg1))
10707 || ada_is_fixed_point_type (value_type (arg2)))
10708 && value_type (arg1) != value_type (arg2))
323e0a4a 10709 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10710 /* Do the addition, and cast the result to the type of the first
10711 argument. We cannot cast the result to a reference type, so if
10712 ARG1 is a reference type, find its underlying type. */
10713 type = value_type (arg1);
10714 while (TYPE_CODE (type) == TYPE_CODE_REF)
10715 type = TYPE_TARGET_TYPE (type);
f44316fa 10716 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10717 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10718
10719 case BINOP_SUB:
10720 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10721 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10722 if (noside == EVAL_SKIP)
4c4b4cd2 10723 goto nosideret;
2ac8a782
JB
10724 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10725 return (value_from_longest
10726 (value_type (arg1),
10727 value_as_long (arg1) - value_as_long (arg2)));
c40cc657
JB
10728 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10729 return (value_from_longest
10730 (value_type (arg2),
10731 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
10732 if ((ada_is_fixed_point_type (value_type (arg1))
10733 || ada_is_fixed_point_type (value_type (arg2)))
10734 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10735 error (_("Operands of fixed-point subtraction "
10736 "must have the same type"));
b7789565
JB
10737 /* Do the substraction, and cast the result to the type of the first
10738 argument. We cannot cast the result to a reference type, so if
10739 ARG1 is a reference type, find its underlying type. */
10740 type = value_type (arg1);
10741 while (TYPE_CODE (type) == TYPE_CODE_REF)
10742 type = TYPE_TARGET_TYPE (type);
f44316fa 10743 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10744 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10745
10746 case BINOP_MUL:
10747 case BINOP_DIV:
e1578042
JB
10748 case BINOP_REM:
10749 case BINOP_MOD:
14f9c5c9
AS
10750 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10751 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10752 if (noside == EVAL_SKIP)
4c4b4cd2 10753 goto nosideret;
e1578042 10754 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10755 {
10756 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10757 return value_zero (value_type (arg1), not_lval);
10758 }
14f9c5c9 10759 else
4c4b4cd2 10760 {
a53b7a21 10761 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 10762 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 10763 arg1 = cast_from_fixed (type, arg1);
df407dfe 10764 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10765 arg2 = cast_from_fixed (type, arg2);
f44316fa 10766 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10767 return ada_value_binop (arg1, arg2, op);
10768 }
10769
4c4b4cd2
PH
10770 case BINOP_EQUAL:
10771 case BINOP_NOTEQUAL:
14f9c5c9 10772 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10773 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10774 if (noside == EVAL_SKIP)
76a01679 10775 goto nosideret;
4c4b4cd2 10776 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10777 tem = 0;
4c4b4cd2 10778 else
f44316fa
UW
10779 {
10780 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10781 tem = ada_value_equal (arg1, arg2);
10782 }
4c4b4cd2 10783 if (op == BINOP_NOTEQUAL)
76a01679 10784 tem = !tem;
fbb06eb1
UW
10785 type = language_bool_type (exp->language_defn, exp->gdbarch);
10786 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10787
10788 case UNOP_NEG:
10789 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10790 if (noside == EVAL_SKIP)
10791 goto nosideret;
df407dfe
AC
10792 else if (ada_is_fixed_point_type (value_type (arg1)))
10793 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10794 else
f44316fa
UW
10795 {
10796 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10797 return value_neg (arg1);
10798 }
4c4b4cd2 10799
2330c6c6
JB
10800 case BINOP_LOGICAL_AND:
10801 case BINOP_LOGICAL_OR:
10802 case UNOP_LOGICAL_NOT:
000d5124
JB
10803 {
10804 struct value *val;
10805
10806 *pos -= 1;
10807 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10808 type = language_bool_type (exp->language_defn, exp->gdbarch);
10809 return value_cast (type, val);
000d5124 10810 }
2330c6c6
JB
10811
10812 case BINOP_BITWISE_AND:
10813 case BINOP_BITWISE_IOR:
10814 case BINOP_BITWISE_XOR:
000d5124
JB
10815 {
10816 struct value *val;
10817
10818 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10819 *pos = pc;
10820 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10821
10822 return value_cast (value_type (arg1), val);
10823 }
2330c6c6 10824
14f9c5c9
AS
10825 case OP_VAR_VALUE:
10826 *pos -= 1;
6799def4 10827
14f9c5c9 10828 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10829 {
10830 *pos += 4;
10831 goto nosideret;
10832 }
da5c522f
JB
10833
10834 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10835 /* Only encountered when an unresolved symbol occurs in a
10836 context other than a function call, in which case, it is
52ce6436 10837 invalid. */
323e0a4a 10838 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 10839 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
da5c522f
JB
10840
10841 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10842 {
0c1f74cf 10843 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10844 /* Check to see if this is a tagged type. We also need to handle
10845 the case where the type is a reference to a tagged type, but
10846 we have to be careful to exclude pointers to tagged types.
10847 The latter should be shown as usual (as a pointer), whereas
10848 a reference should mostly be transparent to the user. */
10849 if (ada_is_tagged_type (type, 0)
023db19c 10850 || (TYPE_CODE (type) == TYPE_CODE_REF
31dbc1c5 10851 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10852 {
10853 /* Tagged types are a little special in the fact that the real
10854 type is dynamic and can only be determined by inspecting the
10855 object's tag. This means that we need to get the object's
10856 value first (EVAL_NORMAL) and then extract the actual object
10857 type from its tag.
10858
10859 Note that we cannot skip the final step where we extract
10860 the object type from its tag, because the EVAL_NORMAL phase
10861 results in dynamic components being resolved into fixed ones.
10862 This can cause problems when trying to print the type
10863 description of tagged types whose parent has a dynamic size:
10864 We use the type name of the "_parent" component in order
10865 to print the name of the ancestor type in the type description.
10866 If that component had a dynamic size, the resolution into
10867 a fixed type would result in the loss of that type name,
10868 thus preventing us from printing the name of the ancestor
10869 type in the type description. */
10870 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10871
10872 if (TYPE_CODE (type) != TYPE_CODE_REF)
10873 {
10874 struct type *actual_type;
10875
10876 actual_type = type_from_tag (ada_value_tag (arg1));
10877 if (actual_type == NULL)
10878 /* If, for some reason, we were unable to determine
10879 the actual type from the tag, then use the static
10880 approximation that we just computed as a fallback.
10881 This can happen if the debugging information is
10882 incomplete, for instance. */
10883 actual_type = type;
10884 return value_zero (actual_type, not_lval);
10885 }
10886 else
10887 {
10888 /* In the case of a ref, ada_coerce_ref takes care
10889 of determining the actual type. But the evaluation
10890 should return a ref as it should be valid to ask
10891 for its address; so rebuild a ref after coerce. */
10892 arg1 = ada_coerce_ref (arg1);
a65cfae5 10893 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10894 }
10895 }
0c1f74cf 10896
84754697
JB
10897 /* Records and unions for which GNAT encodings have been
10898 generated need to be statically fixed as well.
10899 Otherwise, non-static fixing produces a type where
10900 all dynamic properties are removed, which prevents "ptype"
10901 from being able to completely describe the type.
10902 For instance, a case statement in a variant record would be
10903 replaced by the relevant components based on the actual
10904 value of the discriminants. */
10905 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10906 && dynamic_template_type (type) != NULL)
10907 || (TYPE_CODE (type) == TYPE_CODE_UNION
10908 && ada_find_parallel_type (type, "___XVU") != NULL))
10909 {
10910 *pos += 4;
10911 return value_zero (to_static_fixed_type (type), not_lval);
10912 }
4c4b4cd2 10913 }
da5c522f
JB
10914
10915 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10916 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10917
10918 case OP_FUNCALL:
10919 (*pos) += 2;
10920
10921 /* Allocate arg vector, including space for the function to be
10922 called in argvec[0] and a terminating NULL. */
10923 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10924 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10925
10926 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10927 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10928 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
10929 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10930 else
10931 {
10932 for (tem = 0; tem <= nargs; tem += 1)
10933 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10934 argvec[tem] = 0;
10935
10936 if (noside == EVAL_SKIP)
10937 goto nosideret;
10938 }
10939
ad82864c
JB
10940 if (ada_is_constrained_packed_array_type
10941 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10942 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
10943 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10944 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10945 /* This is a packed array that has already been fixed, and
10946 therefore already coerced to a simple array. Nothing further
10947 to do. */
10948 ;
e6c2c623
PMR
10949 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF)
10950 {
10951 /* Make sure we dereference references so that all the code below
10952 feels like it's really handling the referenced value. Wrapping
10953 types (for alignment) may be there, so make sure we strip them as
10954 well. */
10955 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10956 }
10957 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10958 && VALUE_LVAL (argvec[0]) == lval_memory)
10959 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10960
df407dfe 10961 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10962
10963 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10964 them. So, if this is an array typedef (encoding use for array
10965 access types encoded as fat pointers), strip it now. */
720d1a40
JB
10966 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10967 type = ada_typedef_target_type (type);
10968
4c4b4cd2
PH
10969 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10970 {
61ee279c 10971 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
10972 {
10973 case TYPE_CODE_FUNC:
61ee279c 10974 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10975 break;
10976 case TYPE_CODE_ARRAY:
10977 break;
10978 case TYPE_CODE_STRUCT:
10979 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10980 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10981 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10982 break;
10983 default:
323e0a4a 10984 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10985 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10986 break;
10987 }
10988 }
10989
10990 switch (TYPE_CODE (type))
10991 {
10992 case TYPE_CODE_FUNC:
10993 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 10994 {
7022349d
PA
10995 if (TYPE_TARGET_TYPE (type) == NULL)
10996 error_call_unknown_return_type (NULL);
10997 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 10998 }
7022349d 10999 return call_function_by_hand (argvec[0], NULL, nargs, argvec + 1);
c8ea1972
PH
11000 case TYPE_CODE_INTERNAL_FUNCTION:
11001 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11002 /* We don't know anything about what the internal
11003 function might return, but we have to return
11004 something. */
11005 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11006 not_lval);
11007 else
11008 return call_internal_function (exp->gdbarch, exp->language_defn,
11009 argvec[0], nargs, argvec + 1);
11010
4c4b4cd2
PH
11011 case TYPE_CODE_STRUCT:
11012 {
11013 int arity;
11014
4c4b4cd2
PH
11015 arity = ada_array_arity (type);
11016 type = ada_array_element_type (type, nargs);
11017 if (type == NULL)
323e0a4a 11018 error (_("cannot subscript or call a record"));
4c4b4cd2 11019 if (arity != nargs)
323e0a4a 11020 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 11021 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 11022 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
11023 return
11024 unwrap_value (ada_value_subscript
11025 (argvec[0], nargs, argvec + 1));
11026 }
11027 case TYPE_CODE_ARRAY:
11028 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11029 {
11030 type = ada_array_element_type (type, nargs);
11031 if (type == NULL)
323e0a4a 11032 error (_("element type of array unknown"));
4c4b4cd2 11033 else
0a07e705 11034 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
11035 }
11036 return
11037 unwrap_value (ada_value_subscript
11038 (ada_coerce_to_simple_array (argvec[0]),
11039 nargs, argvec + 1));
11040 case TYPE_CODE_PTR: /* Pointer to array */
4c4b4cd2
PH
11041 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11042 {
deede10c 11043 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
4c4b4cd2
PH
11044 type = ada_array_element_type (type, nargs);
11045 if (type == NULL)
323e0a4a 11046 error (_("element type of array unknown"));
4c4b4cd2 11047 else
0a07e705 11048 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
11049 }
11050 return
deede10c
JB
11051 unwrap_value (ada_value_ptr_subscript (argvec[0],
11052 nargs, argvec + 1));
4c4b4cd2
PH
11053
11054 default:
e1d5a0d2
PH
11055 error (_("Attempt to index or call something other than an "
11056 "array or function"));
4c4b4cd2
PH
11057 }
11058
11059 case TERNOP_SLICE:
11060 {
11061 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11062 struct value *low_bound_val =
11063 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
11064 struct value *high_bound_val =
11065 evaluate_subexp (NULL_TYPE, exp, pos, noside);
11066 LONGEST low_bound;
11067 LONGEST high_bound;
5b4ee69b 11068
994b9211
AC
11069 low_bound_val = coerce_ref (low_bound_val);
11070 high_bound_val = coerce_ref (high_bound_val);
aa715135
JG
11071 low_bound = value_as_long (low_bound_val);
11072 high_bound = value_as_long (high_bound_val);
963a6417 11073
4c4b4cd2
PH
11074 if (noside == EVAL_SKIP)
11075 goto nosideret;
11076
4c4b4cd2
PH
11077 /* If this is a reference to an aligner type, then remove all
11078 the aligners. */
df407dfe
AC
11079 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
11080 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
11081 TYPE_TARGET_TYPE (value_type (array)) =
11082 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 11083
ad82864c 11084 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 11085 error (_("cannot slice a packed array"));
4c4b4cd2
PH
11086
11087 /* If this is a reference to an array or an array lvalue,
11088 convert to a pointer. */
df407dfe
AC
11089 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
11090 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
11091 && VALUE_LVAL (array) == lval_memory))
11092 array = value_addr (array);
11093
1265e4aa 11094 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 11095 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 11096 (value_type (array))))
0b5d8877 11097 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
11098
11099 array = ada_coerce_to_simple_array_ptr (array);
11100
714e53ab
PH
11101 /* If we have more than one level of pointer indirection,
11102 dereference the value until we get only one level. */
df407dfe
AC
11103 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
11104 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
11105 == TYPE_CODE_PTR))
11106 array = value_ind (array);
11107
11108 /* Make sure we really do have an array type before going further,
11109 to avoid a SEGV when trying to get the index type or the target
11110 type later down the road if the debug info generated by
11111 the compiler is incorrect or incomplete. */
df407dfe 11112 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 11113 error (_("cannot take slice of non-array"));
714e53ab 11114
828292f2
JB
11115 if (TYPE_CODE (ada_check_typedef (value_type (array)))
11116 == TYPE_CODE_PTR)
4c4b4cd2 11117 {
828292f2
JB
11118 struct type *type0 = ada_check_typedef (value_type (array));
11119
0b5d8877 11120 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 11121 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
11122 else
11123 {
11124 struct type *arr_type0 =
828292f2 11125 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 11126
f5938064
JG
11127 return ada_value_slice_from_ptr (array, arr_type0,
11128 longest_to_int (low_bound),
11129 longest_to_int (high_bound));
4c4b4cd2
PH
11130 }
11131 }
11132 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
11133 return array;
11134 else if (high_bound < low_bound)
df407dfe 11135 return empty_array (value_type (array), low_bound);
4c4b4cd2 11136 else
529cad9c
PH
11137 return ada_value_slice (array, longest_to_int (low_bound),
11138 longest_to_int (high_bound));
4c4b4cd2 11139 }
14f9c5c9 11140
4c4b4cd2
PH
11141 case UNOP_IN_RANGE:
11142 (*pos) += 2;
11143 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 11144 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 11145
14f9c5c9 11146 if (noside == EVAL_SKIP)
4c4b4cd2 11147 goto nosideret;
14f9c5c9 11148
4c4b4cd2
PH
11149 switch (TYPE_CODE (type))
11150 {
11151 default:
e1d5a0d2
PH
11152 lim_warning (_("Membership test incompletely implemented; "
11153 "always returns true"));
fbb06eb1
UW
11154 type = language_bool_type (exp->language_defn, exp->gdbarch);
11155 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
11156
11157 case TYPE_CODE_RANGE:
030b4912
UW
11158 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
11159 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
11160 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11161 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
11162 type = language_bool_type (exp->language_defn, exp->gdbarch);
11163 return
11164 value_from_longest (type,
4c4b4cd2
PH
11165 (value_less (arg1, arg3)
11166 || value_equal (arg1, arg3))
11167 && (value_less (arg2, arg1)
11168 || value_equal (arg2, arg1)));
11169 }
11170
11171 case BINOP_IN_BOUNDS:
14f9c5c9 11172 (*pos) += 2;
4c4b4cd2
PH
11173 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11174 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 11175
4c4b4cd2
PH
11176 if (noside == EVAL_SKIP)
11177 goto nosideret;
14f9c5c9 11178
4c4b4cd2 11179 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
11180 {
11181 type = language_bool_type (exp->language_defn, exp->gdbarch);
11182 return value_zero (type, not_lval);
11183 }
14f9c5c9 11184
4c4b4cd2 11185 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 11186
1eea4ebd
UW
11187 type = ada_index_type (value_type (arg2), tem, "range");
11188 if (!type)
11189 type = value_type (arg1);
14f9c5c9 11190
1eea4ebd
UW
11191 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
11192 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 11193
f44316fa
UW
11194 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11195 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 11196 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 11197 return
fbb06eb1 11198 value_from_longest (type,
4c4b4cd2
PH
11199 (value_less (arg1, arg3)
11200 || value_equal (arg1, arg3))
11201 && (value_less (arg2, arg1)
11202 || value_equal (arg2, arg1)));
11203
11204 case TERNOP_IN_RANGE:
11205 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11206 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11207 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11208
11209 if (noside == EVAL_SKIP)
11210 goto nosideret;
11211
f44316fa
UW
11212 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11213 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 11214 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 11215 return
fbb06eb1 11216 value_from_longest (type,
4c4b4cd2
PH
11217 (value_less (arg1, arg3)
11218 || value_equal (arg1, arg3))
11219 && (value_less (arg2, arg1)
11220 || value_equal (arg2, arg1)));
11221
11222 case OP_ATR_FIRST:
11223 case OP_ATR_LAST:
11224 case OP_ATR_LENGTH:
11225 {
76a01679 11226 struct type *type_arg;
5b4ee69b 11227
76a01679
JB
11228 if (exp->elts[*pos].opcode == OP_TYPE)
11229 {
11230 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
11231 arg1 = NULL;
5bc23cb3 11232 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
11233 }
11234 else
11235 {
11236 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11237 type_arg = NULL;
11238 }
11239
11240 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 11241 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
11242 tem = longest_to_int (exp->elts[*pos + 2].longconst);
11243 *pos += 4;
11244
11245 if (noside == EVAL_SKIP)
11246 goto nosideret;
11247
11248 if (type_arg == NULL)
11249 {
11250 arg1 = ada_coerce_ref (arg1);
11251
ad82864c 11252 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
11253 arg1 = ada_coerce_to_simple_array (arg1);
11254
aa4fb036 11255 if (op == OP_ATR_LENGTH)
1eea4ebd 11256 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11257 else
11258 {
11259 type = ada_index_type (value_type (arg1), tem,
11260 ada_attribute_name (op));
11261 if (type == NULL)
11262 type = builtin_type (exp->gdbarch)->builtin_int;
11263 }
76a01679
JB
11264
11265 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 11266 return allocate_value (type);
76a01679
JB
11267
11268 switch (op)
11269 {
11270 default: /* Should never happen. */
323e0a4a 11271 error (_("unexpected attribute encountered"));
76a01679 11272 case OP_ATR_FIRST:
1eea4ebd
UW
11273 return value_from_longest
11274 (type, ada_array_bound (arg1, tem, 0));
76a01679 11275 case OP_ATR_LAST:
1eea4ebd
UW
11276 return value_from_longest
11277 (type, ada_array_bound (arg1, tem, 1));
76a01679 11278 case OP_ATR_LENGTH:
1eea4ebd
UW
11279 return value_from_longest
11280 (type, ada_array_length (arg1, tem));
76a01679
JB
11281 }
11282 }
11283 else if (discrete_type_p (type_arg))
11284 {
11285 struct type *range_type;
0d5cff50 11286 const char *name = ada_type_name (type_arg);
5b4ee69b 11287
76a01679
JB
11288 range_type = NULL;
11289 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 11290 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
11291 if (range_type == NULL)
11292 range_type = type_arg;
11293 switch (op)
11294 {
11295 default:
323e0a4a 11296 error (_("unexpected attribute encountered"));
76a01679 11297 case OP_ATR_FIRST:
690cc4eb 11298 return value_from_longest
43bbcdc2 11299 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 11300 case OP_ATR_LAST:
690cc4eb 11301 return value_from_longest
43bbcdc2 11302 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 11303 case OP_ATR_LENGTH:
323e0a4a 11304 error (_("the 'length attribute applies only to array types"));
76a01679
JB
11305 }
11306 }
11307 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 11308 error (_("unimplemented type attribute"));
76a01679
JB
11309 else
11310 {
11311 LONGEST low, high;
11312
ad82864c
JB
11313 if (ada_is_constrained_packed_array_type (type_arg))
11314 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 11315
aa4fb036 11316 if (op == OP_ATR_LENGTH)
1eea4ebd 11317 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11318 else
11319 {
11320 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
11321 if (type == NULL)
11322 type = builtin_type (exp->gdbarch)->builtin_int;
11323 }
1eea4ebd 11324
76a01679
JB
11325 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11326 return allocate_value (type);
11327
11328 switch (op)
11329 {
11330 default:
323e0a4a 11331 error (_("unexpected attribute encountered"));
76a01679 11332 case OP_ATR_FIRST:
1eea4ebd 11333 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
11334 return value_from_longest (type, low);
11335 case OP_ATR_LAST:
1eea4ebd 11336 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11337 return value_from_longest (type, high);
11338 case OP_ATR_LENGTH:
1eea4ebd
UW
11339 low = ada_array_bound_from_type (type_arg, tem, 0);
11340 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11341 return value_from_longest (type, high - low + 1);
11342 }
11343 }
14f9c5c9
AS
11344 }
11345
4c4b4cd2
PH
11346 case OP_ATR_TAG:
11347 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11348 if (noside == EVAL_SKIP)
76a01679 11349 goto nosideret;
4c4b4cd2
PH
11350
11351 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11352 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
11353
11354 return ada_value_tag (arg1);
11355
11356 case OP_ATR_MIN:
11357 case OP_ATR_MAX:
11358 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11359 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11360 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11361 if (noside == EVAL_SKIP)
76a01679 11362 goto nosideret;
d2e4a39e 11363 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11364 return value_zero (value_type (arg1), not_lval);
14f9c5c9 11365 else
f44316fa
UW
11366 {
11367 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11368 return value_binop (arg1, arg2,
11369 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
11370 }
14f9c5c9 11371
4c4b4cd2
PH
11372 case OP_ATR_MODULUS:
11373 {
31dedfee 11374 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 11375
5b4ee69b 11376 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
11377 if (noside == EVAL_SKIP)
11378 goto nosideret;
4c4b4cd2 11379
76a01679 11380 if (!ada_is_modular_type (type_arg))
323e0a4a 11381 error (_("'modulus must be applied to modular type"));
4c4b4cd2 11382
76a01679
JB
11383 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11384 ada_modulus (type_arg));
4c4b4cd2
PH
11385 }
11386
11387
11388 case OP_ATR_POS:
11389 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11390 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11391 if (noside == EVAL_SKIP)
76a01679 11392 goto nosideret;
3cb382c9
UW
11393 type = builtin_type (exp->gdbarch)->builtin_int;
11394 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11395 return value_zero (type, not_lval);
14f9c5c9 11396 else
3cb382c9 11397 return value_pos_atr (type, arg1);
14f9c5c9 11398
4c4b4cd2
PH
11399 case OP_ATR_SIZE:
11400 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
11401 type = value_type (arg1);
11402
11403 /* If the argument is a reference, then dereference its type, since
11404 the user is really asking for the size of the actual object,
11405 not the size of the pointer. */
11406 if (TYPE_CODE (type) == TYPE_CODE_REF)
11407 type = TYPE_TARGET_TYPE (type);
11408
4c4b4cd2 11409 if (noside == EVAL_SKIP)
76a01679 11410 goto nosideret;
4c4b4cd2 11411 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 11412 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 11413 else
22601c15 11414 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 11415 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
11416
11417 case OP_ATR_VAL:
11418 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 11419 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 11420 type = exp->elts[pc + 2].type;
14f9c5c9 11421 if (noside == EVAL_SKIP)
76a01679 11422 goto nosideret;
4c4b4cd2 11423 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11424 return value_zero (type, not_lval);
4c4b4cd2 11425 else
76a01679 11426 return value_val_atr (type, arg1);
4c4b4cd2
PH
11427
11428 case BINOP_EXP:
11429 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11430 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11431 if (noside == EVAL_SKIP)
11432 goto nosideret;
11433 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11434 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 11435 else
f44316fa
UW
11436 {
11437 /* For integer exponentiation operations,
11438 only promote the first argument. */
11439 if (is_integral_type (value_type (arg2)))
11440 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11441 else
11442 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11443
11444 return value_binop (arg1, arg2, op);
11445 }
4c4b4cd2
PH
11446
11447 case UNOP_PLUS:
11448 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11449 if (noside == EVAL_SKIP)
11450 goto nosideret;
11451 else
11452 return arg1;
11453
11454 case UNOP_ABS:
11455 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11456 if (noside == EVAL_SKIP)
11457 goto nosideret;
f44316fa 11458 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 11459 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 11460 return value_neg (arg1);
14f9c5c9 11461 else
4c4b4cd2 11462 return arg1;
14f9c5c9
AS
11463
11464 case UNOP_IND:
5ec18f2b 11465 preeval_pos = *pos;
6b0d7253 11466 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 11467 if (noside == EVAL_SKIP)
4c4b4cd2 11468 goto nosideret;
df407dfe 11469 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11470 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
11471 {
11472 if (ada_is_array_descriptor_type (type))
11473 /* GDB allows dereferencing GNAT array descriptors. */
11474 {
11475 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 11476
4c4b4cd2 11477 if (arrType == NULL)
323e0a4a 11478 error (_("Attempt to dereference null array pointer."));
00a4c844 11479 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
11480 }
11481 else if (TYPE_CODE (type) == TYPE_CODE_PTR
11482 || TYPE_CODE (type) == TYPE_CODE_REF
11483 /* In C you can dereference an array to get the 1st elt. */
11484 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab 11485 {
5ec18f2b
JG
11486 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11487 only be determined by inspecting the object's tag.
11488 This means that we need to evaluate completely the
11489 expression in order to get its type. */
11490
023db19c
JB
11491 if ((TYPE_CODE (type) == TYPE_CODE_REF
11492 || TYPE_CODE (type) == TYPE_CODE_PTR)
5ec18f2b
JG
11493 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11494 {
11495 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11496 EVAL_NORMAL);
11497 type = value_type (ada_value_ind (arg1));
11498 }
11499 else
11500 {
11501 type = to_static_fixed_type
11502 (ada_aligned_type
11503 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11504 }
c1b5a1a6 11505 ada_ensure_varsize_limit (type);
714e53ab
PH
11506 return value_zero (type, lval_memory);
11507 }
4c4b4cd2 11508 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
11509 {
11510 /* GDB allows dereferencing an int. */
11511 if (expect_type == NULL)
11512 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11513 lval_memory);
11514 else
11515 {
11516 expect_type =
11517 to_static_fixed_type (ada_aligned_type (expect_type));
11518 return value_zero (expect_type, lval_memory);
11519 }
11520 }
4c4b4cd2 11521 else
323e0a4a 11522 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 11523 }
0963b4bd 11524 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11525 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11526
96967637
JB
11527 if (TYPE_CODE (type) == TYPE_CODE_INT)
11528 /* GDB allows dereferencing an int. If we were given
11529 the expect_type, then use that as the target type.
11530 Otherwise, assume that the target type is an int. */
11531 {
11532 if (expect_type != NULL)
11533 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11534 arg1));
11535 else
11536 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11537 (CORE_ADDR) value_as_address (arg1));
11538 }
6b0d7253 11539
4c4b4cd2
PH
11540 if (ada_is_array_descriptor_type (type))
11541 /* GDB allows dereferencing GNAT array descriptors. */
11542 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11543 else
4c4b4cd2 11544 return ada_value_ind (arg1);
14f9c5c9
AS
11545
11546 case STRUCTOP_STRUCT:
11547 tem = longest_to_int (exp->elts[pc + 1].longconst);
11548 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11549 preeval_pos = *pos;
14f9c5c9
AS
11550 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11551 if (noside == EVAL_SKIP)
4c4b4cd2 11552 goto nosideret;
14f9c5c9 11553 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11554 {
df407dfe 11555 struct type *type1 = value_type (arg1);
5b4ee69b 11556
76a01679
JB
11557 if (ada_is_tagged_type (type1, 1))
11558 {
11559 type = ada_lookup_struct_elt_type (type1,
11560 &exp->elts[pc + 2].string,
988f6b3d 11561 1, 1);
5ec18f2b
JG
11562
11563 /* If the field is not found, check if it exists in the
11564 extension of this object's type. This means that we
11565 need to evaluate completely the expression. */
11566
76a01679 11567 if (type == NULL)
5ec18f2b
JG
11568 {
11569 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11570 EVAL_NORMAL);
11571 arg1 = ada_value_struct_elt (arg1,
11572 &exp->elts[pc + 2].string,
11573 0);
11574 arg1 = unwrap_value (arg1);
11575 type = value_type (ada_to_fixed_value (arg1));
11576 }
76a01679
JB
11577 }
11578 else
11579 type =
11580 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
988f6b3d 11581 0);
76a01679
JB
11582
11583 return value_zero (ada_aligned_type (type), lval_memory);
11584 }
14f9c5c9 11585 else
a579cd9a
MW
11586 {
11587 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11588 arg1 = unwrap_value (arg1);
11589 return ada_to_fixed_value (arg1);
11590 }
284614f0 11591
14f9c5c9 11592 case OP_TYPE:
4c4b4cd2
PH
11593 /* The value is not supposed to be used. This is here to make it
11594 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11595 (*pos) += 2;
11596 if (noside == EVAL_SKIP)
4c4b4cd2 11597 goto nosideret;
14f9c5c9 11598 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 11599 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11600 else
323e0a4a 11601 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11602
11603 case OP_AGGREGATE:
11604 case OP_CHOICES:
11605 case OP_OTHERS:
11606 case OP_DISCRETE_RANGE:
11607 case OP_POSITIONAL:
11608 case OP_NAME:
11609 if (noside == EVAL_NORMAL)
11610 switch (op)
11611 {
11612 case OP_NAME:
11613 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11614 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11615 case OP_AGGREGATE:
11616 error (_("Aggregates only allowed on the right of an assignment"));
11617 default:
0963b4bd
MS
11618 internal_error (__FILE__, __LINE__,
11619 _("aggregate apparently mangled"));
52ce6436
PH
11620 }
11621
11622 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11623 *pos += oplen - 1;
11624 for (tem = 0; tem < nargs; tem += 1)
11625 ada_evaluate_subexp (NULL, exp, pos, noside);
11626 goto nosideret;
14f9c5c9
AS
11627 }
11628
11629nosideret:
ced9779b 11630 return eval_skip_value (exp);
14f9c5c9 11631}
14f9c5c9 11632\f
d2e4a39e 11633
4c4b4cd2 11634 /* Fixed point */
14f9c5c9
AS
11635
11636/* If TYPE encodes an Ada fixed-point type, return the suffix of the
11637 type name that encodes the 'small and 'delta information.
4c4b4cd2 11638 Otherwise, return NULL. */
14f9c5c9 11639
d2e4a39e 11640static const char *
ebf56fd3 11641fixed_type_info (struct type *type)
14f9c5c9 11642{
d2e4a39e 11643 const char *name = ada_type_name (type);
14f9c5c9
AS
11644 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11645
d2e4a39e
AS
11646 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11647 {
14f9c5c9 11648 const char *tail = strstr (name, "___XF_");
5b4ee69b 11649
14f9c5c9 11650 if (tail == NULL)
4c4b4cd2 11651 return NULL;
d2e4a39e 11652 else
4c4b4cd2 11653 return tail + 5;
14f9c5c9
AS
11654 }
11655 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11656 return fixed_type_info (TYPE_TARGET_TYPE (type));
11657 else
11658 return NULL;
11659}
11660
4c4b4cd2 11661/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
11662
11663int
ebf56fd3 11664ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
11665{
11666 return fixed_type_info (type) != NULL;
11667}
11668
4c4b4cd2
PH
11669/* Return non-zero iff TYPE represents a System.Address type. */
11670
11671int
11672ada_is_system_address_type (struct type *type)
11673{
11674 return (TYPE_NAME (type)
11675 && strcmp (TYPE_NAME (type), "system__address") == 0);
11676}
11677
14f9c5c9 11678/* Assuming that TYPE is the representation of an Ada fixed-point
50eff16b
UW
11679 type, return the target floating-point type to be used to represent
11680 of this type during internal computation. */
11681
11682static struct type *
11683ada_scaling_type (struct type *type)
11684{
11685 return builtin_type (get_type_arch (type))->builtin_long_double;
11686}
11687
11688/* Assuming that TYPE is the representation of an Ada fixed-point
11689 type, return its delta, or NULL if the type is malformed and the
4c4b4cd2 11690 delta cannot be determined. */
14f9c5c9 11691
50eff16b 11692struct value *
ebf56fd3 11693ada_delta (struct type *type)
14f9c5c9
AS
11694{
11695 const char *encoding = fixed_type_info (type);
50eff16b
UW
11696 struct type *scale_type = ada_scaling_type (type);
11697
11698 long long num, den;
11699
11700 if (sscanf (encoding, "_%lld_%lld", &num, &den) < 2)
11701 return nullptr;
d2e4a39e 11702 else
50eff16b
UW
11703 return value_binop (value_from_longest (scale_type, num),
11704 value_from_longest (scale_type, den), BINOP_DIV);
14f9c5c9
AS
11705}
11706
11707/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 11708 factor ('SMALL value) associated with the type. */
14f9c5c9 11709
50eff16b
UW
11710struct value *
11711ada_scaling_factor (struct type *type)
14f9c5c9
AS
11712{
11713 const char *encoding = fixed_type_info (type);
50eff16b
UW
11714 struct type *scale_type = ada_scaling_type (type);
11715
11716 long long num0, den0, num1, den1;
14f9c5c9 11717 int n;
d2e4a39e 11718
50eff16b 11719 n = sscanf (encoding, "_%lld_%lld_%lld_%lld",
facc390f 11720 &num0, &den0, &num1, &den1);
14f9c5c9
AS
11721
11722 if (n < 2)
50eff16b 11723 return value_from_longest (scale_type, 1);
14f9c5c9 11724 else if (n == 4)
50eff16b
UW
11725 return value_binop (value_from_longest (scale_type, num1),
11726 value_from_longest (scale_type, den1), BINOP_DIV);
d2e4a39e 11727 else
50eff16b
UW
11728 return value_binop (value_from_longest (scale_type, num0),
11729 value_from_longest (scale_type, den0), BINOP_DIV);
14f9c5c9
AS
11730}
11731
14f9c5c9 11732\f
d2e4a39e 11733
4c4b4cd2 11734 /* Range types */
14f9c5c9
AS
11735
11736/* Scan STR beginning at position K for a discriminant name, and
11737 return the value of that discriminant field of DVAL in *PX. If
11738 PNEW_K is not null, put the position of the character beyond the
11739 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11740 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11741
11742static int
108d56a4 11743scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
76a01679 11744 int *pnew_k)
14f9c5c9
AS
11745{
11746 static char *bound_buffer = NULL;
11747 static size_t bound_buffer_len = 0;
5da1a4d3 11748 const char *pstart, *pend, *bound;
d2e4a39e 11749 struct value *bound_val;
14f9c5c9
AS
11750
11751 if (dval == NULL || str == NULL || str[k] == '\0')
11752 return 0;
11753
5da1a4d3
SM
11754 pstart = str + k;
11755 pend = strstr (pstart, "__");
14f9c5c9
AS
11756 if (pend == NULL)
11757 {
5da1a4d3 11758 bound = pstart;
14f9c5c9
AS
11759 k += strlen (bound);
11760 }
d2e4a39e 11761 else
14f9c5c9 11762 {
5da1a4d3
SM
11763 int len = pend - pstart;
11764
11765 /* Strip __ and beyond. */
11766 GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11767 strncpy (bound_buffer, pstart, len);
11768 bound_buffer[len] = '\0';
11769
14f9c5c9 11770 bound = bound_buffer;
d2e4a39e 11771 k = pend - str;
14f9c5c9 11772 }
d2e4a39e 11773
df407dfe 11774 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11775 if (bound_val == NULL)
11776 return 0;
11777
11778 *px = value_as_long (bound_val);
11779 if (pnew_k != NULL)
11780 *pnew_k = k;
11781 return 1;
11782}
11783
11784/* Value of variable named NAME in the current environment. If
11785 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11786 otherwise causes an error with message ERR_MSG. */
11787
d2e4a39e 11788static struct value *
edb0c9cb 11789get_var_value (const char *name, const char *err_msg)
14f9c5c9 11790{
b5ec771e 11791 lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
14f9c5c9 11792
54d343a2 11793 std::vector<struct block_symbol> syms;
b5ec771e
PA
11794 int nsyms = ada_lookup_symbol_list_worker (lookup_name,
11795 get_selected_block (0),
11796 VAR_DOMAIN, &syms, 1);
14f9c5c9
AS
11797
11798 if (nsyms != 1)
11799 {
11800 if (err_msg == NULL)
4c4b4cd2 11801 return 0;
14f9c5c9 11802 else
8a3fe4f8 11803 error (("%s"), err_msg);
14f9c5c9
AS
11804 }
11805
54d343a2 11806 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11807}
d2e4a39e 11808
edb0c9cb
PA
11809/* Value of integer variable named NAME in the current environment.
11810 If no such variable is found, returns false. Otherwise, sets VALUE
11811 to the variable's value and returns true. */
4c4b4cd2 11812
edb0c9cb
PA
11813bool
11814get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11815{
4c4b4cd2 11816 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11817
14f9c5c9 11818 if (var_val == 0)
edb0c9cb
PA
11819 return false;
11820
11821 value = value_as_long (var_val);
11822 return true;
14f9c5c9 11823}
d2e4a39e 11824
14f9c5c9
AS
11825
11826/* Return a range type whose base type is that of the range type named
11827 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11828 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11829 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11830 corresponding range type from debug information; fall back to using it
11831 if symbol lookup fails. If a new type must be created, allocate it
11832 like ORIG_TYPE was. The bounds information, in general, is encoded
11833 in NAME, the base type given in the named range type. */
14f9c5c9 11834
d2e4a39e 11835static struct type *
28c85d6c 11836to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11837{
0d5cff50 11838 const char *name;
14f9c5c9 11839 struct type *base_type;
108d56a4 11840 const char *subtype_info;
14f9c5c9 11841
28c85d6c
JB
11842 gdb_assert (raw_type != NULL);
11843 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 11844
1ce677a4 11845 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
11846 base_type = TYPE_TARGET_TYPE (raw_type);
11847 else
11848 base_type = raw_type;
11849
28c85d6c 11850 name = TYPE_NAME (raw_type);
14f9c5c9
AS
11851 subtype_info = strstr (name, "___XD");
11852 if (subtype_info == NULL)
690cc4eb 11853 {
43bbcdc2
PH
11854 LONGEST L = ada_discrete_type_low_bound (raw_type);
11855 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11856
690cc4eb
PH
11857 if (L < INT_MIN || U > INT_MAX)
11858 return raw_type;
11859 else
0c9c3474
SA
11860 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11861 L, U);
690cc4eb 11862 }
14f9c5c9
AS
11863 else
11864 {
11865 static char *name_buf = NULL;
11866 static size_t name_len = 0;
11867 int prefix_len = subtype_info - name;
11868 LONGEST L, U;
11869 struct type *type;
108d56a4 11870 const char *bounds_str;
14f9c5c9
AS
11871 int n;
11872
11873 GROW_VECT (name_buf, name_len, prefix_len + 5);
11874 strncpy (name_buf, name, prefix_len);
11875 name_buf[prefix_len] = '\0';
11876
11877 subtype_info += 5;
11878 bounds_str = strchr (subtype_info, '_');
11879 n = 1;
11880
d2e4a39e 11881 if (*subtype_info == 'L')
4c4b4cd2
PH
11882 {
11883 if (!ada_scan_number (bounds_str, n, &L, &n)
11884 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11885 return raw_type;
11886 if (bounds_str[n] == '_')
11887 n += 2;
0963b4bd 11888 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11889 n += 1;
11890 subtype_info += 1;
11891 }
d2e4a39e 11892 else
4c4b4cd2 11893 {
4c4b4cd2 11894 strcpy (name_buf + prefix_len, "___L");
edb0c9cb 11895 if (!get_int_var_value (name_buf, L))
4c4b4cd2 11896 {
323e0a4a 11897 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11898 L = 1;
11899 }
11900 }
14f9c5c9 11901
d2e4a39e 11902 if (*subtype_info == 'U')
4c4b4cd2
PH
11903 {
11904 if (!ada_scan_number (bounds_str, n, &U, &n)
11905 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11906 return raw_type;
11907 }
d2e4a39e 11908 else
4c4b4cd2 11909 {
4c4b4cd2 11910 strcpy (name_buf + prefix_len, "___U");
edb0c9cb 11911 if (!get_int_var_value (name_buf, U))
4c4b4cd2 11912 {
323e0a4a 11913 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11914 U = L;
11915 }
11916 }
14f9c5c9 11917
0c9c3474
SA
11918 type = create_static_range_type (alloc_type_copy (raw_type),
11919 base_type, L, U);
f5a91472
JB
11920 /* create_static_range_type alters the resulting type's length
11921 to match the size of the base_type, which is not what we want.
11922 Set it back to the original range type's length. */
11923 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d2e4a39e 11924 TYPE_NAME (type) = name;
14f9c5c9
AS
11925 return type;
11926 }
11927}
11928
4c4b4cd2
PH
11929/* True iff NAME is the name of a range type. */
11930
14f9c5c9 11931int
d2e4a39e 11932ada_is_range_type_name (const char *name)
14f9c5c9
AS
11933{
11934 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11935}
14f9c5c9 11936\f
d2e4a39e 11937
4c4b4cd2
PH
11938 /* Modular types */
11939
11940/* True iff TYPE is an Ada modular type. */
14f9c5c9 11941
14f9c5c9 11942int
d2e4a39e 11943ada_is_modular_type (struct type *type)
14f9c5c9 11944{
18af8284 11945 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
11946
11947 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 11948 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 11949 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11950}
11951
4c4b4cd2
PH
11952/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11953
61ee279c 11954ULONGEST
0056e4d5 11955ada_modulus (struct type *type)
14f9c5c9 11956{
43bbcdc2 11957 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11958}
d2e4a39e 11959\f
f7f9143b
JB
11960
11961/* Ada exception catchpoint support:
11962 ---------------------------------
11963
11964 We support 3 kinds of exception catchpoints:
11965 . catchpoints on Ada exceptions
11966 . catchpoints on unhandled Ada exceptions
11967 . catchpoints on failed assertions
11968
11969 Exceptions raised during failed assertions, or unhandled exceptions
11970 could perfectly be caught with the general catchpoint on Ada exceptions.
11971 However, we can easily differentiate these two special cases, and having
11972 the option to distinguish these two cases from the rest can be useful
11973 to zero-in on certain situations.
11974
11975 Exception catchpoints are a specialized form of breakpoint,
11976 since they rely on inserting breakpoints inside known routines
11977 of the GNAT runtime. The implementation therefore uses a standard
11978 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11979 of breakpoint_ops.
11980
0259addd
JB
11981 Support in the runtime for exception catchpoints have been changed
11982 a few times already, and these changes affect the implementation
11983 of these catchpoints. In order to be able to support several
11984 variants of the runtime, we use a sniffer that will determine
28010a5d 11985 the runtime variant used by the program being debugged. */
f7f9143b 11986
82eacd52
JB
11987/* Ada's standard exceptions.
11988
11989 The Ada 83 standard also defined Numeric_Error. But there so many
11990 situations where it was unclear from the Ada 83 Reference Manual
11991 (RM) whether Constraint_Error or Numeric_Error should be raised,
11992 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11993 Interpretation saying that anytime the RM says that Numeric_Error
11994 should be raised, the implementation may raise Constraint_Error.
11995 Ada 95 went one step further and pretty much removed Numeric_Error
11996 from the list of standard exceptions (it made it a renaming of
11997 Constraint_Error, to help preserve compatibility when compiling
11998 an Ada83 compiler). As such, we do not include Numeric_Error from
11999 this list of standard exceptions. */
3d0b0fa3 12000
a121b7c1 12001static const char *standard_exc[] = {
3d0b0fa3
JB
12002 "constraint_error",
12003 "program_error",
12004 "storage_error",
12005 "tasking_error"
12006};
12007
0259addd
JB
12008typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
12009
12010/* A structure that describes how to support exception catchpoints
12011 for a given executable. */
12012
12013struct exception_support_info
12014{
12015 /* The name of the symbol to break on in order to insert
12016 a catchpoint on exceptions. */
12017 const char *catch_exception_sym;
12018
12019 /* The name of the symbol to break on in order to insert
12020 a catchpoint on unhandled exceptions. */
12021 const char *catch_exception_unhandled_sym;
12022
12023 /* The name of the symbol to break on in order to insert
12024 a catchpoint on failed assertions. */
12025 const char *catch_assert_sym;
12026
9f757bf7
XR
12027 /* The name of the symbol to break on in order to insert
12028 a catchpoint on exception handling. */
12029 const char *catch_handlers_sym;
12030
0259addd
JB
12031 /* Assuming that the inferior just triggered an unhandled exception
12032 catchpoint, this function is responsible for returning the address
12033 in inferior memory where the name of that exception is stored.
12034 Return zero if the address could not be computed. */
12035 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
12036};
12037
12038static CORE_ADDR ada_unhandled_exception_name_addr (void);
12039static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
12040
12041/* The following exception support info structure describes how to
12042 implement exception catchpoints with the latest version of the
12043 Ada runtime (as of 2007-03-06). */
12044
12045static const struct exception_support_info default_exception_support_info =
12046{
12047 "__gnat_debug_raise_exception", /* catch_exception_sym */
12048 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
12049 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 12050 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
12051 ada_unhandled_exception_name_addr
12052};
12053
12054/* The following exception support info structure describes how to
12055 implement exception catchpoints with a slightly older version
12056 of the Ada runtime. */
12057
12058static const struct exception_support_info exception_support_info_fallback =
12059{
12060 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
12061 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
12062 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 12063 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
12064 ada_unhandled_exception_name_addr_from_raise
12065};
12066
f17011e0
JB
12067/* Return nonzero if we can detect the exception support routines
12068 described in EINFO.
12069
12070 This function errors out if an abnormal situation is detected
12071 (for instance, if we find the exception support routines, but
12072 that support is found to be incomplete). */
12073
12074static int
12075ada_has_this_exception_support (const struct exception_support_info *einfo)
12076{
12077 struct symbol *sym;
12078
12079 /* The symbol we're looking up is provided by a unit in the GNAT runtime
12080 that should be compiled with debugging information. As a result, we
12081 expect to find that symbol in the symtabs. */
12082
12083 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
12084 if (sym == NULL)
a6af7abe
JB
12085 {
12086 /* Perhaps we did not find our symbol because the Ada runtime was
12087 compiled without debugging info, or simply stripped of it.
12088 It happens on some GNU/Linux distributions for instance, where
12089 users have to install a separate debug package in order to get
12090 the runtime's debugging info. In that situation, let the user
12091 know why we cannot insert an Ada exception catchpoint.
12092
12093 Note: Just for the purpose of inserting our Ada exception
12094 catchpoint, we could rely purely on the associated minimal symbol.
12095 But we would be operating in degraded mode anyway, since we are
12096 still lacking the debugging info needed later on to extract
12097 the name of the exception being raised (this name is printed in
12098 the catchpoint message, and is also used when trying to catch
12099 a specific exception). We do not handle this case for now. */
3b7344d5 12100 struct bound_minimal_symbol msym
1c8e84b0
JB
12101 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
12102
3b7344d5 12103 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
12104 error (_("Your Ada runtime appears to be missing some debugging "
12105 "information.\nCannot insert Ada exception catchpoint "
12106 "in this configuration."));
12107
12108 return 0;
12109 }
f17011e0
JB
12110
12111 /* Make sure that the symbol we found corresponds to a function. */
12112
12113 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12114 error (_("Symbol \"%s\" is not a function (class = %d)"),
12115 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
12116
12117 return 1;
12118}
12119
0259addd
JB
12120/* Inspect the Ada runtime and determine which exception info structure
12121 should be used to provide support for exception catchpoints.
12122
3eecfa55
JB
12123 This function will always set the per-inferior exception_info,
12124 or raise an error. */
0259addd
JB
12125
12126static void
12127ada_exception_support_info_sniffer (void)
12128{
3eecfa55 12129 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
12130
12131 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 12132 if (data->exception_info != NULL)
0259addd
JB
12133 return;
12134
12135 /* Check the latest (default) exception support info. */
f17011e0 12136 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 12137 {
3eecfa55 12138 data->exception_info = &default_exception_support_info;
0259addd
JB
12139 return;
12140 }
12141
12142 /* Try our fallback exception suport info. */
f17011e0 12143 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 12144 {
3eecfa55 12145 data->exception_info = &exception_support_info_fallback;
0259addd
JB
12146 return;
12147 }
12148
12149 /* Sometimes, it is normal for us to not be able to find the routine
12150 we are looking for. This happens when the program is linked with
12151 the shared version of the GNAT runtime, and the program has not been
12152 started yet. Inform the user of these two possible causes if
12153 applicable. */
12154
ccefe4c4 12155 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
12156 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
12157
12158 /* If the symbol does not exist, then check that the program is
12159 already started, to make sure that shared libraries have been
12160 loaded. If it is not started, this may mean that the symbol is
12161 in a shared library. */
12162
e99b03dc 12163 if (inferior_ptid.pid () == 0)
0259addd
JB
12164 error (_("Unable to insert catchpoint. Try to start the program first."));
12165
12166 /* At this point, we know that we are debugging an Ada program and
12167 that the inferior has been started, but we still are not able to
0963b4bd 12168 find the run-time symbols. That can mean that we are in
0259addd
JB
12169 configurable run time mode, or that a-except as been optimized
12170 out by the linker... In any case, at this point it is not worth
12171 supporting this feature. */
12172
7dda8cff 12173 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
12174}
12175
f7f9143b
JB
12176/* True iff FRAME is very likely to be that of a function that is
12177 part of the runtime system. This is all very heuristic, but is
12178 intended to be used as advice as to what frames are uninteresting
12179 to most users. */
12180
12181static int
12182is_known_support_routine (struct frame_info *frame)
12183{
692465f1 12184 enum language func_lang;
f7f9143b 12185 int i;
f35a17b5 12186 const char *fullname;
f7f9143b 12187
4ed6b5be
JB
12188 /* If this code does not have any debugging information (no symtab),
12189 This cannot be any user code. */
f7f9143b 12190
51abb421 12191 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
12192 if (sal.symtab == NULL)
12193 return 1;
12194
4ed6b5be
JB
12195 /* If there is a symtab, but the associated source file cannot be
12196 located, then assume this is not user code: Selecting a frame
12197 for which we cannot display the code would not be very helpful
12198 for the user. This should also take care of case such as VxWorks
12199 where the kernel has some debugging info provided for a few units. */
f7f9143b 12200
f35a17b5
JK
12201 fullname = symtab_to_fullname (sal.symtab);
12202 if (access (fullname, R_OK) != 0)
f7f9143b
JB
12203 return 1;
12204
4ed6b5be
JB
12205 /* Check the unit filename againt the Ada runtime file naming.
12206 We also check the name of the objfile against the name of some
12207 known system libraries that sometimes come with debugging info
12208 too. */
12209
f7f9143b
JB
12210 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
12211 {
12212 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 12213 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 12214 return 1;
eb822aa6
DE
12215 if (SYMTAB_OBJFILE (sal.symtab) != NULL
12216 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
4ed6b5be 12217 return 1;
f7f9143b
JB
12218 }
12219
4ed6b5be 12220 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 12221
c6dc63a1
TT
12222 gdb::unique_xmalloc_ptr<char> func_name
12223 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
12224 if (func_name == NULL)
12225 return 1;
12226
12227 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
12228 {
12229 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
12230 if (re_exec (func_name.get ()))
12231 return 1;
f7f9143b
JB
12232 }
12233
12234 return 0;
12235}
12236
12237/* Find the first frame that contains debugging information and that is not
12238 part of the Ada run-time, starting from FI and moving upward. */
12239
0ef643c8 12240void
f7f9143b
JB
12241ada_find_printable_frame (struct frame_info *fi)
12242{
12243 for (; fi != NULL; fi = get_prev_frame (fi))
12244 {
12245 if (!is_known_support_routine (fi))
12246 {
12247 select_frame (fi);
12248 break;
12249 }
12250 }
12251
12252}
12253
12254/* Assuming that the inferior just triggered an unhandled exception
12255 catchpoint, return the address in inferior memory where the name
12256 of the exception is stored.
12257
12258 Return zero if the address could not be computed. */
12259
12260static CORE_ADDR
12261ada_unhandled_exception_name_addr (void)
0259addd
JB
12262{
12263 return parse_and_eval_address ("e.full_name");
12264}
12265
12266/* Same as ada_unhandled_exception_name_addr, except that this function
12267 should be used when the inferior uses an older version of the runtime,
12268 where the exception name needs to be extracted from a specific frame
12269 several frames up in the callstack. */
12270
12271static CORE_ADDR
12272ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
12273{
12274 int frame_level;
12275 struct frame_info *fi;
3eecfa55 12276 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
12277
12278 /* To determine the name of this exception, we need to select
12279 the frame corresponding to RAISE_SYM_NAME. This frame is
12280 at least 3 levels up, so we simply skip the first 3 frames
12281 without checking the name of their associated function. */
12282 fi = get_current_frame ();
12283 for (frame_level = 0; frame_level < 3; frame_level += 1)
12284 if (fi != NULL)
12285 fi = get_prev_frame (fi);
12286
12287 while (fi != NULL)
12288 {
692465f1
JB
12289 enum language func_lang;
12290
c6dc63a1
TT
12291 gdb::unique_xmalloc_ptr<char> func_name
12292 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
12293 if (func_name != NULL)
12294 {
c6dc63a1 12295 if (strcmp (func_name.get (),
55b87a52
KS
12296 data->exception_info->catch_exception_sym) == 0)
12297 break; /* We found the frame we were looking for... */
55b87a52 12298 }
fb44b1a7 12299 fi = get_prev_frame (fi);
f7f9143b
JB
12300 }
12301
12302 if (fi == NULL)
12303 return 0;
12304
12305 select_frame (fi);
12306 return parse_and_eval_address ("id.full_name");
12307}
12308
12309/* Assuming the inferior just triggered an Ada exception catchpoint
12310 (of any type), return the address in inferior memory where the name
12311 of the exception is stored, if applicable.
12312
45db7c09
PA
12313 Assumes the selected frame is the current frame.
12314
f7f9143b
JB
12315 Return zero if the address could not be computed, or if not relevant. */
12316
12317static CORE_ADDR
761269c8 12318ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12319 struct breakpoint *b)
12320{
3eecfa55
JB
12321 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12322
f7f9143b
JB
12323 switch (ex)
12324 {
761269c8 12325 case ada_catch_exception:
f7f9143b
JB
12326 return (parse_and_eval_address ("e.full_name"));
12327 break;
12328
761269c8 12329 case ada_catch_exception_unhandled:
3eecfa55 12330 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b 12331 break;
9f757bf7
XR
12332
12333 case ada_catch_handlers:
12334 return 0; /* The runtimes does not provide access to the exception
12335 name. */
12336 break;
12337
761269c8 12338 case ada_catch_assert:
f7f9143b
JB
12339 return 0; /* Exception name is not relevant in this case. */
12340 break;
12341
12342 default:
12343 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12344 break;
12345 }
12346
12347 return 0; /* Should never be reached. */
12348}
12349
e547c119
JB
12350/* Assuming the inferior is stopped at an exception catchpoint,
12351 return the message which was associated to the exception, if
12352 available. Return NULL if the message could not be retrieved.
12353
e547c119
JB
12354 Note: The exception message can be associated to an exception
12355 either through the use of the Raise_Exception function, or
12356 more simply (Ada 2005 and later), via:
12357
12358 raise Exception_Name with "exception message";
12359
12360 */
12361
6f46ac85 12362static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12363ada_exception_message_1 (void)
12364{
12365 struct value *e_msg_val;
e547c119 12366 int e_msg_len;
e547c119
JB
12367
12368 /* For runtimes that support this feature, the exception message
12369 is passed as an unbounded string argument called "message". */
12370 e_msg_val = parse_and_eval ("message");
12371 if (e_msg_val == NULL)
12372 return NULL; /* Exception message not supported. */
12373
12374 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
12375 gdb_assert (e_msg_val != NULL);
12376 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
12377
12378 /* If the message string is empty, then treat it as if there was
12379 no exception message. */
12380 if (e_msg_len <= 0)
12381 return NULL;
12382
6f46ac85
TT
12383 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
12384 read_memory_string (value_address (e_msg_val), e_msg.get (), e_msg_len + 1);
12385 e_msg.get ()[e_msg_len] = '\0';
e547c119 12386
e547c119
JB
12387 return e_msg;
12388}
12389
12390/* Same as ada_exception_message_1, except that all exceptions are
12391 contained here (returning NULL instead). */
12392
6f46ac85 12393static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12394ada_exception_message (void)
12395{
6f46ac85 12396 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119
JB
12397
12398 TRY
12399 {
12400 e_msg = ada_exception_message_1 ();
12401 }
12402 CATCH (e, RETURN_MASK_ERROR)
12403 {
6f46ac85 12404 e_msg.reset (nullptr);
e547c119
JB
12405 }
12406 END_CATCH
12407
12408 return e_msg;
12409}
12410
f7f9143b
JB
12411/* Same as ada_exception_name_addr_1, except that it intercepts and contains
12412 any error that ada_exception_name_addr_1 might cause to be thrown.
12413 When an error is intercepted, a warning with the error message is printed,
12414 and zero is returned. */
12415
12416static CORE_ADDR
761269c8 12417ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12418 struct breakpoint *b)
12419{
f7f9143b
JB
12420 CORE_ADDR result = 0;
12421
492d29ea 12422 TRY
f7f9143b
JB
12423 {
12424 result = ada_exception_name_addr_1 (ex, b);
12425 }
12426
492d29ea 12427 CATCH (e, RETURN_MASK_ERROR)
f7f9143b
JB
12428 {
12429 warning (_("failed to get exception name: %s"), e.message);
12430 return 0;
12431 }
492d29ea 12432 END_CATCH
f7f9143b
JB
12433
12434 return result;
12435}
12436
cb7de75e 12437static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
12438 (const char *excep_string,
12439 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
12440
12441/* Ada catchpoints.
12442
12443 In the case of catchpoints on Ada exceptions, the catchpoint will
12444 stop the target on every exception the program throws. When a user
12445 specifies the name of a specific exception, we translate this
12446 request into a condition expression (in text form), and then parse
12447 it into an expression stored in each of the catchpoint's locations.
12448 We then use this condition to check whether the exception that was
12449 raised is the one the user is interested in. If not, then the
12450 target is resumed again. We store the name of the requested
12451 exception, in order to be able to re-set the condition expression
12452 when symbols change. */
12453
12454/* An instance of this type is used to represent an Ada catchpoint
5625a286 12455 breakpoint location. */
28010a5d 12456
5625a286 12457class ada_catchpoint_location : public bp_location
28010a5d 12458{
5625a286
PA
12459public:
12460 ada_catchpoint_location (const bp_location_ops *ops, breakpoint *owner)
12461 : bp_location (ops, owner)
12462 {}
28010a5d
PA
12463
12464 /* The condition that checks whether the exception that was raised
12465 is the specific exception the user specified on catchpoint
12466 creation. */
4d01a485 12467 expression_up excep_cond_expr;
28010a5d
PA
12468};
12469
12470/* Implement the DTOR method in the bp_location_ops structure for all
12471 Ada exception catchpoint kinds. */
12472
12473static void
12474ada_catchpoint_location_dtor (struct bp_location *bl)
12475{
12476 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
12477
4d01a485 12478 al->excep_cond_expr.reset ();
28010a5d
PA
12479}
12480
12481/* The vtable to be used in Ada catchpoint locations. */
12482
12483static const struct bp_location_ops ada_catchpoint_location_ops =
12484{
12485 ada_catchpoint_location_dtor
12486};
12487
c1fc2657 12488/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 12489
c1fc2657 12490struct ada_catchpoint : public breakpoint
28010a5d 12491{
28010a5d 12492 /* The name of the specific exception the user specified. */
bc18fbb5 12493 std::string excep_string;
28010a5d
PA
12494};
12495
12496/* Parse the exception condition string in the context of each of the
12497 catchpoint's locations, and store them for later evaluation. */
12498
12499static void
9f757bf7
XR
12500create_excep_cond_exprs (struct ada_catchpoint *c,
12501 enum ada_exception_catchpoint_kind ex)
28010a5d 12502{
28010a5d 12503 struct bp_location *bl;
28010a5d
PA
12504
12505 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 12506 if (c->excep_string.empty ())
28010a5d
PA
12507 return;
12508
12509 /* Same if there are no locations... */
c1fc2657 12510 if (c->loc == NULL)
28010a5d
PA
12511 return;
12512
12513 /* Compute the condition expression in text form, from the specific
12514 expection we want to catch. */
cb7de75e 12515 std::string cond_string
bc18fbb5 12516 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
28010a5d
PA
12517
12518 /* Iterate over all the catchpoint's locations, and parse an
12519 expression for each. */
c1fc2657 12520 for (bl = c->loc; bl != NULL; bl = bl->next)
28010a5d
PA
12521 {
12522 struct ada_catchpoint_location *ada_loc
12523 = (struct ada_catchpoint_location *) bl;
4d01a485 12524 expression_up exp;
28010a5d
PA
12525
12526 if (!bl->shlib_disabled)
12527 {
bbc13ae3 12528 const char *s;
28010a5d 12529
cb7de75e 12530 s = cond_string.c_str ();
492d29ea 12531 TRY
28010a5d 12532 {
036e657b
JB
12533 exp = parse_exp_1 (&s, bl->address,
12534 block_for_pc (bl->address),
12535 0);
28010a5d 12536 }
492d29ea 12537 CATCH (e, RETURN_MASK_ERROR)
849f2b52
JB
12538 {
12539 warning (_("failed to reevaluate internal exception condition "
12540 "for catchpoint %d: %s"),
c1fc2657 12541 c->number, e.message);
849f2b52 12542 }
492d29ea 12543 END_CATCH
28010a5d
PA
12544 }
12545
b22e99fd 12546 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 12547 }
28010a5d
PA
12548}
12549
28010a5d
PA
12550/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12551 structure for all exception catchpoint kinds. */
12552
12553static struct bp_location *
761269c8 12554allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
12555 struct breakpoint *self)
12556{
5625a286 12557 return new ada_catchpoint_location (&ada_catchpoint_location_ops, self);
28010a5d
PA
12558}
12559
12560/* Implement the RE_SET method in the breakpoint_ops structure for all
12561 exception catchpoint kinds. */
12562
12563static void
761269c8 12564re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
12565{
12566 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12567
12568 /* Call the base class's method. This updates the catchpoint's
12569 locations. */
2060206e 12570 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12571
12572 /* Reparse the exception conditional expressions. One for each
12573 location. */
9f757bf7 12574 create_excep_cond_exprs (c, ex);
28010a5d
PA
12575}
12576
12577/* Returns true if we should stop for this breakpoint hit. If the
12578 user specified a specific exception, we only want to cause a stop
12579 if the program thrown that exception. */
12580
12581static int
12582should_stop_exception (const struct bp_location *bl)
12583{
12584 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12585 const struct ada_catchpoint_location *ada_loc
12586 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12587 int stop;
12588
12589 /* With no specific exception, should always stop. */
bc18fbb5 12590 if (c->excep_string.empty ())
28010a5d
PA
12591 return 1;
12592
12593 if (ada_loc->excep_cond_expr == NULL)
12594 {
12595 /* We will have a NULL expression if back when we were creating
12596 the expressions, this location's had failed to parse. */
12597 return 1;
12598 }
12599
12600 stop = 1;
492d29ea 12601 TRY
28010a5d
PA
12602 {
12603 struct value *mark;
12604
12605 mark = value_mark ();
4d01a485 12606 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12607 value_free_to_mark (mark);
12608 }
492d29ea
PA
12609 CATCH (ex, RETURN_MASK_ALL)
12610 {
12611 exception_fprintf (gdb_stderr, ex,
12612 _("Error in testing exception condition:\n"));
12613 }
12614 END_CATCH
12615
28010a5d
PA
12616 return stop;
12617}
12618
12619/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12620 for all exception catchpoint kinds. */
12621
12622static void
761269c8 12623check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
12624{
12625 bs->stop = should_stop_exception (bs->bp_location_at);
12626}
12627
f7f9143b
JB
12628/* Implement the PRINT_IT method in the breakpoint_ops structure
12629 for all exception catchpoint kinds. */
12630
12631static enum print_stop_action
761269c8 12632print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 12633{
79a45e25 12634 struct ui_out *uiout = current_uiout;
348d480f
PA
12635 struct breakpoint *b = bs->breakpoint_at;
12636
956a9fb9 12637 annotate_catchpoint (b->number);
f7f9143b 12638
112e8700 12639 if (uiout->is_mi_like_p ())
f7f9143b 12640 {
112e8700 12641 uiout->field_string ("reason",
956a9fb9 12642 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12643 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12644 }
12645
112e8700
SM
12646 uiout->text (b->disposition == disp_del
12647 ? "\nTemporary catchpoint " : "\nCatchpoint ");
12648 uiout->field_int ("bkptno", b->number);
12649 uiout->text (", ");
f7f9143b 12650
45db7c09
PA
12651 /* ada_exception_name_addr relies on the selected frame being the
12652 current frame. Need to do this here because this function may be
12653 called more than once when printing a stop, and below, we'll
12654 select the first frame past the Ada run-time (see
12655 ada_find_printable_frame). */
12656 select_frame (get_current_frame ());
12657
f7f9143b
JB
12658 switch (ex)
12659 {
761269c8
JB
12660 case ada_catch_exception:
12661 case ada_catch_exception_unhandled:
9f757bf7 12662 case ada_catch_handlers:
956a9fb9
JB
12663 {
12664 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12665 char exception_name[256];
12666
12667 if (addr != 0)
12668 {
c714b426
PA
12669 read_memory (addr, (gdb_byte *) exception_name,
12670 sizeof (exception_name) - 1);
956a9fb9
JB
12671 exception_name [sizeof (exception_name) - 1] = '\0';
12672 }
12673 else
12674 {
12675 /* For some reason, we were unable to read the exception
12676 name. This could happen if the Runtime was compiled
12677 without debugging info, for instance. In that case,
12678 just replace the exception name by the generic string
12679 "exception" - it will read as "an exception" in the
12680 notification we are about to print. */
967cff16 12681 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12682 }
12683 /* In the case of unhandled exception breakpoints, we print
12684 the exception name as "unhandled EXCEPTION_NAME", to make
12685 it clearer to the user which kind of catchpoint just got
12686 hit. We used ui_out_text to make sure that this extra
12687 info does not pollute the exception name in the MI case. */
761269c8 12688 if (ex == ada_catch_exception_unhandled)
112e8700
SM
12689 uiout->text ("unhandled ");
12690 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12691 }
12692 break;
761269c8 12693 case ada_catch_assert:
956a9fb9
JB
12694 /* In this case, the name of the exception is not really
12695 important. Just print "failed assertion" to make it clearer
12696 that his program just hit an assertion-failure catchpoint.
12697 We used ui_out_text because this info does not belong in
12698 the MI output. */
112e8700 12699 uiout->text ("failed assertion");
956a9fb9 12700 break;
f7f9143b 12701 }
e547c119 12702
6f46ac85 12703 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12704 if (exception_message != NULL)
12705 {
e547c119 12706 uiout->text (" (");
6f46ac85 12707 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12708 uiout->text (")");
e547c119
JB
12709 }
12710
112e8700 12711 uiout->text (" at ");
956a9fb9 12712 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12713
12714 return PRINT_SRC_AND_LOC;
12715}
12716
12717/* Implement the PRINT_ONE method in the breakpoint_ops structure
12718 for all exception catchpoint kinds. */
12719
12720static void
761269c8 12721print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 12722 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12723{
79a45e25 12724 struct ui_out *uiout = current_uiout;
28010a5d 12725 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12726 struct value_print_options opts;
12727
12728 get_user_print_options (&opts);
12729 if (opts.addressprint)
f7f9143b
JB
12730 {
12731 annotate_field (4);
112e8700 12732 uiout->field_core_addr ("addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
12733 }
12734
12735 annotate_field (5);
a6d9a66e 12736 *last_loc = b->loc;
f7f9143b
JB
12737 switch (ex)
12738 {
761269c8 12739 case ada_catch_exception:
bc18fbb5 12740 if (!c->excep_string.empty ())
f7f9143b 12741 {
bc18fbb5
TT
12742 std::string msg = string_printf (_("`%s' Ada exception"),
12743 c->excep_string.c_str ());
28010a5d 12744
112e8700 12745 uiout->field_string ("what", msg);
f7f9143b
JB
12746 }
12747 else
112e8700 12748 uiout->field_string ("what", "all Ada exceptions");
f7f9143b
JB
12749
12750 break;
12751
761269c8 12752 case ada_catch_exception_unhandled:
112e8700 12753 uiout->field_string ("what", "unhandled Ada exceptions");
f7f9143b
JB
12754 break;
12755
9f757bf7 12756 case ada_catch_handlers:
bc18fbb5 12757 if (!c->excep_string.empty ())
9f757bf7
XR
12758 {
12759 uiout->field_fmt ("what",
12760 _("`%s' Ada exception handlers"),
bc18fbb5 12761 c->excep_string.c_str ());
9f757bf7
XR
12762 }
12763 else
12764 uiout->field_string ("what", "all Ada exceptions handlers");
12765 break;
12766
761269c8 12767 case ada_catch_assert:
112e8700 12768 uiout->field_string ("what", "failed Ada assertions");
f7f9143b
JB
12769 break;
12770
12771 default:
12772 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12773 break;
12774 }
12775}
12776
12777/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12778 for all exception catchpoint kinds. */
12779
12780static void
761269c8 12781print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12782 struct breakpoint *b)
12783{
28010a5d 12784 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12785 struct ui_out *uiout = current_uiout;
28010a5d 12786
112e8700 12787 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
00eb2c4a 12788 : _("Catchpoint "));
112e8700
SM
12789 uiout->field_int ("bkptno", b->number);
12790 uiout->text (": ");
00eb2c4a 12791
f7f9143b
JB
12792 switch (ex)
12793 {
761269c8 12794 case ada_catch_exception:
bc18fbb5 12795 if (!c->excep_string.empty ())
00eb2c4a 12796 {
862d101a 12797 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12798 c->excep_string.c_str ());
862d101a 12799 uiout->text (info.c_str ());
00eb2c4a 12800 }
f7f9143b 12801 else
112e8700 12802 uiout->text (_("all Ada exceptions"));
f7f9143b
JB
12803 break;
12804
761269c8 12805 case ada_catch_exception_unhandled:
112e8700 12806 uiout->text (_("unhandled Ada exceptions"));
f7f9143b 12807 break;
9f757bf7
XR
12808
12809 case ada_catch_handlers:
bc18fbb5 12810 if (!c->excep_string.empty ())
9f757bf7
XR
12811 {
12812 std::string info
12813 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12814 c->excep_string.c_str ());
9f757bf7
XR
12815 uiout->text (info.c_str ());
12816 }
12817 else
12818 uiout->text (_("all Ada exceptions handlers"));
12819 break;
12820
761269c8 12821 case ada_catch_assert:
112e8700 12822 uiout->text (_("failed Ada assertions"));
f7f9143b
JB
12823 break;
12824
12825 default:
12826 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12827 break;
12828 }
12829}
12830
6149aea9
PA
12831/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12832 for all exception catchpoint kinds. */
12833
12834static void
761269c8 12835print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
12836 struct breakpoint *b, struct ui_file *fp)
12837{
28010a5d
PA
12838 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12839
6149aea9
PA
12840 switch (ex)
12841 {
761269c8 12842 case ada_catch_exception:
6149aea9 12843 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12844 if (!c->excep_string.empty ())
12845 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12846 break;
12847
761269c8 12848 case ada_catch_exception_unhandled:
78076abc 12849 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12850 break;
12851
9f757bf7
XR
12852 case ada_catch_handlers:
12853 fprintf_filtered (fp, "catch handlers");
12854 break;
12855
761269c8 12856 case ada_catch_assert:
6149aea9
PA
12857 fprintf_filtered (fp, "catch assert");
12858 break;
12859
12860 default:
12861 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12862 }
d9b3f62e 12863 print_recreate_thread (b, fp);
6149aea9
PA
12864}
12865
f7f9143b
JB
12866/* Virtual table for "catch exception" breakpoints. */
12867
28010a5d
PA
12868static struct bp_location *
12869allocate_location_catch_exception (struct breakpoint *self)
12870{
761269c8 12871 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
12872}
12873
12874static void
12875re_set_catch_exception (struct breakpoint *b)
12876{
761269c8 12877 re_set_exception (ada_catch_exception, b);
28010a5d
PA
12878}
12879
12880static void
12881check_status_catch_exception (bpstat bs)
12882{
761269c8 12883 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
12884}
12885
f7f9143b 12886static enum print_stop_action
348d480f 12887print_it_catch_exception (bpstat bs)
f7f9143b 12888{
761269c8 12889 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
12890}
12891
12892static void
a6d9a66e 12893print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12894{
761269c8 12895 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
12896}
12897
12898static void
12899print_mention_catch_exception (struct breakpoint *b)
12900{
761269c8 12901 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
12902}
12903
6149aea9
PA
12904static void
12905print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12906{
761269c8 12907 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
12908}
12909
2060206e 12910static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
12911
12912/* Virtual table for "catch exception unhandled" breakpoints. */
12913
28010a5d
PA
12914static struct bp_location *
12915allocate_location_catch_exception_unhandled (struct breakpoint *self)
12916{
761269c8 12917 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
12918}
12919
12920static void
12921re_set_catch_exception_unhandled (struct breakpoint *b)
12922{
761269c8 12923 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12924}
12925
12926static void
12927check_status_catch_exception_unhandled (bpstat bs)
12928{
761269c8 12929 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
12930}
12931
f7f9143b 12932static enum print_stop_action
348d480f 12933print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 12934{
761269c8 12935 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
12936}
12937
12938static void
a6d9a66e
UW
12939print_one_catch_exception_unhandled (struct breakpoint *b,
12940 struct bp_location **last_loc)
f7f9143b 12941{
761269c8 12942 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
12943}
12944
12945static void
12946print_mention_catch_exception_unhandled (struct breakpoint *b)
12947{
761269c8 12948 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
12949}
12950
6149aea9
PA
12951static void
12952print_recreate_catch_exception_unhandled (struct breakpoint *b,
12953 struct ui_file *fp)
12954{
761269c8 12955 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
12956}
12957
2060206e 12958static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
12959
12960/* Virtual table for "catch assert" breakpoints. */
12961
28010a5d
PA
12962static struct bp_location *
12963allocate_location_catch_assert (struct breakpoint *self)
12964{
761269c8 12965 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
12966}
12967
12968static void
12969re_set_catch_assert (struct breakpoint *b)
12970{
761269c8 12971 re_set_exception (ada_catch_assert, b);
28010a5d
PA
12972}
12973
12974static void
12975check_status_catch_assert (bpstat bs)
12976{
761269c8 12977 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
12978}
12979
f7f9143b 12980static enum print_stop_action
348d480f 12981print_it_catch_assert (bpstat bs)
f7f9143b 12982{
761269c8 12983 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
12984}
12985
12986static void
a6d9a66e 12987print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12988{
761269c8 12989 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
12990}
12991
12992static void
12993print_mention_catch_assert (struct breakpoint *b)
12994{
761269c8 12995 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
12996}
12997
6149aea9
PA
12998static void
12999print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
13000{
761269c8 13001 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
13002}
13003
2060206e 13004static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 13005
9f757bf7
XR
13006/* Virtual table for "catch handlers" breakpoints. */
13007
13008static struct bp_location *
13009allocate_location_catch_handlers (struct breakpoint *self)
13010{
13011 return allocate_location_exception (ada_catch_handlers, self);
13012}
13013
13014static void
13015re_set_catch_handlers (struct breakpoint *b)
13016{
13017 re_set_exception (ada_catch_handlers, b);
13018}
13019
13020static void
13021check_status_catch_handlers (bpstat bs)
13022{
13023 check_status_exception (ada_catch_handlers, bs);
13024}
13025
13026static enum print_stop_action
13027print_it_catch_handlers (bpstat bs)
13028{
13029 return print_it_exception (ada_catch_handlers, bs);
13030}
13031
13032static void
13033print_one_catch_handlers (struct breakpoint *b,
13034 struct bp_location **last_loc)
13035{
13036 print_one_exception (ada_catch_handlers, b, last_loc);
13037}
13038
13039static void
13040print_mention_catch_handlers (struct breakpoint *b)
13041{
13042 print_mention_exception (ada_catch_handlers, b);
13043}
13044
13045static void
13046print_recreate_catch_handlers (struct breakpoint *b,
13047 struct ui_file *fp)
13048{
13049 print_recreate_exception (ada_catch_handlers, b, fp);
13050}
13051
13052static struct breakpoint_ops catch_handlers_breakpoint_ops;
13053
f7f9143b
JB
13054/* Split the arguments specified in a "catch exception" command.
13055 Set EX to the appropriate catchpoint type.
28010a5d 13056 Set EXCEP_STRING to the name of the specific exception if
5845583d 13057 specified by the user.
9f757bf7
XR
13058 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
13059 "catch handlers" command. False otherwise.
5845583d
JB
13060 If a condition is found at the end of the arguments, the condition
13061 expression is stored in COND_STRING (memory must be deallocated
13062 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
13063
13064static void
a121b7c1 13065catch_ada_exception_command_split (const char *args,
9f757bf7 13066 bool is_catch_handlers_cmd,
761269c8 13067 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
13068 std::string *excep_string,
13069 std::string *cond_string)
f7f9143b 13070{
bc18fbb5 13071 std::string exception_name;
f7f9143b 13072
bc18fbb5
TT
13073 exception_name = extract_arg (&args);
13074 if (exception_name == "if")
5845583d
JB
13075 {
13076 /* This is not an exception name; this is the start of a condition
13077 expression for a catchpoint on all exceptions. So, "un-get"
13078 this token, and set exception_name to NULL. */
bc18fbb5 13079 exception_name.clear ();
5845583d
JB
13080 args -= 2;
13081 }
f7f9143b 13082
5845583d 13083 /* Check to see if we have a condition. */
f7f9143b 13084
f1735a53 13085 args = skip_spaces (args);
61012eef 13086 if (startswith (args, "if")
5845583d
JB
13087 && (isspace (args[2]) || args[2] == '\0'))
13088 {
13089 args += 2;
f1735a53 13090 args = skip_spaces (args);
5845583d
JB
13091
13092 if (args[0] == '\0')
13093 error (_("Condition missing after `if' keyword"));
bc18fbb5 13094 *cond_string = args;
5845583d
JB
13095
13096 args += strlen (args);
13097 }
13098
13099 /* Check that we do not have any more arguments. Anything else
13100 is unexpected. */
f7f9143b
JB
13101
13102 if (args[0] != '\0')
13103 error (_("Junk at end of expression"));
13104
9f757bf7
XR
13105 if (is_catch_handlers_cmd)
13106 {
13107 /* Catch handling of exceptions. */
13108 *ex = ada_catch_handlers;
13109 *excep_string = exception_name;
13110 }
bc18fbb5 13111 else if (exception_name.empty ())
f7f9143b
JB
13112 {
13113 /* Catch all exceptions. */
761269c8 13114 *ex = ada_catch_exception;
bc18fbb5 13115 excep_string->clear ();
f7f9143b 13116 }
bc18fbb5 13117 else if (exception_name == "unhandled")
f7f9143b
JB
13118 {
13119 /* Catch unhandled exceptions. */
761269c8 13120 *ex = ada_catch_exception_unhandled;
bc18fbb5 13121 excep_string->clear ();
f7f9143b
JB
13122 }
13123 else
13124 {
13125 /* Catch a specific exception. */
761269c8 13126 *ex = ada_catch_exception;
28010a5d 13127 *excep_string = exception_name;
f7f9143b
JB
13128 }
13129}
13130
13131/* Return the name of the symbol on which we should break in order to
13132 implement a catchpoint of the EX kind. */
13133
13134static const char *
761269c8 13135ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 13136{
3eecfa55
JB
13137 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
13138
13139 gdb_assert (data->exception_info != NULL);
0259addd 13140
f7f9143b
JB
13141 switch (ex)
13142 {
761269c8 13143 case ada_catch_exception:
3eecfa55 13144 return (data->exception_info->catch_exception_sym);
f7f9143b 13145 break;
761269c8 13146 case ada_catch_exception_unhandled:
3eecfa55 13147 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 13148 break;
761269c8 13149 case ada_catch_assert:
3eecfa55 13150 return (data->exception_info->catch_assert_sym);
f7f9143b 13151 break;
9f757bf7
XR
13152 case ada_catch_handlers:
13153 return (data->exception_info->catch_handlers_sym);
13154 break;
f7f9143b
JB
13155 default:
13156 internal_error (__FILE__, __LINE__,
13157 _("unexpected catchpoint kind (%d)"), ex);
13158 }
13159}
13160
13161/* Return the breakpoint ops "virtual table" used for catchpoints
13162 of the EX kind. */
13163
c0a91b2b 13164static const struct breakpoint_ops *
761269c8 13165ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
13166{
13167 switch (ex)
13168 {
761269c8 13169 case ada_catch_exception:
f7f9143b
JB
13170 return (&catch_exception_breakpoint_ops);
13171 break;
761269c8 13172 case ada_catch_exception_unhandled:
f7f9143b
JB
13173 return (&catch_exception_unhandled_breakpoint_ops);
13174 break;
761269c8 13175 case ada_catch_assert:
f7f9143b
JB
13176 return (&catch_assert_breakpoint_ops);
13177 break;
9f757bf7
XR
13178 case ada_catch_handlers:
13179 return (&catch_handlers_breakpoint_ops);
13180 break;
f7f9143b
JB
13181 default:
13182 internal_error (__FILE__, __LINE__,
13183 _("unexpected catchpoint kind (%d)"), ex);
13184 }
13185}
13186
13187/* Return the condition that will be used to match the current exception
13188 being raised with the exception that the user wants to catch. This
13189 assumes that this condition is used when the inferior just triggered
13190 an exception catchpoint.
cb7de75e 13191 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 13192
cb7de75e 13193static std::string
9f757bf7
XR
13194ada_exception_catchpoint_cond_string (const char *excep_string,
13195 enum ada_exception_catchpoint_kind ex)
f7f9143b 13196{
3d0b0fa3 13197 int i;
9f757bf7 13198 bool is_standard_exc = false;
cb7de75e 13199 std::string result;
9f757bf7
XR
13200
13201 if (ex == ada_catch_handlers)
13202 {
13203 /* For exception handlers catchpoints, the condition string does
13204 not use the same parameter as for the other exceptions. */
cb7de75e
TT
13205 result = ("long_integer (GNAT_GCC_exception_Access"
13206 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
13207 }
13208 else
cb7de75e 13209 result = "long_integer (e)";
3d0b0fa3 13210
0963b4bd 13211 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 13212 runtime units that have been compiled without debugging info; if
28010a5d 13213 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
13214 exception (e.g. "constraint_error") then, during the evaluation
13215 of the condition expression, the symbol lookup on this name would
0963b4bd 13216 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
13217 may then be set only on user-defined exceptions which have the
13218 same not-fully-qualified name (e.g. my_package.constraint_error).
13219
13220 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 13221 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
13222 exception constraint_error" is rewritten into "catch exception
13223 standard.constraint_error".
13224
13225 If an exception named contraint_error is defined in another package of
13226 the inferior program, then the only way to specify this exception as a
13227 breakpoint condition is to use its fully-qualified named:
13228 e.g. my_package.constraint_error. */
13229
13230 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
13231 {
28010a5d 13232 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 13233 {
9f757bf7
XR
13234 is_standard_exc = true;
13235 break;
3d0b0fa3
JB
13236 }
13237 }
9f757bf7 13238
cb7de75e
TT
13239 result += " = ";
13240
9f757bf7 13241 if (is_standard_exc)
cb7de75e 13242 string_appendf (result, "long_integer (&standard.%s)", excep_string);
9f757bf7 13243 else
cb7de75e 13244 string_appendf (result, "long_integer (&%s)", excep_string);
9f757bf7 13245
9f757bf7 13246 return result;
f7f9143b
JB
13247}
13248
13249/* Return the symtab_and_line that should be used to insert an exception
13250 catchpoint of the TYPE kind.
13251
28010a5d
PA
13252 ADDR_STRING returns the name of the function where the real
13253 breakpoint that implements the catchpoints is set, depending on the
13254 type of catchpoint we need to create. */
f7f9143b
JB
13255
13256static struct symtab_and_line
bc18fbb5 13257ada_exception_sal (enum ada_exception_catchpoint_kind ex,
f2fc3015 13258 const char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
13259{
13260 const char *sym_name;
13261 struct symbol *sym;
f7f9143b 13262
0259addd
JB
13263 /* First, find out which exception support info to use. */
13264 ada_exception_support_info_sniffer ();
13265
13266 /* Then lookup the function on which we will break in order to catch
f7f9143b 13267 the Ada exceptions requested by the user. */
f7f9143b
JB
13268 sym_name = ada_exception_sym_name (ex);
13269 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
13270
57aff202
JB
13271 if (sym == NULL)
13272 error (_("Catchpoint symbol not found: %s"), sym_name);
13273
13274 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
13275 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
13276
13277 /* Set ADDR_STRING. */
f7f9143b
JB
13278 *addr_string = xstrdup (sym_name);
13279
f7f9143b 13280 /* Set OPS. */
4b9eee8c 13281 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 13282
f17011e0 13283 return find_function_start_sal (sym, 1);
f7f9143b
JB
13284}
13285
b4a5b78b 13286/* Create an Ada exception catchpoint.
f7f9143b 13287
b4a5b78b 13288 EX_KIND is the kind of exception catchpoint to be created.
5845583d 13289
bc18fbb5 13290 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 13291 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 13292 of the exception to which this catchpoint applies.
2df4d1d5 13293
bc18fbb5 13294 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 13295
b4a5b78b
JB
13296 TEMPFLAG, if nonzero, means that the underlying breakpoint
13297 should be temporary.
28010a5d 13298
b4a5b78b 13299 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 13300
349774ef 13301void
28010a5d 13302create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 13303 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 13304 const std::string &excep_string,
56ecd069 13305 const std::string &cond_string,
28010a5d 13306 int tempflag,
349774ef 13307 int disabled,
28010a5d
PA
13308 int from_tty)
13309{
f2fc3015 13310 const char *addr_string = NULL;
b4a5b78b 13311 const struct breakpoint_ops *ops = NULL;
bc18fbb5 13312 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 13313
b270e6f9
TT
13314 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint ());
13315 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string,
349774ef 13316 ops, tempflag, disabled, from_tty);
28010a5d 13317 c->excep_string = excep_string;
9f757bf7 13318 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069
XR
13319 if (!cond_string.empty ())
13320 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty);
b270e6f9 13321 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
13322}
13323
9ac4176b
PA
13324/* Implement the "catch exception" command. */
13325
13326static void
eb4c3f4a 13327catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
13328 struct cmd_list_element *command)
13329{
a121b7c1 13330 const char *arg = arg_entry;
9ac4176b
PA
13331 struct gdbarch *gdbarch = get_current_arch ();
13332 int tempflag;
761269c8 13333 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 13334 std::string excep_string;
56ecd069 13335 std::string cond_string;
9ac4176b
PA
13336
13337 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13338
13339 if (!arg)
13340 arg = "";
9f757bf7 13341 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 13342 &cond_string);
9f757bf7
XR
13343 create_ada_exception_catchpoint (gdbarch, ex_kind,
13344 excep_string, cond_string,
13345 tempflag, 1 /* enabled */,
13346 from_tty);
13347}
13348
13349/* Implement the "catch handlers" command. */
13350
13351static void
13352catch_ada_handlers_command (const char *arg_entry, int from_tty,
13353 struct cmd_list_element *command)
13354{
13355 const char *arg = arg_entry;
13356 struct gdbarch *gdbarch = get_current_arch ();
13357 int tempflag;
13358 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 13359 std::string excep_string;
56ecd069 13360 std::string cond_string;
9f757bf7
XR
13361
13362 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13363
13364 if (!arg)
13365 arg = "";
13366 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 13367 &cond_string);
b4a5b78b
JB
13368 create_ada_exception_catchpoint (gdbarch, ex_kind,
13369 excep_string, cond_string,
349774ef
JB
13370 tempflag, 1 /* enabled */,
13371 from_tty);
9ac4176b
PA
13372}
13373
b4a5b78b 13374/* Split the arguments specified in a "catch assert" command.
5845583d 13375
b4a5b78b
JB
13376 ARGS contains the command's arguments (or the empty string if
13377 no arguments were passed).
5845583d
JB
13378
13379 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 13380 (the memory needs to be deallocated after use). */
5845583d 13381
b4a5b78b 13382static void
56ecd069 13383catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 13384{
f1735a53 13385 args = skip_spaces (args);
f7f9143b 13386
5845583d 13387 /* Check whether a condition was provided. */
61012eef 13388 if (startswith (args, "if")
5845583d 13389 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 13390 {
5845583d 13391 args += 2;
f1735a53 13392 args = skip_spaces (args);
5845583d
JB
13393 if (args[0] == '\0')
13394 error (_("condition missing after `if' keyword"));
56ecd069 13395 cond_string.assign (args);
f7f9143b
JB
13396 }
13397
5845583d
JB
13398 /* Otherwise, there should be no other argument at the end of
13399 the command. */
13400 else if (args[0] != '\0')
13401 error (_("Junk at end of arguments."));
f7f9143b
JB
13402}
13403
9ac4176b
PA
13404/* Implement the "catch assert" command. */
13405
13406static void
eb4c3f4a 13407catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
13408 struct cmd_list_element *command)
13409{
a121b7c1 13410 const char *arg = arg_entry;
9ac4176b
PA
13411 struct gdbarch *gdbarch = get_current_arch ();
13412 int tempflag;
56ecd069 13413 std::string cond_string;
9ac4176b
PA
13414
13415 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13416
13417 if (!arg)
13418 arg = "";
56ecd069 13419 catch_ada_assert_command_split (arg, cond_string);
761269c8 13420 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 13421 "", cond_string,
349774ef
JB
13422 tempflag, 1 /* enabled */,
13423 from_tty);
9ac4176b 13424}
778865d3
JB
13425
13426/* Return non-zero if the symbol SYM is an Ada exception object. */
13427
13428static int
13429ada_is_exception_sym (struct symbol *sym)
13430{
a737d952 13431 const char *type_name = TYPE_NAME (SYMBOL_TYPE (sym));
778865d3
JB
13432
13433 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
13434 && SYMBOL_CLASS (sym) != LOC_BLOCK
13435 && SYMBOL_CLASS (sym) != LOC_CONST
13436 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13437 && type_name != NULL && strcmp (type_name, "exception") == 0);
13438}
13439
13440/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13441 Ada exception object. This matches all exceptions except the ones
13442 defined by the Ada language. */
13443
13444static int
13445ada_is_non_standard_exception_sym (struct symbol *sym)
13446{
13447 int i;
13448
13449 if (!ada_is_exception_sym (sym))
13450 return 0;
13451
13452 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13453 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
13454 return 0; /* A standard exception. */
13455
13456 /* Numeric_Error is also a standard exception, so exclude it.
13457 See the STANDARD_EXC description for more details as to why
13458 this exception is not listed in that array. */
13459 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
13460 return 0;
13461
13462 return 1;
13463}
13464
ab816a27 13465/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
13466 objects.
13467
13468 The comparison is determined first by exception name, and then
13469 by exception address. */
13470
ab816a27 13471bool
cc536b21 13472ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 13473{
778865d3
JB
13474 int result;
13475
ab816a27
TT
13476 result = strcmp (name, other.name);
13477 if (result < 0)
13478 return true;
13479 if (result == 0 && addr < other.addr)
13480 return true;
13481 return false;
13482}
778865d3 13483
ab816a27 13484bool
cc536b21 13485ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
13486{
13487 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
13488}
13489
13490/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13491 routine, but keeping the first SKIP elements untouched.
13492
13493 All duplicates are also removed. */
13494
13495static void
ab816a27 13496sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
13497 int skip)
13498{
ab816a27
TT
13499 std::sort (exceptions->begin () + skip, exceptions->end ());
13500 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
13501 exceptions->end ());
778865d3
JB
13502}
13503
778865d3
JB
13504/* Add all exceptions defined by the Ada standard whose name match
13505 a regular expression.
13506
13507 If PREG is not NULL, then this regexp_t object is used to
13508 perform the symbol name matching. Otherwise, no name-based
13509 filtering is performed.
13510
13511 EXCEPTIONS is a vector of exceptions to which matching exceptions
13512 gets pushed. */
13513
13514static void
2d7cc5c7 13515ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 13516 std::vector<ada_exc_info> *exceptions)
778865d3
JB
13517{
13518 int i;
13519
13520 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13521 {
13522 if (preg == NULL
2d7cc5c7 13523 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
13524 {
13525 struct bound_minimal_symbol msymbol
13526 = ada_lookup_simple_minsym (standard_exc[i]);
13527
13528 if (msymbol.minsym != NULL)
13529 {
13530 struct ada_exc_info info
77e371c0 13531 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 13532
ab816a27 13533 exceptions->push_back (info);
778865d3
JB
13534 }
13535 }
13536 }
13537}
13538
13539/* Add all Ada exceptions defined locally and accessible from the given
13540 FRAME.
13541
13542 If PREG is not NULL, then this regexp_t object is used to
13543 perform the symbol name matching. Otherwise, no name-based
13544 filtering is performed.
13545
13546 EXCEPTIONS is a vector of exceptions to which matching exceptions
13547 gets pushed. */
13548
13549static void
2d7cc5c7
PA
13550ada_add_exceptions_from_frame (compiled_regex *preg,
13551 struct frame_info *frame,
ab816a27 13552 std::vector<ada_exc_info> *exceptions)
778865d3 13553{
3977b71f 13554 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
13555
13556 while (block != 0)
13557 {
13558 struct block_iterator iter;
13559 struct symbol *sym;
13560
13561 ALL_BLOCK_SYMBOLS (block, iter, sym)
13562 {
13563 switch (SYMBOL_CLASS (sym))
13564 {
13565 case LOC_TYPEDEF:
13566 case LOC_BLOCK:
13567 case LOC_CONST:
13568 break;
13569 default:
13570 if (ada_is_exception_sym (sym))
13571 {
13572 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13573 SYMBOL_VALUE_ADDRESS (sym)};
13574
ab816a27 13575 exceptions->push_back (info);
778865d3
JB
13576 }
13577 }
13578 }
13579 if (BLOCK_FUNCTION (block) != NULL)
13580 break;
13581 block = BLOCK_SUPERBLOCK (block);
13582 }
13583}
13584
14bc53a8
PA
13585/* Return true if NAME matches PREG or if PREG is NULL. */
13586
13587static bool
2d7cc5c7 13588name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
13589{
13590 return (preg == NULL
2d7cc5c7 13591 || preg->exec (ada_decode (name), 0, NULL, 0) == 0);
14bc53a8
PA
13592}
13593
778865d3
JB
13594/* Add all exceptions defined globally whose name name match
13595 a regular expression, excluding standard exceptions.
13596
13597 The reason we exclude standard exceptions is that they need
13598 to be handled separately: Standard exceptions are defined inside
13599 a runtime unit which is normally not compiled with debugging info,
13600 and thus usually do not show up in our symbol search. However,
13601 if the unit was in fact built with debugging info, we need to
13602 exclude them because they would duplicate the entry we found
13603 during the special loop that specifically searches for those
13604 standard exceptions.
13605
13606 If PREG is not NULL, then this regexp_t object is used to
13607 perform the symbol name matching. Otherwise, no name-based
13608 filtering is performed.
13609
13610 EXCEPTIONS is a vector of exceptions to which matching exceptions
13611 gets pushed. */
13612
13613static void
2d7cc5c7 13614ada_add_global_exceptions (compiled_regex *preg,
ab816a27 13615 std::vector<ada_exc_info> *exceptions)
778865d3
JB
13616{
13617 struct objfile *objfile;
43f3e411 13618 struct compunit_symtab *s;
778865d3 13619
14bc53a8
PA
13620 /* In Ada, the symbol "search name" is a linkage name, whereas the
13621 regular expression used to do the matching refers to the natural
13622 name. So match against the decoded name. */
13623 expand_symtabs_matching (NULL,
b5ec771e 13624 lookup_name_info::match_any (),
14bc53a8
PA
13625 [&] (const char *search_name)
13626 {
13627 const char *decoded = ada_decode (search_name);
13628 return name_matches_regex (decoded, preg);
13629 },
13630 NULL,
13631 VARIABLES_DOMAIN);
778865d3 13632
43f3e411 13633 ALL_COMPUNITS (objfile, s)
778865d3 13634 {
43f3e411 13635 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
778865d3
JB
13636 int i;
13637
13638 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13639 {
13640 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13641 struct block_iterator iter;
13642 struct symbol *sym;
13643
13644 ALL_BLOCK_SYMBOLS (b, iter, sym)
13645 if (ada_is_non_standard_exception_sym (sym)
14bc53a8 13646 && name_matches_regex (SYMBOL_NATURAL_NAME (sym), preg))
778865d3
JB
13647 {
13648 struct ada_exc_info info
13649 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13650
ab816a27 13651 exceptions->push_back (info);
778865d3
JB
13652 }
13653 }
13654 }
13655}
13656
13657/* Implements ada_exceptions_list with the regular expression passed
13658 as a regex_t, rather than a string.
13659
13660 If not NULL, PREG is used to filter out exceptions whose names
13661 do not match. Otherwise, all exceptions are listed. */
13662
ab816a27 13663static std::vector<ada_exc_info>
2d7cc5c7 13664ada_exceptions_list_1 (compiled_regex *preg)
778865d3 13665{
ab816a27 13666 std::vector<ada_exc_info> result;
778865d3
JB
13667 int prev_len;
13668
13669 /* First, list the known standard exceptions. These exceptions
13670 need to be handled separately, as they are usually defined in
13671 runtime units that have been compiled without debugging info. */
13672
13673 ada_add_standard_exceptions (preg, &result);
13674
13675 /* Next, find all exceptions whose scope is local and accessible
13676 from the currently selected frame. */
13677
13678 if (has_stack_frames ())
13679 {
ab816a27 13680 prev_len = result.size ();
778865d3
JB
13681 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13682 &result);
ab816a27 13683 if (result.size () > prev_len)
778865d3
JB
13684 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13685 }
13686
13687 /* Add all exceptions whose scope is global. */
13688
ab816a27 13689 prev_len = result.size ();
778865d3 13690 ada_add_global_exceptions (preg, &result);
ab816a27 13691 if (result.size () > prev_len)
778865d3
JB
13692 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13693
778865d3
JB
13694 return result;
13695}
13696
13697/* Return a vector of ada_exc_info.
13698
13699 If REGEXP is NULL, all exceptions are included in the result.
13700 Otherwise, it should contain a valid regular expression,
13701 and only the exceptions whose names match that regular expression
13702 are included in the result.
13703
13704 The exceptions are sorted in the following order:
13705 - Standard exceptions (defined by the Ada language), in
13706 alphabetical order;
13707 - Exceptions only visible from the current frame, in
13708 alphabetical order;
13709 - Exceptions whose scope is global, in alphabetical order. */
13710
ab816a27 13711std::vector<ada_exc_info>
778865d3
JB
13712ada_exceptions_list (const char *regexp)
13713{
2d7cc5c7
PA
13714 if (regexp == NULL)
13715 return ada_exceptions_list_1 (NULL);
778865d3 13716
2d7cc5c7
PA
13717 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13718 return ada_exceptions_list_1 (&reg);
778865d3
JB
13719}
13720
13721/* Implement the "info exceptions" command. */
13722
13723static void
1d12d88f 13724info_exceptions_command (const char *regexp, int from_tty)
778865d3 13725{
778865d3 13726 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13727
ab816a27 13728 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13729
13730 if (regexp != NULL)
13731 printf_filtered
13732 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13733 else
13734 printf_filtered (_("All defined Ada exceptions:\n"));
13735
ab816a27
TT
13736 for (const ada_exc_info &info : exceptions)
13737 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13738}
13739
4c4b4cd2
PH
13740 /* Operators */
13741/* Information about operators given special treatment in functions
13742 below. */
13743/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13744
13745#define ADA_OPERATORS \
13746 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13747 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13748 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13749 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13750 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13751 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13752 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13753 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13754 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13755 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13756 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13757 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13758 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13759 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13760 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13761 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13762 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13763 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13764 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13765
13766static void
554794dc
SDJ
13767ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13768 int *argsp)
4c4b4cd2
PH
13769{
13770 switch (exp->elts[pc - 1].opcode)
13771 {
76a01679 13772 default:
4c4b4cd2
PH
13773 operator_length_standard (exp, pc, oplenp, argsp);
13774 break;
13775
13776#define OP_DEFN(op, len, args, binop) \
13777 case op: *oplenp = len; *argsp = args; break;
13778 ADA_OPERATORS;
13779#undef OP_DEFN
52ce6436
PH
13780
13781 case OP_AGGREGATE:
13782 *oplenp = 3;
13783 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13784 break;
13785
13786 case OP_CHOICES:
13787 *oplenp = 3;
13788 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13789 break;
4c4b4cd2
PH
13790 }
13791}
13792
c0201579
JK
13793/* Implementation of the exp_descriptor method operator_check. */
13794
13795static int
13796ada_operator_check (struct expression *exp, int pos,
13797 int (*objfile_func) (struct objfile *objfile, void *data),
13798 void *data)
13799{
13800 const union exp_element *const elts = exp->elts;
13801 struct type *type = NULL;
13802
13803 switch (elts[pos].opcode)
13804 {
13805 case UNOP_IN_RANGE:
13806 case UNOP_QUAL:
13807 type = elts[pos + 1].type;
13808 break;
13809
13810 default:
13811 return operator_check_standard (exp, pos, objfile_func, data);
13812 }
13813
13814 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13815
13816 if (type && TYPE_OBJFILE (type)
13817 && (*objfile_func) (TYPE_OBJFILE (type), data))
13818 return 1;
13819
13820 return 0;
13821}
13822
a121b7c1 13823static const char *
4c4b4cd2
PH
13824ada_op_name (enum exp_opcode opcode)
13825{
13826 switch (opcode)
13827 {
76a01679 13828 default:
4c4b4cd2 13829 return op_name_standard (opcode);
52ce6436 13830
4c4b4cd2
PH
13831#define OP_DEFN(op, len, args, binop) case op: return #op;
13832 ADA_OPERATORS;
13833#undef OP_DEFN
52ce6436
PH
13834
13835 case OP_AGGREGATE:
13836 return "OP_AGGREGATE";
13837 case OP_CHOICES:
13838 return "OP_CHOICES";
13839 case OP_NAME:
13840 return "OP_NAME";
4c4b4cd2
PH
13841 }
13842}
13843
13844/* As for operator_length, but assumes PC is pointing at the first
13845 element of the operator, and gives meaningful results only for the
52ce6436 13846 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13847
13848static void
76a01679
JB
13849ada_forward_operator_length (struct expression *exp, int pc,
13850 int *oplenp, int *argsp)
4c4b4cd2 13851{
76a01679 13852 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13853 {
13854 default:
13855 *oplenp = *argsp = 0;
13856 break;
52ce6436 13857
4c4b4cd2
PH
13858#define OP_DEFN(op, len, args, binop) \
13859 case op: *oplenp = len; *argsp = args; break;
13860 ADA_OPERATORS;
13861#undef OP_DEFN
52ce6436
PH
13862
13863 case OP_AGGREGATE:
13864 *oplenp = 3;
13865 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13866 break;
13867
13868 case OP_CHOICES:
13869 *oplenp = 3;
13870 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13871 break;
13872
13873 case OP_STRING:
13874 case OP_NAME:
13875 {
13876 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13877
52ce6436
PH
13878 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13879 *argsp = 0;
13880 break;
13881 }
4c4b4cd2
PH
13882 }
13883}
13884
13885static int
13886ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13887{
13888 enum exp_opcode op = exp->elts[elt].opcode;
13889 int oplen, nargs;
13890 int pc = elt;
13891 int i;
76a01679 13892
4c4b4cd2
PH
13893 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13894
76a01679 13895 switch (op)
4c4b4cd2 13896 {
76a01679 13897 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13898 case OP_ATR_FIRST:
13899 case OP_ATR_LAST:
13900 case OP_ATR_LENGTH:
13901 case OP_ATR_IMAGE:
13902 case OP_ATR_MAX:
13903 case OP_ATR_MIN:
13904 case OP_ATR_MODULUS:
13905 case OP_ATR_POS:
13906 case OP_ATR_SIZE:
13907 case OP_ATR_TAG:
13908 case OP_ATR_VAL:
13909 break;
13910
13911 case UNOP_IN_RANGE:
13912 case UNOP_QUAL:
323e0a4a
AC
13913 /* XXX: gdb_sprint_host_address, type_sprint */
13914 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13915 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13916 fprintf_filtered (stream, " (");
13917 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13918 fprintf_filtered (stream, ")");
13919 break;
13920 case BINOP_IN_BOUNDS:
52ce6436
PH
13921 fprintf_filtered (stream, " (%d)",
13922 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13923 break;
13924 case TERNOP_IN_RANGE:
13925 break;
13926
52ce6436
PH
13927 case OP_AGGREGATE:
13928 case OP_OTHERS:
13929 case OP_DISCRETE_RANGE:
13930 case OP_POSITIONAL:
13931 case OP_CHOICES:
13932 break;
13933
13934 case OP_NAME:
13935 case OP_STRING:
13936 {
13937 char *name = &exp->elts[elt + 2].string;
13938 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13939
52ce6436
PH
13940 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13941 break;
13942 }
13943
4c4b4cd2
PH
13944 default:
13945 return dump_subexp_body_standard (exp, stream, elt);
13946 }
13947
13948 elt += oplen;
13949 for (i = 0; i < nargs; i += 1)
13950 elt = dump_subexp (exp, stream, elt);
13951
13952 return elt;
13953}
13954
13955/* The Ada extension of print_subexp (q.v.). */
13956
76a01679
JB
13957static void
13958ada_print_subexp (struct expression *exp, int *pos,
13959 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13960{
52ce6436 13961 int oplen, nargs, i;
4c4b4cd2
PH
13962 int pc = *pos;
13963 enum exp_opcode op = exp->elts[pc].opcode;
13964
13965 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13966
52ce6436 13967 *pos += oplen;
4c4b4cd2
PH
13968 switch (op)
13969 {
13970 default:
52ce6436 13971 *pos -= oplen;
4c4b4cd2
PH
13972 print_subexp_standard (exp, pos, stream, prec);
13973 return;
13974
13975 case OP_VAR_VALUE:
4c4b4cd2
PH
13976 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13977 return;
13978
13979 case BINOP_IN_BOUNDS:
323e0a4a 13980 /* XXX: sprint_subexp */
4c4b4cd2 13981 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13982 fputs_filtered (" in ", stream);
4c4b4cd2 13983 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13984 fputs_filtered ("'range", stream);
4c4b4cd2 13985 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13986 fprintf_filtered (stream, "(%ld)",
13987 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13988 return;
13989
13990 case TERNOP_IN_RANGE:
4c4b4cd2 13991 if (prec >= PREC_EQUAL)
76a01679 13992 fputs_filtered ("(", stream);
323e0a4a 13993 /* XXX: sprint_subexp */
4c4b4cd2 13994 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13995 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13996 print_subexp (exp, pos, stream, PREC_EQUAL);
13997 fputs_filtered (" .. ", stream);
13998 print_subexp (exp, pos, stream, PREC_EQUAL);
13999 if (prec >= PREC_EQUAL)
76a01679
JB
14000 fputs_filtered (")", stream);
14001 return;
4c4b4cd2
PH
14002
14003 case OP_ATR_FIRST:
14004 case OP_ATR_LAST:
14005 case OP_ATR_LENGTH:
14006 case OP_ATR_IMAGE:
14007 case OP_ATR_MAX:
14008 case OP_ATR_MIN:
14009 case OP_ATR_MODULUS:
14010 case OP_ATR_POS:
14011 case OP_ATR_SIZE:
14012 case OP_ATR_TAG:
14013 case OP_ATR_VAL:
4c4b4cd2 14014 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
14015 {
14016 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
14017 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
14018 &type_print_raw_options);
76a01679
JB
14019 *pos += 3;
14020 }
4c4b4cd2 14021 else
76a01679 14022 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
14023 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
14024 if (nargs > 1)
76a01679
JB
14025 {
14026 int tem;
5b4ee69b 14027
76a01679
JB
14028 for (tem = 1; tem < nargs; tem += 1)
14029 {
14030 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
14031 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
14032 }
14033 fputs_filtered (")", stream);
14034 }
4c4b4cd2 14035 return;
14f9c5c9 14036
4c4b4cd2 14037 case UNOP_QUAL:
4c4b4cd2
PH
14038 type_print (exp->elts[pc + 1].type, "", stream, 0);
14039 fputs_filtered ("'(", stream);
14040 print_subexp (exp, pos, stream, PREC_PREFIX);
14041 fputs_filtered (")", stream);
14042 return;
14f9c5c9 14043
4c4b4cd2 14044 case UNOP_IN_RANGE:
323e0a4a 14045 /* XXX: sprint_subexp */
4c4b4cd2 14046 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 14047 fputs_filtered (" in ", stream);
79d43c61
TT
14048 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
14049 &type_print_raw_options);
4c4b4cd2 14050 return;
52ce6436
PH
14051
14052 case OP_DISCRETE_RANGE:
14053 print_subexp (exp, pos, stream, PREC_SUFFIX);
14054 fputs_filtered ("..", stream);
14055 print_subexp (exp, pos, stream, PREC_SUFFIX);
14056 return;
14057
14058 case OP_OTHERS:
14059 fputs_filtered ("others => ", stream);
14060 print_subexp (exp, pos, stream, PREC_SUFFIX);
14061 return;
14062
14063 case OP_CHOICES:
14064 for (i = 0; i < nargs-1; i += 1)
14065 {
14066 if (i > 0)
14067 fputs_filtered ("|", stream);
14068 print_subexp (exp, pos, stream, PREC_SUFFIX);
14069 }
14070 fputs_filtered (" => ", stream);
14071 print_subexp (exp, pos, stream, PREC_SUFFIX);
14072 return;
14073
14074 case OP_POSITIONAL:
14075 print_subexp (exp, pos, stream, PREC_SUFFIX);
14076 return;
14077
14078 case OP_AGGREGATE:
14079 fputs_filtered ("(", stream);
14080 for (i = 0; i < nargs; i += 1)
14081 {
14082 if (i > 0)
14083 fputs_filtered (", ", stream);
14084 print_subexp (exp, pos, stream, PREC_SUFFIX);
14085 }
14086 fputs_filtered (")", stream);
14087 return;
4c4b4cd2
PH
14088 }
14089}
14f9c5c9
AS
14090
14091/* Table mapping opcodes into strings for printing operators
14092 and precedences of the operators. */
14093
d2e4a39e
AS
14094static const struct op_print ada_op_print_tab[] = {
14095 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
14096 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
14097 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
14098 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
14099 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
14100 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
14101 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
14102 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
14103 {"<=", BINOP_LEQ, PREC_ORDER, 0},
14104 {">=", BINOP_GEQ, PREC_ORDER, 0},
14105 {">", BINOP_GTR, PREC_ORDER, 0},
14106 {"<", BINOP_LESS, PREC_ORDER, 0},
14107 {">>", BINOP_RSH, PREC_SHIFT, 0},
14108 {"<<", BINOP_LSH, PREC_SHIFT, 0},
14109 {"+", BINOP_ADD, PREC_ADD, 0},
14110 {"-", BINOP_SUB, PREC_ADD, 0},
14111 {"&", BINOP_CONCAT, PREC_ADD, 0},
14112 {"*", BINOP_MUL, PREC_MUL, 0},
14113 {"/", BINOP_DIV, PREC_MUL, 0},
14114 {"rem", BINOP_REM, PREC_MUL, 0},
14115 {"mod", BINOP_MOD, PREC_MUL, 0},
14116 {"**", BINOP_EXP, PREC_REPEAT, 0},
14117 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
14118 {"-", UNOP_NEG, PREC_PREFIX, 0},
14119 {"+", UNOP_PLUS, PREC_PREFIX, 0},
14120 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
14121 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
14122 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
14123 {".all", UNOP_IND, PREC_SUFFIX, 1},
14124 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
14125 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 14126 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9
AS
14127};
14128\f
72d5681a
PH
14129enum ada_primitive_types {
14130 ada_primitive_type_int,
14131 ada_primitive_type_long,
14132 ada_primitive_type_short,
14133 ada_primitive_type_char,
14134 ada_primitive_type_float,
14135 ada_primitive_type_double,
14136 ada_primitive_type_void,
14137 ada_primitive_type_long_long,
14138 ada_primitive_type_long_double,
14139 ada_primitive_type_natural,
14140 ada_primitive_type_positive,
14141 ada_primitive_type_system_address,
08f49010 14142 ada_primitive_type_storage_offset,
72d5681a
PH
14143 nr_ada_primitive_types
14144};
6c038f32
PH
14145
14146static void
d4a9a881 14147ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
14148 struct language_arch_info *lai)
14149{
d4a9a881 14150 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 14151
72d5681a 14152 lai->primitive_type_vector
d4a9a881 14153 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 14154 struct type *);
e9bb382b
UW
14155
14156 lai->primitive_type_vector [ada_primitive_type_int]
14157 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14158 0, "integer");
14159 lai->primitive_type_vector [ada_primitive_type_long]
14160 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
14161 0, "long_integer");
14162 lai->primitive_type_vector [ada_primitive_type_short]
14163 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
14164 0, "short_integer");
14165 lai->string_char_type
14166 = lai->primitive_type_vector [ada_primitive_type_char]
cd7c1778 14167 = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
e9bb382b
UW
14168 lai->primitive_type_vector [ada_primitive_type_float]
14169 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
49f190bc 14170 "float", gdbarch_float_format (gdbarch));
e9bb382b
UW
14171 lai->primitive_type_vector [ada_primitive_type_double]
14172 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
49f190bc 14173 "long_float", gdbarch_double_format (gdbarch));
e9bb382b
UW
14174 lai->primitive_type_vector [ada_primitive_type_long_long]
14175 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
14176 0, "long_long_integer");
14177 lai->primitive_type_vector [ada_primitive_type_long_double]
5f3bceb6 14178 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
49f190bc 14179 "long_long_float", gdbarch_long_double_format (gdbarch));
e9bb382b
UW
14180 lai->primitive_type_vector [ada_primitive_type_natural]
14181 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14182 0, "natural");
14183 lai->primitive_type_vector [ada_primitive_type_positive]
14184 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14185 0, "positive");
14186 lai->primitive_type_vector [ada_primitive_type_void]
14187 = builtin->builtin_void;
14188
14189 lai->primitive_type_vector [ada_primitive_type_system_address]
77b7c781
UW
14190 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
14191 "void"));
72d5681a
PH
14192 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
14193 = "system__address";
fbb06eb1 14194
08f49010
XR
14195 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
14196 type. This is a signed integral type whose size is the same as
14197 the size of addresses. */
14198 {
14199 unsigned int addr_length = TYPE_LENGTH
14200 (lai->primitive_type_vector [ada_primitive_type_system_address]);
14201
14202 lai->primitive_type_vector [ada_primitive_type_storage_offset]
14203 = arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
14204 "storage_offset");
14205 }
14206
47e729a8 14207 lai->bool_type_symbol = NULL;
fbb06eb1 14208 lai->bool_type_default = builtin->builtin_bool;
6c038f32 14209}
6c038f32
PH
14210\f
14211 /* Language vector */
14212
14213/* Not really used, but needed in the ada_language_defn. */
14214
14215static void
6c7a06a3 14216emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 14217{
6c7a06a3 14218 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
14219}
14220
14221static int
410a0ff2 14222parse (struct parser_state *ps)
6c038f32
PH
14223{
14224 warnings_issued = 0;
410a0ff2 14225 return ada_parse (ps);
6c038f32
PH
14226}
14227
14228static const struct exp_descriptor ada_exp_descriptor = {
14229 ada_print_subexp,
14230 ada_operator_length,
c0201579 14231 ada_operator_check,
6c038f32
PH
14232 ada_op_name,
14233 ada_dump_subexp_body,
14234 ada_evaluate_subexp
14235};
14236
b5ec771e
PA
14237/* symbol_name_matcher_ftype adapter for wild_match. */
14238
14239static bool
14240do_wild_match (const char *symbol_search_name,
14241 const lookup_name_info &lookup_name,
a207cff2 14242 completion_match_result *comp_match_res)
b5ec771e
PA
14243{
14244 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
14245}
14246
14247/* symbol_name_matcher_ftype adapter for full_match. */
14248
14249static bool
14250do_full_match (const char *symbol_search_name,
14251 const lookup_name_info &lookup_name,
a207cff2 14252 completion_match_result *comp_match_res)
b5ec771e
PA
14253{
14254 return full_match (symbol_search_name, ada_lookup_name (lookup_name));
14255}
14256
14257/* Build the Ada lookup name for LOOKUP_NAME. */
14258
14259ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
14260{
14261 const std::string &user_name = lookup_name.name ();
14262
14263 if (user_name[0] == '<')
14264 {
14265 if (user_name.back () == '>')
14266 m_encoded_name = user_name.substr (1, user_name.size () - 2);
14267 else
14268 m_encoded_name = user_name.substr (1, user_name.size () - 1);
14269 m_encoded_p = true;
14270 m_verbatim_p = true;
14271 m_wild_match_p = false;
14272 m_standard_p = false;
14273 }
14274 else
14275 {
14276 m_verbatim_p = false;
14277
14278 m_encoded_p = user_name.find ("__") != std::string::npos;
14279
14280 if (!m_encoded_p)
14281 {
14282 const char *folded = ada_fold_name (user_name.c_str ());
14283 const char *encoded = ada_encode_1 (folded, false);
14284 if (encoded != NULL)
14285 m_encoded_name = encoded;
14286 else
14287 m_encoded_name = user_name;
14288 }
14289 else
14290 m_encoded_name = user_name;
14291
14292 /* Handle the 'package Standard' special case. See description
14293 of m_standard_p. */
14294 if (startswith (m_encoded_name.c_str (), "standard__"))
14295 {
14296 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
14297 m_standard_p = true;
14298 }
14299 else
14300 m_standard_p = false;
74ccd7f5 14301
b5ec771e
PA
14302 /* If the name contains a ".", then the user is entering a fully
14303 qualified entity name, and the match must not be done in wild
14304 mode. Similarly, if the user wants to complete what looks
14305 like an encoded name, the match must not be done in wild
14306 mode. Also, in the standard__ special case always do
14307 non-wild matching. */
14308 m_wild_match_p
14309 = (lookup_name.match_type () != symbol_name_match_type::FULL
14310 && !m_encoded_p
14311 && !m_standard_p
14312 && user_name.find ('.') == std::string::npos);
14313 }
14314}
14315
14316/* symbol_name_matcher_ftype method for Ada. This only handles
14317 completion mode. */
14318
14319static bool
14320ada_symbol_name_matches (const char *symbol_search_name,
14321 const lookup_name_info &lookup_name,
a207cff2 14322 completion_match_result *comp_match_res)
74ccd7f5 14323{
b5ec771e
PA
14324 return lookup_name.ada ().matches (symbol_search_name,
14325 lookup_name.match_type (),
a207cff2 14326 comp_match_res);
b5ec771e
PA
14327}
14328
de63c46b
PA
14329/* A name matcher that matches the symbol name exactly, with
14330 strcmp. */
14331
14332static bool
14333literal_symbol_name_matcher (const char *symbol_search_name,
14334 const lookup_name_info &lookup_name,
14335 completion_match_result *comp_match_res)
14336{
14337 const std::string &name = lookup_name.name ();
14338
14339 int cmp = (lookup_name.completion_mode ()
14340 ? strncmp (symbol_search_name, name.c_str (), name.size ())
14341 : strcmp (symbol_search_name, name.c_str ()));
14342 if (cmp == 0)
14343 {
14344 if (comp_match_res != NULL)
14345 comp_match_res->set_match (symbol_search_name);
14346 return true;
14347 }
14348 else
14349 return false;
14350}
14351
b5ec771e
PA
14352/* Implement the "la_get_symbol_name_matcher" language_defn method for
14353 Ada. */
14354
14355static symbol_name_matcher_ftype *
14356ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
14357{
de63c46b
PA
14358 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
14359 return literal_symbol_name_matcher;
14360
b5ec771e
PA
14361 if (lookup_name.completion_mode ())
14362 return ada_symbol_name_matches;
74ccd7f5 14363 else
b5ec771e
PA
14364 {
14365 if (lookup_name.ada ().wild_match_p ())
14366 return do_wild_match;
14367 else
14368 return do_full_match;
14369 }
74ccd7f5
JB
14370}
14371
a5ee536b
JB
14372/* Implement the "la_read_var_value" language_defn method for Ada. */
14373
14374static struct value *
63e43d3a
PMR
14375ada_read_var_value (struct symbol *var, const struct block *var_block,
14376 struct frame_info *frame)
a5ee536b 14377{
3977b71f 14378 const struct block *frame_block = NULL;
a5ee536b
JB
14379 struct symbol *renaming_sym = NULL;
14380
14381 /* The only case where default_read_var_value is not sufficient
14382 is when VAR is a renaming... */
14383 if (frame)
14384 frame_block = get_frame_block (frame, NULL);
14385 if (frame_block)
14386 renaming_sym = ada_find_renaming_symbol (var, frame_block);
14387 if (renaming_sym != NULL)
14388 return ada_read_renaming_var_value (renaming_sym, frame_block);
14389
14390 /* This is a typical case where we expect the default_read_var_value
14391 function to work. */
63e43d3a 14392 return default_read_var_value (var, var_block, frame);
a5ee536b
JB
14393}
14394
56618e20
TT
14395static const char *ada_extensions[] =
14396{
14397 ".adb", ".ads", ".a", ".ada", ".dg", NULL
14398};
14399
47e77640 14400extern const struct language_defn ada_language_defn = {
6c038f32 14401 "ada", /* Language name */
6abde28f 14402 "Ada",
6c038f32 14403 language_ada,
6c038f32 14404 range_check_off,
6c038f32
PH
14405 case_sensitive_on, /* Yes, Ada is case-insensitive, but
14406 that's not quite what this means. */
6c038f32 14407 array_row_major,
9a044a89 14408 macro_expansion_no,
56618e20 14409 ada_extensions,
6c038f32
PH
14410 &ada_exp_descriptor,
14411 parse,
6c038f32
PH
14412 resolve,
14413 ada_printchar, /* Print a character constant */
14414 ada_printstr, /* Function to print string constant */
14415 emit_char, /* Function to print single char (not used) */
6c038f32 14416 ada_print_type, /* Print a type using appropriate syntax */
be942545 14417 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
14418 ada_val_print, /* Print a value using appropriate syntax */
14419 ada_value_print, /* Print a top-level value */
a5ee536b 14420 ada_read_var_value, /* la_read_var_value */
6c038f32 14421 NULL, /* Language specific skip_trampoline */
2b2d9e11 14422 NULL, /* name_of_this */
59cc4834 14423 true, /* la_store_sym_names_in_linkage_form_p */
6c038f32
PH
14424 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
14425 basic_lookup_transparent_type, /* lookup_transparent_type */
14426 ada_la_decode, /* Language specific symbol demangler */
8b302db8 14427 ada_sniff_from_mangled_name,
0963b4bd
MS
14428 NULL, /* Language specific
14429 class_name_from_physname */
6c038f32
PH
14430 ada_op_print_tab, /* expression operators for printing */
14431 0, /* c-style arrays */
14432 1, /* String lower bound */
6c038f32 14433 ada_get_gdb_completer_word_break_characters,
eb3ff9a5 14434 ada_collect_symbol_completion_matches,
72d5681a 14435 ada_language_arch_info,
e79af960 14436 ada_print_array_index,
41f1b697 14437 default_pass_by_reference,
ae6a3a4c 14438 c_get_string,
e2b7af72 14439 ada_watch_location_expression,
b5ec771e 14440 ada_get_symbol_name_matcher, /* la_get_symbol_name_matcher */
f8eba3c6 14441 ada_iterate_over_symbols,
5ffa0793 14442 default_search_name_hash,
a53b64ea 14443 &ada_varobj_ops,
bb2ec1b3
TT
14444 NULL,
14445 NULL,
6c038f32
PH
14446 LANG_MAGIC
14447};
14448
5bf03f13
JB
14449/* Command-list for the "set/show ada" prefix command. */
14450static struct cmd_list_element *set_ada_list;
14451static struct cmd_list_element *show_ada_list;
14452
14453/* Implement the "set ada" prefix command. */
14454
14455static void
981a3fb3 14456set_ada_command (const char *arg, int from_tty)
5bf03f13
JB
14457{
14458 printf_unfiltered (_(\
14459"\"set ada\" must be followed by the name of a setting.\n"));
635c7e8a 14460 help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
5bf03f13
JB
14461}
14462
14463/* Implement the "show ada" prefix command. */
14464
14465static void
981a3fb3 14466show_ada_command (const char *args, int from_tty)
5bf03f13
JB
14467{
14468 cmd_show_list (show_ada_list, from_tty, "");
14469}
14470
2060206e
PA
14471static void
14472initialize_ada_catchpoint_ops (void)
14473{
14474 struct breakpoint_ops *ops;
14475
14476 initialize_breakpoint_ops ();
14477
14478 ops = &catch_exception_breakpoint_ops;
14479 *ops = bkpt_breakpoint_ops;
2060206e
PA
14480 ops->allocate_location = allocate_location_catch_exception;
14481 ops->re_set = re_set_catch_exception;
14482 ops->check_status = check_status_catch_exception;
14483 ops->print_it = print_it_catch_exception;
14484 ops->print_one = print_one_catch_exception;
14485 ops->print_mention = print_mention_catch_exception;
14486 ops->print_recreate = print_recreate_catch_exception;
14487
14488 ops = &catch_exception_unhandled_breakpoint_ops;
14489 *ops = bkpt_breakpoint_ops;
2060206e
PA
14490 ops->allocate_location = allocate_location_catch_exception_unhandled;
14491 ops->re_set = re_set_catch_exception_unhandled;
14492 ops->check_status = check_status_catch_exception_unhandled;
14493 ops->print_it = print_it_catch_exception_unhandled;
14494 ops->print_one = print_one_catch_exception_unhandled;
14495 ops->print_mention = print_mention_catch_exception_unhandled;
14496 ops->print_recreate = print_recreate_catch_exception_unhandled;
14497
14498 ops = &catch_assert_breakpoint_ops;
14499 *ops = bkpt_breakpoint_ops;
2060206e
PA
14500 ops->allocate_location = allocate_location_catch_assert;
14501 ops->re_set = re_set_catch_assert;
14502 ops->check_status = check_status_catch_assert;
14503 ops->print_it = print_it_catch_assert;
14504 ops->print_one = print_one_catch_assert;
14505 ops->print_mention = print_mention_catch_assert;
14506 ops->print_recreate = print_recreate_catch_assert;
9f757bf7
XR
14507
14508 ops = &catch_handlers_breakpoint_ops;
14509 *ops = bkpt_breakpoint_ops;
14510 ops->allocate_location = allocate_location_catch_handlers;
14511 ops->re_set = re_set_catch_handlers;
14512 ops->check_status = check_status_catch_handlers;
14513 ops->print_it = print_it_catch_handlers;
14514 ops->print_one = print_one_catch_handlers;
14515 ops->print_mention = print_mention_catch_handlers;
14516 ops->print_recreate = print_recreate_catch_handlers;
2060206e
PA
14517}
14518
3d9434b5
JB
14519/* This module's 'new_objfile' observer. */
14520
14521static void
14522ada_new_objfile_observer (struct objfile *objfile)
14523{
14524 ada_clear_symbol_cache ();
14525}
14526
14527/* This module's 'free_objfile' observer. */
14528
14529static void
14530ada_free_objfile_observer (struct objfile *objfile)
14531{
14532 ada_clear_symbol_cache ();
14533}
14534
d2e4a39e 14535void
6c038f32 14536_initialize_ada_language (void)
14f9c5c9 14537{
2060206e
PA
14538 initialize_ada_catchpoint_ops ();
14539
5bf03f13 14540 add_prefix_cmd ("ada", no_class, set_ada_command,
470678d7 14541 _("Prefix command for changing Ada-specific settings"),
5bf03f13
JB
14542 &set_ada_list, "set ada ", 0, &setlist);
14543
14544 add_prefix_cmd ("ada", no_class, show_ada_command,
14545 _("Generic command for showing Ada-specific settings."),
14546 &show_ada_list, "show ada ", 0, &showlist);
14547
14548 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14549 &trust_pad_over_xvs, _("\
14550Enable or disable an optimization trusting PAD types over XVS types"), _("\
14551Show whether an optimization trusting PAD types over XVS types is activated"),
14552 _("\
14553This is related to the encoding used by the GNAT compiler. The debugger\n\
14554should normally trust the contents of PAD types, but certain older versions\n\
14555of GNAT have a bug that sometimes causes the information in the PAD type\n\
14556to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14557work around this bug. It is always safe to turn this option \"off\", but\n\
14558this incurs a slight performance penalty, so it is recommended to NOT change\n\
14559this option to \"off\" unless necessary."),
14560 NULL, NULL, &set_ada_list, &show_ada_list);
14561
d72413e6
PMR
14562 add_setshow_boolean_cmd ("print-signatures", class_vars,
14563 &print_signatures, _("\
14564Enable or disable the output of formal and return types for functions in the \
14565overloads selection menu"), _("\
14566Show whether the output of formal and return types for functions in the \
14567overloads selection menu is activated"),
14568 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14569
9ac4176b
PA
14570 add_catch_command ("exception", _("\
14571Catch Ada exceptions, when raised.\n\
14572With an argument, catch only exceptions with the given name."),
14573 catch_ada_exception_command,
14574 NULL,
14575 CATCH_PERMANENT,
14576 CATCH_TEMPORARY);
9f757bf7
XR
14577
14578 add_catch_command ("handlers", _("\
14579Catch Ada exceptions, when handled.\n\
14580With an argument, catch only exceptions with the given name."),
14581 catch_ada_handlers_command,
14582 NULL,
14583 CATCH_PERMANENT,
14584 CATCH_TEMPORARY);
9ac4176b
PA
14585 add_catch_command ("assert", _("\
14586Catch failed Ada assertions, when raised.\n\
14587With an argument, catch only exceptions with the given name."),
14588 catch_assert_command,
14589 NULL,
14590 CATCH_PERMANENT,
14591 CATCH_TEMPORARY);
14592
6c038f32 14593 varsize_limit = 65536;
3fcded8f
JB
14594 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14595 &varsize_limit, _("\
14596Set the maximum number of bytes allowed in a variable-size object."), _("\
14597Show the maximum number of bytes allowed in a variable-size object."), _("\
14598Attempts to access an object whose size is not a compile-time constant\n\
14599and exceeds this limit will cause an error."),
14600 NULL, NULL, &setlist, &showlist);
6c038f32 14601
778865d3
JB
14602 add_info ("exceptions", info_exceptions_command,
14603 _("\
14604List all Ada exception names.\n\
14605If a regular expression is passed as an argument, only those matching\n\
14606the regular expression are listed."));
14607
c6044dd1
JB
14608 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
14609 _("Set Ada maintenance-related variables."),
14610 &maint_set_ada_cmdlist, "maintenance set ada ",
14611 0/*allow-unknown*/, &maintenance_set_cmdlist);
14612
14613 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
14614 _("Show Ada maintenance-related variables"),
14615 &maint_show_ada_cmdlist, "maintenance show ada ",
14616 0/*allow-unknown*/, &maintenance_show_cmdlist);
14617
14618 add_setshow_boolean_cmd
14619 ("ignore-descriptive-types", class_maintenance,
14620 &ada_ignore_descriptive_types_p,
14621 _("Set whether descriptive types generated by GNAT should be ignored."),
14622 _("Show whether descriptive types generated by GNAT should be ignored."),
14623 _("\
14624When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14625DWARF attribute."),
14626 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14627
459a2e4c
TT
14628 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14629 NULL, xcalloc, xfree);
6b69afc4 14630
3d9434b5 14631 /* The ada-lang observers. */
76727919
TT
14632 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14633 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14634 gdb::observers::inferior_exit.attach (ada_inferior_exit);
ee01b665
JB
14635
14636 /* Setup various context-specific data. */
e802dbe0 14637 ada_inferior_data
8e260fc0 14638 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
ee01b665
JB
14639 ada_pspace_data_handle
14640 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14f9c5c9 14641}
This page took 2.575881 seconds and 4 git commands to generate.