]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
make is_scalar_type non-static and use it in ada-lang.c
[thirdparty/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
32d0add0 3 Copyright (C) 1992-2015 Free Software Foundation, Inc.
14f9c5c9 4
a9762ec7 5 This file is part of GDB.
14f9c5c9 6
a9762ec7
JB
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
14f9c5c9 11
a9762ec7
JB
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
14f9c5c9 16
a9762ec7
JB
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
14f9c5c9 19
96d887e8 20
4c4b4cd2 21#include "defs.h"
14f9c5c9 22#include <ctype.h>
14f9c5c9 23#include "demangle.h"
4c4b4cd2
PH
24#include "gdb_regex.h"
25#include "frame.h"
14f9c5c9
AS
26#include "symtab.h"
27#include "gdbtypes.h"
28#include "gdbcmd.h"
29#include "expression.h"
30#include "parser-defs.h"
31#include "language.h"
a53b64ea 32#include "varobj.h"
14f9c5c9
AS
33#include "c-lang.h"
34#include "inferior.h"
35#include "symfile.h"
36#include "objfiles.h"
37#include "breakpoint.h"
38#include "gdbcore.h"
4c4b4cd2
PH
39#include "hashtab.h"
40#include "gdb_obstack.h"
14f9c5c9 41#include "ada-lang.h"
4c4b4cd2 42#include "completer.h"
53ce3c39 43#include <sys/stat.h>
14f9c5c9 44#include "ui-out.h"
fe898f56 45#include "block.h"
04714b91 46#include "infcall.h"
de4f826b 47#include "dictionary.h"
f7f9143b
JB
48#include "annotate.h"
49#include "valprint.h"
9bbc9174 50#include "source.h"
0259addd 51#include "observer.h"
2ba95b9b 52#include "vec.h"
692465f1 53#include "stack.h"
fa864999 54#include "gdb_vecs.h"
79d43c61 55#include "typeprint.h"
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"
ccefe4c4 63
4c4b4cd2 64/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 65 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
66 Copied from valarith.c. */
67
68#ifndef TRUNCATION_TOWARDS_ZERO
69#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
70#endif
71
d2e4a39e 72static struct type *desc_base_type (struct type *);
14f9c5c9 73
d2e4a39e 74static struct type *desc_bounds_type (struct type *);
14f9c5c9 75
d2e4a39e 76static struct value *desc_bounds (struct value *);
14f9c5c9 77
d2e4a39e 78static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 79
d2e4a39e 80static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 81
556bdfd4 82static struct type *desc_data_target_type (struct type *);
14f9c5c9 83
d2e4a39e 84static struct value *desc_data (struct value *);
14f9c5c9 85
d2e4a39e 86static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 87
d2e4a39e 88static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 89
d2e4a39e 90static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 91
d2e4a39e 92static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 93
d2e4a39e 94static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 95
d2e4a39e 96static struct type *desc_index_type (struct type *, int);
14f9c5c9 97
d2e4a39e 98static int desc_arity (struct type *);
14f9c5c9 99
d2e4a39e 100static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 101
d2e4a39e 102static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 103
40658b94
PH
104static int full_match (const char *, const char *);
105
40bc484c 106static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 107
4c4b4cd2 108static void ada_add_block_symbols (struct obstack *,
f0c5f9b2 109 const struct block *, const char *,
2570f2b7 110 domain_enum, struct objfile *, int);
14f9c5c9 111
22cee43f
PMR
112static void ada_add_all_symbols (struct obstack *, const struct block *,
113 const char *, domain_enum, int, int *);
114
d12307c1 115static int is_nonfunction (struct block_symbol *, int);
14f9c5c9 116
76a01679 117static void add_defn_to_vec (struct obstack *, struct symbol *,
f0c5f9b2 118 const struct block *);
14f9c5c9 119
4c4b4cd2
PH
120static int num_defns_collected (struct obstack *);
121
d12307c1 122static struct block_symbol *defns_collected (struct obstack *, int);
14f9c5c9 123
4c4b4cd2 124static struct value *resolve_subexp (struct expression **, int *, int,
76a01679 125 struct type *);
14f9c5c9 126
d2e4a39e 127static void replace_operator_with_call (struct expression **, int, int, int,
270140bd 128 struct symbol *, const struct block *);
14f9c5c9 129
d2e4a39e 130static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 131
4c4b4cd2
PH
132static char *ada_op_name (enum exp_opcode);
133
134static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 135
d2e4a39e 136static int numeric_type_p (struct type *);
14f9c5c9 137
d2e4a39e 138static int integer_type_p (struct type *);
14f9c5c9 139
d2e4a39e 140static int scalar_type_p (struct type *);
14f9c5c9 141
d2e4a39e 142static int discrete_type_p (struct type *);
14f9c5c9 143
aeb5907d
JB
144static enum ada_renaming_category parse_old_style_renaming (struct type *,
145 const char **,
146 int *,
147 const char **);
148
149static struct symbol *find_old_style_renaming_symbol (const char *,
270140bd 150 const struct block *);
aeb5907d 151
4c4b4cd2 152static struct type *ada_lookup_struct_elt_type (struct type *, char *,
76a01679 153 int, int, int *);
4c4b4cd2 154
d2e4a39e 155static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 156
b4ba55a1
JB
157static struct type *ada_find_parallel_type_with_name (struct type *,
158 const char *);
159
d2e4a39e 160static int is_dynamic_field (struct type *, int);
14f9c5c9 161
10a2c479 162static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 163 const gdb_byte *,
4c4b4cd2
PH
164 CORE_ADDR, struct value *);
165
166static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 167
28c85d6c 168static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 169
d2e4a39e 170static struct type *to_static_fixed_type (struct type *);
f192137b 171static struct type *static_unwrap_type (struct type *type);
14f9c5c9 172
d2e4a39e 173static struct value *unwrap_value (struct value *);
14f9c5c9 174
ad82864c 175static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 176
ad82864c 177static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 178
ad82864c
JB
179static long decode_packed_array_bitsize (struct type *);
180
181static struct value *decode_constrained_packed_array (struct value *);
182
183static int ada_is_packed_array_type (struct type *);
184
185static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 186
d2e4a39e 187static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 188 struct value **);
14f9c5c9 189
50810684 190static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
52ce6436 191
4c4b4cd2
PH
192static struct value *coerce_unspec_val_to_type (struct value *,
193 struct type *);
14f9c5c9 194
d2e4a39e 195static struct value *get_var_value (char *, char *);
14f9c5c9 196
d2e4a39e 197static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 198
d2e4a39e 199static int equiv_types (struct type *, struct type *);
14f9c5c9 200
d2e4a39e 201static int is_name_suffix (const char *);
14f9c5c9 202
73589123
PH
203static int advance_wild_match (const char **, const char *, int);
204
205static int wild_match (const char *, const char *);
14f9c5c9 206
d2e4a39e 207static struct value *ada_coerce_ref (struct value *);
14f9c5c9 208
4c4b4cd2
PH
209static LONGEST pos_atr (struct value *);
210
3cb382c9 211static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 212
d2e4a39e 213static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 214
4c4b4cd2
PH
215static struct symbol *standard_lookup (const char *, const struct block *,
216 domain_enum);
14f9c5c9 217
108d56a4 218static struct value *ada_search_struct_field (const char *, struct value *, int,
4c4b4cd2
PH
219 struct type *);
220
221static struct value *ada_value_primitive_field (struct value *, int, int,
222 struct type *);
223
0d5cff50 224static int find_struct_field (const char *, struct type *, int,
52ce6436 225 struct type **, int *, int *, int *, int *);
4c4b4cd2
PH
226
227static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
228 struct value *);
229
d12307c1 230static int ada_resolve_function (struct block_symbol *, int,
4c4b4cd2
PH
231 struct value **, int, const char *,
232 struct type *);
233
4c4b4cd2
PH
234static int ada_is_direct_array_type (struct type *);
235
72d5681a
PH
236static void ada_language_arch_info (struct gdbarch *,
237 struct language_arch_info *);
714e53ab 238
52ce6436
PH
239static struct value *ada_index_struct_field (int, struct value *, int,
240 struct type *);
241
242static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
243 struct expression *,
244 int *, enum noside);
52ce6436
PH
245
246static void aggregate_assign_from_choices (struct value *, struct value *,
247 struct expression *,
248 int *, LONGEST *, int *,
249 int, LONGEST, LONGEST);
250
251static void aggregate_assign_positional (struct value *, struct value *,
252 struct expression *,
253 int *, LONGEST *, int *, int,
254 LONGEST, LONGEST);
255
256
257static void aggregate_assign_others (struct value *, struct value *,
258 struct expression *,
259 int *, LONGEST *, int, LONGEST, LONGEST);
260
261
262static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
263
264
265static struct value *ada_evaluate_subexp (struct type *, struct expression *,
266 int *, enum noside);
267
268static void ada_forward_operator_length (struct expression *, int, int *,
269 int *);
852dff6c
JB
270
271static struct type *ada_find_any_type (const char *name);
4c4b4cd2
PH
272\f
273
ee01b665
JB
274/* The result of a symbol lookup to be stored in our symbol cache. */
275
276struct cache_entry
277{
278 /* The name used to perform the lookup. */
279 const char *name;
280 /* The namespace used during the lookup. */
fe978cb0 281 domain_enum domain;
ee01b665
JB
282 /* The symbol returned by the lookup, or NULL if no matching symbol
283 was found. */
284 struct symbol *sym;
285 /* The block where the symbol was found, or NULL if no matching
286 symbol was found. */
287 const struct block *block;
288 /* A pointer to the next entry with the same hash. */
289 struct cache_entry *next;
290};
291
292/* The Ada symbol cache, used to store the result of Ada-mode symbol
293 lookups in the course of executing the user's commands.
294
295 The cache is implemented using a simple, fixed-sized hash.
296 The size is fixed on the grounds that there are not likely to be
297 all that many symbols looked up during any given session, regardless
298 of the size of the symbol table. If we decide to go to a resizable
299 table, let's just use the stuff from libiberty instead. */
300
301#define HASH_SIZE 1009
302
303struct ada_symbol_cache
304{
305 /* An obstack used to store the entries in our cache. */
306 struct obstack cache_space;
307
308 /* The root of the hash table used to implement our symbol cache. */
309 struct cache_entry *root[HASH_SIZE];
310};
311
312static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
76a01679 313
4c4b4cd2 314/* Maximum-sized dynamic type. */
14f9c5c9
AS
315static unsigned int varsize_limit;
316
4c4b4cd2
PH
317/* FIXME: brobecker/2003-09-17: No longer a const because it is
318 returned by a function that does not return a const char *. */
319static char *ada_completer_word_break_characters =
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
345/* Space for allocating results of ada_lookup_symbol_list. */
346static struct obstack symbol_list_obstack;
347
c6044dd1
JB
348/* Maintenance-related settings for this module. */
349
350static struct cmd_list_element *maint_set_ada_cmdlist;
351static struct cmd_list_element *maint_show_ada_cmdlist;
352
353/* Implement the "maintenance set ada" (prefix) command. */
354
355static void
356maint_set_ada_cmd (char *args, int from_tty)
357{
635c7e8a
TT
358 help_list (maint_set_ada_cmdlist, "maintenance set ada ", all_commands,
359 gdb_stdout);
c6044dd1
JB
360}
361
362/* Implement the "maintenance show ada" (prefix) command. */
363
364static void
365maint_show_ada_cmd (char *args, int from_tty)
366{
367 cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
368}
369
370/* The "maintenance ada set/show ignore-descriptive-type" value. */
371
372static int ada_ignore_descriptive_types_p = 0;
373
e802dbe0
JB
374 /* Inferior-specific data. */
375
376/* Per-inferior data for this module. */
377
378struct ada_inferior_data
379{
380 /* The ada__tags__type_specific_data type, which is used when decoding
381 tagged types. With older versions of GNAT, this type was directly
382 accessible through a component ("tsd") in the object tag. But this
383 is no longer the case, so we cache it for each inferior. */
384 struct type *tsd_type;
3eecfa55
JB
385
386 /* The exception_support_info data. This data is used to determine
387 how to implement support for Ada exception catchpoints in a given
388 inferior. */
389 const struct exception_support_info *exception_info;
e802dbe0
JB
390};
391
392/* Our key to this module's inferior data. */
393static const struct inferior_data *ada_inferior_data;
394
395/* A cleanup routine for our inferior data. */
396static void
397ada_inferior_data_cleanup (struct inferior *inf, void *arg)
398{
399 struct ada_inferior_data *data;
400
9a3c8263 401 data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
e802dbe0
JB
402 if (data != NULL)
403 xfree (data);
404}
405
406/* Return our inferior data for the given inferior (INF).
407
408 This function always returns a valid pointer to an allocated
409 ada_inferior_data structure. If INF's inferior data has not
410 been previously set, this functions creates a new one with all
411 fields set to zero, sets INF's inferior to it, and then returns
412 a pointer to that newly allocated ada_inferior_data. */
413
414static struct ada_inferior_data *
415get_ada_inferior_data (struct inferior *inf)
416{
417 struct ada_inferior_data *data;
418
9a3c8263 419 data = (struct ada_inferior_data *) inferior_data (inf, ada_inferior_data);
e802dbe0
JB
420 if (data == NULL)
421 {
41bf6aca 422 data = XCNEW (struct ada_inferior_data);
e802dbe0
JB
423 set_inferior_data (inf, ada_inferior_data, data);
424 }
425
426 return data;
427}
428
429/* Perform all necessary cleanups regarding our module's inferior data
430 that is required after the inferior INF just exited. */
431
432static void
433ada_inferior_exit (struct inferior *inf)
434{
435 ada_inferior_data_cleanup (inf, NULL);
436 set_inferior_data (inf, ada_inferior_data, NULL);
437}
438
ee01b665
JB
439
440 /* program-space-specific data. */
441
442/* This module's per-program-space data. */
443struct ada_pspace_data
444{
445 /* The Ada symbol cache. */
446 struct ada_symbol_cache *sym_cache;
447};
448
449/* Key to our per-program-space data. */
450static const struct program_space_data *ada_pspace_data_handle;
451
452/* Return this module's data for the given program space (PSPACE).
453 If not is found, add a zero'ed one now.
454
455 This function always returns a valid object. */
456
457static struct ada_pspace_data *
458get_ada_pspace_data (struct program_space *pspace)
459{
460 struct ada_pspace_data *data;
461
9a3c8263
SM
462 data = ((struct ada_pspace_data *)
463 program_space_data (pspace, ada_pspace_data_handle));
ee01b665
JB
464 if (data == NULL)
465 {
466 data = XCNEW (struct ada_pspace_data);
467 set_program_space_data (pspace, ada_pspace_data_handle, data);
468 }
469
470 return data;
471}
472
473/* The cleanup callback for this module's per-program-space data. */
474
475static void
476ada_pspace_data_cleanup (struct program_space *pspace, void *data)
477{
9a3c8263 478 struct ada_pspace_data *pspace_data = (struct ada_pspace_data *) data;
ee01b665
JB
479
480 if (pspace_data->sym_cache != NULL)
481 ada_free_symbol_cache (pspace_data->sym_cache);
482 xfree (pspace_data);
483}
484
4c4b4cd2
PH
485 /* Utilities */
486
720d1a40 487/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 488 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
489
490 Normally, we really expect a typedef type to only have 1 typedef layer.
491 In other words, we really expect the target type of a typedef type to be
492 a non-typedef type. This is particularly true for Ada units, because
493 the language does not have a typedef vs not-typedef distinction.
494 In that respect, the Ada compiler has been trying to eliminate as many
495 typedef definitions in the debugging information, since they generally
496 do not bring any extra information (we still use typedef under certain
497 circumstances related mostly to the GNAT encoding).
498
499 Unfortunately, we have seen situations where the debugging information
500 generated by the compiler leads to such multiple typedef layers. For
501 instance, consider the following example with stabs:
502
503 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
504 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
505
506 This is an error in the debugging information which causes type
507 pck__float_array___XUP to be defined twice, and the second time,
508 it is defined as a typedef of a typedef.
509
510 This is on the fringe of legality as far as debugging information is
511 concerned, and certainly unexpected. But it is easy to handle these
512 situations correctly, so we can afford to be lenient in this case. */
513
514static struct type *
515ada_typedef_target_type (struct type *type)
516{
517 while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
518 type = TYPE_TARGET_TYPE (type);
519 return type;
520}
521
41d27058
JB
522/* Given DECODED_NAME a string holding a symbol name in its
523 decoded form (ie using the Ada dotted notation), returns
524 its unqualified name. */
525
526static const char *
527ada_unqualified_name (const char *decoded_name)
528{
2b0f535a
JB
529 const char *result;
530
531 /* If the decoded name starts with '<', it means that the encoded
532 name does not follow standard naming conventions, and thus that
533 it is not your typical Ada symbol name. Trying to unqualify it
534 is therefore pointless and possibly erroneous. */
535 if (decoded_name[0] == '<')
536 return decoded_name;
537
538 result = strrchr (decoded_name, '.');
41d27058
JB
539 if (result != NULL)
540 result++; /* Skip the dot... */
541 else
542 result = decoded_name;
543
544 return result;
545}
546
547/* Return a string starting with '<', followed by STR, and '>'.
548 The result is good until the next call. */
549
550static char *
551add_angle_brackets (const char *str)
552{
553 static char *result = NULL;
554
555 xfree (result);
88c15c34 556 result = xstrprintf ("<%s>", str);
41d27058
JB
557 return result;
558}
96d887e8 559
4c4b4cd2
PH
560static char *
561ada_get_gdb_completer_word_break_characters (void)
562{
563 return ada_completer_word_break_characters;
564}
565
e79af960
JB
566/* Print an array element index using the Ada syntax. */
567
568static void
569ada_print_array_index (struct value *index_value, struct ui_file *stream,
79a45b7d 570 const struct value_print_options *options)
e79af960 571{
79a45b7d 572 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
573 fprintf_filtered (stream, " => ");
574}
575
f27cf670 576/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 577 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 578 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 579
f27cf670
AS
580void *
581grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 582{
d2e4a39e
AS
583 if (*size < min_size)
584 {
585 *size *= 2;
586 if (*size < min_size)
4c4b4cd2 587 *size = min_size;
f27cf670 588 vect = xrealloc (vect, *size * element_size);
d2e4a39e 589 }
f27cf670 590 return vect;
14f9c5c9
AS
591}
592
593/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 594 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
595
596static int
ebf56fd3 597field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
598{
599 int len = strlen (target);
5b4ee69b 600
d2e4a39e 601 return
4c4b4cd2
PH
602 (strncmp (field_name, target, len) == 0
603 && (field_name[len] == '\0'
61012eef 604 || (startswith (field_name + len, "___")
76a01679
JB
605 && strcmp (field_name + strlen (field_name) - 6,
606 "___XVN") != 0)));
14f9c5c9
AS
607}
608
609
872c8b51
JB
610/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
611 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
612 and return its index. This function also handles fields whose name
613 have ___ suffixes because the compiler sometimes alters their name
614 by adding such a suffix to represent fields with certain constraints.
615 If the field could not be found, return a negative number if
616 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
617
618int
619ada_get_field_index (const struct type *type, const char *field_name,
620 int maybe_missing)
621{
622 int fieldno;
872c8b51
JB
623 struct type *struct_type = check_typedef ((struct type *) type);
624
625 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
626 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
627 return fieldno;
628
629 if (!maybe_missing)
323e0a4a 630 error (_("Unable to find field %s in struct %s. Aborting"),
872c8b51 631 field_name, TYPE_NAME (struct_type));
4c4b4cd2
PH
632
633 return -1;
634}
635
636/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
637
638int
d2e4a39e 639ada_name_prefix_len (const char *name)
14f9c5c9
AS
640{
641 if (name == NULL)
642 return 0;
d2e4a39e 643 else
14f9c5c9 644 {
d2e4a39e 645 const char *p = strstr (name, "___");
5b4ee69b 646
14f9c5c9 647 if (p == NULL)
4c4b4cd2 648 return strlen (name);
14f9c5c9 649 else
4c4b4cd2 650 return p - name;
14f9c5c9
AS
651 }
652}
653
4c4b4cd2
PH
654/* Return non-zero if SUFFIX is a suffix of STR.
655 Return zero if STR is null. */
656
14f9c5c9 657static int
d2e4a39e 658is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
659{
660 int len1, len2;
5b4ee69b 661
14f9c5c9
AS
662 if (str == NULL)
663 return 0;
664 len1 = strlen (str);
665 len2 = strlen (suffix);
4c4b4cd2 666 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
667}
668
4c4b4cd2
PH
669/* The contents of value VAL, treated as a value of type TYPE. The
670 result is an lval in memory if VAL is. */
14f9c5c9 671
d2e4a39e 672static struct value *
4c4b4cd2 673coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 674{
61ee279c 675 type = ada_check_typedef (type);
df407dfe 676 if (value_type (val) == type)
4c4b4cd2 677 return val;
d2e4a39e 678 else
14f9c5c9 679 {
4c4b4cd2
PH
680 struct value *result;
681
682 /* Make sure that the object size is not unreasonable before
683 trying to allocate some memory for it. */
c1b5a1a6 684 ada_ensure_varsize_limit (type);
4c4b4cd2 685
41e8491f
JK
686 if (value_lazy (val)
687 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
688 result = allocate_value_lazy (type);
689 else
690 {
691 result = allocate_value (type);
9a0dc9e3 692 value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
41e8491f 693 }
74bcbdf3 694 set_value_component_location (result, val);
9bbda503
AC
695 set_value_bitsize (result, value_bitsize (val));
696 set_value_bitpos (result, value_bitpos (val));
42ae5230 697 set_value_address (result, value_address (val));
14f9c5c9
AS
698 return result;
699 }
700}
701
fc1a4b47
AC
702static const gdb_byte *
703cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
704{
705 if (valaddr == NULL)
706 return NULL;
707 else
708 return valaddr + offset;
709}
710
711static CORE_ADDR
ebf56fd3 712cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
713{
714 if (address == 0)
715 return 0;
d2e4a39e 716 else
14f9c5c9
AS
717 return address + offset;
718}
719
4c4b4cd2
PH
720/* Issue a warning (as for the definition of warning in utils.c, but
721 with exactly one argument rather than ...), unless the limit on the
722 number of warnings has passed during the evaluation of the current
723 expression. */
a2249542 724
77109804
AC
725/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
726 provided by "complaint". */
a0b31db1 727static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 728
14f9c5c9 729static void
a2249542 730lim_warning (const char *format, ...)
14f9c5c9 731{
a2249542 732 va_list args;
a2249542 733
5b4ee69b 734 va_start (args, format);
4c4b4cd2
PH
735 warnings_issued += 1;
736 if (warnings_issued <= warning_limit)
a2249542
MK
737 vwarning (format, args);
738
739 va_end (args);
4c4b4cd2
PH
740}
741
714e53ab
PH
742/* Issue an error if the size of an object of type T is unreasonable,
743 i.e. if it would be a bad idea to allocate a value of this type in
744 GDB. */
745
c1b5a1a6
JB
746void
747ada_ensure_varsize_limit (const struct type *type)
714e53ab
PH
748{
749 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 750 error (_("object size is larger than varsize-limit"));
714e53ab
PH
751}
752
0963b4bd 753/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 754static LONGEST
c3e5cd34 755max_of_size (int size)
4c4b4cd2 756{
76a01679 757 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 758
76a01679 759 return top_bit | (top_bit - 1);
4c4b4cd2
PH
760}
761
0963b4bd 762/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 763static LONGEST
c3e5cd34 764min_of_size (int size)
4c4b4cd2 765{
c3e5cd34 766 return -max_of_size (size) - 1;
4c4b4cd2
PH
767}
768
0963b4bd 769/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 770static ULONGEST
c3e5cd34 771umax_of_size (int size)
4c4b4cd2 772{
76a01679 773 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 774
76a01679 775 return top_bit | (top_bit - 1);
4c4b4cd2
PH
776}
777
0963b4bd 778/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
779static LONGEST
780max_of_type (struct type *t)
4c4b4cd2 781{
c3e5cd34
PH
782 if (TYPE_UNSIGNED (t))
783 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
784 else
785 return max_of_size (TYPE_LENGTH (t));
786}
787
0963b4bd 788/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
789static LONGEST
790min_of_type (struct type *t)
791{
792 if (TYPE_UNSIGNED (t))
793 return 0;
794 else
795 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
796}
797
798/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
799LONGEST
800ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 801{
c3345124 802 type = resolve_dynamic_type (type, NULL, 0);
76a01679 803 switch (TYPE_CODE (type))
4c4b4cd2
PH
804 {
805 case TYPE_CODE_RANGE:
690cc4eb 806 return TYPE_HIGH_BOUND (type);
4c4b4cd2 807 case TYPE_CODE_ENUM:
14e75d8e 808 return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
690cc4eb
PH
809 case TYPE_CODE_BOOL:
810 return 1;
811 case TYPE_CODE_CHAR:
76a01679 812 case TYPE_CODE_INT:
690cc4eb 813 return max_of_type (type);
4c4b4cd2 814 default:
43bbcdc2 815 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
816 }
817}
818
14e75d8e 819/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
820LONGEST
821ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 822{
c3345124 823 type = resolve_dynamic_type (type, NULL, 0);
76a01679 824 switch (TYPE_CODE (type))
4c4b4cd2
PH
825 {
826 case TYPE_CODE_RANGE:
690cc4eb 827 return TYPE_LOW_BOUND (type);
4c4b4cd2 828 case TYPE_CODE_ENUM:
14e75d8e 829 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
830 case TYPE_CODE_BOOL:
831 return 0;
832 case TYPE_CODE_CHAR:
76a01679 833 case TYPE_CODE_INT:
690cc4eb 834 return min_of_type (type);
4c4b4cd2 835 default:
43bbcdc2 836 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
837 }
838}
839
840/* The identity on non-range types. For range types, the underlying
76a01679 841 non-range scalar type. */
4c4b4cd2
PH
842
843static struct type *
18af8284 844get_base_type (struct type *type)
4c4b4cd2
PH
845{
846 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
847 {
76a01679
JB
848 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
849 return type;
4c4b4cd2
PH
850 type = TYPE_TARGET_TYPE (type);
851 }
852 return type;
14f9c5c9 853}
41246937
JB
854
855/* Return a decoded version of the given VALUE. This means returning
856 a value whose type is obtained by applying all the GNAT-specific
857 encondings, making the resulting type a static but standard description
858 of the initial type. */
859
860struct value *
861ada_get_decoded_value (struct value *value)
862{
863 struct type *type = ada_check_typedef (value_type (value));
864
865 if (ada_is_array_descriptor_type (type)
866 || (ada_is_constrained_packed_array_type (type)
867 && TYPE_CODE (type) != TYPE_CODE_PTR))
868 {
869 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */
870 value = ada_coerce_to_simple_array_ptr (value);
871 else
872 value = ada_coerce_to_simple_array (value);
873 }
874 else
875 value = ada_to_fixed_value (value);
876
877 return value;
878}
879
880/* Same as ada_get_decoded_value, but with the given TYPE.
881 Because there is no associated actual value for this type,
882 the resulting type might be a best-effort approximation in
883 the case of dynamic types. */
884
885struct type *
886ada_get_decoded_type (struct type *type)
887{
888 type = to_static_fixed_type (type);
889 if (ada_is_constrained_packed_array_type (type))
890 type = ada_coerce_to_simple_array_type (type);
891 return type;
892}
893
4c4b4cd2 894\f
76a01679 895
4c4b4cd2 896 /* Language Selection */
14f9c5c9
AS
897
898/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 899 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 900
14f9c5c9 901enum language
ccefe4c4 902ada_update_initial_language (enum language lang)
14f9c5c9 903{
d2e4a39e 904 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
3b7344d5 905 (struct objfile *) NULL).minsym != NULL)
4c4b4cd2 906 return language_ada;
14f9c5c9
AS
907
908 return lang;
909}
96d887e8
PH
910
911/* If the main procedure is written in Ada, then return its name.
912 The result is good until the next call. Return NULL if the main
913 procedure doesn't appear to be in Ada. */
914
915char *
916ada_main_name (void)
917{
3b7344d5 918 struct bound_minimal_symbol msym;
f9bc20b9 919 static char *main_program_name = NULL;
6c038f32 920
96d887e8
PH
921 /* For Ada, the name of the main procedure is stored in a specific
922 string constant, generated by the binder. Look for that symbol,
923 extract its address, and then read that string. If we didn't find
924 that string, then most probably the main procedure is not written
925 in Ada. */
926 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
927
3b7344d5 928 if (msym.minsym != NULL)
96d887e8 929 {
f9bc20b9
JB
930 CORE_ADDR main_program_name_addr;
931 int err_code;
932
77e371c0 933 main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 934 if (main_program_name_addr == 0)
323e0a4a 935 error (_("Invalid address for Ada main program name."));
96d887e8 936
f9bc20b9
JB
937 xfree (main_program_name);
938 target_read_string (main_program_name_addr, &main_program_name,
939 1024, &err_code);
940
941 if (err_code != 0)
942 return NULL;
96d887e8
PH
943 return main_program_name;
944 }
945
946 /* The main procedure doesn't seem to be in Ada. */
947 return NULL;
948}
14f9c5c9 949\f
4c4b4cd2 950 /* Symbols */
d2e4a39e 951
4c4b4cd2
PH
952/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
953 of NULLs. */
14f9c5c9 954
d2e4a39e
AS
955const struct ada_opname_map ada_opname_table[] = {
956 {"Oadd", "\"+\"", BINOP_ADD},
957 {"Osubtract", "\"-\"", BINOP_SUB},
958 {"Omultiply", "\"*\"", BINOP_MUL},
959 {"Odivide", "\"/\"", BINOP_DIV},
960 {"Omod", "\"mod\"", BINOP_MOD},
961 {"Orem", "\"rem\"", BINOP_REM},
962 {"Oexpon", "\"**\"", BINOP_EXP},
963 {"Olt", "\"<\"", BINOP_LESS},
964 {"Ole", "\"<=\"", BINOP_LEQ},
965 {"Ogt", "\">\"", BINOP_GTR},
966 {"Oge", "\">=\"", BINOP_GEQ},
967 {"Oeq", "\"=\"", BINOP_EQUAL},
968 {"One", "\"/=\"", BINOP_NOTEQUAL},
969 {"Oand", "\"and\"", BINOP_BITWISE_AND},
970 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
971 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
972 {"Oconcat", "\"&\"", BINOP_CONCAT},
973 {"Oabs", "\"abs\"", UNOP_ABS},
974 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
975 {"Oadd", "\"+\"", UNOP_PLUS},
976 {"Osubtract", "\"-\"", UNOP_NEG},
977 {NULL, NULL}
14f9c5c9
AS
978};
979
4c4b4cd2
PH
980/* The "encoded" form of DECODED, according to GNAT conventions.
981 The result is valid until the next call to ada_encode. */
982
14f9c5c9 983char *
4c4b4cd2 984ada_encode (const char *decoded)
14f9c5c9 985{
4c4b4cd2
PH
986 static char *encoding_buffer = NULL;
987 static size_t encoding_buffer_size = 0;
d2e4a39e 988 const char *p;
14f9c5c9 989 int k;
d2e4a39e 990
4c4b4cd2 991 if (decoded == NULL)
14f9c5c9
AS
992 return NULL;
993
4c4b4cd2
PH
994 GROW_VECT (encoding_buffer, encoding_buffer_size,
995 2 * strlen (decoded) + 10);
14f9c5c9
AS
996
997 k = 0;
4c4b4cd2 998 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 999 {
cdc7bb92 1000 if (*p == '.')
4c4b4cd2
PH
1001 {
1002 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
1003 k += 2;
1004 }
14f9c5c9 1005 else if (*p == '"')
4c4b4cd2
PH
1006 {
1007 const struct ada_opname_map *mapping;
1008
1009 for (mapping = ada_opname_table;
1265e4aa 1010 mapping->encoded != NULL
61012eef 1011 && !startswith (p, mapping->decoded); mapping += 1)
4c4b4cd2
PH
1012 ;
1013 if (mapping->encoded == NULL)
323e0a4a 1014 error (_("invalid Ada operator name: %s"), p);
4c4b4cd2
PH
1015 strcpy (encoding_buffer + k, mapping->encoded);
1016 k += strlen (mapping->encoded);
1017 break;
1018 }
d2e4a39e 1019 else
4c4b4cd2
PH
1020 {
1021 encoding_buffer[k] = *p;
1022 k += 1;
1023 }
14f9c5c9
AS
1024 }
1025
4c4b4cd2
PH
1026 encoding_buffer[k] = '\0';
1027 return encoding_buffer;
14f9c5c9
AS
1028}
1029
1030/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
1031 quotes, unfolded, but with the quotes stripped away. Result good
1032 to next call. */
1033
d2e4a39e
AS
1034char *
1035ada_fold_name (const char *name)
14f9c5c9 1036{
d2e4a39e 1037 static char *fold_buffer = NULL;
14f9c5c9
AS
1038 static size_t fold_buffer_size = 0;
1039
1040 int len = strlen (name);
d2e4a39e 1041 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
1042
1043 if (name[0] == '\'')
1044 {
d2e4a39e
AS
1045 strncpy (fold_buffer, name + 1, len - 2);
1046 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
1047 }
1048 else
1049 {
1050 int i;
5b4ee69b 1051
14f9c5c9 1052 for (i = 0; i <= len; i += 1)
4c4b4cd2 1053 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
1054 }
1055
1056 return fold_buffer;
1057}
1058
529cad9c
PH
1059/* Return nonzero if C is either a digit or a lowercase alphabet character. */
1060
1061static int
1062is_lower_alphanum (const char c)
1063{
1064 return (isdigit (c) || (isalpha (c) && islower (c)));
1065}
1066
c90092fe
JB
1067/* ENCODED is the linkage name of a symbol and LEN contains its length.
1068 This function saves in LEN the length of that same symbol name but
1069 without either of these suffixes:
29480c32
JB
1070 . .{DIGIT}+
1071 . ${DIGIT}+
1072 . ___{DIGIT}+
1073 . __{DIGIT}+.
c90092fe 1074
29480c32
JB
1075 These are suffixes introduced by the compiler for entities such as
1076 nested subprogram for instance, in order to avoid name clashes.
1077 They do not serve any purpose for the debugger. */
1078
1079static void
1080ada_remove_trailing_digits (const char *encoded, int *len)
1081{
1082 if (*len > 1 && isdigit (encoded[*len - 1]))
1083 {
1084 int i = *len - 2;
5b4ee69b 1085
29480c32
JB
1086 while (i > 0 && isdigit (encoded[i]))
1087 i--;
1088 if (i >= 0 && encoded[i] == '.')
1089 *len = i;
1090 else if (i >= 0 && encoded[i] == '$')
1091 *len = i;
61012eef 1092 else if (i >= 2 && startswith (encoded + i - 2, "___"))
29480c32 1093 *len = i - 2;
61012eef 1094 else if (i >= 1 && startswith (encoded + i - 1, "__"))
29480c32
JB
1095 *len = i - 1;
1096 }
1097}
1098
1099/* Remove the suffix introduced by the compiler for protected object
1100 subprograms. */
1101
1102static void
1103ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1104{
1105 /* Remove trailing N. */
1106
1107 /* Protected entry subprograms are broken into two
1108 separate subprograms: The first one is unprotected, and has
1109 a 'N' suffix; the second is the protected version, and has
0963b4bd 1110 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1111 the protection. Since the P subprograms are internally generated,
1112 we leave these names undecoded, giving the user a clue that this
1113 entity is internal. */
1114
1115 if (*len > 1
1116 && encoded[*len - 1] == 'N'
1117 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1118 *len = *len - 1;
1119}
1120
69fadcdf
JB
1121/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
1122
1123static void
1124ada_remove_Xbn_suffix (const char *encoded, int *len)
1125{
1126 int i = *len - 1;
1127
1128 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1129 i--;
1130
1131 if (encoded[i] != 'X')
1132 return;
1133
1134 if (i == 0)
1135 return;
1136
1137 if (isalnum (encoded[i-1]))
1138 *len = i;
1139}
1140
29480c32
JB
1141/* If ENCODED follows the GNAT entity encoding conventions, then return
1142 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1143 replaced by ENCODED.
14f9c5c9 1144
4c4b4cd2 1145 The resulting string is valid until the next call of ada_decode.
29480c32 1146 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
1147 is returned. */
1148
1149const char *
1150ada_decode (const char *encoded)
14f9c5c9
AS
1151{
1152 int i, j;
1153 int len0;
d2e4a39e 1154 const char *p;
4c4b4cd2 1155 char *decoded;
14f9c5c9 1156 int at_start_name;
4c4b4cd2
PH
1157 static char *decoding_buffer = NULL;
1158 static size_t decoding_buffer_size = 0;
d2e4a39e 1159
29480c32
JB
1160 /* The name of the Ada main procedure starts with "_ada_".
1161 This prefix is not part of the decoded name, so skip this part
1162 if we see this prefix. */
61012eef 1163 if (startswith (encoded, "_ada_"))
4c4b4cd2 1164 encoded += 5;
14f9c5c9 1165
29480c32
JB
1166 /* If the name starts with '_', then it is not a properly encoded
1167 name, so do not attempt to decode it. Similarly, if the name
1168 starts with '<', the name should not be decoded. */
4c4b4cd2 1169 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1170 goto Suppress;
1171
4c4b4cd2 1172 len0 = strlen (encoded);
4c4b4cd2 1173
29480c32
JB
1174 ada_remove_trailing_digits (encoded, &len0);
1175 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1176
4c4b4cd2
PH
1177 /* Remove the ___X.* suffix if present. Do not forget to verify that
1178 the suffix is located before the current "end" of ENCODED. We want
1179 to avoid re-matching parts of ENCODED that have previously been
1180 marked as discarded (by decrementing LEN0). */
1181 p = strstr (encoded, "___");
1182 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1183 {
1184 if (p[3] == 'X')
4c4b4cd2 1185 len0 = p - encoded;
14f9c5c9 1186 else
4c4b4cd2 1187 goto Suppress;
14f9c5c9 1188 }
4c4b4cd2 1189
29480c32
JB
1190 /* Remove any trailing TKB suffix. It tells us that this symbol
1191 is for the body of a task, but that information does not actually
1192 appear in the decoded name. */
1193
61012eef 1194 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
14f9c5c9 1195 len0 -= 3;
76a01679 1196
a10967fa
JB
1197 /* Remove any trailing TB suffix. The TB suffix is slightly different
1198 from the TKB suffix because it is used for non-anonymous task
1199 bodies. */
1200
61012eef 1201 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
a10967fa
JB
1202 len0 -= 2;
1203
29480c32
JB
1204 /* Remove trailing "B" suffixes. */
1205 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1206
61012eef 1207 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
14f9c5c9
AS
1208 len0 -= 1;
1209
4c4b4cd2 1210 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1211
4c4b4cd2
PH
1212 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1213 decoded = decoding_buffer;
14f9c5c9 1214
29480c32
JB
1215 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1216
4c4b4cd2 1217 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1218 {
4c4b4cd2
PH
1219 i = len0 - 2;
1220 while ((i >= 0 && isdigit (encoded[i]))
1221 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1222 i -= 1;
1223 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1224 len0 = i - 1;
1225 else if (encoded[i] == '$')
1226 len0 = i;
d2e4a39e 1227 }
14f9c5c9 1228
29480c32
JB
1229 /* The first few characters that are not alphabetic are not part
1230 of any encoding we use, so we can copy them over verbatim. */
1231
4c4b4cd2
PH
1232 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1233 decoded[j] = encoded[i];
14f9c5c9
AS
1234
1235 at_start_name = 1;
1236 while (i < len0)
1237 {
29480c32 1238 /* Is this a symbol function? */
4c4b4cd2
PH
1239 if (at_start_name && encoded[i] == 'O')
1240 {
1241 int k;
5b4ee69b 1242
4c4b4cd2
PH
1243 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1244 {
1245 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1246 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1247 op_len - 1) == 0)
1248 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1249 {
1250 strcpy (decoded + j, ada_opname_table[k].decoded);
1251 at_start_name = 0;
1252 i += op_len;
1253 j += strlen (ada_opname_table[k].decoded);
1254 break;
1255 }
1256 }
1257 if (ada_opname_table[k].encoded != NULL)
1258 continue;
1259 }
14f9c5c9
AS
1260 at_start_name = 0;
1261
529cad9c
PH
1262 /* Replace "TK__" with "__", which will eventually be translated
1263 into "." (just below). */
1264
61012eef 1265 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
4c4b4cd2 1266 i += 2;
529cad9c 1267
29480c32
JB
1268 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1269 be translated into "." (just below). These are internal names
1270 generated for anonymous blocks inside which our symbol is nested. */
1271
1272 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1273 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1274 && isdigit (encoded [i+4]))
1275 {
1276 int k = i + 5;
1277
1278 while (k < len0 && isdigit (encoded[k]))
1279 k++; /* Skip any extra digit. */
1280
1281 /* Double-check that the "__B_{DIGITS}+" sequence we found
1282 is indeed followed by "__". */
1283 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1284 i = k;
1285 }
1286
529cad9c
PH
1287 /* Remove _E{DIGITS}+[sb] */
1288
1289 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1290 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1291 one implements the actual entry code, and has a suffix following
1292 the convention above; the second one implements the barrier and
1293 uses the same convention as above, except that the 'E' is replaced
1294 by a 'B'.
1295
1296 Just as above, we do not decode the name of barrier functions
1297 to give the user a clue that the code he is debugging has been
1298 internally generated. */
1299
1300 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1301 && isdigit (encoded[i+2]))
1302 {
1303 int k = i + 3;
1304
1305 while (k < len0 && isdigit (encoded[k]))
1306 k++;
1307
1308 if (k < len0
1309 && (encoded[k] == 'b' || encoded[k] == 's'))
1310 {
1311 k++;
1312 /* Just as an extra precaution, make sure that if this
1313 suffix is followed by anything else, it is a '_'.
1314 Otherwise, we matched this sequence by accident. */
1315 if (k == len0
1316 || (k < len0 && encoded[k] == '_'))
1317 i = k;
1318 }
1319 }
1320
1321 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1322 the GNAT front-end in protected object subprograms. */
1323
1324 if (i < len0 + 3
1325 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1326 {
1327 /* Backtrack a bit up until we reach either the begining of
1328 the encoded name, or "__". Make sure that we only find
1329 digits or lowercase characters. */
1330 const char *ptr = encoded + i - 1;
1331
1332 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1333 ptr--;
1334 if (ptr < encoded
1335 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1336 i++;
1337 }
1338
4c4b4cd2
PH
1339 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1340 {
29480c32
JB
1341 /* This is a X[bn]* sequence not separated from the previous
1342 part of the name with a non-alpha-numeric character (in other
1343 words, immediately following an alpha-numeric character), then
1344 verify that it is placed at the end of the encoded name. If
1345 not, then the encoding is not valid and we should abort the
1346 decoding. Otherwise, just skip it, it is used in body-nested
1347 package names. */
4c4b4cd2
PH
1348 do
1349 i += 1;
1350 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1351 if (i < len0)
1352 goto Suppress;
1353 }
cdc7bb92 1354 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1355 {
29480c32 1356 /* Replace '__' by '.'. */
4c4b4cd2
PH
1357 decoded[j] = '.';
1358 at_start_name = 1;
1359 i += 2;
1360 j += 1;
1361 }
14f9c5c9 1362 else
4c4b4cd2 1363 {
29480c32
JB
1364 /* It's a character part of the decoded name, so just copy it
1365 over. */
4c4b4cd2
PH
1366 decoded[j] = encoded[i];
1367 i += 1;
1368 j += 1;
1369 }
14f9c5c9 1370 }
4c4b4cd2 1371 decoded[j] = '\000';
14f9c5c9 1372
29480c32
JB
1373 /* Decoded names should never contain any uppercase character.
1374 Double-check this, and abort the decoding if we find one. */
1375
4c4b4cd2
PH
1376 for (i = 0; decoded[i] != '\0'; i += 1)
1377 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1378 goto Suppress;
1379
4c4b4cd2
PH
1380 if (strcmp (decoded, encoded) == 0)
1381 return encoded;
1382 else
1383 return decoded;
14f9c5c9
AS
1384
1385Suppress:
4c4b4cd2
PH
1386 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1387 decoded = decoding_buffer;
1388 if (encoded[0] == '<')
1389 strcpy (decoded, encoded);
14f9c5c9 1390 else
88c15c34 1391 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1392 return decoded;
1393
1394}
1395
1396/* Table for keeping permanent unique copies of decoded names. Once
1397 allocated, names in this table are never released. While this is a
1398 storage leak, it should not be significant unless there are massive
1399 changes in the set of decoded names in successive versions of a
1400 symbol table loaded during a single session. */
1401static struct htab *decoded_names_store;
1402
1403/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1404 in the language-specific part of GSYMBOL, if it has not been
1405 previously computed. Tries to save the decoded name in the same
1406 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1407 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1408 GSYMBOL).
4c4b4cd2
PH
1409 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1410 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1411 when a decoded name is cached in it. */
4c4b4cd2 1412
45e6c716 1413const char *
f85f34ed 1414ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1415{
f85f34ed
TT
1416 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1417 const char **resultp =
615b3f62 1418 &gsymbol->language_specific.demangled_name;
5b4ee69b 1419
f85f34ed 1420 if (!gsymbol->ada_mangled)
4c4b4cd2
PH
1421 {
1422 const char *decoded = ada_decode (gsymbol->name);
f85f34ed 1423 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1424
f85f34ed 1425 gsymbol->ada_mangled = 1;
5b4ee69b 1426
f85f34ed 1427 if (obstack != NULL)
224c3ddb
SM
1428 *resultp
1429 = (const char *) obstack_copy0 (obstack, decoded, strlen (decoded));
f85f34ed 1430 else
76a01679 1431 {
f85f34ed
TT
1432 /* Sometimes, we can't find a corresponding objfile, in
1433 which case, we put the result on the heap. Since we only
1434 decode when needed, we hope this usually does not cause a
1435 significant memory leak (FIXME). */
1436
76a01679
JB
1437 char **slot = (char **) htab_find_slot (decoded_names_store,
1438 decoded, INSERT);
5b4ee69b 1439
76a01679
JB
1440 if (*slot == NULL)
1441 *slot = xstrdup (decoded);
1442 *resultp = *slot;
1443 }
4c4b4cd2 1444 }
14f9c5c9 1445
4c4b4cd2
PH
1446 return *resultp;
1447}
76a01679 1448
2c0b251b 1449static char *
76a01679 1450ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1451{
1452 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1453}
1454
1455/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
4c4b4cd2
PH
1456 suffixes that encode debugging information or leading _ada_ on
1457 SYM_NAME (see is_name_suffix commentary for the debugging
1458 information that is ignored). If WILD, then NAME need only match a
1459 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1460 either argument is NULL. */
14f9c5c9 1461
2c0b251b 1462static int
40658b94 1463match_name (const char *sym_name, const char *name, int wild)
14f9c5c9
AS
1464{
1465 if (sym_name == NULL || name == NULL)
1466 return 0;
1467 else if (wild)
73589123 1468 return wild_match (sym_name, name) == 0;
d2e4a39e
AS
1469 else
1470 {
1471 int len_name = strlen (name);
5b4ee69b 1472
4c4b4cd2
PH
1473 return (strncmp (sym_name, name, len_name) == 0
1474 && is_name_suffix (sym_name + len_name))
61012eef 1475 || (startswith (sym_name, "_ada_")
4c4b4cd2
PH
1476 && strncmp (sym_name + 5, name, len_name) == 0
1477 && is_name_suffix (sym_name + len_name + 5));
d2e4a39e 1478 }
14f9c5c9 1479}
14f9c5c9 1480\f
d2e4a39e 1481
4c4b4cd2 1482 /* Arrays */
14f9c5c9 1483
28c85d6c
JB
1484/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1485 generated by the GNAT compiler to describe the index type used
1486 for each dimension of an array, check whether it follows the latest
1487 known encoding. If not, fix it up to conform to the latest encoding.
1488 Otherwise, do nothing. This function also does nothing if
1489 INDEX_DESC_TYPE is NULL.
1490
1491 The GNAT encoding used to describle the array index type evolved a bit.
1492 Initially, the information would be provided through the name of each
1493 field of the structure type only, while the type of these fields was
1494 described as unspecified and irrelevant. The debugger was then expected
1495 to perform a global type lookup using the name of that field in order
1496 to get access to the full index type description. Because these global
1497 lookups can be very expensive, the encoding was later enhanced to make
1498 the global lookup unnecessary by defining the field type as being
1499 the full index type description.
1500
1501 The purpose of this routine is to allow us to support older versions
1502 of the compiler by detecting the use of the older encoding, and by
1503 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1504 we essentially replace each field's meaningless type by the associated
1505 index subtype). */
1506
1507void
1508ada_fixup_array_indexes_type (struct type *index_desc_type)
1509{
1510 int i;
1511
1512 if (index_desc_type == NULL)
1513 return;
1514 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1515
1516 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1517 to check one field only, no need to check them all). If not, return
1518 now.
1519
1520 If our INDEX_DESC_TYPE was generated using the older encoding,
1521 the field type should be a meaningless integer type whose name
1522 is not equal to the field name. */
1523 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1524 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1525 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1526 return;
1527
1528 /* Fixup each field of INDEX_DESC_TYPE. */
1529 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1530 {
0d5cff50 1531 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1532 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1533
1534 if (raw_type)
1535 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1536 }
1537}
1538
4c4b4cd2 1539/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1540
d2e4a39e
AS
1541static char *bound_name[] = {
1542 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1543 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1544};
1545
1546/* Maximum number of array dimensions we are prepared to handle. */
1547
4c4b4cd2 1548#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1549
14f9c5c9 1550
4c4b4cd2
PH
1551/* The desc_* routines return primitive portions of array descriptors
1552 (fat pointers). */
14f9c5c9
AS
1553
1554/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1555 level of indirection, if needed. */
1556
d2e4a39e
AS
1557static struct type *
1558desc_base_type (struct type *type)
14f9c5c9
AS
1559{
1560 if (type == NULL)
1561 return NULL;
61ee279c 1562 type = ada_check_typedef (type);
720d1a40
JB
1563 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1564 type = ada_typedef_target_type (type);
1565
1265e4aa
JB
1566 if (type != NULL
1567 && (TYPE_CODE (type) == TYPE_CODE_PTR
1568 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1569 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1570 else
1571 return type;
1572}
1573
4c4b4cd2
PH
1574/* True iff TYPE indicates a "thin" array pointer type. */
1575
14f9c5c9 1576static int
d2e4a39e 1577is_thin_pntr (struct type *type)
14f9c5c9 1578{
d2e4a39e 1579 return
14f9c5c9
AS
1580 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1581 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1582}
1583
4c4b4cd2
PH
1584/* The descriptor type for thin pointer type TYPE. */
1585
d2e4a39e
AS
1586static struct type *
1587thin_descriptor_type (struct type *type)
14f9c5c9 1588{
d2e4a39e 1589 struct type *base_type = desc_base_type (type);
5b4ee69b 1590
14f9c5c9
AS
1591 if (base_type == NULL)
1592 return NULL;
1593 if (is_suffix (ada_type_name (base_type), "___XVE"))
1594 return base_type;
d2e4a39e 1595 else
14f9c5c9 1596 {
d2e4a39e 1597 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1598
14f9c5c9 1599 if (alt_type == NULL)
4c4b4cd2 1600 return base_type;
14f9c5c9 1601 else
4c4b4cd2 1602 return alt_type;
14f9c5c9
AS
1603 }
1604}
1605
4c4b4cd2
PH
1606/* A pointer to the array data for thin-pointer value VAL. */
1607
d2e4a39e
AS
1608static struct value *
1609thin_data_pntr (struct value *val)
14f9c5c9 1610{
828292f2 1611 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1612 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1613
556bdfd4
UW
1614 data_type = lookup_pointer_type (data_type);
1615
14f9c5c9 1616 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1617 return value_cast (data_type, value_copy (val));
d2e4a39e 1618 else
42ae5230 1619 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1620}
1621
4c4b4cd2
PH
1622/* True iff TYPE indicates a "thick" array pointer type. */
1623
14f9c5c9 1624static int
d2e4a39e 1625is_thick_pntr (struct type *type)
14f9c5c9
AS
1626{
1627 type = desc_base_type (type);
1628 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1629 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1630}
1631
4c4b4cd2
PH
1632/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1633 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1634
d2e4a39e
AS
1635static struct type *
1636desc_bounds_type (struct type *type)
14f9c5c9 1637{
d2e4a39e 1638 struct type *r;
14f9c5c9
AS
1639
1640 type = desc_base_type (type);
1641
1642 if (type == NULL)
1643 return NULL;
1644 else if (is_thin_pntr (type))
1645 {
1646 type = thin_descriptor_type (type);
1647 if (type == NULL)
4c4b4cd2 1648 return NULL;
14f9c5c9
AS
1649 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1650 if (r != NULL)
61ee279c 1651 return ada_check_typedef (r);
14f9c5c9
AS
1652 }
1653 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1654 {
1655 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1656 if (r != NULL)
61ee279c 1657 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1658 }
1659 return NULL;
1660}
1661
1662/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1663 one, a pointer to its bounds data. Otherwise NULL. */
1664
d2e4a39e
AS
1665static struct value *
1666desc_bounds (struct value *arr)
14f9c5c9 1667{
df407dfe 1668 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1669
d2e4a39e 1670 if (is_thin_pntr (type))
14f9c5c9 1671 {
d2e4a39e 1672 struct type *bounds_type =
4c4b4cd2 1673 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1674 LONGEST addr;
1675
4cdfadb1 1676 if (bounds_type == NULL)
323e0a4a 1677 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1678
1679 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1680 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1681 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1682 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1683 addr = value_as_long (arr);
d2e4a39e 1684 else
42ae5230 1685 addr = value_address (arr);
14f9c5c9 1686
d2e4a39e 1687 return
4c4b4cd2
PH
1688 value_from_longest (lookup_pointer_type (bounds_type),
1689 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1690 }
1691
1692 else if (is_thick_pntr (type))
05e522ef
JB
1693 {
1694 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1695 _("Bad GNAT array descriptor"));
1696 struct type *p_bounds_type = value_type (p_bounds);
1697
1698 if (p_bounds_type
1699 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1700 {
1701 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1702
1703 if (TYPE_STUB (target_type))
1704 p_bounds = value_cast (lookup_pointer_type
1705 (ada_check_typedef (target_type)),
1706 p_bounds);
1707 }
1708 else
1709 error (_("Bad GNAT array descriptor"));
1710
1711 return p_bounds;
1712 }
14f9c5c9
AS
1713 else
1714 return NULL;
1715}
1716
4c4b4cd2
PH
1717/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1718 position of the field containing the address of the bounds data. */
1719
14f9c5c9 1720static int
d2e4a39e 1721fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1722{
1723 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1724}
1725
1726/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1727 size of the field containing the address of the bounds data. */
1728
14f9c5c9 1729static int
d2e4a39e 1730fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1731{
1732 type = desc_base_type (type);
1733
d2e4a39e 1734 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1735 return TYPE_FIELD_BITSIZE (type, 1);
1736 else
61ee279c 1737 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1738}
1739
4c4b4cd2 1740/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1741 pointer to one, the type of its array data (a array-with-no-bounds type);
1742 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1743 data. */
4c4b4cd2 1744
d2e4a39e 1745static struct type *
556bdfd4 1746desc_data_target_type (struct type *type)
14f9c5c9
AS
1747{
1748 type = desc_base_type (type);
1749
4c4b4cd2 1750 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1751 if (is_thin_pntr (type))
556bdfd4 1752 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1753 else if (is_thick_pntr (type))
556bdfd4
UW
1754 {
1755 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1756
1757 if (data_type
1758 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1759 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1760 }
1761
1762 return NULL;
14f9c5c9
AS
1763}
1764
1765/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1766 its array data. */
4c4b4cd2 1767
d2e4a39e
AS
1768static struct value *
1769desc_data (struct value *arr)
14f9c5c9 1770{
df407dfe 1771 struct type *type = value_type (arr);
5b4ee69b 1772
14f9c5c9
AS
1773 if (is_thin_pntr (type))
1774 return thin_data_pntr (arr);
1775 else if (is_thick_pntr (type))
d2e4a39e 1776 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1777 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1778 else
1779 return NULL;
1780}
1781
1782
1783/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1784 position of the field containing the address of the data. */
1785
14f9c5c9 1786static int
d2e4a39e 1787fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1788{
1789 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1790}
1791
1792/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1793 size of the field containing the address of the data. */
1794
14f9c5c9 1795static int
d2e4a39e 1796fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1797{
1798 type = desc_base_type (type);
1799
1800 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1801 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1802 else
14f9c5c9
AS
1803 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1804}
1805
4c4b4cd2 1806/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1807 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1808 bound, if WHICH is 1. The first bound is I=1. */
1809
d2e4a39e
AS
1810static struct value *
1811desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1812{
d2e4a39e 1813 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1814 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1815}
1816
1817/* If BOUNDS is an array-bounds structure type, return the bit position
1818 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1819 bound, if WHICH is 1. The first bound is I=1. */
1820
14f9c5c9 1821static int
d2e4a39e 1822desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1823{
d2e4a39e 1824 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1825}
1826
1827/* If BOUNDS is an array-bounds structure type, return the bit field size
1828 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1829 bound, if WHICH is 1. The first bound is I=1. */
1830
76a01679 1831static int
d2e4a39e 1832desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1833{
1834 type = desc_base_type (type);
1835
d2e4a39e
AS
1836 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1837 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1838 else
1839 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1840}
1841
1842/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1843 Ith bound (numbering from 1). Otherwise, NULL. */
1844
d2e4a39e
AS
1845static struct type *
1846desc_index_type (struct type *type, int i)
14f9c5c9
AS
1847{
1848 type = desc_base_type (type);
1849
1850 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1851 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1852 else
14f9c5c9
AS
1853 return NULL;
1854}
1855
4c4b4cd2
PH
1856/* The number of index positions in the array-bounds type TYPE.
1857 Return 0 if TYPE is NULL. */
1858
14f9c5c9 1859static int
d2e4a39e 1860desc_arity (struct type *type)
14f9c5c9
AS
1861{
1862 type = desc_base_type (type);
1863
1864 if (type != NULL)
1865 return TYPE_NFIELDS (type) / 2;
1866 return 0;
1867}
1868
4c4b4cd2
PH
1869/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1870 an array descriptor type (representing an unconstrained array
1871 type). */
1872
76a01679
JB
1873static int
1874ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1875{
1876 if (type == NULL)
1877 return 0;
61ee279c 1878 type = ada_check_typedef (type);
4c4b4cd2 1879 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1880 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1881}
1882
52ce6436 1883/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1884 * to one. */
52ce6436 1885
2c0b251b 1886static int
52ce6436
PH
1887ada_is_array_type (struct type *type)
1888{
1889 while (type != NULL
1890 && (TYPE_CODE (type) == TYPE_CODE_PTR
1891 || TYPE_CODE (type) == TYPE_CODE_REF))
1892 type = TYPE_TARGET_TYPE (type);
1893 return ada_is_direct_array_type (type);
1894}
1895
4c4b4cd2 1896/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1897
14f9c5c9 1898int
4c4b4cd2 1899ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1900{
1901 if (type == NULL)
1902 return 0;
61ee279c 1903 type = ada_check_typedef (type);
14f9c5c9 1904 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2 1905 || (TYPE_CODE (type) == TYPE_CODE_PTR
b0dd7688
JB
1906 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1907 == TYPE_CODE_ARRAY));
14f9c5c9
AS
1908}
1909
4c4b4cd2
PH
1910/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1911
14f9c5c9 1912int
4c4b4cd2 1913ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1914{
556bdfd4 1915 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1916
1917 if (type == NULL)
1918 return 0;
61ee279c 1919 type = ada_check_typedef (type);
556bdfd4
UW
1920 return (data_type != NULL
1921 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1922 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1923}
1924
1925/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1926 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1927 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1928 is still needed. */
1929
14f9c5c9 1930int
ebf56fd3 1931ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1932{
d2e4a39e 1933 return
14f9c5c9
AS
1934 type != NULL
1935 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1936 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1937 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1938 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1939}
1940
1941
4c4b4cd2 1942/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1943 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1944 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1945 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1946 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1947 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1948 a descriptor. */
d2e4a39e
AS
1949struct type *
1950ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1951{
ad82864c
JB
1952 if (ada_is_constrained_packed_array_type (value_type (arr)))
1953 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1954
df407dfe
AC
1955 if (!ada_is_array_descriptor_type (value_type (arr)))
1956 return value_type (arr);
d2e4a39e
AS
1957
1958 if (!bounds)
ad82864c
JB
1959 {
1960 struct type *array_type =
1961 ada_check_typedef (desc_data_target_type (value_type (arr)));
1962
1963 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1964 TYPE_FIELD_BITSIZE (array_type, 0) =
1965 decode_packed_array_bitsize (value_type (arr));
1966
1967 return array_type;
1968 }
14f9c5c9
AS
1969 else
1970 {
d2e4a39e 1971 struct type *elt_type;
14f9c5c9 1972 int arity;
d2e4a39e 1973 struct value *descriptor;
14f9c5c9 1974
df407dfe
AC
1975 elt_type = ada_array_element_type (value_type (arr), -1);
1976 arity = ada_array_arity (value_type (arr));
14f9c5c9 1977
d2e4a39e 1978 if (elt_type == NULL || arity == 0)
df407dfe 1979 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1980
1981 descriptor = desc_bounds (arr);
d2e4a39e 1982 if (value_as_long (descriptor) == 0)
4c4b4cd2 1983 return NULL;
d2e4a39e 1984 while (arity > 0)
4c4b4cd2 1985 {
e9bb382b
UW
1986 struct type *range_type = alloc_type_copy (value_type (arr));
1987 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1988 struct value *low = desc_one_bound (descriptor, arity, 0);
1989 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1990
5b4ee69b 1991 arity -= 1;
0c9c3474
SA
1992 create_static_range_type (range_type, value_type (low),
1993 longest_to_int (value_as_long (low)),
1994 longest_to_int (value_as_long (high)));
4c4b4cd2 1995 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1996
1997 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1998 {
1999 /* We need to store the element packed bitsize, as well as
2000 recompute the array size, because it was previously
2001 computed based on the unpacked element size. */
2002 LONGEST lo = value_as_long (low);
2003 LONGEST hi = value_as_long (high);
2004
2005 TYPE_FIELD_BITSIZE (elt_type, 0) =
2006 decode_packed_array_bitsize (value_type (arr));
2007 /* If the array has no element, then the size is already
2008 zero, and does not need to be recomputed. */
2009 if (lo < hi)
2010 {
2011 int array_bitsize =
2012 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2013
2014 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2015 }
2016 }
4c4b4cd2 2017 }
14f9c5c9
AS
2018
2019 return lookup_pointer_type (elt_type);
2020 }
2021}
2022
2023/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
2024 Otherwise, returns either a standard GDB array with bounds set
2025 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2026 GDB array. Returns NULL if ARR is a null fat pointer. */
2027
d2e4a39e
AS
2028struct value *
2029ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 2030{
df407dfe 2031 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2032 {
d2e4a39e 2033 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 2034
14f9c5c9 2035 if (arrType == NULL)
4c4b4cd2 2036 return NULL;
14f9c5c9
AS
2037 return value_cast (arrType, value_copy (desc_data (arr)));
2038 }
ad82864c
JB
2039 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2040 return decode_constrained_packed_array (arr);
14f9c5c9
AS
2041 else
2042 return arr;
2043}
2044
2045/* If ARR does not represent an array, returns ARR unchanged.
2046 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
2047 be ARR itself if it already is in the proper form). */
2048
720d1a40 2049struct value *
d2e4a39e 2050ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 2051{
df407dfe 2052 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2053 {
d2e4a39e 2054 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 2055
14f9c5c9 2056 if (arrVal == NULL)
323e0a4a 2057 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 2058 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
2059 return value_ind (arrVal);
2060 }
ad82864c
JB
2061 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2062 return decode_constrained_packed_array (arr);
d2e4a39e 2063 else
14f9c5c9
AS
2064 return arr;
2065}
2066
2067/* If TYPE represents a GNAT array type, return it translated to an
2068 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
2069 packing). For other types, is the identity. */
2070
d2e4a39e
AS
2071struct type *
2072ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 2073{
ad82864c
JB
2074 if (ada_is_constrained_packed_array_type (type))
2075 return decode_constrained_packed_array_type (type);
17280b9f
UW
2076
2077 if (ada_is_array_descriptor_type (type))
556bdfd4 2078 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
2079
2080 return type;
14f9c5c9
AS
2081}
2082
4c4b4cd2
PH
2083/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
2084
ad82864c
JB
2085static int
2086ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
2087{
2088 if (type == NULL)
2089 return 0;
4c4b4cd2 2090 type = desc_base_type (type);
61ee279c 2091 type = ada_check_typedef (type);
d2e4a39e 2092 return
14f9c5c9
AS
2093 ada_type_name (type) != NULL
2094 && strstr (ada_type_name (type), "___XP") != NULL;
2095}
2096
ad82864c
JB
2097/* Non-zero iff TYPE represents a standard GNAT constrained
2098 packed-array type. */
2099
2100int
2101ada_is_constrained_packed_array_type (struct type *type)
2102{
2103 return ada_is_packed_array_type (type)
2104 && !ada_is_array_descriptor_type (type);
2105}
2106
2107/* Non-zero iff TYPE represents an array descriptor for a
2108 unconstrained packed-array type. */
2109
2110static int
2111ada_is_unconstrained_packed_array_type (struct type *type)
2112{
2113 return ada_is_packed_array_type (type)
2114 && ada_is_array_descriptor_type (type);
2115}
2116
2117/* Given that TYPE encodes a packed array type (constrained or unconstrained),
2118 return the size of its elements in bits. */
2119
2120static long
2121decode_packed_array_bitsize (struct type *type)
2122{
0d5cff50
DE
2123 const char *raw_name;
2124 const char *tail;
ad82864c
JB
2125 long bits;
2126
720d1a40
JB
2127 /* Access to arrays implemented as fat pointers are encoded as a typedef
2128 of the fat pointer type. We need the name of the fat pointer type
2129 to do the decoding, so strip the typedef layer. */
2130 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2131 type = ada_typedef_target_type (type);
2132
2133 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2134 if (!raw_name)
2135 raw_name = ada_type_name (desc_base_type (type));
2136
2137 if (!raw_name)
2138 return 0;
2139
2140 tail = strstr (raw_name, "___XP");
720d1a40 2141 gdb_assert (tail != NULL);
ad82864c
JB
2142
2143 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2144 {
2145 lim_warning
2146 (_("could not understand bit size information on packed array"));
2147 return 0;
2148 }
2149
2150 return bits;
2151}
2152
14f9c5c9
AS
2153/* Given that TYPE is a standard GDB array type with all bounds filled
2154 in, and that the element size of its ultimate scalar constituents
2155 (that is, either its elements, or, if it is an array of arrays, its
2156 elements' elements, etc.) is *ELT_BITS, return an identical type,
2157 but with the bit sizes of its elements (and those of any
2158 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2159 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2160 in bits.
2161
2162 Note that, for arrays whose index type has an XA encoding where
2163 a bound references a record discriminant, getting that discriminant,
2164 and therefore the actual value of that bound, is not possible
2165 because none of the given parameters gives us access to the record.
2166 This function assumes that it is OK in the context where it is being
2167 used to return an array whose bounds are still dynamic and where
2168 the length is arbitrary. */
4c4b4cd2 2169
d2e4a39e 2170static struct type *
ad82864c 2171constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2172{
d2e4a39e
AS
2173 struct type *new_elt_type;
2174 struct type *new_type;
99b1c762
JB
2175 struct type *index_type_desc;
2176 struct type *index_type;
14f9c5c9
AS
2177 LONGEST low_bound, high_bound;
2178
61ee279c 2179 type = ada_check_typedef (type);
14f9c5c9
AS
2180 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2181 return type;
2182
99b1c762
JB
2183 index_type_desc = ada_find_parallel_type (type, "___XA");
2184 if (index_type_desc)
2185 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2186 NULL);
2187 else
2188 index_type = TYPE_INDEX_TYPE (type);
2189
e9bb382b 2190 new_type = alloc_type_copy (type);
ad82864c
JB
2191 new_elt_type =
2192 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2193 elt_bits);
99b1c762 2194 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9
AS
2195 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2196 TYPE_NAME (new_type) = ada_type_name (type);
2197
4a46959e
JB
2198 if ((TYPE_CODE (check_typedef (index_type)) == TYPE_CODE_RANGE
2199 && is_dynamic_type (check_typedef (index_type)))
2200 || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
14f9c5c9
AS
2201 low_bound = high_bound = 0;
2202 if (high_bound < low_bound)
2203 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2204 else
14f9c5c9
AS
2205 {
2206 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2207 TYPE_LENGTH (new_type) =
4c4b4cd2 2208 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2209 }
2210
876cecd0 2211 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2212 return new_type;
2213}
2214
ad82864c
JB
2215/* The array type encoded by TYPE, where
2216 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2217
d2e4a39e 2218static struct type *
ad82864c 2219decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2220{
0d5cff50 2221 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2222 char *name;
0d5cff50 2223 const char *tail;
d2e4a39e 2224 struct type *shadow_type;
14f9c5c9 2225 long bits;
14f9c5c9 2226
727e3d2e
JB
2227 if (!raw_name)
2228 raw_name = ada_type_name (desc_base_type (type));
2229
2230 if (!raw_name)
2231 return NULL;
2232
2233 name = (char *) alloca (strlen (raw_name) + 1);
2234 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2235 type = desc_base_type (type);
2236
14f9c5c9
AS
2237 memcpy (name, raw_name, tail - raw_name);
2238 name[tail - raw_name] = '\000';
2239
b4ba55a1
JB
2240 shadow_type = ada_find_parallel_type_with_name (type, name);
2241
2242 if (shadow_type == NULL)
14f9c5c9 2243 {
323e0a4a 2244 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2245 return NULL;
2246 }
f168693b 2247 shadow_type = check_typedef (shadow_type);
14f9c5c9
AS
2248
2249 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2250 {
0963b4bd
MS
2251 lim_warning (_("could not understand bounds "
2252 "information on packed array"));
14f9c5c9
AS
2253 return NULL;
2254 }
d2e4a39e 2255
ad82864c
JB
2256 bits = decode_packed_array_bitsize (type);
2257 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2258}
2259
ad82864c
JB
2260/* Given that ARR is a struct value *indicating a GNAT constrained packed
2261 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2262 standard GDB array type except that the BITSIZEs of the array
2263 target types are set to the number of bits in each element, and the
4c4b4cd2 2264 type length is set appropriately. */
14f9c5c9 2265
d2e4a39e 2266static struct value *
ad82864c 2267decode_constrained_packed_array (struct value *arr)
14f9c5c9 2268{
4c4b4cd2 2269 struct type *type;
14f9c5c9 2270
11aa919a
PMR
2271 /* If our value is a pointer, then dereference it. Likewise if
2272 the value is a reference. Make sure that this operation does not
2273 cause the target type to be fixed, as this would indirectly cause
2274 this array to be decoded. The rest of the routine assumes that
2275 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2276 and "value_ind" routines to perform the dereferencing, as opposed
2277 to using "ada_coerce_ref" or "ada_value_ind". */
2278 arr = coerce_ref (arr);
828292f2 2279 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
284614f0 2280 arr = value_ind (arr);
4c4b4cd2 2281
ad82864c 2282 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2283 if (type == NULL)
2284 {
323e0a4a 2285 error (_("can't unpack array"));
14f9c5c9
AS
2286 return NULL;
2287 }
61ee279c 2288
50810684 2289 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2290 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2291 {
2292 /* This is a (right-justified) modular type representing a packed
2293 array with no wrapper. In order to interpret the value through
2294 the (left-justified) packed array type we just built, we must
2295 first left-justify it. */
2296 int bit_size, bit_pos;
2297 ULONGEST mod;
2298
df407dfe 2299 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2300 bit_size = 0;
2301 while (mod > 0)
2302 {
2303 bit_size += 1;
2304 mod >>= 1;
2305 }
df407dfe 2306 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2307 arr = ada_value_primitive_packed_val (arr, NULL,
2308 bit_pos / HOST_CHAR_BIT,
2309 bit_pos % HOST_CHAR_BIT,
2310 bit_size,
2311 type);
2312 }
2313
4c4b4cd2 2314 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2315}
2316
2317
2318/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2319 given in IND. ARR must be a simple array. */
14f9c5c9 2320
d2e4a39e
AS
2321static struct value *
2322value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2323{
2324 int i;
2325 int bits, elt_off, bit_off;
2326 long elt_total_bit_offset;
d2e4a39e
AS
2327 struct type *elt_type;
2328 struct value *v;
14f9c5c9
AS
2329
2330 bits = 0;
2331 elt_total_bit_offset = 0;
df407dfe 2332 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2333 for (i = 0; i < arity; i += 1)
14f9c5c9 2334 {
d2e4a39e 2335 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2336 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2337 error
0963b4bd
MS
2338 (_("attempt to do packed indexing of "
2339 "something other than a packed array"));
14f9c5c9 2340 else
4c4b4cd2
PH
2341 {
2342 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2343 LONGEST lowerbound, upperbound;
2344 LONGEST idx;
2345
2346 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2347 {
323e0a4a 2348 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2349 lowerbound = upperbound = 0;
2350 }
2351
3cb382c9 2352 idx = pos_atr (ind[i]);
4c4b4cd2 2353 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2354 lim_warning (_("packed array index %ld out of bounds"),
2355 (long) idx);
4c4b4cd2
PH
2356 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2357 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2358 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2359 }
14f9c5c9
AS
2360 }
2361 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2362 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2363
2364 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2365 bits, elt_type);
14f9c5c9
AS
2366 return v;
2367}
2368
4c4b4cd2 2369/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2370
2371static int
d2e4a39e 2372has_negatives (struct type *type)
14f9c5c9 2373{
d2e4a39e
AS
2374 switch (TYPE_CODE (type))
2375 {
2376 default:
2377 return 0;
2378 case TYPE_CODE_INT:
2379 return !TYPE_UNSIGNED (type);
2380 case TYPE_CODE_RANGE:
2381 return TYPE_LOW_BOUND (type) < 0;
2382 }
14f9c5c9 2383}
d2e4a39e 2384
f93fca70
JB
2385/* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
2386 unpack that data into UNPACKED. UNPACKED_LEN is the size in bytes of
2387 the unpacked buffer.
14f9c5c9 2388
f93fca70
JB
2389 IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2390 zero otherwise.
14f9c5c9 2391
f93fca70 2392 IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
a1c95e6b 2393
f93fca70
JB
2394 IS_SCALAR is nonzero if the data corresponds to a signed type. */
2395
2396static void
2397ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2398 gdb_byte *unpacked, int unpacked_len,
2399 int is_big_endian, int is_signed_type,
2400 int is_scalar)
2401{
a1c95e6b
JB
2402 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2403 int src_idx; /* Index into the source area */
2404 int src_bytes_left; /* Number of source bytes left to process. */
2405 int srcBitsLeft; /* Number of source bits left to move */
2406 int unusedLS; /* Number of bits in next significant
2407 byte of source that are unused */
2408
a1c95e6b
JB
2409 int unpacked_idx; /* Index into the unpacked buffer */
2410 int unpacked_bytes_left; /* Number of bytes left to set in unpacked. */
2411
4c4b4cd2 2412 unsigned long accum; /* Staging area for bits being transferred */
a1c95e6b 2413 int accumSize; /* Number of meaningful bits in accum */
14f9c5c9 2414 unsigned char sign;
a1c95e6b 2415
4c4b4cd2
PH
2416 /* Transmit bytes from least to most significant; delta is the direction
2417 the indices move. */
f93fca70 2418 int delta = is_big_endian ? -1 : 1;
14f9c5c9
AS
2419
2420 srcBitsLeft = bit_size;
086ca51f 2421 src_bytes_left = src_len;
f93fca70 2422 unpacked_bytes_left = unpacked_len;
14f9c5c9 2423 sign = 0;
f93fca70
JB
2424
2425 if (is_big_endian)
14f9c5c9 2426 {
086ca51f 2427 src_idx = src_len - 1;
f93fca70
JB
2428 if (is_signed_type
2429 && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2430 sign = ~0;
d2e4a39e
AS
2431
2432 unusedLS =
4c4b4cd2
PH
2433 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2434 % HOST_CHAR_BIT;
14f9c5c9 2435
f93fca70
JB
2436 if (is_scalar)
2437 {
2438 accumSize = 0;
2439 unpacked_idx = unpacked_len - 1;
2440 }
2441 else
2442 {
4c4b4cd2
PH
2443 /* Non-scalar values must be aligned at a byte boundary... */
2444 accumSize =
2445 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2446 /* ... And are placed at the beginning (most-significant) bytes
2447 of the target. */
086ca51f
JB
2448 unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2449 unpacked_bytes_left = unpacked_idx + 1;
f93fca70 2450 }
14f9c5c9 2451 }
d2e4a39e 2452 else
14f9c5c9
AS
2453 {
2454 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2455
086ca51f 2456 src_idx = unpacked_idx = 0;
14f9c5c9
AS
2457 unusedLS = bit_offset;
2458 accumSize = 0;
2459
f93fca70 2460 if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2461 sign = ~0;
14f9c5c9 2462 }
d2e4a39e 2463
14f9c5c9 2464 accum = 0;
086ca51f 2465 while (src_bytes_left > 0)
14f9c5c9
AS
2466 {
2467 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2468 part of the value. */
d2e4a39e 2469 unsigned int unusedMSMask =
4c4b4cd2
PH
2470 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2471 1;
2472 /* Sign-extend bits for this byte. */
14f9c5c9 2473 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2474
d2e4a39e 2475 accum |=
086ca51f 2476 (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2477 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2478 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2 2479 {
086ca51f 2480 unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT);
4c4b4cd2
PH
2481 accumSize -= HOST_CHAR_BIT;
2482 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2483 unpacked_bytes_left -= 1;
2484 unpacked_idx += delta;
4c4b4cd2 2485 }
14f9c5c9
AS
2486 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2487 unusedLS = 0;
086ca51f
JB
2488 src_bytes_left -= 1;
2489 src_idx += delta;
14f9c5c9 2490 }
086ca51f 2491 while (unpacked_bytes_left > 0)
14f9c5c9
AS
2492 {
2493 accum |= sign << accumSize;
086ca51f 2494 unpacked[unpacked_idx] = accum & ~(~0L << HOST_CHAR_BIT);
14f9c5c9 2495 accumSize -= HOST_CHAR_BIT;
9cd4d857
JB
2496 if (accumSize < 0)
2497 accumSize = 0;
14f9c5c9 2498 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2499 unpacked_bytes_left -= 1;
2500 unpacked_idx += delta;
14f9c5c9 2501 }
f93fca70
JB
2502}
2503
2504/* Create a new value of type TYPE from the contents of OBJ starting
2505 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2506 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2507 assigning through the result will set the field fetched from.
2508 VALADDR is ignored unless OBJ is NULL, in which case,
2509 VALADDR+OFFSET must address the start of storage containing the
2510 packed value. The value returned in this case is never an lval.
2511 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2512
2513struct value *
2514ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2515 long offset, int bit_offset, int bit_size,
2516 struct type *type)
2517{
2518 struct value *v;
2519 gdb_byte *src; /* First byte containing data to unpack */
2520 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2521 gdb_byte *unpacked;
220475ed 2522 const int is_scalar = is_scalar_type (type);
d0a9e810
JB
2523 const int is_big_endian = gdbarch_bits_big_endian (get_type_arch (type));
2524 gdb_byte *staging = NULL;
2525 int staging_len = 0;
2526 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
f93fca70
JB
2527
2528 type = ada_check_typedef (type);
2529
d0a9e810
JB
2530 if (obj == NULL)
2531 src = (gdb_byte *) valaddr + offset;
2532 else
2533 src = (gdb_byte *) value_contents (obj) + offset;
2534
2535 if (is_dynamic_type (type))
2536 {
2537 /* The length of TYPE might by dynamic, so we need to resolve
2538 TYPE in order to know its actual size, which we then use
2539 to create the contents buffer of the value we return.
2540 The difficulty is that the data containing our object is
2541 packed, and therefore maybe not at a byte boundary. So, what
2542 we do, is unpack the data into a byte-aligned buffer, and then
2543 use that buffer as our object's value for resolving the type. */
2544 staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2545 staging = malloc (staging_len);
2546 make_cleanup (xfree, staging);
2547
2548 ada_unpack_from_contents (src, bit_offset, bit_size,
2549 staging, staging_len,
2550 is_big_endian, has_negatives (type),
2551 is_scalar);
2552 type = resolve_dynamic_type (type, staging, 0);
2553 }
2554
f93fca70
JB
2555 if (obj == NULL)
2556 {
2557 v = allocate_value (type);
2558 src = (gdb_byte *) valaddr + offset;
2559 }
2560 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2561 {
2562 v = value_at (type, value_address (obj) + offset);
f93fca70
JB
2563 src = alloca (src_len);
2564 read_memory (value_address (v), src, src_len);
2565 }
2566 else
2567 {
2568 v = allocate_value (type);
2569 src = (gdb_byte *) value_contents (obj) + offset;
2570 }
2571
2572 if (obj != NULL)
2573 {
2574 long new_offset = offset;
2575
2576 set_value_component_location (v, obj);
2577 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2578 set_value_bitsize (v, bit_size);
2579 if (value_bitpos (v) >= HOST_CHAR_BIT)
2580 {
2581 ++new_offset;
2582 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2583 }
2584 set_value_offset (v, new_offset);
2585
2586 /* Also set the parent value. This is needed when trying to
2587 assign a new value (in inferior memory). */
2588 set_value_parent (v, obj);
2589 }
2590 else
2591 set_value_bitsize (v, bit_size);
2592 unpacked = (gdb_byte *) value_contents (v);
2593
2594 if (bit_size == 0)
2595 {
2596 memset (unpacked, 0, TYPE_LENGTH (type));
d0a9e810 2597 do_cleanups (old_chain);
f93fca70
JB
2598 return v;
2599 }
2600
d0a9e810 2601 if (staging != NULL && staging_len == TYPE_LENGTH (type))
f93fca70 2602 {
d0a9e810
JB
2603 /* Small short-cut: If we've unpacked the data into a buffer
2604 of the same size as TYPE's length, then we can reuse that,
2605 instead of doing the unpacking again. */
2606 memcpy (unpacked, staging, staging_len);
f93fca70 2607 }
d0a9e810
JB
2608 else
2609 ada_unpack_from_contents (src, bit_offset, bit_size,
2610 unpacked, TYPE_LENGTH (type),
2611 is_big_endian, has_negatives (type), is_scalar);
f93fca70 2612
d0a9e810 2613 do_cleanups (old_chain);
14f9c5c9
AS
2614 return v;
2615}
d2e4a39e 2616
14f9c5c9
AS
2617/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2618 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2619 not overlap. */
14f9c5c9 2620static void
fc1a4b47 2621move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2622 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2623{
2624 unsigned int accum, mask;
2625 int accum_bits, chunk_size;
2626
2627 target += targ_offset / HOST_CHAR_BIT;
2628 targ_offset %= HOST_CHAR_BIT;
2629 source += src_offset / HOST_CHAR_BIT;
2630 src_offset %= HOST_CHAR_BIT;
50810684 2631 if (bits_big_endian_p)
14f9c5c9
AS
2632 {
2633 accum = (unsigned char) *source;
2634 source += 1;
2635 accum_bits = HOST_CHAR_BIT - src_offset;
2636
d2e4a39e 2637 while (n > 0)
4c4b4cd2
PH
2638 {
2639 int unused_right;
5b4ee69b 2640
4c4b4cd2
PH
2641 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2642 accum_bits += HOST_CHAR_BIT;
2643 source += 1;
2644 chunk_size = HOST_CHAR_BIT - targ_offset;
2645 if (chunk_size > n)
2646 chunk_size = n;
2647 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2648 mask = ((1 << chunk_size) - 1) << unused_right;
2649 *target =
2650 (*target & ~mask)
2651 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2652 n -= chunk_size;
2653 accum_bits -= chunk_size;
2654 target += 1;
2655 targ_offset = 0;
2656 }
14f9c5c9
AS
2657 }
2658 else
2659 {
2660 accum = (unsigned char) *source >> src_offset;
2661 source += 1;
2662 accum_bits = HOST_CHAR_BIT - src_offset;
2663
d2e4a39e 2664 while (n > 0)
4c4b4cd2
PH
2665 {
2666 accum = accum + ((unsigned char) *source << accum_bits);
2667 accum_bits += HOST_CHAR_BIT;
2668 source += 1;
2669 chunk_size = HOST_CHAR_BIT - targ_offset;
2670 if (chunk_size > n)
2671 chunk_size = n;
2672 mask = ((1 << chunk_size) - 1) << targ_offset;
2673 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2674 n -= chunk_size;
2675 accum_bits -= chunk_size;
2676 accum >>= chunk_size;
2677 target += 1;
2678 targ_offset = 0;
2679 }
14f9c5c9
AS
2680 }
2681}
2682
14f9c5c9
AS
2683/* Store the contents of FROMVAL into the location of TOVAL.
2684 Return a new value with the location of TOVAL and contents of
2685 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2686 floating-point or non-scalar types. */
14f9c5c9 2687
d2e4a39e
AS
2688static struct value *
2689ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2690{
df407dfe
AC
2691 struct type *type = value_type (toval);
2692 int bits = value_bitsize (toval);
14f9c5c9 2693
52ce6436
PH
2694 toval = ada_coerce_ref (toval);
2695 fromval = ada_coerce_ref (fromval);
2696
2697 if (ada_is_direct_array_type (value_type (toval)))
2698 toval = ada_coerce_to_simple_array (toval);
2699 if (ada_is_direct_array_type (value_type (fromval)))
2700 fromval = ada_coerce_to_simple_array (fromval);
2701
88e3b34b 2702 if (!deprecated_value_modifiable (toval))
323e0a4a 2703 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2704
d2e4a39e 2705 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2706 && bits > 0
d2e4a39e 2707 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2708 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2709 {
df407dfe
AC
2710 int len = (value_bitpos (toval)
2711 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2712 int from_size;
224c3ddb 2713 gdb_byte *buffer = (gdb_byte *) alloca (len);
d2e4a39e 2714 struct value *val;
42ae5230 2715 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2716
2717 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2718 fromval = value_cast (type, fromval);
14f9c5c9 2719
52ce6436 2720 read_memory (to_addr, buffer, len);
aced2898
PH
2721 from_size = value_bitsize (fromval);
2722 if (from_size == 0)
2723 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2724 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2725 move_bits (buffer, value_bitpos (toval),
50810684 2726 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2727 else
50810684
UW
2728 move_bits (buffer, value_bitpos (toval),
2729 value_contents (fromval), 0, bits, 0);
972daa01 2730 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2731
14f9c5c9 2732 val = value_copy (toval);
0fd88904 2733 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2734 TYPE_LENGTH (type));
04624583 2735 deprecated_set_value_type (val, type);
d2e4a39e 2736
14f9c5c9
AS
2737 return val;
2738 }
2739
2740 return value_assign (toval, fromval);
2741}
2742
2743
7c512744
JB
2744/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2745 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2746 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2747 COMPONENT, and not the inferior's memory. The current contents
2748 of COMPONENT are ignored.
2749
2750 Although not part of the initial design, this function also works
2751 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2752 had a null address, and COMPONENT had an address which is equal to
2753 its offset inside CONTAINER. */
2754
52ce6436
PH
2755static void
2756value_assign_to_component (struct value *container, struct value *component,
2757 struct value *val)
2758{
2759 LONGEST offset_in_container =
42ae5230 2760 (LONGEST) (value_address (component) - value_address (container));
7c512744 2761 int bit_offset_in_container =
52ce6436
PH
2762 value_bitpos (component) - value_bitpos (container);
2763 int bits;
7c512744 2764
52ce6436
PH
2765 val = value_cast (value_type (component), val);
2766
2767 if (value_bitsize (component) == 0)
2768 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2769 else
2770 bits = value_bitsize (component);
2771
50810684 2772 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
7c512744 2773 move_bits (value_contents_writeable (container) + offset_in_container,
52ce6436
PH
2774 value_bitpos (container) + bit_offset_in_container,
2775 value_contents (val),
2776 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
50810684 2777 bits, 1);
52ce6436 2778 else
7c512744 2779 move_bits (value_contents_writeable (container) + offset_in_container,
52ce6436 2780 value_bitpos (container) + bit_offset_in_container,
50810684 2781 value_contents (val), 0, bits, 0);
7c512744
JB
2782}
2783
4c4b4cd2
PH
2784/* The value of the element of array ARR at the ARITY indices given in IND.
2785 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2786 thereto. */
2787
d2e4a39e
AS
2788struct value *
2789ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2790{
2791 int k;
d2e4a39e
AS
2792 struct value *elt;
2793 struct type *elt_type;
14f9c5c9
AS
2794
2795 elt = ada_coerce_to_simple_array (arr);
2796
df407dfe 2797 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2798 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2799 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2800 return value_subscript_packed (elt, arity, ind);
2801
2802 for (k = 0; k < arity; k += 1)
2803 {
2804 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2805 error (_("too many subscripts (%d expected)"), k);
2497b498 2806 elt = value_subscript (elt, pos_atr (ind[k]));
14f9c5c9
AS
2807 }
2808 return elt;
2809}
2810
deede10c
JB
2811/* Assuming ARR is a pointer to a GDB array, the value of the element
2812 of *ARR at the ARITY indices given in IND.
919e6dbe
PMR
2813 Does not read the entire array into memory.
2814
2815 Note: Unlike what one would expect, this function is used instead of
2816 ada_value_subscript for basically all non-packed array types. The reason
2817 for this is that a side effect of doing our own pointer arithmetics instead
2818 of relying on value_subscript is that there is no implicit typedef peeling.
2819 This is important for arrays of array accesses, where it allows us to
2820 preserve the fact that the array's element is an array access, where the
2821 access part os encoded in a typedef layer. */
14f9c5c9 2822
2c0b251b 2823static struct value *
deede10c 2824ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2825{
2826 int k;
919e6dbe 2827 struct value *array_ind = ada_value_ind (arr);
deede10c 2828 struct type *type
919e6dbe
PMR
2829 = check_typedef (value_enclosing_type (array_ind));
2830
2831 if (TYPE_CODE (type) == TYPE_CODE_ARRAY
2832 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2833 return value_subscript_packed (array_ind, arity, ind);
14f9c5c9
AS
2834
2835 for (k = 0; k < arity; k += 1)
2836 {
2837 LONGEST lwb, upb;
aa715135 2838 struct value *lwb_value;
14f9c5c9
AS
2839
2840 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2841 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2842 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2843 value_copy (arr));
14f9c5c9 2844 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
aa715135
JG
2845 lwb_value = value_from_longest (value_type(ind[k]), lwb);
2846 arr = value_ptradd (arr, pos_atr (ind[k]) - pos_atr (lwb_value));
14f9c5c9
AS
2847 type = TYPE_TARGET_TYPE (type);
2848 }
2849
2850 return value_ind (arr);
2851}
2852
0b5d8877 2853/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2854 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2855 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2856 this array is LOW, as per Ada rules. */
0b5d8877 2857static struct value *
f5938064
JG
2858ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2859 int low, int high)
0b5d8877 2860{
b0dd7688 2861 struct type *type0 = ada_check_typedef (type);
aa715135 2862 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
0c9c3474 2863 struct type *index_type
aa715135 2864 = create_static_range_type (NULL, base_index_type, low, high);
6c038f32 2865 struct type *slice_type =
b0dd7688 2866 create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
aa715135
JG
2867 int base_low = ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2868 LONGEST base_low_pos, low_pos;
2869 CORE_ADDR base;
2870
2871 if (!discrete_position (base_index_type, low, &low_pos)
2872 || !discrete_position (base_index_type, base_low, &base_low_pos))
2873 {
2874 warning (_("unable to get positions in slice, use bounds instead"));
2875 low_pos = low;
2876 base_low_pos = base_low;
2877 }
5b4ee69b 2878
aa715135
JG
2879 base = value_as_address (array_ptr)
2880 + ((low_pos - base_low_pos)
2881 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
f5938064 2882 return value_at_lazy (slice_type, base);
0b5d8877
PH
2883}
2884
2885
2886static struct value *
2887ada_value_slice (struct value *array, int low, int high)
2888{
b0dd7688 2889 struct type *type = ada_check_typedef (value_type (array));
aa715135 2890 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
0c9c3474
SA
2891 struct type *index_type
2892 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
6c038f32 2893 struct type *slice_type =
0b5d8877 2894 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
aa715135 2895 LONGEST low_pos, high_pos;
5b4ee69b 2896
aa715135
JG
2897 if (!discrete_position (base_index_type, low, &low_pos)
2898 || !discrete_position (base_index_type, high, &high_pos))
2899 {
2900 warning (_("unable to get positions in slice, use bounds instead"));
2901 low_pos = low;
2902 high_pos = high;
2903 }
2904
2905 return value_cast (slice_type,
2906 value_slice (array, low, high_pos - low_pos + 1));
0b5d8877
PH
2907}
2908
14f9c5c9
AS
2909/* If type is a record type in the form of a standard GNAT array
2910 descriptor, returns the number of dimensions for type. If arr is a
2911 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2912 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2913
2914int
d2e4a39e 2915ada_array_arity (struct type *type)
14f9c5c9
AS
2916{
2917 int arity;
2918
2919 if (type == NULL)
2920 return 0;
2921
2922 type = desc_base_type (type);
2923
2924 arity = 0;
d2e4a39e 2925 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2926 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2927 else
2928 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2929 {
4c4b4cd2 2930 arity += 1;
61ee279c 2931 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2932 }
d2e4a39e 2933
14f9c5c9
AS
2934 return arity;
2935}
2936
2937/* If TYPE is a record type in the form of a standard GNAT array
2938 descriptor or a simple array type, returns the element type for
2939 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2940 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2941
d2e4a39e
AS
2942struct type *
2943ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2944{
2945 type = desc_base_type (type);
2946
d2e4a39e 2947 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2948 {
2949 int k;
d2e4a39e 2950 struct type *p_array_type;
14f9c5c9 2951
556bdfd4 2952 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2953
2954 k = ada_array_arity (type);
2955 if (k == 0)
4c4b4cd2 2956 return NULL;
d2e4a39e 2957
4c4b4cd2 2958 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2959 if (nindices >= 0 && k > nindices)
4c4b4cd2 2960 k = nindices;
d2e4a39e 2961 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2962 {
61ee279c 2963 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2964 k -= 1;
2965 }
14f9c5c9
AS
2966 return p_array_type;
2967 }
2968 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2969 {
2970 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2971 {
2972 type = TYPE_TARGET_TYPE (type);
2973 nindices -= 1;
2974 }
14f9c5c9
AS
2975 return type;
2976 }
2977
2978 return NULL;
2979}
2980
4c4b4cd2 2981/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2982 Does not examine memory. Throws an error if N is invalid or TYPE
2983 is not an array type. NAME is the name of the Ada attribute being
2984 evaluated ('range, 'first, 'last, or 'length); it is used in building
2985 the error message. */
14f9c5c9 2986
1eea4ebd
UW
2987static struct type *
2988ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2989{
4c4b4cd2
PH
2990 struct type *result_type;
2991
14f9c5c9
AS
2992 type = desc_base_type (type);
2993
1eea4ebd
UW
2994 if (n < 0 || n > ada_array_arity (type))
2995 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2996
4c4b4cd2 2997 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2998 {
2999 int i;
3000
3001 for (i = 1; i < n; i += 1)
4c4b4cd2 3002 type = TYPE_TARGET_TYPE (type);
262452ec 3003 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
3004 /* FIXME: The stabs type r(0,0);bound;bound in an array type
3005 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 3006 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
3007 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
3008 result_type = NULL;
14f9c5c9 3009 }
d2e4a39e 3010 else
1eea4ebd
UW
3011 {
3012 result_type = desc_index_type (desc_bounds_type (type), n);
3013 if (result_type == NULL)
3014 error (_("attempt to take bound of something that is not an array"));
3015 }
3016
3017 return result_type;
14f9c5c9
AS
3018}
3019
3020/* Given that arr is an array type, returns the lower bound of the
3021 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 3022 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
3023 array-descriptor type. It works for other arrays with bounds supplied
3024 by run-time quantities other than discriminants. */
14f9c5c9 3025
abb68b3e 3026static LONGEST
fb5e3d5c 3027ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 3028{
8a48ac95 3029 struct type *type, *index_type_desc, *index_type;
1ce677a4 3030 int i;
262452ec
JK
3031
3032 gdb_assert (which == 0 || which == 1);
14f9c5c9 3033
ad82864c
JB
3034 if (ada_is_constrained_packed_array_type (arr_type))
3035 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 3036
4c4b4cd2 3037 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 3038 return (LONGEST) - which;
14f9c5c9
AS
3039
3040 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
3041 type = TYPE_TARGET_TYPE (arr_type);
3042 else
3043 type = arr_type;
3044
bafffb51
JB
3045 if (TYPE_FIXED_INSTANCE (type))
3046 {
3047 /* The array has already been fixed, so we do not need to
3048 check the parallel ___XA type again. That encoding has
3049 already been applied, so ignore it now. */
3050 index_type_desc = NULL;
3051 }
3052 else
3053 {
3054 index_type_desc = ada_find_parallel_type (type, "___XA");
3055 ada_fixup_array_indexes_type (index_type_desc);
3056 }
3057
262452ec 3058 if (index_type_desc != NULL)
28c85d6c
JB
3059 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
3060 NULL);
262452ec 3061 else
8a48ac95
JB
3062 {
3063 struct type *elt_type = check_typedef (type);
3064
3065 for (i = 1; i < n; i++)
3066 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
3067
3068 index_type = TYPE_INDEX_TYPE (elt_type);
3069 }
262452ec 3070
43bbcdc2
PH
3071 return
3072 (LONGEST) (which == 0
3073 ? ada_discrete_type_low_bound (index_type)
3074 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
3075}
3076
3077/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
3078 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3079 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3080 supplied by run-time quantities other than discriminants. */
14f9c5c9 3081
1eea4ebd 3082static LONGEST
4dc81987 3083ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3084{
eb479039
JB
3085 struct type *arr_type;
3086
3087 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3088 arr = value_ind (arr);
3089 arr_type = value_enclosing_type (arr);
14f9c5c9 3090
ad82864c
JB
3091 if (ada_is_constrained_packed_array_type (arr_type))
3092 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3093 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3094 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3095 else
1eea4ebd 3096 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3097}
3098
3099/* Given that arr is an array value, returns the length of the
3100 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3101 supplied by run-time quantities other than discriminants.
3102 Does not work for arrays indexed by enumeration types with representation
3103 clauses at the moment. */
14f9c5c9 3104
1eea4ebd 3105static LONGEST
d2e4a39e 3106ada_array_length (struct value *arr, int n)
14f9c5c9 3107{
aa715135
JG
3108 struct type *arr_type, *index_type;
3109 int low, high;
eb479039
JB
3110
3111 if (TYPE_CODE (check_typedef (value_type (arr))) == TYPE_CODE_PTR)
3112 arr = value_ind (arr);
3113 arr_type = value_enclosing_type (arr);
14f9c5c9 3114
ad82864c
JB
3115 if (ada_is_constrained_packed_array_type (arr_type))
3116 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3117
4c4b4cd2 3118 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3119 {
3120 low = ada_array_bound_from_type (arr_type, n, 0);
3121 high = ada_array_bound_from_type (arr_type, n, 1);
3122 }
14f9c5c9 3123 else
aa715135
JG
3124 {
3125 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3126 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3127 }
3128
f168693b 3129 arr_type = check_typedef (arr_type);
aa715135
JG
3130 index_type = TYPE_INDEX_TYPE (arr_type);
3131 if (index_type != NULL)
3132 {
3133 struct type *base_type;
3134 if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
3135 base_type = TYPE_TARGET_TYPE (index_type);
3136 else
3137 base_type = index_type;
3138
3139 low = pos_atr (value_from_longest (base_type, low));
3140 high = pos_atr (value_from_longest (base_type, high));
3141 }
3142 return high - low + 1;
4c4b4cd2
PH
3143}
3144
3145/* An empty array whose type is that of ARR_TYPE (an array type),
3146 with bounds LOW to LOW-1. */
3147
3148static struct value *
3149empty_array (struct type *arr_type, int low)
3150{
b0dd7688 3151 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3152 struct type *index_type
3153 = create_static_range_type
3154 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, low - 1);
b0dd7688 3155 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3156
0b5d8877 3157 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3158}
14f9c5c9 3159\f
d2e4a39e 3160
4c4b4cd2 3161 /* Name resolution */
14f9c5c9 3162
4c4b4cd2
PH
3163/* The "decoded" name for the user-definable Ada operator corresponding
3164 to OP. */
14f9c5c9 3165
d2e4a39e 3166static const char *
4c4b4cd2 3167ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3168{
3169 int i;
3170
4c4b4cd2 3171 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3172 {
3173 if (ada_opname_table[i].op == op)
4c4b4cd2 3174 return ada_opname_table[i].decoded;
14f9c5c9 3175 }
323e0a4a 3176 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3177}
3178
3179
4c4b4cd2
PH
3180/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3181 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3182 undefined namespace) and converts operators that are
3183 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
3184 non-null, it provides a preferred result type [at the moment, only
3185 type void has any effect---causing procedures to be preferred over
3186 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 3187 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3188
4c4b4cd2
PH
3189static void
3190resolve (struct expression **expp, int void_context_p)
14f9c5c9 3191{
30b15541
UW
3192 struct type *context_type = NULL;
3193 int pc = 0;
3194
3195 if (void_context_p)
3196 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3197
3198 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
3199}
3200
4c4b4cd2
PH
3201/* Resolve the operator of the subexpression beginning at
3202 position *POS of *EXPP. "Resolving" consists of replacing
3203 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3204 with their resolutions, replacing built-in operators with
3205 function calls to user-defined operators, where appropriate, and,
3206 when DEPROCEDURE_P is non-zero, converting function-valued variables
3207 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3208 are as in ada_resolve, above. */
14f9c5c9 3209
d2e4a39e 3210static struct value *
4c4b4cd2 3211resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 3212 struct type *context_type)
14f9c5c9
AS
3213{
3214 int pc = *pos;
3215 int i;
4c4b4cd2 3216 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 3217 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
3218 struct value **argvec; /* Vector of operand types (alloca'ed). */
3219 int nargs; /* Number of operands. */
52ce6436 3220 int oplen;
14f9c5c9
AS
3221
3222 argvec = NULL;
3223 nargs = 0;
3224 exp = *expp;
3225
52ce6436
PH
3226 /* Pass one: resolve operands, saving their types and updating *pos,
3227 if needed. */
14f9c5c9
AS
3228 switch (op)
3229 {
4c4b4cd2
PH
3230 case OP_FUNCALL:
3231 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
3232 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3233 *pos += 7;
4c4b4cd2
PH
3234 else
3235 {
3236 *pos += 3;
3237 resolve_subexp (expp, pos, 0, NULL);
3238 }
3239 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
3240 break;
3241
14f9c5c9 3242 case UNOP_ADDR:
4c4b4cd2
PH
3243 *pos += 1;
3244 resolve_subexp (expp, pos, 0, NULL);
3245 break;
3246
52ce6436
PH
3247 case UNOP_QUAL:
3248 *pos += 3;
17466c1a 3249 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
3250 break;
3251
52ce6436 3252 case OP_ATR_MODULUS:
4c4b4cd2
PH
3253 case OP_ATR_SIZE:
3254 case OP_ATR_TAG:
4c4b4cd2
PH
3255 case OP_ATR_FIRST:
3256 case OP_ATR_LAST:
3257 case OP_ATR_LENGTH:
3258 case OP_ATR_POS:
3259 case OP_ATR_VAL:
4c4b4cd2
PH
3260 case OP_ATR_MIN:
3261 case OP_ATR_MAX:
52ce6436
PH
3262 case TERNOP_IN_RANGE:
3263 case BINOP_IN_BOUNDS:
3264 case UNOP_IN_RANGE:
3265 case OP_AGGREGATE:
3266 case OP_OTHERS:
3267 case OP_CHOICES:
3268 case OP_POSITIONAL:
3269 case OP_DISCRETE_RANGE:
3270 case OP_NAME:
3271 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3272 *pos += oplen;
14f9c5c9
AS
3273 break;
3274
3275 case BINOP_ASSIGN:
3276 {
4c4b4cd2
PH
3277 struct value *arg1;
3278
3279 *pos += 1;
3280 arg1 = resolve_subexp (expp, pos, 0, NULL);
3281 if (arg1 == NULL)
3282 resolve_subexp (expp, pos, 1, NULL);
3283 else
df407dfe 3284 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 3285 break;
14f9c5c9
AS
3286 }
3287
4c4b4cd2 3288 case UNOP_CAST:
4c4b4cd2
PH
3289 *pos += 3;
3290 nargs = 1;
3291 break;
14f9c5c9 3292
4c4b4cd2
PH
3293 case BINOP_ADD:
3294 case BINOP_SUB:
3295 case BINOP_MUL:
3296 case BINOP_DIV:
3297 case BINOP_REM:
3298 case BINOP_MOD:
3299 case BINOP_EXP:
3300 case BINOP_CONCAT:
3301 case BINOP_LOGICAL_AND:
3302 case BINOP_LOGICAL_OR:
3303 case BINOP_BITWISE_AND:
3304 case BINOP_BITWISE_IOR:
3305 case BINOP_BITWISE_XOR:
14f9c5c9 3306
4c4b4cd2
PH
3307 case BINOP_EQUAL:
3308 case BINOP_NOTEQUAL:
3309 case BINOP_LESS:
3310 case BINOP_GTR:
3311 case BINOP_LEQ:
3312 case BINOP_GEQ:
14f9c5c9 3313
4c4b4cd2
PH
3314 case BINOP_REPEAT:
3315 case BINOP_SUBSCRIPT:
3316 case BINOP_COMMA:
40c8aaa9
JB
3317 *pos += 1;
3318 nargs = 2;
3319 break;
14f9c5c9 3320
4c4b4cd2
PH
3321 case UNOP_NEG:
3322 case UNOP_PLUS:
3323 case UNOP_LOGICAL_NOT:
3324 case UNOP_ABS:
3325 case UNOP_IND:
3326 *pos += 1;
3327 nargs = 1;
3328 break;
14f9c5c9 3329
4c4b4cd2
PH
3330 case OP_LONG:
3331 case OP_DOUBLE:
3332 case OP_VAR_VALUE:
3333 *pos += 4;
3334 break;
14f9c5c9 3335
4c4b4cd2
PH
3336 case OP_TYPE:
3337 case OP_BOOL:
3338 case OP_LAST:
4c4b4cd2
PH
3339 case OP_INTERNALVAR:
3340 *pos += 3;
3341 break;
14f9c5c9 3342
4c4b4cd2
PH
3343 case UNOP_MEMVAL:
3344 *pos += 3;
3345 nargs = 1;
3346 break;
3347
67f3407f
DJ
3348 case OP_REGISTER:
3349 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3350 break;
3351
4c4b4cd2
PH
3352 case STRUCTOP_STRUCT:
3353 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3354 nargs = 1;
3355 break;
3356
4c4b4cd2 3357 case TERNOP_SLICE:
4c4b4cd2
PH
3358 *pos += 1;
3359 nargs = 3;
3360 break;
3361
52ce6436 3362 case OP_STRING:
14f9c5c9 3363 break;
4c4b4cd2
PH
3364
3365 default:
323e0a4a 3366 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3367 }
3368
8d749320 3369 argvec = XALLOCAVEC (struct value *, nargs + 1);
4c4b4cd2
PH
3370 for (i = 0; i < nargs; i += 1)
3371 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3372 argvec[i] = NULL;
3373 exp = *expp;
3374
3375 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3376 switch (op)
3377 {
3378 default:
3379 break;
3380
14f9c5c9 3381 case OP_VAR_VALUE:
4c4b4cd2 3382 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679 3383 {
d12307c1 3384 struct block_symbol *candidates;
76a01679
JB
3385 int n_candidates;
3386
3387 n_candidates =
3388 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3389 (exp->elts[pc + 2].symbol),
3390 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3391 &candidates);
76a01679
JB
3392
3393 if (n_candidates > 1)
3394 {
3395 /* Types tend to get re-introduced locally, so if there
3396 are any local symbols that are not types, first filter
3397 out all types. */
3398 int j;
3399 for (j = 0; j < n_candidates; j += 1)
d12307c1 3400 switch (SYMBOL_CLASS (candidates[j].symbol))
76a01679
JB
3401 {
3402 case LOC_REGISTER:
3403 case LOC_ARG:
3404 case LOC_REF_ARG:
76a01679
JB
3405 case LOC_REGPARM_ADDR:
3406 case LOC_LOCAL:
76a01679 3407 case LOC_COMPUTED:
76a01679
JB
3408 goto FoundNonType;
3409 default:
3410 break;
3411 }
3412 FoundNonType:
3413 if (j < n_candidates)
3414 {
3415 j = 0;
3416 while (j < n_candidates)
3417 {
d12307c1 3418 if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
76a01679
JB
3419 {
3420 candidates[j] = candidates[n_candidates - 1];
3421 n_candidates -= 1;
3422 }
3423 else
3424 j += 1;
3425 }
3426 }
3427 }
3428
3429 if (n_candidates == 0)
323e0a4a 3430 error (_("No definition found for %s"),
76a01679
JB
3431 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3432 else if (n_candidates == 1)
3433 i = 0;
3434 else if (deprocedure_p
3435 && !is_nonfunction (candidates, n_candidates))
3436 {
06d5cf63
JB
3437 i = ada_resolve_function
3438 (candidates, n_candidates, NULL, 0,
3439 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3440 context_type);
76a01679 3441 if (i < 0)
323e0a4a 3442 error (_("Could not find a match for %s"),
76a01679
JB
3443 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3444 }
3445 else
3446 {
323e0a4a 3447 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3448 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3449 user_select_syms (candidates, n_candidates, 1);
3450 i = 0;
3451 }
3452
3453 exp->elts[pc + 1].block = candidates[i].block;
d12307c1 3454 exp->elts[pc + 2].symbol = candidates[i].symbol;
1265e4aa
JB
3455 if (innermost_block == NULL
3456 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3457 innermost_block = candidates[i].block;
3458 }
3459
3460 if (deprocedure_p
3461 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3462 == TYPE_CODE_FUNC))
3463 {
3464 replace_operator_with_call (expp, pc, 0, 0,
3465 exp->elts[pc + 2].symbol,
3466 exp->elts[pc + 1].block);
3467 exp = *expp;
3468 }
14f9c5c9
AS
3469 break;
3470
3471 case OP_FUNCALL:
3472 {
4c4b4cd2 3473 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3474 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2 3475 {
d12307c1 3476 struct block_symbol *candidates;
4c4b4cd2
PH
3477 int n_candidates;
3478
3479 n_candidates =
76a01679
JB
3480 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3481 (exp->elts[pc + 5].symbol),
3482 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3483 &candidates);
4c4b4cd2
PH
3484 if (n_candidates == 1)
3485 i = 0;
3486 else
3487 {
06d5cf63
JB
3488 i = ada_resolve_function
3489 (candidates, n_candidates,
3490 argvec, nargs,
3491 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3492 context_type);
4c4b4cd2 3493 if (i < 0)
323e0a4a 3494 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3495 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3496 }
3497
3498 exp->elts[pc + 4].block = candidates[i].block;
d12307c1 3499 exp->elts[pc + 5].symbol = candidates[i].symbol;
1265e4aa
JB
3500 if (innermost_block == NULL
3501 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3502 innermost_block = candidates[i].block;
3503 }
14f9c5c9
AS
3504 }
3505 break;
3506 case BINOP_ADD:
3507 case BINOP_SUB:
3508 case BINOP_MUL:
3509 case BINOP_DIV:
3510 case BINOP_REM:
3511 case BINOP_MOD:
3512 case BINOP_CONCAT:
3513 case BINOP_BITWISE_AND:
3514 case BINOP_BITWISE_IOR:
3515 case BINOP_BITWISE_XOR:
3516 case BINOP_EQUAL:
3517 case BINOP_NOTEQUAL:
3518 case BINOP_LESS:
3519 case BINOP_GTR:
3520 case BINOP_LEQ:
3521 case BINOP_GEQ:
3522 case BINOP_EXP:
3523 case UNOP_NEG:
3524 case UNOP_PLUS:
3525 case UNOP_LOGICAL_NOT:
3526 case UNOP_ABS:
3527 if (possible_user_operator_p (op, argvec))
4c4b4cd2 3528 {
d12307c1 3529 struct block_symbol *candidates;
4c4b4cd2
PH
3530 int n_candidates;
3531
3532 n_candidates =
3533 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3534 (struct block *) NULL, VAR_DOMAIN,
4eeaa230 3535 &candidates);
4c4b4cd2 3536 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3537 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3538 if (i < 0)
3539 break;
3540
d12307c1
PMR
3541 replace_operator_with_call (expp, pc, nargs, 1,
3542 candidates[i].symbol,
3543 candidates[i].block);
4c4b4cd2
PH
3544 exp = *expp;
3545 }
14f9c5c9 3546 break;
4c4b4cd2
PH
3547
3548 case OP_TYPE:
b3dbf008 3549 case OP_REGISTER:
4c4b4cd2 3550 return NULL;
14f9c5c9
AS
3551 }
3552
3553 *pos = pc;
3554 return evaluate_subexp_type (exp, pos);
3555}
3556
3557/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3558 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3559 a non-pointer. */
14f9c5c9 3560/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3561 liberal. */
14f9c5c9
AS
3562
3563static int
4dc81987 3564ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3565{
61ee279c
PH
3566 ftype = ada_check_typedef (ftype);
3567 atype = ada_check_typedef (atype);
14f9c5c9
AS
3568
3569 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3570 ftype = TYPE_TARGET_TYPE (ftype);
3571 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3572 atype = TYPE_TARGET_TYPE (atype);
3573
d2e4a39e 3574 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3575 {
3576 default:
5b3d5b7d 3577 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3578 case TYPE_CODE_PTR:
3579 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3580 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3581 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3582 else
1265e4aa
JB
3583 return (may_deref
3584 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3585 case TYPE_CODE_INT:
3586 case TYPE_CODE_ENUM:
3587 case TYPE_CODE_RANGE:
3588 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3589 {
3590 case TYPE_CODE_INT:
3591 case TYPE_CODE_ENUM:
3592 case TYPE_CODE_RANGE:
3593 return 1;
3594 default:
3595 return 0;
3596 }
14f9c5c9
AS
3597
3598 case TYPE_CODE_ARRAY:
d2e4a39e 3599 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3600 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3601
3602 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3603 if (ada_is_array_descriptor_type (ftype))
3604 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3605 || ada_is_array_descriptor_type (atype));
14f9c5c9 3606 else
4c4b4cd2
PH
3607 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3608 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3609
3610 case TYPE_CODE_UNION:
3611 case TYPE_CODE_FLT:
3612 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3613 }
3614}
3615
3616/* Return non-zero if the formals of FUNC "sufficiently match" the
3617 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3618 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3619 argument function. */
14f9c5c9
AS
3620
3621static int
d2e4a39e 3622ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3623{
3624 int i;
d2e4a39e 3625 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3626
1265e4aa
JB
3627 if (SYMBOL_CLASS (func) == LOC_CONST
3628 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3629 return (n_actuals == 0);
3630 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3631 return 0;
3632
3633 if (TYPE_NFIELDS (func_type) != n_actuals)
3634 return 0;
3635
3636 for (i = 0; i < n_actuals; i += 1)
3637 {
4c4b4cd2 3638 if (actuals[i] == NULL)
76a01679
JB
3639 return 0;
3640 else
3641 {
5b4ee69b
MS
3642 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3643 i));
df407dfe 3644 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3645
76a01679
JB
3646 if (!ada_type_match (ftype, atype, 1))
3647 return 0;
3648 }
14f9c5c9
AS
3649 }
3650 return 1;
3651}
3652
3653/* False iff function type FUNC_TYPE definitely does not produce a value
3654 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3655 FUNC_TYPE is not a valid function type with a non-null return type
3656 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3657
3658static int
d2e4a39e 3659return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3660{
d2e4a39e 3661 struct type *return_type;
14f9c5c9
AS
3662
3663 if (func_type == NULL)
3664 return 1;
3665
4c4b4cd2 3666 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3667 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3668 else
18af8284 3669 return_type = get_base_type (func_type);
14f9c5c9
AS
3670 if (return_type == NULL)
3671 return 1;
3672
18af8284 3673 context_type = get_base_type (context_type);
14f9c5c9
AS
3674
3675 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3676 return context_type == NULL || return_type == context_type;
3677 else if (context_type == NULL)
3678 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3679 else
3680 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3681}
3682
3683
4c4b4cd2 3684/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3685 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3686 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3687 that returns that type, then eliminate matches that don't. If
3688 CONTEXT_TYPE is void and there is at least one match that does not
3689 return void, eliminate all matches that do.
3690
14f9c5c9
AS
3691 Asks the user if there is more than one match remaining. Returns -1
3692 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3693 solely for messages. May re-arrange and modify SYMS in
3694 the process; the index returned is for the modified vector. */
14f9c5c9 3695
4c4b4cd2 3696static int
d12307c1 3697ada_resolve_function (struct block_symbol syms[],
4c4b4cd2
PH
3698 int nsyms, struct value **args, int nargs,
3699 const char *name, struct type *context_type)
14f9c5c9 3700{
30b15541 3701 int fallback;
14f9c5c9 3702 int k;
4c4b4cd2 3703 int m; /* Number of hits */
14f9c5c9 3704
d2e4a39e 3705 m = 0;
30b15541
UW
3706 /* In the first pass of the loop, we only accept functions matching
3707 context_type. If none are found, we add a second pass of the loop
3708 where every function is accepted. */
3709 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3710 {
3711 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3712 {
d12307c1 3713 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
4c4b4cd2 3714
d12307c1 3715 if (ada_args_match (syms[k].symbol, args, nargs)
30b15541 3716 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3717 {
3718 syms[m] = syms[k];
3719 m += 1;
3720 }
3721 }
14f9c5c9
AS
3722 }
3723
dc5c8746
PMR
3724 /* If we got multiple matches, ask the user which one to use. Don't do this
3725 interactive thing during completion, though, as the purpose of the
3726 completion is providing a list of all possible matches. Prompting the
3727 user to filter it down would be completely unexpected in this case. */
14f9c5c9
AS
3728 if (m == 0)
3729 return -1;
dc5c8746 3730 else if (m > 1 && !parse_completion)
14f9c5c9 3731 {
323e0a4a 3732 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3733 user_select_syms (syms, m, 1);
14f9c5c9
AS
3734 return 0;
3735 }
3736 return 0;
3737}
3738
4c4b4cd2
PH
3739/* Returns true (non-zero) iff decoded name N0 should appear before N1
3740 in a listing of choices during disambiguation (see sort_choices, below).
3741 The idea is that overloadings of a subprogram name from the
3742 same package should sort in their source order. We settle for ordering
3743 such symbols by their trailing number (__N or $N). */
3744
14f9c5c9 3745static int
0d5cff50 3746encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3747{
3748 if (N1 == NULL)
3749 return 0;
3750 else if (N0 == NULL)
3751 return 1;
3752 else
3753 {
3754 int k0, k1;
5b4ee69b 3755
d2e4a39e 3756 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3757 ;
d2e4a39e 3758 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3759 ;
d2e4a39e 3760 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3761 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3762 {
3763 int n0, n1;
5b4ee69b 3764
4c4b4cd2
PH
3765 n0 = k0;
3766 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3767 n0 -= 1;
3768 n1 = k1;
3769 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3770 n1 -= 1;
3771 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3772 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3773 }
14f9c5c9
AS
3774 return (strcmp (N0, N1) < 0);
3775 }
3776}
d2e4a39e 3777
4c4b4cd2
PH
3778/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3779 encoded names. */
3780
d2e4a39e 3781static void
d12307c1 3782sort_choices (struct block_symbol syms[], int nsyms)
14f9c5c9 3783{
4c4b4cd2 3784 int i;
5b4ee69b 3785
d2e4a39e 3786 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3787 {
d12307c1 3788 struct block_symbol sym = syms[i];
14f9c5c9
AS
3789 int j;
3790
d2e4a39e 3791 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2 3792 {
d12307c1
PMR
3793 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].symbol),
3794 SYMBOL_LINKAGE_NAME (sym.symbol)))
4c4b4cd2
PH
3795 break;
3796 syms[j + 1] = syms[j];
3797 }
d2e4a39e 3798 syms[j + 1] = sym;
14f9c5c9
AS
3799 }
3800}
3801
4c4b4cd2
PH
3802/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3803 by asking the user (if necessary), returning the number selected,
3804 and setting the first elements of SYMS items. Error if no symbols
3805 selected. */
14f9c5c9
AS
3806
3807/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3808 to be re-integrated one of these days. */
14f9c5c9
AS
3809
3810int
d12307c1 3811user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
14f9c5c9
AS
3812{
3813 int i;
8d749320 3814 int *chosen = XALLOCAVEC (int , nsyms);
14f9c5c9
AS
3815 int n_chosen;
3816 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3817 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3818
3819 if (max_results < 1)
323e0a4a 3820 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3821 if (nsyms <= 1)
3822 return nsyms;
3823
717d2f5a
JB
3824 if (select_mode == multiple_symbols_cancel)
3825 error (_("\
3826canceled because the command is ambiguous\n\
3827See set/show multiple-symbol."));
3828
3829 /* If select_mode is "all", then return all possible symbols.
3830 Only do that if more than one symbol can be selected, of course.
3831 Otherwise, display the menu as usual. */
3832 if (select_mode == multiple_symbols_all && max_results > 1)
3833 return nsyms;
3834
323e0a4a 3835 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3836 if (max_results > 1)
323e0a4a 3837 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3838
4c4b4cd2 3839 sort_choices (syms, nsyms);
14f9c5c9
AS
3840
3841 for (i = 0; i < nsyms; i += 1)
3842 {
d12307c1 3843 if (syms[i].symbol == NULL)
4c4b4cd2
PH
3844 continue;
3845
d12307c1 3846 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
4c4b4cd2 3847 {
76a01679 3848 struct symtab_and_line sal =
d12307c1 3849 find_function_start_sal (syms[i].symbol, 1);
5b4ee69b 3850
323e0a4a
AC
3851 if (sal.symtab == NULL)
3852 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3853 i + first_choice,
d12307c1 3854 SYMBOL_PRINT_NAME (syms[i].symbol),
323e0a4a
AC
3855 sal.line);
3856 else
3857 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
d12307c1 3858 SYMBOL_PRINT_NAME (syms[i].symbol),
05cba821
JK
3859 symtab_to_filename_for_display (sal.symtab),
3860 sal.line);
4c4b4cd2
PH
3861 continue;
3862 }
d2e4a39e 3863 else
4c4b4cd2
PH
3864 {
3865 int is_enumeral =
d12307c1
PMR
3866 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3867 && SYMBOL_TYPE (syms[i].symbol) != NULL
3868 && TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) == TYPE_CODE_ENUM);
1994afbf
DE
3869 struct symtab *symtab = NULL;
3870
d12307c1
PMR
3871 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3872 symtab = symbol_symtab (syms[i].symbol);
4c4b4cd2 3873
d12307c1 3874 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
323e0a4a 3875 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2 3876 i + first_choice,
d12307c1 3877 SYMBOL_PRINT_NAME (syms[i].symbol),
05cba821 3878 symtab_to_filename_for_display (symtab),
d12307c1 3879 SYMBOL_LINE (syms[i].symbol));
76a01679 3880 else if (is_enumeral
d12307c1 3881 && TYPE_NAME (SYMBOL_TYPE (syms[i].symbol)) != NULL)
4c4b4cd2 3882 {
a3f17187 3883 printf_unfiltered (("[%d] "), i + first_choice);
d12307c1 3884 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
79d43c61 3885 gdb_stdout, -1, 0, &type_print_raw_options);
323e0a4a 3886 printf_unfiltered (_("'(%s) (enumeral)\n"),
d12307c1 3887 SYMBOL_PRINT_NAME (syms[i].symbol));
4c4b4cd2
PH
3888 }
3889 else if (symtab != NULL)
3890 printf_unfiltered (is_enumeral
323e0a4a
AC
3891 ? _("[%d] %s in %s (enumeral)\n")
3892 : _("[%d] %s at %s:?\n"),
4c4b4cd2 3893 i + first_choice,
d12307c1 3894 SYMBOL_PRINT_NAME (syms[i].symbol),
05cba821 3895 symtab_to_filename_for_display (symtab));
4c4b4cd2
PH
3896 else
3897 printf_unfiltered (is_enumeral
323e0a4a
AC
3898 ? _("[%d] %s (enumeral)\n")
3899 : _("[%d] %s at ?\n"),
4c4b4cd2 3900 i + first_choice,
d12307c1 3901 SYMBOL_PRINT_NAME (syms[i].symbol));
4c4b4cd2 3902 }
14f9c5c9 3903 }
d2e4a39e 3904
14f9c5c9 3905 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3906 "overload-choice");
14f9c5c9
AS
3907
3908 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3909 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3910
3911 return n_chosen;
3912}
3913
3914/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3915 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3916 order in CHOICES[0 .. N-1], and return N.
3917
3918 The user types choices as a sequence of numbers on one line
3919 separated by blanks, encoding them as follows:
3920
4c4b4cd2 3921 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3922 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3923 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3924
4c4b4cd2 3925 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3926
3927 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3928 prompts (for use with the -f switch). */
14f9c5c9
AS
3929
3930int
d2e4a39e 3931get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3932 int is_all_choice, char *annotation_suffix)
14f9c5c9 3933{
d2e4a39e 3934 char *args;
0bcd0149 3935 char *prompt;
14f9c5c9
AS
3936 int n_chosen;
3937 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3938
14f9c5c9
AS
3939 prompt = getenv ("PS2");
3940 if (prompt == NULL)
0bcd0149 3941 prompt = "> ";
14f9c5c9 3942
0bcd0149 3943 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3944
14f9c5c9 3945 if (args == NULL)
323e0a4a 3946 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3947
3948 n_chosen = 0;
76a01679 3949
4c4b4cd2
PH
3950 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3951 order, as given in args. Choices are validated. */
14f9c5c9
AS
3952 while (1)
3953 {
d2e4a39e 3954 char *args2;
14f9c5c9
AS
3955 int choice, j;
3956
0fcd72ba 3957 args = skip_spaces (args);
14f9c5c9 3958 if (*args == '\0' && n_chosen == 0)
323e0a4a 3959 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3960 else if (*args == '\0')
4c4b4cd2 3961 break;
14f9c5c9
AS
3962
3963 choice = strtol (args, &args2, 10);
d2e4a39e 3964 if (args == args2 || choice < 0
4c4b4cd2 3965 || choice > n_choices + first_choice - 1)
323e0a4a 3966 error (_("Argument must be choice number"));
14f9c5c9
AS
3967 args = args2;
3968
d2e4a39e 3969 if (choice == 0)
323e0a4a 3970 error (_("cancelled"));
14f9c5c9
AS
3971
3972 if (choice < first_choice)
4c4b4cd2
PH
3973 {
3974 n_chosen = n_choices;
3975 for (j = 0; j < n_choices; j += 1)
3976 choices[j] = j;
3977 break;
3978 }
14f9c5c9
AS
3979 choice -= first_choice;
3980
d2e4a39e 3981 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3982 {
3983 }
14f9c5c9
AS
3984
3985 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3986 {
3987 int k;
5b4ee69b 3988
4c4b4cd2
PH
3989 for (k = n_chosen - 1; k > j; k -= 1)
3990 choices[k + 1] = choices[k];
3991 choices[j + 1] = choice;
3992 n_chosen += 1;
3993 }
14f9c5c9
AS
3994 }
3995
3996 if (n_chosen > max_results)
323e0a4a 3997 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3998
14f9c5c9
AS
3999 return n_chosen;
4000}
4001
4c4b4cd2
PH
4002/* Replace the operator of length OPLEN at position PC in *EXPP with a call
4003 on the function identified by SYM and BLOCK, and taking NARGS
4004 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
4005
4006static void
d2e4a39e 4007replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2 4008 int oplen, struct symbol *sym,
270140bd 4009 const struct block *block)
14f9c5c9
AS
4010{
4011 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 4012 symbol, -oplen for operator being replaced). */
d2e4a39e 4013 struct expression *newexp = (struct expression *)
8c1a34e7 4014 xzalloc (sizeof (struct expression)
4c4b4cd2 4015 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 4016 struct expression *exp = *expp;
14f9c5c9
AS
4017
4018 newexp->nelts = exp->nelts + 7 - oplen;
4019 newexp->language_defn = exp->language_defn;
3489610d 4020 newexp->gdbarch = exp->gdbarch;
14f9c5c9 4021 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 4022 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 4023 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
4024
4025 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
4026 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
4027
4028 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
4029 newexp->elts[pc + 4].block = block;
4030 newexp->elts[pc + 5].symbol = sym;
4031
4032 *expp = newexp;
aacb1f0a 4033 xfree (exp);
d2e4a39e 4034}
14f9c5c9
AS
4035
4036/* Type-class predicates */
4037
4c4b4cd2
PH
4038/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4039 or FLOAT). */
14f9c5c9
AS
4040
4041static int
d2e4a39e 4042numeric_type_p (struct type *type)
14f9c5c9
AS
4043{
4044 if (type == NULL)
4045 return 0;
d2e4a39e
AS
4046 else
4047 {
4048 switch (TYPE_CODE (type))
4c4b4cd2
PH
4049 {
4050 case TYPE_CODE_INT:
4051 case TYPE_CODE_FLT:
4052 return 1;
4053 case TYPE_CODE_RANGE:
4054 return (type == TYPE_TARGET_TYPE (type)
4055 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4056 default:
4057 return 0;
4058 }
d2e4a39e 4059 }
14f9c5c9
AS
4060}
4061
4c4b4cd2 4062/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4063
4064static int
d2e4a39e 4065integer_type_p (struct type *type)
14f9c5c9
AS
4066{
4067 if (type == NULL)
4068 return 0;
d2e4a39e
AS
4069 else
4070 {
4071 switch (TYPE_CODE (type))
4c4b4cd2
PH
4072 {
4073 case TYPE_CODE_INT:
4074 return 1;
4075 case TYPE_CODE_RANGE:
4076 return (type == TYPE_TARGET_TYPE (type)
4077 || integer_type_p (TYPE_TARGET_TYPE (type)));
4078 default:
4079 return 0;
4080 }
d2e4a39e 4081 }
14f9c5c9
AS
4082}
4083
4c4b4cd2 4084/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4085
4086static int
d2e4a39e 4087scalar_type_p (struct type *type)
14f9c5c9
AS
4088{
4089 if (type == NULL)
4090 return 0;
d2e4a39e
AS
4091 else
4092 {
4093 switch (TYPE_CODE (type))
4c4b4cd2
PH
4094 {
4095 case TYPE_CODE_INT:
4096 case TYPE_CODE_RANGE:
4097 case TYPE_CODE_ENUM:
4098 case TYPE_CODE_FLT:
4099 return 1;
4100 default:
4101 return 0;
4102 }
d2e4a39e 4103 }
14f9c5c9
AS
4104}
4105
4c4b4cd2 4106/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4107
4108static int
d2e4a39e 4109discrete_type_p (struct type *type)
14f9c5c9
AS
4110{
4111 if (type == NULL)
4112 return 0;
d2e4a39e
AS
4113 else
4114 {
4115 switch (TYPE_CODE (type))
4c4b4cd2
PH
4116 {
4117 case TYPE_CODE_INT:
4118 case TYPE_CODE_RANGE:
4119 case TYPE_CODE_ENUM:
872f0337 4120 case TYPE_CODE_BOOL:
4c4b4cd2
PH
4121 return 1;
4122 default:
4123 return 0;
4124 }
d2e4a39e 4125 }
14f9c5c9
AS
4126}
4127
4c4b4cd2
PH
4128/* Returns non-zero if OP with operands in the vector ARGS could be
4129 a user-defined function. Errs on the side of pre-defined operators
4130 (i.e., result 0). */
14f9c5c9
AS
4131
4132static int
d2e4a39e 4133possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4134{
76a01679 4135 struct type *type0 =
df407dfe 4136 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4137 struct type *type1 =
df407dfe 4138 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4139
4c4b4cd2
PH
4140 if (type0 == NULL)
4141 return 0;
4142
14f9c5c9
AS
4143 switch (op)
4144 {
4145 default:
4146 return 0;
4147
4148 case BINOP_ADD:
4149 case BINOP_SUB:
4150 case BINOP_MUL:
4151 case BINOP_DIV:
d2e4a39e 4152 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4153
4154 case BINOP_REM:
4155 case BINOP_MOD:
4156 case BINOP_BITWISE_AND:
4157 case BINOP_BITWISE_IOR:
4158 case BINOP_BITWISE_XOR:
d2e4a39e 4159 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4160
4161 case BINOP_EQUAL:
4162 case BINOP_NOTEQUAL:
4163 case BINOP_LESS:
4164 case BINOP_GTR:
4165 case BINOP_LEQ:
4166 case BINOP_GEQ:
d2e4a39e 4167 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4168
4169 case BINOP_CONCAT:
ee90b9ab 4170 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4171
4172 case BINOP_EXP:
d2e4a39e 4173 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4174
4175 case UNOP_NEG:
4176 case UNOP_PLUS:
4177 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4178 case UNOP_ABS:
4179 return (!numeric_type_p (type0));
14f9c5c9
AS
4180
4181 }
4182}
4183\f
4c4b4cd2 4184 /* Renaming */
14f9c5c9 4185
aeb5907d
JB
4186/* NOTES:
4187
4188 1. In the following, we assume that a renaming type's name may
4189 have an ___XD suffix. It would be nice if this went away at some
4190 point.
4191 2. We handle both the (old) purely type-based representation of
4192 renamings and the (new) variable-based encoding. At some point,
4193 it is devoutly to be hoped that the former goes away
4194 (FIXME: hilfinger-2007-07-09).
4195 3. Subprogram renamings are not implemented, although the XRS
4196 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4197
4198/* If SYM encodes a renaming,
4199
4200 <renaming> renames <renamed entity>,
4201
4202 sets *LEN to the length of the renamed entity's name,
4203 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4204 the string describing the subcomponent selected from the renamed
0963b4bd 4205 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4206 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4207 are undefined). Otherwise, returns a value indicating the category
4208 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4209 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4210 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4211 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4212 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4213 may be NULL, in which case they are not assigned.
4214
4215 [Currently, however, GCC does not generate subprogram renamings.] */
4216
4217enum ada_renaming_category
4218ada_parse_renaming (struct symbol *sym,
4219 const char **renamed_entity, int *len,
4220 const char **renaming_expr)
4221{
4222 enum ada_renaming_category kind;
4223 const char *info;
4224 const char *suffix;
4225
4226 if (sym == NULL)
4227 return ADA_NOT_RENAMING;
4228 switch (SYMBOL_CLASS (sym))
14f9c5c9 4229 {
aeb5907d
JB
4230 default:
4231 return ADA_NOT_RENAMING;
4232 case LOC_TYPEDEF:
4233 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4234 renamed_entity, len, renaming_expr);
4235 case LOC_LOCAL:
4236 case LOC_STATIC:
4237 case LOC_COMPUTED:
4238 case LOC_OPTIMIZED_OUT:
4239 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4240 if (info == NULL)
4241 return ADA_NOT_RENAMING;
4242 switch (info[5])
4243 {
4244 case '_':
4245 kind = ADA_OBJECT_RENAMING;
4246 info += 6;
4247 break;
4248 case 'E':
4249 kind = ADA_EXCEPTION_RENAMING;
4250 info += 7;
4251 break;
4252 case 'P':
4253 kind = ADA_PACKAGE_RENAMING;
4254 info += 7;
4255 break;
4256 case 'S':
4257 kind = ADA_SUBPROGRAM_RENAMING;
4258 info += 7;
4259 break;
4260 default:
4261 return ADA_NOT_RENAMING;
4262 }
14f9c5c9 4263 }
4c4b4cd2 4264
aeb5907d
JB
4265 if (renamed_entity != NULL)
4266 *renamed_entity = info;
4267 suffix = strstr (info, "___XE");
4268 if (suffix == NULL || suffix == info)
4269 return ADA_NOT_RENAMING;
4270 if (len != NULL)
4271 *len = strlen (info) - strlen (suffix);
4272 suffix += 5;
4273 if (renaming_expr != NULL)
4274 *renaming_expr = suffix;
4275 return kind;
4276}
4277
4278/* Assuming TYPE encodes a renaming according to the old encoding in
4279 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4280 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4281 ADA_NOT_RENAMING otherwise. */
4282static enum ada_renaming_category
4283parse_old_style_renaming (struct type *type,
4284 const char **renamed_entity, int *len,
4285 const char **renaming_expr)
4286{
4287 enum ada_renaming_category kind;
4288 const char *name;
4289 const char *info;
4290 const char *suffix;
14f9c5c9 4291
aeb5907d
JB
4292 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4293 || TYPE_NFIELDS (type) != 1)
4294 return ADA_NOT_RENAMING;
14f9c5c9 4295
aeb5907d
JB
4296 name = type_name_no_tag (type);
4297 if (name == NULL)
4298 return ADA_NOT_RENAMING;
4299
4300 name = strstr (name, "___XR");
4301 if (name == NULL)
4302 return ADA_NOT_RENAMING;
4303 switch (name[5])
4304 {
4305 case '\0':
4306 case '_':
4307 kind = ADA_OBJECT_RENAMING;
4308 break;
4309 case 'E':
4310 kind = ADA_EXCEPTION_RENAMING;
4311 break;
4312 case 'P':
4313 kind = ADA_PACKAGE_RENAMING;
4314 break;
4315 case 'S':
4316 kind = ADA_SUBPROGRAM_RENAMING;
4317 break;
4318 default:
4319 return ADA_NOT_RENAMING;
4320 }
14f9c5c9 4321
aeb5907d
JB
4322 info = TYPE_FIELD_NAME (type, 0);
4323 if (info == NULL)
4324 return ADA_NOT_RENAMING;
4325 if (renamed_entity != NULL)
4326 *renamed_entity = info;
4327 suffix = strstr (info, "___XE");
4328 if (renaming_expr != NULL)
4329 *renaming_expr = suffix + 5;
4330 if (suffix == NULL || suffix == info)
4331 return ADA_NOT_RENAMING;
4332 if (len != NULL)
4333 *len = suffix - info;
4334 return kind;
a5ee536b
JB
4335}
4336
4337/* Compute the value of the given RENAMING_SYM, which is expected to
4338 be a symbol encoding a renaming expression. BLOCK is the block
4339 used to evaluate the renaming. */
52ce6436 4340
a5ee536b
JB
4341static struct value *
4342ada_read_renaming_var_value (struct symbol *renaming_sym,
3977b71f 4343 const struct block *block)
a5ee536b 4344{
bbc13ae3 4345 const char *sym_name;
a5ee536b
JB
4346 struct expression *expr;
4347 struct value *value;
4348 struct cleanup *old_chain = NULL;
4349
bbc13ae3 4350 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
1bb9788d 4351 expr = parse_exp_1 (&sym_name, 0, block, 0);
bbc13ae3 4352 old_chain = make_cleanup (free_current_contents, &expr);
a5ee536b
JB
4353 value = evaluate_expression (expr);
4354
4355 do_cleanups (old_chain);
4356 return value;
4357}
14f9c5c9 4358\f
d2e4a39e 4359
4c4b4cd2 4360 /* Evaluation: Function Calls */
14f9c5c9 4361
4c4b4cd2 4362/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4363 lvalues, and otherwise has the side-effect of allocating memory
4364 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4365
d2e4a39e 4366static struct value *
40bc484c 4367ensure_lval (struct value *val)
14f9c5c9 4368{
40bc484c
JB
4369 if (VALUE_LVAL (val) == not_lval
4370 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4371 {
df407dfe 4372 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4373 const CORE_ADDR addr =
4374 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4375
40bc484c 4376 set_value_address (val, addr);
a84a8a0d 4377 VALUE_LVAL (val) = lval_memory;
40bc484c 4378 write_memory (addr, value_contents (val), len);
c3e5cd34 4379 }
14f9c5c9
AS
4380
4381 return val;
4382}
4383
4384/* Return the value ACTUAL, converted to be an appropriate value for a
4385 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4386 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4387 values not residing in memory, updating it as needed. */
14f9c5c9 4388
a93c0eb6 4389struct value *
40bc484c 4390ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4391{
df407dfe 4392 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4393 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4394 struct type *formal_target =
4395 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4396 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4397 struct type *actual_target =
4398 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4399 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4400
4c4b4cd2 4401 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4402 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4403 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4404 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4405 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4406 {
a84a8a0d 4407 struct value *result;
5b4ee69b 4408
14f9c5c9 4409 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4410 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4411 result = desc_data (actual);
14f9c5c9 4412 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4413 {
4414 if (VALUE_LVAL (actual) != lval_memory)
4415 {
4416 struct value *val;
5b4ee69b 4417
df407dfe 4418 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4419 val = allocate_value (actual_type);
990a07ab 4420 memcpy ((char *) value_contents_raw (val),
0fd88904 4421 (char *) value_contents (actual),
4c4b4cd2 4422 TYPE_LENGTH (actual_type));
40bc484c 4423 actual = ensure_lval (val);
4c4b4cd2 4424 }
a84a8a0d 4425 result = value_addr (actual);
4c4b4cd2 4426 }
a84a8a0d
JB
4427 else
4428 return actual;
b1af9e97 4429 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4430 }
4431 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4432 return ada_value_ind (actual);
8344af1e
JB
4433 else if (ada_is_aligner_type (formal_type))
4434 {
4435 /* We need to turn this parameter into an aligner type
4436 as well. */
4437 struct value *aligner = allocate_value (formal_type);
4438 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4439
4440 value_assign_to_component (aligner, component, actual);
4441 return aligner;
4442 }
14f9c5c9
AS
4443
4444 return actual;
4445}
4446
438c98a1
JB
4447/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4448 type TYPE. This is usually an inefficient no-op except on some targets
4449 (such as AVR) where the representation of a pointer and an address
4450 differs. */
4451
4452static CORE_ADDR
4453value_pointer (struct value *value, struct type *type)
4454{
4455 struct gdbarch *gdbarch = get_type_arch (type);
4456 unsigned len = TYPE_LENGTH (type);
224c3ddb 4457 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4458 CORE_ADDR addr;
4459
4460 addr = value_address (value);
4461 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4462 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4463 return addr;
4464}
4465
14f9c5c9 4466
4c4b4cd2
PH
4467/* Push a descriptor of type TYPE for array value ARR on the stack at
4468 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4469 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4470 to-descriptor type rather than a descriptor type), a struct value *
4471 representing a pointer to this descriptor. */
14f9c5c9 4472
d2e4a39e 4473static struct value *
40bc484c 4474make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4475{
d2e4a39e
AS
4476 struct type *bounds_type = desc_bounds_type (type);
4477 struct type *desc_type = desc_base_type (type);
4478 struct value *descriptor = allocate_value (desc_type);
4479 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4480 int i;
d2e4a39e 4481
0963b4bd
MS
4482 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4483 i > 0; i -= 1)
14f9c5c9 4484 {
19f220c3
JK
4485 modify_field (value_type (bounds), value_contents_writeable (bounds),
4486 ada_array_bound (arr, i, 0),
4487 desc_bound_bitpos (bounds_type, i, 0),
4488 desc_bound_bitsize (bounds_type, i, 0));
4489 modify_field (value_type (bounds), value_contents_writeable (bounds),
4490 ada_array_bound (arr, i, 1),
4491 desc_bound_bitpos (bounds_type, i, 1),
4492 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4493 }
d2e4a39e 4494
40bc484c 4495 bounds = ensure_lval (bounds);
d2e4a39e 4496
19f220c3
JK
4497 modify_field (value_type (descriptor),
4498 value_contents_writeable (descriptor),
4499 value_pointer (ensure_lval (arr),
4500 TYPE_FIELD_TYPE (desc_type, 0)),
4501 fat_pntr_data_bitpos (desc_type),
4502 fat_pntr_data_bitsize (desc_type));
4503
4504 modify_field (value_type (descriptor),
4505 value_contents_writeable (descriptor),
4506 value_pointer (bounds,
4507 TYPE_FIELD_TYPE (desc_type, 1)),
4508 fat_pntr_bounds_bitpos (desc_type),
4509 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4510
40bc484c 4511 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4512
4513 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4514 return value_addr (descriptor);
4515 else
4516 return descriptor;
4517}
14f9c5c9 4518\f
3d9434b5
JB
4519 /* Symbol Cache Module */
4520
3d9434b5 4521/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4522 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4523 on the type of entity being printed, the cache can make it as much
4524 as an order of magnitude faster than without it.
4525
4526 The descriptive type DWARF extension has significantly reduced
4527 the need for this cache, at least when DWARF is being used. However,
4528 even in this case, some expensive name-based symbol searches are still
4529 sometimes necessary - to find an XVZ variable, mostly. */
4530
ee01b665 4531/* Initialize the contents of SYM_CACHE. */
3d9434b5 4532
ee01b665
JB
4533static void
4534ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4535{
4536 obstack_init (&sym_cache->cache_space);
4537 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4538}
3d9434b5 4539
ee01b665
JB
4540/* Free the memory used by SYM_CACHE. */
4541
4542static void
4543ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4544{
ee01b665
JB
4545 obstack_free (&sym_cache->cache_space, NULL);
4546 xfree (sym_cache);
4547}
3d9434b5 4548
ee01b665
JB
4549/* Return the symbol cache associated to the given program space PSPACE.
4550 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4551
ee01b665
JB
4552static struct ada_symbol_cache *
4553ada_get_symbol_cache (struct program_space *pspace)
4554{
4555 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4556
66c168ae 4557 if (pspace_data->sym_cache == NULL)
ee01b665 4558 {
66c168ae
JB
4559 pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4560 ada_init_symbol_cache (pspace_data->sym_cache);
ee01b665
JB
4561 }
4562
66c168ae 4563 return pspace_data->sym_cache;
ee01b665 4564}
3d9434b5
JB
4565
4566/* Clear all entries from the symbol cache. */
4567
4568static void
4569ada_clear_symbol_cache (void)
4570{
ee01b665
JB
4571 struct ada_symbol_cache *sym_cache
4572 = ada_get_symbol_cache (current_program_space);
4573
4574 obstack_free (&sym_cache->cache_space, NULL);
4575 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4576}
4577
fe978cb0 4578/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4579 Return it if found, or NULL otherwise. */
4580
4581static struct cache_entry **
fe978cb0 4582find_entry (const char *name, domain_enum domain)
3d9434b5 4583{
ee01b665
JB
4584 struct ada_symbol_cache *sym_cache
4585 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4586 int h = msymbol_hash (name) % HASH_SIZE;
4587 struct cache_entry **e;
4588
ee01b665 4589 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4590 {
fe978cb0 4591 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
3d9434b5
JB
4592 return e;
4593 }
4594 return NULL;
4595}
4596
fe978cb0 4597/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4598 Return 1 if found, 0 otherwise.
4599
4600 If an entry was found and SYM is not NULL, set *SYM to the entry's
4601 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4602
96d887e8 4603static int
fe978cb0 4604lookup_cached_symbol (const char *name, domain_enum domain,
f0c5f9b2 4605 struct symbol **sym, const struct block **block)
96d887e8 4606{
fe978cb0 4607 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4608
4609 if (e == NULL)
4610 return 0;
4611 if (sym != NULL)
4612 *sym = (*e)->sym;
4613 if (block != NULL)
4614 *block = (*e)->block;
4615 return 1;
96d887e8
PH
4616}
4617
3d9434b5 4618/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4619 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4620
96d887e8 4621static void
fe978cb0 4622cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
270140bd 4623 const struct block *block)
96d887e8 4624{
ee01b665
JB
4625 struct ada_symbol_cache *sym_cache
4626 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4627 int h;
4628 char *copy;
4629 struct cache_entry *e;
4630
1994afbf
DE
4631 /* Symbols for builtin types don't have a block.
4632 For now don't cache such symbols. */
4633 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4634 return;
4635
3d9434b5
JB
4636 /* If the symbol is a local symbol, then do not cache it, as a search
4637 for that symbol depends on the context. To determine whether
4638 the symbol is local or not, we check the block where we found it
4639 against the global and static blocks of its associated symtab. */
4640 if (sym
08be3fe3 4641 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4642 GLOBAL_BLOCK) != block
08be3fe3 4643 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4644 STATIC_BLOCK) != block)
3d9434b5
JB
4645 return;
4646
4647 h = msymbol_hash (name) % HASH_SIZE;
ee01b665
JB
4648 e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4649 sizeof (*e));
4650 e->next = sym_cache->root[h];
4651 sym_cache->root[h] = e;
224c3ddb
SM
4652 e->name = copy
4653 = (char *) obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
3d9434b5
JB
4654 strcpy (copy, name);
4655 e->sym = sym;
fe978cb0 4656 e->domain = domain;
3d9434b5 4657 e->block = block;
96d887e8 4658}
4c4b4cd2
PH
4659\f
4660 /* Symbol Lookup */
4661
c0431670
JB
4662/* Return nonzero if wild matching should be used when searching for
4663 all symbols matching LOOKUP_NAME.
4664
4665 LOOKUP_NAME is expected to be a symbol name after transformation
4666 for Ada lookups (see ada_name_for_lookup). */
4667
4668static int
4669should_use_wild_match (const char *lookup_name)
4670{
4671 return (strstr (lookup_name, "__") == NULL);
4672}
4673
4c4b4cd2
PH
4674/* Return the result of a standard (literal, C-like) lookup of NAME in
4675 given DOMAIN, visible from lexical block BLOCK. */
4676
4677static struct symbol *
4678standard_lookup (const char *name, const struct block *block,
4679 domain_enum domain)
4680{
acbd605d 4681 /* Initialize it just to avoid a GCC false warning. */
d12307c1 4682 struct block_symbol sym = {NULL, NULL};
4c4b4cd2 4683
d12307c1
PMR
4684 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4685 return sym.symbol;
2570f2b7 4686 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
d12307c1
PMR
4687 cache_symbol (name, domain, sym.symbol, sym.block);
4688 return sym.symbol;
4c4b4cd2
PH
4689}
4690
4691
4692/* Non-zero iff there is at least one non-function/non-enumeral symbol
4693 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4694 since they contend in overloading in the same way. */
4695static int
d12307c1 4696is_nonfunction (struct block_symbol syms[], int n)
4c4b4cd2
PH
4697{
4698 int i;
4699
4700 for (i = 0; i < n; i += 1)
d12307c1
PMR
4701 if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_FUNC
4702 && (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM
4703 || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
14f9c5c9
AS
4704 return 1;
4705
4706 return 0;
4707}
4708
4709/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4710 struct types. Otherwise, they may not. */
14f9c5c9
AS
4711
4712static int
d2e4a39e 4713equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4714{
d2e4a39e 4715 if (type0 == type1)
14f9c5c9 4716 return 1;
d2e4a39e 4717 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4718 || TYPE_CODE (type0) != TYPE_CODE (type1))
4719 return 0;
d2e4a39e 4720 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4721 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4722 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4723 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4724 return 1;
d2e4a39e 4725
14f9c5c9
AS
4726 return 0;
4727}
4728
4729/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4730 no more defined than that of SYM1. */
14f9c5c9
AS
4731
4732static int
d2e4a39e 4733lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4734{
4735 if (sym0 == sym1)
4736 return 1;
176620f1 4737 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4738 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4739 return 0;
4740
d2e4a39e 4741 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4742 {
4743 case LOC_UNDEF:
4744 return 1;
4745 case LOC_TYPEDEF:
4746 {
4c4b4cd2
PH
4747 struct type *type0 = SYMBOL_TYPE (sym0);
4748 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4749 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4750 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4751 int len0 = strlen (name0);
5b4ee69b 4752
4c4b4cd2
PH
4753 return
4754 TYPE_CODE (type0) == TYPE_CODE (type1)
4755 && (equiv_types (type0, type1)
4756 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
61012eef 4757 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4758 }
4759 case LOC_CONST:
4760 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4761 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4762 default:
4763 return 0;
14f9c5c9
AS
4764 }
4765}
4766
d12307c1 4767/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4c4b4cd2 4768 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4769
4770static void
76a01679
JB
4771add_defn_to_vec (struct obstack *obstackp,
4772 struct symbol *sym,
f0c5f9b2 4773 const struct block *block)
14f9c5c9
AS
4774{
4775 int i;
d12307c1 4776 struct block_symbol *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4777
529cad9c
PH
4778 /* Do not try to complete stub types, as the debugger is probably
4779 already scanning all symbols matching a certain name at the
4780 time when this function is called. Trying to replace the stub
4781 type by its associated full type will cause us to restart a scan
4782 which may lead to an infinite recursion. Instead, the client
4783 collecting the matching symbols will end up collecting several
4784 matches, with at least one of them complete. It can then filter
4785 out the stub ones if needed. */
4786
4c4b4cd2
PH
4787 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4788 {
d12307c1 4789 if (lesseq_defined_than (sym, prevDefns[i].symbol))
4c4b4cd2 4790 return;
d12307c1 4791 else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4c4b4cd2 4792 {
d12307c1 4793 prevDefns[i].symbol = sym;
4c4b4cd2 4794 prevDefns[i].block = block;
4c4b4cd2 4795 return;
76a01679 4796 }
4c4b4cd2
PH
4797 }
4798
4799 {
d12307c1 4800 struct block_symbol info;
4c4b4cd2 4801
d12307c1 4802 info.symbol = sym;
4c4b4cd2 4803 info.block = block;
d12307c1 4804 obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4c4b4cd2
PH
4805 }
4806}
4807
d12307c1
PMR
4808/* Number of block_symbol structures currently collected in current vector in
4809 OBSTACKP. */
4c4b4cd2 4810
76a01679
JB
4811static int
4812num_defns_collected (struct obstack *obstackp)
4c4b4cd2 4813{
d12307c1 4814 return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4c4b4cd2
PH
4815}
4816
d12307c1
PMR
4817/* Vector of block_symbol structures currently collected in current vector in
4818 OBSTACKP. If FINISH, close off the vector and return its final address. */
4c4b4cd2 4819
d12307c1 4820static struct block_symbol *
4c4b4cd2
PH
4821defns_collected (struct obstack *obstackp, int finish)
4822{
4823 if (finish)
224c3ddb 4824 return (struct block_symbol *) obstack_finish (obstackp);
4c4b4cd2 4825 else
d12307c1 4826 return (struct block_symbol *) obstack_base (obstackp);
4c4b4cd2
PH
4827}
4828
7c7b6655
TT
4829/* Return a bound minimal symbol matching NAME according to Ada
4830 decoding rules. Returns an invalid symbol if there is no such
4831 minimal symbol. Names prefixed with "standard__" are handled
4832 specially: "standard__" is first stripped off, and only static and
4833 global symbols are searched. */
4c4b4cd2 4834
7c7b6655 4835struct bound_minimal_symbol
96d887e8 4836ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4837{
7c7b6655 4838 struct bound_minimal_symbol result;
4c4b4cd2 4839 struct objfile *objfile;
96d887e8 4840 struct minimal_symbol *msymbol;
dc4024cd 4841 const int wild_match_p = should_use_wild_match (name);
4c4b4cd2 4842
7c7b6655
TT
4843 memset (&result, 0, sizeof (result));
4844
c0431670
JB
4845 /* Special case: If the user specifies a symbol name inside package
4846 Standard, do a non-wild matching of the symbol name without
4847 the "standard__" prefix. This was primarily introduced in order
4848 to allow the user to specifically access the standard exceptions
4849 using, for instance, Standard.Constraint_Error when Constraint_Error
4850 is ambiguous (due to the user defining its own Constraint_Error
4851 entity inside its program). */
61012eef 4852 if (startswith (name, "standard__"))
c0431670 4853 name += sizeof ("standard__") - 1;
4c4b4cd2 4854
96d887e8
PH
4855 ALL_MSYMBOLS (objfile, msymbol)
4856 {
efd66ac6 4857 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
96d887e8 4858 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
7c7b6655
TT
4859 {
4860 result.minsym = msymbol;
4861 result.objfile = objfile;
4862 break;
4863 }
96d887e8 4864 }
4c4b4cd2 4865
7c7b6655 4866 return result;
96d887e8 4867}
4c4b4cd2 4868
96d887e8
PH
4869/* For all subprograms that statically enclose the subprogram of the
4870 selected frame, add symbols matching identifier NAME in DOMAIN
4871 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4872 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4873 with a wildcard prefix. */
4c4b4cd2 4874
96d887e8
PH
4875static void
4876add_symbols_from_enclosing_procs (struct obstack *obstackp,
fe978cb0 4877 const char *name, domain_enum domain,
48b78332 4878 int wild_match_p)
96d887e8 4879{
96d887e8 4880}
14f9c5c9 4881
96d887e8
PH
4882/* True if TYPE is definitely an artificial type supplied to a symbol
4883 for which no debugging information was given in the symbol file. */
14f9c5c9 4884
96d887e8
PH
4885static int
4886is_nondebugging_type (struct type *type)
4887{
0d5cff50 4888 const char *name = ada_type_name (type);
5b4ee69b 4889
96d887e8
PH
4890 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4891}
4c4b4cd2 4892
8f17729f
JB
4893/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4894 that are deemed "identical" for practical purposes.
4895
4896 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4897 types and that their number of enumerals is identical (in other
4898 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4899
4900static int
4901ada_identical_enum_types_p (struct type *type1, struct type *type2)
4902{
4903 int i;
4904
4905 /* The heuristic we use here is fairly conservative. We consider
4906 that 2 enumerate types are identical if they have the same
4907 number of enumerals and that all enumerals have the same
4908 underlying value and name. */
4909
4910 /* All enums in the type should have an identical underlying value. */
4911 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 4912 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4913 return 0;
4914
4915 /* All enumerals should also have the same name (modulo any numerical
4916 suffix). */
4917 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4918 {
0d5cff50
DE
4919 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4920 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4921 int len_1 = strlen (name_1);
4922 int len_2 = strlen (name_2);
4923
4924 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4925 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4926 if (len_1 != len_2
4927 || strncmp (TYPE_FIELD_NAME (type1, i),
4928 TYPE_FIELD_NAME (type2, i),
4929 len_1) != 0)
4930 return 0;
4931 }
4932
4933 return 1;
4934}
4935
4936/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4937 that are deemed "identical" for practical purposes. Sometimes,
4938 enumerals are not strictly identical, but their types are so similar
4939 that they can be considered identical.
4940
4941 For instance, consider the following code:
4942
4943 type Color is (Black, Red, Green, Blue, White);
4944 type RGB_Color is new Color range Red .. Blue;
4945
4946 Type RGB_Color is a subrange of an implicit type which is a copy
4947 of type Color. If we call that implicit type RGB_ColorB ("B" is
4948 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4949 As a result, when an expression references any of the enumeral
4950 by name (Eg. "print green"), the expression is technically
4951 ambiguous and the user should be asked to disambiguate. But
4952 doing so would only hinder the user, since it wouldn't matter
4953 what choice he makes, the outcome would always be the same.
4954 So, for practical purposes, we consider them as the same. */
4955
4956static int
d12307c1 4957symbols_are_identical_enums (struct block_symbol *syms, int nsyms)
8f17729f
JB
4958{
4959 int i;
4960
4961 /* Before performing a thorough comparison check of each type,
4962 we perform a series of inexpensive checks. We expect that these
4963 checks will quickly fail in the vast majority of cases, and thus
4964 help prevent the unnecessary use of a more expensive comparison.
4965 Said comparison also expects us to make some of these checks
4966 (see ada_identical_enum_types_p). */
4967
4968 /* Quick check: All symbols should have an enum type. */
4969 for (i = 0; i < nsyms; i++)
d12307c1 4970 if (TYPE_CODE (SYMBOL_TYPE (syms[i].symbol)) != TYPE_CODE_ENUM)
8f17729f
JB
4971 return 0;
4972
4973 /* Quick check: They should all have the same value. */
4974 for (i = 1; i < nsyms; i++)
d12307c1 4975 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
4976 return 0;
4977
4978 /* Quick check: They should all have the same number of enumerals. */
4979 for (i = 1; i < nsyms; i++)
d12307c1
PMR
4980 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].symbol))
4981 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
4982 return 0;
4983
4984 /* All the sanity checks passed, so we might have a set of
4985 identical enumeration types. Perform a more complete
4986 comparison of the type of each symbol. */
4987 for (i = 1; i < nsyms; i++)
d12307c1
PMR
4988 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
4989 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
4990 return 0;
4991
4992 return 1;
4993}
4994
96d887e8
PH
4995/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4996 duplicate other symbols in the list (The only case I know of where
4997 this happens is when object files containing stabs-in-ecoff are
4998 linked with files containing ordinary ecoff debugging symbols (or no
4999 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
5000 Returns the number of items in the modified list. */
4c4b4cd2 5001
96d887e8 5002static int
d12307c1 5003remove_extra_symbols (struct block_symbol *syms, int nsyms)
96d887e8
PH
5004{
5005 int i, j;
4c4b4cd2 5006
8f17729f
JB
5007 /* We should never be called with less than 2 symbols, as there
5008 cannot be any extra symbol in that case. But it's easy to
5009 handle, since we have nothing to do in that case. */
5010 if (nsyms < 2)
5011 return nsyms;
5012
96d887e8
PH
5013 i = 0;
5014 while (i < nsyms)
5015 {
a35ddb44 5016 int remove_p = 0;
339c13b6
JB
5017
5018 /* If two symbols have the same name and one of them is a stub type,
5019 the get rid of the stub. */
5020
d12307c1
PMR
5021 if (TYPE_STUB (SYMBOL_TYPE (syms[i].symbol))
5022 && SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL)
339c13b6
JB
5023 {
5024 for (j = 0; j < nsyms; j++)
5025 {
5026 if (j != i
d12307c1
PMR
5027 && !TYPE_STUB (SYMBOL_TYPE (syms[j].symbol))
5028 && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5029 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5030 SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0)
a35ddb44 5031 remove_p = 1;
339c13b6
JB
5032 }
5033 }
5034
5035 /* Two symbols with the same name, same class and same address
5036 should be identical. */
5037
d12307c1
PMR
5038 else if (SYMBOL_LINKAGE_NAME (syms[i].symbol) != NULL
5039 && SYMBOL_CLASS (syms[i].symbol) == LOC_STATIC
5040 && is_nondebugging_type (SYMBOL_TYPE (syms[i].symbol)))
96d887e8
PH
5041 {
5042 for (j = 0; j < nsyms; j += 1)
5043 {
5044 if (i != j
d12307c1
PMR
5045 && SYMBOL_LINKAGE_NAME (syms[j].symbol) != NULL
5046 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].symbol),
5047 SYMBOL_LINKAGE_NAME (syms[j].symbol)) == 0
5048 && SYMBOL_CLASS (syms[i].symbol)
5049 == SYMBOL_CLASS (syms[j].symbol)
5050 && SYMBOL_VALUE_ADDRESS (syms[i].symbol)
5051 == SYMBOL_VALUE_ADDRESS (syms[j].symbol))
a35ddb44 5052 remove_p = 1;
4c4b4cd2 5053 }
4c4b4cd2 5054 }
339c13b6 5055
a35ddb44 5056 if (remove_p)
339c13b6
JB
5057 {
5058 for (j = i + 1; j < nsyms; j += 1)
5059 syms[j - 1] = syms[j];
5060 nsyms -= 1;
5061 }
5062
96d887e8 5063 i += 1;
14f9c5c9 5064 }
8f17729f
JB
5065
5066 /* If all the remaining symbols are identical enumerals, then
5067 just keep the first one and discard the rest.
5068
5069 Unlike what we did previously, we do not discard any entry
5070 unless they are ALL identical. This is because the symbol
5071 comparison is not a strict comparison, but rather a practical
5072 comparison. If all symbols are considered identical, then
5073 we can just go ahead and use the first one and discard the rest.
5074 But if we cannot reduce the list to a single element, we have
5075 to ask the user to disambiguate anyways. And if we have to
5076 present a multiple-choice menu, it's less confusing if the list
5077 isn't missing some choices that were identical and yet distinct. */
5078 if (symbols_are_identical_enums (syms, nsyms))
5079 nsyms = 1;
5080
96d887e8 5081 return nsyms;
14f9c5c9
AS
5082}
5083
96d887e8
PH
5084/* Given a type that corresponds to a renaming entity, use the type name
5085 to extract the scope (package name or function name, fully qualified,
5086 and following the GNAT encoding convention) where this renaming has been
5087 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 5088
96d887e8
PH
5089static char *
5090xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5091{
96d887e8 5092 /* The renaming types adhere to the following convention:
0963b4bd 5093 <scope>__<rename>___<XR extension>.
96d887e8
PH
5094 So, to extract the scope, we search for the "___XR" extension,
5095 and then backtrack until we find the first "__". */
76a01679 5096
96d887e8 5097 const char *name = type_name_no_tag (renaming_type);
108d56a4
SM
5098 const char *suffix = strstr (name, "___XR");
5099 const char *last;
96d887e8
PH
5100 int scope_len;
5101 char *scope;
14f9c5c9 5102
96d887e8
PH
5103 /* Now, backtrack a bit until we find the first "__". Start looking
5104 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5105
96d887e8
PH
5106 for (last = suffix - 3; last > name; last--)
5107 if (last[0] == '_' && last[1] == '_')
5108 break;
76a01679 5109
96d887e8 5110 /* Make a copy of scope and return it. */
14f9c5c9 5111
96d887e8
PH
5112 scope_len = last - name;
5113 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 5114
96d887e8
PH
5115 strncpy (scope, name, scope_len);
5116 scope[scope_len] = '\0';
4c4b4cd2 5117
96d887e8 5118 return scope;
4c4b4cd2
PH
5119}
5120
96d887e8 5121/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5122
96d887e8
PH
5123static int
5124is_package_name (const char *name)
4c4b4cd2 5125{
96d887e8
PH
5126 /* Here, We take advantage of the fact that no symbols are generated
5127 for packages, while symbols are generated for each function.
5128 So the condition for NAME represent a package becomes equivalent
5129 to NAME not existing in our list of symbols. There is only one
5130 small complication with library-level functions (see below). */
4c4b4cd2 5131
96d887e8 5132 char *fun_name;
76a01679 5133
96d887e8
PH
5134 /* If it is a function that has not been defined at library level,
5135 then we should be able to look it up in the symbols. */
5136 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5137 return 0;
14f9c5c9 5138
96d887e8
PH
5139 /* Library-level function names start with "_ada_". See if function
5140 "_ada_" followed by NAME can be found. */
14f9c5c9 5141
96d887e8 5142 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5143 functions names cannot contain "__" in them. */
96d887e8
PH
5144 if (strstr (name, "__") != NULL)
5145 return 0;
4c4b4cd2 5146
b435e160 5147 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 5148
96d887e8
PH
5149 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
5150}
14f9c5c9 5151
96d887e8 5152/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5153 not visible from FUNCTION_NAME. */
14f9c5c9 5154
96d887e8 5155static int
0d5cff50 5156old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5157{
aeb5907d 5158 char *scope;
1509e573 5159 struct cleanup *old_chain;
aeb5907d
JB
5160
5161 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5162 return 0;
5163
5164 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
1509e573 5165 old_chain = make_cleanup (xfree, scope);
14f9c5c9 5166
96d887e8
PH
5167 /* If the rename has been defined in a package, then it is visible. */
5168 if (is_package_name (scope))
1509e573
JB
5169 {
5170 do_cleanups (old_chain);
5171 return 0;
5172 }
14f9c5c9 5173
96d887e8
PH
5174 /* Check that the rename is in the current function scope by checking
5175 that its name starts with SCOPE. */
76a01679 5176
96d887e8
PH
5177 /* If the function name starts with "_ada_", it means that it is
5178 a library-level function. Strip this prefix before doing the
5179 comparison, as the encoding for the renaming does not contain
5180 this prefix. */
61012eef 5181 if (startswith (function_name, "_ada_"))
96d887e8 5182 function_name += 5;
f26caa11 5183
1509e573 5184 {
61012eef 5185 int is_invisible = !startswith (function_name, scope);
1509e573
JB
5186
5187 do_cleanups (old_chain);
5188 return is_invisible;
5189 }
f26caa11
PH
5190}
5191
aeb5907d
JB
5192/* Remove entries from SYMS that corresponds to a renaming entity that
5193 is not visible from the function associated with CURRENT_BLOCK or
5194 that is superfluous due to the presence of more specific renaming
5195 information. Places surviving symbols in the initial entries of
5196 SYMS and returns the number of surviving symbols.
96d887e8
PH
5197
5198 Rationale:
aeb5907d
JB
5199 First, in cases where an object renaming is implemented as a
5200 reference variable, GNAT may produce both the actual reference
5201 variable and the renaming encoding. In this case, we discard the
5202 latter.
5203
5204 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5205 entity. Unfortunately, STABS currently does not support the definition
5206 of types that are local to a given lexical block, so all renamings types
5207 are emitted at library level. As a consequence, if an application
5208 contains two renaming entities using the same name, and a user tries to
5209 print the value of one of these entities, the result of the ada symbol
5210 lookup will also contain the wrong renaming type.
f26caa11 5211
96d887e8
PH
5212 This function partially covers for this limitation by attempting to
5213 remove from the SYMS list renaming symbols that should be visible
5214 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5215 method with the current information available. The implementation
5216 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5217
5218 - When the user tries to print a rename in a function while there
5219 is another rename entity defined in a package: Normally, the
5220 rename in the function has precedence over the rename in the
5221 package, so the latter should be removed from the list. This is
5222 currently not the case.
5223
5224 - This function will incorrectly remove valid renames if
5225 the CURRENT_BLOCK corresponds to a function which symbol name
5226 has been changed by an "Export" pragma. As a consequence,
5227 the user will be unable to print such rename entities. */
4c4b4cd2 5228
14f9c5c9 5229static int
d12307c1 5230remove_irrelevant_renamings (struct block_symbol *syms,
aeb5907d 5231 int nsyms, const struct block *current_block)
4c4b4cd2
PH
5232{
5233 struct symbol *current_function;
0d5cff50 5234 const char *current_function_name;
4c4b4cd2 5235 int i;
aeb5907d
JB
5236 int is_new_style_renaming;
5237
5238 /* If there is both a renaming foo___XR... encoded as a variable and
5239 a simple variable foo in the same block, discard the latter.
0963b4bd 5240 First, zero out such symbols, then compress. */
aeb5907d
JB
5241 is_new_style_renaming = 0;
5242 for (i = 0; i < nsyms; i += 1)
5243 {
d12307c1 5244 struct symbol *sym = syms[i].symbol;
270140bd 5245 const struct block *block = syms[i].block;
aeb5907d
JB
5246 const char *name;
5247 const char *suffix;
5248
5249 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5250 continue;
5251 name = SYMBOL_LINKAGE_NAME (sym);
5252 suffix = strstr (name, "___XR");
5253
5254 if (suffix != NULL)
5255 {
5256 int name_len = suffix - name;
5257 int j;
5b4ee69b 5258
aeb5907d
JB
5259 is_new_style_renaming = 1;
5260 for (j = 0; j < nsyms; j += 1)
d12307c1
PMR
5261 if (i != j && syms[j].symbol != NULL
5262 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].symbol),
aeb5907d
JB
5263 name_len) == 0
5264 && block == syms[j].block)
d12307c1 5265 syms[j].symbol = NULL;
aeb5907d
JB
5266 }
5267 }
5268 if (is_new_style_renaming)
5269 {
5270 int j, k;
5271
5272 for (j = k = 0; j < nsyms; j += 1)
d12307c1 5273 if (syms[j].symbol != NULL)
aeb5907d
JB
5274 {
5275 syms[k] = syms[j];
5276 k += 1;
5277 }
5278 return k;
5279 }
4c4b4cd2
PH
5280
5281 /* Extract the function name associated to CURRENT_BLOCK.
5282 Abort if unable to do so. */
76a01679 5283
4c4b4cd2
PH
5284 if (current_block == NULL)
5285 return nsyms;
76a01679 5286
7f0df278 5287 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
5288 if (current_function == NULL)
5289 return nsyms;
5290
5291 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5292 if (current_function_name == NULL)
5293 return nsyms;
5294
5295 /* Check each of the symbols, and remove it from the list if it is
5296 a type corresponding to a renaming that is out of the scope of
5297 the current block. */
5298
5299 i = 0;
5300 while (i < nsyms)
5301 {
d12307c1 5302 if (ada_parse_renaming (syms[i].symbol, NULL, NULL, NULL)
aeb5907d 5303 == ADA_OBJECT_RENAMING
d12307c1 5304 && old_renaming_is_invisible (syms[i].symbol, current_function_name))
4c4b4cd2
PH
5305 {
5306 int j;
5b4ee69b 5307
aeb5907d 5308 for (j = i + 1; j < nsyms; j += 1)
76a01679 5309 syms[j - 1] = syms[j];
4c4b4cd2
PH
5310 nsyms -= 1;
5311 }
5312 else
5313 i += 1;
5314 }
5315
5316 return nsyms;
5317}
5318
339c13b6
JB
5319/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5320 whose name and domain match NAME and DOMAIN respectively.
5321 If no match was found, then extend the search to "enclosing"
5322 routines (in other words, if we're inside a nested function,
5323 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5324 If WILD_MATCH_P is nonzero, perform the naming matching in
5325 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5326
5327 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5328
5329static void
5330ada_add_local_symbols (struct obstack *obstackp, const char *name,
f0c5f9b2 5331 const struct block *block, domain_enum domain,
d0a8ab18 5332 int wild_match_p)
339c13b6
JB
5333{
5334 int block_depth = 0;
5335
5336 while (block != NULL)
5337 {
5338 block_depth += 1;
d0a8ab18
JB
5339 ada_add_block_symbols (obstackp, block, name, domain, NULL,
5340 wild_match_p);
339c13b6
JB
5341
5342 /* If we found a non-function match, assume that's the one. */
5343 if (is_nonfunction (defns_collected (obstackp, 0),
5344 num_defns_collected (obstackp)))
5345 return;
5346
5347 block = BLOCK_SUPERBLOCK (block);
5348 }
5349
5350 /* If no luck so far, try to find NAME as a local symbol in some lexically
5351 enclosing subprogram. */
5352 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
d0a8ab18 5353 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
339c13b6
JB
5354}
5355
ccefe4c4 5356/* An object of this type is used as the user_data argument when
40658b94 5357 calling the map_matching_symbols method. */
ccefe4c4 5358
40658b94 5359struct match_data
ccefe4c4 5360{
40658b94 5361 struct objfile *objfile;
ccefe4c4 5362 struct obstack *obstackp;
40658b94
PH
5363 struct symbol *arg_sym;
5364 int found_sym;
ccefe4c4
TT
5365};
5366
22cee43f 5367/* A callback for add_nonlocal_symbols that adds SYM, found in BLOCK,
40658b94
PH
5368 to a list of symbols. DATA0 is a pointer to a struct match_data *
5369 containing the obstack that collects the symbol list, the file that SYM
5370 must come from, a flag indicating whether a non-argument symbol has
5371 been found in the current block, and the last argument symbol
5372 passed in SYM within the current block (if any). When SYM is null,
5373 marking the end of a block, the argument symbol is added if no
5374 other has been found. */
ccefe4c4 5375
40658b94
PH
5376static int
5377aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 5378{
40658b94
PH
5379 struct match_data *data = (struct match_data *) data0;
5380
5381 if (sym == NULL)
5382 {
5383 if (!data->found_sym && data->arg_sym != NULL)
5384 add_defn_to_vec (data->obstackp,
5385 fixup_symbol_section (data->arg_sym, data->objfile),
5386 block);
5387 data->found_sym = 0;
5388 data->arg_sym = NULL;
5389 }
5390 else
5391 {
5392 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5393 return 0;
5394 else if (SYMBOL_IS_ARGUMENT (sym))
5395 data->arg_sym = sym;
5396 else
5397 {
5398 data->found_sym = 1;
5399 add_defn_to_vec (data->obstackp,
5400 fixup_symbol_section (sym, data->objfile),
5401 block);
5402 }
5403 }
5404 return 0;
5405}
5406
22cee43f
PMR
5407/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are targetted
5408 by renamings matching NAME in BLOCK. Add these symbols to OBSTACKP. If
5409 WILD_MATCH_P is nonzero, perform the naming matching in "wild" mode (see
5410 function "wild_match" for more information). Return whether we found such
5411 symbols. */
5412
5413static int
5414ada_add_block_renamings (struct obstack *obstackp,
5415 const struct block *block,
5416 const char *name,
5417 domain_enum domain,
5418 int wild_match_p)
5419{
5420 struct using_direct *renaming;
5421 int defns_mark = num_defns_collected (obstackp);
5422
5423 for (renaming = block_using (block);
5424 renaming != NULL;
5425 renaming = renaming->next)
5426 {
5427 const char *r_name;
5428 int name_match;
5429
5430 /* Avoid infinite recursions: skip this renaming if we are actually
5431 already traversing it.
5432
5433 Currently, symbol lookup in Ada don't use the namespace machinery from
5434 C++/Fortran support: skip namespace imports that use them. */
5435 if (renaming->searched
5436 || (renaming->import_src != NULL
5437 && renaming->import_src[0] != '\0')
5438 || (renaming->import_dest != NULL
5439 && renaming->import_dest[0] != '\0'))
5440 continue;
5441 renaming->searched = 1;
5442
5443 /* TODO: here, we perform another name-based symbol lookup, which can
5444 pull its own multiple overloads. In theory, we should be able to do
5445 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5446 not a simple name. But in order to do this, we would need to enhance
5447 the DWARF reader to associate a symbol to this renaming, instead of a
5448 name. So, for now, we do something simpler: re-use the C++/Fortran
5449 namespace machinery. */
5450 r_name = (renaming->alias != NULL
5451 ? renaming->alias
5452 : renaming->declaration);
5453 name_match
5454 = wild_match_p ? wild_match (r_name, name) : strcmp (r_name, name);
5455 if (name_match == 0)
5456 ada_add_all_symbols (obstackp, block, renaming->declaration, domain,
5457 1, NULL);
5458 renaming->searched = 0;
5459 }
5460 return num_defns_collected (obstackp) != defns_mark;
5461}
5462
db230ce3
JB
5463/* Implements compare_names, but only applying the comparision using
5464 the given CASING. */
5b4ee69b 5465
40658b94 5466static int
db230ce3
JB
5467compare_names_with_case (const char *string1, const char *string2,
5468 enum case_sensitivity casing)
40658b94
PH
5469{
5470 while (*string1 != '\0' && *string2 != '\0')
5471 {
db230ce3
JB
5472 char c1, c2;
5473
40658b94
PH
5474 if (isspace (*string1) || isspace (*string2))
5475 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5476
5477 if (casing == case_sensitive_off)
5478 {
5479 c1 = tolower (*string1);
5480 c2 = tolower (*string2);
5481 }
5482 else
5483 {
5484 c1 = *string1;
5485 c2 = *string2;
5486 }
5487 if (c1 != c2)
40658b94 5488 break;
db230ce3 5489
40658b94
PH
5490 string1 += 1;
5491 string2 += 1;
5492 }
db230ce3 5493
40658b94
PH
5494 switch (*string1)
5495 {
5496 case '(':
5497 return strcmp_iw_ordered (string1, string2);
5498 case '_':
5499 if (*string2 == '\0')
5500 {
052874e8 5501 if (is_name_suffix (string1))
40658b94
PH
5502 return 0;
5503 else
1a1d5513 5504 return 1;
40658b94 5505 }
dbb8534f 5506 /* FALLTHROUGH */
40658b94
PH
5507 default:
5508 if (*string2 == '(')
5509 return strcmp_iw_ordered (string1, string2);
5510 else
db230ce3
JB
5511 {
5512 if (casing == case_sensitive_off)
5513 return tolower (*string1) - tolower (*string2);
5514 else
5515 return *string1 - *string2;
5516 }
40658b94 5517 }
ccefe4c4
TT
5518}
5519
db230ce3
JB
5520/* Compare STRING1 to STRING2, with results as for strcmp.
5521 Compatible with strcmp_iw_ordered in that...
5522
5523 strcmp_iw_ordered (STRING1, STRING2) <= 0
5524
5525 ... implies...
5526
5527 compare_names (STRING1, STRING2) <= 0
5528
5529 (they may differ as to what symbols compare equal). */
5530
5531static int
5532compare_names (const char *string1, const char *string2)
5533{
5534 int result;
5535
5536 /* Similar to what strcmp_iw_ordered does, we need to perform
5537 a case-insensitive comparison first, and only resort to
5538 a second, case-sensitive, comparison if the first one was
5539 not sufficient to differentiate the two strings. */
5540
5541 result = compare_names_with_case (string1, string2, case_sensitive_off);
5542 if (result == 0)
5543 result = compare_names_with_case (string1, string2, case_sensitive_on);
5544
5545 return result;
5546}
5547
339c13b6
JB
5548/* Add to OBSTACKP all non-local symbols whose name and domain match
5549 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
5550 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
5551
5552static void
40658b94
PH
5553add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5554 domain_enum domain, int global,
5555 int is_wild_match)
339c13b6
JB
5556{
5557 struct objfile *objfile;
22cee43f 5558 struct compunit_symtab *cu;
40658b94 5559 struct match_data data;
339c13b6 5560
6475f2fe 5561 memset (&data, 0, sizeof data);
ccefe4c4 5562 data.obstackp = obstackp;
339c13b6 5563
ccefe4c4 5564 ALL_OBJFILES (objfile)
40658b94
PH
5565 {
5566 data.objfile = objfile;
5567
5568 if (is_wild_match)
4186eb54
KS
5569 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5570 aux_add_nonlocal_symbols, &data,
5571 wild_match, NULL);
40658b94 5572 else
4186eb54
KS
5573 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5574 aux_add_nonlocal_symbols, &data,
5575 full_match, compare_names);
22cee43f
PMR
5576
5577 ALL_OBJFILE_COMPUNITS (objfile, cu)
5578 {
5579 const struct block *global_block
5580 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5581
5582 if (ada_add_block_renamings (obstackp, global_block , name, domain,
5583 is_wild_match))
5584 data.found_sym = 1;
5585 }
40658b94
PH
5586 }
5587
5588 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5589 {
5590 ALL_OBJFILES (objfile)
5591 {
224c3ddb 5592 char *name1 = (char *) alloca (strlen (name) + sizeof ("_ada_"));
40658b94
PH
5593 strcpy (name1, "_ada_");
5594 strcpy (name1 + sizeof ("_ada_") - 1, name);
5595 data.objfile = objfile;
ade7ed9e
DE
5596 objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5597 global,
0963b4bd
MS
5598 aux_add_nonlocal_symbols,
5599 &data,
40658b94
PH
5600 full_match, compare_names);
5601 }
5602 }
339c13b6
JB
5603}
5604
22cee43f 5605/* Find symbols in DOMAIN matching NAME, in BLOCK and, if FULL_SEARCH is
4eeaa230 5606 non-zero, enclosing scope and in global scopes, returning the number of
22cee43f 5607 matches. Add these to OBSTACKP.
4eeaa230 5608
22cee43f
PMR
5609 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5610 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5611 is the one match returned (no other matches in that or
d9680e73 5612 enclosing blocks is returned). If there are any matches in or
22cee43f 5613 surrounding BLOCK, then these alone are returned.
4eeaa230 5614
9f88c959 5615 Names prefixed with "standard__" are handled specially: "standard__"
22cee43f 5616 is first stripped off, and only static and global symbols are searched.
14f9c5c9 5617
22cee43f
PMR
5618 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5619 to lookup global symbols. */
5620
5621static void
5622ada_add_all_symbols (struct obstack *obstackp,
5623 const struct block *block,
5624 const char *name,
5625 domain_enum domain,
5626 int full_search,
5627 int *made_global_lookup_p)
14f9c5c9
AS
5628{
5629 struct symbol *sym;
22cee43f 5630 const int wild_match_p = should_use_wild_match (name);
14f9c5c9 5631
22cee43f
PMR
5632 if (made_global_lookup_p)
5633 *made_global_lookup_p = 0;
339c13b6
JB
5634
5635 /* Special case: If the user specifies a symbol name inside package
5636 Standard, do a non-wild matching of the symbol name without
5637 the "standard__" prefix. This was primarily introduced in order
5638 to allow the user to specifically access the standard exceptions
5639 using, for instance, Standard.Constraint_Error when Constraint_Error
5640 is ambiguous (due to the user defining its own Constraint_Error
5641 entity inside its program). */
22cee43f 5642 if (startswith (name, "standard__"))
4c4b4cd2 5643 {
4c4b4cd2 5644 block = NULL;
22cee43f 5645 name = name + sizeof ("standard__") - 1;
4c4b4cd2
PH
5646 }
5647
339c13b6 5648 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5649
4eeaa230
DE
5650 if (block != NULL)
5651 {
5652 if (full_search)
22cee43f 5653 ada_add_local_symbols (obstackp, name, block, domain, wild_match_p);
4eeaa230
DE
5654 else
5655 {
5656 /* In the !full_search case we're are being called by
5657 ada_iterate_over_symbols, and we don't want to search
5658 superblocks. */
22cee43f
PMR
5659 ada_add_block_symbols (obstackp, block, name, domain, NULL,
5660 wild_match_p);
4eeaa230 5661 }
22cee43f
PMR
5662 if (num_defns_collected (obstackp) > 0 || !full_search)
5663 return;
4eeaa230 5664 }
d2e4a39e 5665
339c13b6
JB
5666 /* No non-global symbols found. Check our cache to see if we have
5667 already performed this search before. If we have, then return
5668 the same result. */
5669
22cee43f 5670 if (lookup_cached_symbol (name, domain, &sym, &block))
4c4b4cd2
PH
5671 {
5672 if (sym != NULL)
22cee43f
PMR
5673 add_defn_to_vec (obstackp, sym, block);
5674 return;
4c4b4cd2 5675 }
14f9c5c9 5676
22cee43f
PMR
5677 if (made_global_lookup_p)
5678 *made_global_lookup_p = 1;
b1eedac9 5679
339c13b6
JB
5680 /* Search symbols from all global blocks. */
5681
22cee43f 5682 add_nonlocal_symbols (obstackp, name, domain, 1, wild_match_p);
d2e4a39e 5683
4c4b4cd2 5684 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5685 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5686
22cee43f
PMR
5687 if (num_defns_collected (obstackp) == 0)
5688 add_nonlocal_symbols (obstackp, name, domain, 0, wild_match_p);
5689}
5690
5691/* Find symbols in DOMAIN matching NAME, in BLOCK and, if full_search is
5692 non-zero, enclosing scope and in global scopes, returning the number of
5693 matches.
5694 Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
5695 indicating the symbols found and the blocks and symbol tables (if
5696 any) in which they were found. This vector is transient---good only to
5697 the next call of ada_lookup_symbol_list.
5698
5699 When full_search is non-zero, any non-function/non-enumeral
5700 symbol match within the nest of blocks whose innermost member is BLOCK,
5701 is the one match returned (no other matches in that or
5702 enclosing blocks is returned). If there are any matches in or
5703 surrounding BLOCK, then these alone are returned.
5704
5705 Names prefixed with "standard__" are handled specially: "standard__"
5706 is first stripped off, and only static and global symbols are searched. */
5707
5708static int
5709ada_lookup_symbol_list_worker (const char *name, const struct block *block,
5710 domain_enum domain,
5711 struct block_symbol **results,
5712 int full_search)
5713{
5714 const int wild_match_p = should_use_wild_match (name);
5715 int syms_from_global_search;
5716 int ndefns;
5717
5718 obstack_free (&symbol_list_obstack, NULL);
5719 obstack_init (&symbol_list_obstack);
5720 ada_add_all_symbols (&symbol_list_obstack, block, name, domain,
5721 full_search, &syms_from_global_search);
14f9c5c9 5722
4c4b4cd2
PH
5723 ndefns = num_defns_collected (&symbol_list_obstack);
5724 *results = defns_collected (&symbol_list_obstack, 1);
5725
5726 ndefns = remove_extra_symbols (*results, ndefns);
5727
b1eedac9 5728 if (ndefns == 0 && full_search && syms_from_global_search)
22cee43f 5729 cache_symbol (name, domain, NULL, NULL);
14f9c5c9 5730
b1eedac9 5731 if (ndefns == 1 && full_search && syms_from_global_search)
22cee43f 5732 cache_symbol (name, domain, (*results)[0].symbol, (*results)[0].block);
14f9c5c9 5733
22cee43f 5734 ndefns = remove_irrelevant_renamings (*results, ndefns, block);
14f9c5c9
AS
5735 return ndefns;
5736}
5737
4eeaa230
DE
5738/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5739 in global scopes, returning the number of matches, and setting *RESULTS
5740 to a vector of (SYM,BLOCK) tuples.
5741 See ada_lookup_symbol_list_worker for further details. */
5742
5743int
5744ada_lookup_symbol_list (const char *name0, const struct block *block0,
d12307c1 5745 domain_enum domain, struct block_symbol **results)
4eeaa230
DE
5746{
5747 return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5748}
5749
5750/* Implementation of the la_iterate_over_symbols method. */
5751
5752static void
5753ada_iterate_over_symbols (const struct block *block,
5754 const char *name, domain_enum domain,
5755 symbol_found_callback_ftype *callback,
5756 void *data)
5757{
5758 int ndefs, i;
d12307c1 5759 struct block_symbol *results;
4eeaa230
DE
5760
5761 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5762 for (i = 0; i < ndefs; ++i)
5763 {
d12307c1 5764 if (! (*callback) (results[i].symbol, data))
4eeaa230
DE
5765 break;
5766 }
5767}
5768
f8eba3c6
TT
5769/* If NAME is the name of an entity, return a string that should
5770 be used to look that entity up in Ada units. This string should
5771 be deallocated after use using xfree.
5772
5773 NAME can have any form that the "break" or "print" commands might
5774 recognize. In other words, it does not have to be the "natural"
5775 name, or the "encoded" name. */
5776
5777char *
5778ada_name_for_lookup (const char *name)
5779{
5780 char *canon;
5781 int nlen = strlen (name);
5782
5783 if (name[0] == '<' && name[nlen - 1] == '>')
5784 {
224c3ddb 5785 canon = (char *) xmalloc (nlen - 1);
f8eba3c6
TT
5786 memcpy (canon, name + 1, nlen - 2);
5787 canon[nlen - 2] = '\0';
5788 }
5789 else
5790 canon = xstrdup (ada_encode (ada_fold_name (name)));
5791 return canon;
5792}
5793
4e5c77fe
JB
5794/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5795 to 1, but choosing the first symbol found if there are multiple
5796 choices.
5797
5e2336be
JB
5798 The result is stored in *INFO, which must be non-NULL.
5799 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5800
5801void
5802ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5803 domain_enum domain,
d12307c1 5804 struct block_symbol *info)
14f9c5c9 5805{
d12307c1 5806 struct block_symbol *candidates;
14f9c5c9
AS
5807 int n_candidates;
5808
5e2336be 5809 gdb_assert (info != NULL);
d12307c1 5810 memset (info, 0, sizeof (struct block_symbol));
4e5c77fe 5811
fe978cb0 5812 n_candidates = ada_lookup_symbol_list (name, block, domain, &candidates);
14f9c5c9 5813 if (n_candidates == 0)
4e5c77fe 5814 return;
4c4b4cd2 5815
5e2336be 5816 *info = candidates[0];
d12307c1 5817 info->symbol = fixup_symbol_section (info->symbol, NULL);
4e5c77fe 5818}
aeb5907d
JB
5819
5820/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5821 scope and in global scopes, or NULL if none. NAME is folded and
5822 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5823 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5824 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5825
d12307c1 5826struct block_symbol
aeb5907d 5827ada_lookup_symbol (const char *name, const struct block *block0,
fe978cb0 5828 domain_enum domain, int *is_a_field_of_this)
aeb5907d 5829{
d12307c1 5830 struct block_symbol info;
4e5c77fe 5831
aeb5907d
JB
5832 if (is_a_field_of_this != NULL)
5833 *is_a_field_of_this = 0;
5834
4e5c77fe 5835 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
fe978cb0 5836 block0, domain, &info);
d12307c1 5837 return info;
4c4b4cd2 5838}
14f9c5c9 5839
d12307c1 5840static struct block_symbol
f606139a
DE
5841ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5842 const char *name,
76a01679 5843 const struct block *block,
21b556f4 5844 const domain_enum domain)
4c4b4cd2 5845{
d12307c1 5846 struct block_symbol sym;
04dccad0
JB
5847
5848 sym = ada_lookup_symbol (name, block_static_block (block), domain, NULL);
d12307c1 5849 if (sym.symbol != NULL)
04dccad0
JB
5850 return sym;
5851
5852 /* If we haven't found a match at this point, try the primitive
5853 types. In other languages, this search is performed before
5854 searching for global symbols in order to short-circuit that
5855 global-symbol search if it happens that the name corresponds
5856 to a primitive type. But we cannot do the same in Ada, because
5857 it is perfectly legitimate for a program to declare a type which
5858 has the same name as a standard type. If looking up a type in
5859 that situation, we have traditionally ignored the primitive type
5860 in favor of user-defined types. This is why, unlike most other
5861 languages, we search the primitive types this late and only after
5862 having searched the global symbols without success. */
5863
5864 if (domain == VAR_DOMAIN)
5865 {
5866 struct gdbarch *gdbarch;
5867
5868 if (block == NULL)
5869 gdbarch = target_gdbarch ();
5870 else
5871 gdbarch = block_gdbarch (block);
d12307c1
PMR
5872 sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5873 if (sym.symbol != NULL)
04dccad0
JB
5874 return sym;
5875 }
5876
d12307c1 5877 return (struct block_symbol) {NULL, NULL};
14f9c5c9
AS
5878}
5879
5880
4c4b4cd2
PH
5881/* True iff STR is a possible encoded suffix of a normal Ada name
5882 that is to be ignored for matching purposes. Suffixes of parallel
5883 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5884 are given by any of the regular expressions:
4c4b4cd2 5885
babe1480
JB
5886 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5887 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5888 TKB [subprogram suffix for task bodies]
babe1480 5889 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5890 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5891
5892 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5893 match is performed. This sequence is used to differentiate homonyms,
5894 is an optional part of a valid name suffix. */
4c4b4cd2 5895
14f9c5c9 5896static int
d2e4a39e 5897is_name_suffix (const char *str)
14f9c5c9
AS
5898{
5899 int k;
4c4b4cd2
PH
5900 const char *matching;
5901 const int len = strlen (str);
5902
babe1480
JB
5903 /* Skip optional leading __[0-9]+. */
5904
4c4b4cd2
PH
5905 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5906 {
babe1480
JB
5907 str += 3;
5908 while (isdigit (str[0]))
5909 str += 1;
4c4b4cd2 5910 }
babe1480
JB
5911
5912 /* [.$][0-9]+ */
4c4b4cd2 5913
babe1480 5914 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5915 {
babe1480 5916 matching = str + 1;
4c4b4cd2
PH
5917 while (isdigit (matching[0]))
5918 matching += 1;
5919 if (matching[0] == '\0')
5920 return 1;
5921 }
5922
5923 /* ___[0-9]+ */
babe1480 5924
4c4b4cd2
PH
5925 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5926 {
5927 matching = str + 3;
5928 while (isdigit (matching[0]))
5929 matching += 1;
5930 if (matching[0] == '\0')
5931 return 1;
5932 }
5933
9ac7f98e
JB
5934 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5935
5936 if (strcmp (str, "TKB") == 0)
5937 return 1;
5938
529cad9c
PH
5939#if 0
5940 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5941 with a N at the end. Unfortunately, the compiler uses the same
5942 convention for other internal types it creates. So treating
529cad9c 5943 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5944 some regressions. For instance, consider the case of an enumerated
5945 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5946 name ends with N.
5947 Having a single character like this as a suffix carrying some
0963b4bd 5948 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5949 to be something like "_N" instead. In the meantime, do not do
5950 the following check. */
5951 /* Protected Object Subprograms */
5952 if (len == 1 && str [0] == 'N')
5953 return 1;
5954#endif
5955
5956 /* _E[0-9]+[bs]$ */
5957 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5958 {
5959 matching = str + 3;
5960 while (isdigit (matching[0]))
5961 matching += 1;
5962 if ((matching[0] == 'b' || matching[0] == 's')
5963 && matching [1] == '\0')
5964 return 1;
5965 }
5966
4c4b4cd2
PH
5967 /* ??? We should not modify STR directly, as we are doing below. This
5968 is fine in this case, but may become problematic later if we find
5969 that this alternative did not work, and want to try matching
5970 another one from the begining of STR. Since we modified it, we
5971 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5972 if (str[0] == 'X')
5973 {
5974 str += 1;
d2e4a39e 5975 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
5976 {
5977 if (str[0] != 'n' && str[0] != 'b')
5978 return 0;
5979 str += 1;
5980 }
14f9c5c9 5981 }
babe1480 5982
14f9c5c9
AS
5983 if (str[0] == '\000')
5984 return 1;
babe1480 5985
d2e4a39e 5986 if (str[0] == '_')
14f9c5c9
AS
5987 {
5988 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 5989 return 0;
d2e4a39e 5990 if (str[2] == '_')
4c4b4cd2 5991 {
61ee279c
PH
5992 if (strcmp (str + 3, "JM") == 0)
5993 return 1;
5994 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5995 the LJM suffix in favor of the JM one. But we will
5996 still accept LJM as a valid suffix for a reasonable
5997 amount of time, just to allow ourselves to debug programs
5998 compiled using an older version of GNAT. */
4c4b4cd2
PH
5999 if (strcmp (str + 3, "LJM") == 0)
6000 return 1;
6001 if (str[3] != 'X')
6002 return 0;
1265e4aa
JB
6003 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
6004 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
6005 return 1;
6006 if (str[4] == 'R' && str[5] != 'T')
6007 return 1;
6008 return 0;
6009 }
6010 if (!isdigit (str[2]))
6011 return 0;
6012 for (k = 3; str[k] != '\0'; k += 1)
6013 if (!isdigit (str[k]) && str[k] != '_')
6014 return 0;
14f9c5c9
AS
6015 return 1;
6016 }
4c4b4cd2 6017 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 6018 {
4c4b4cd2
PH
6019 for (k = 2; str[k] != '\0'; k += 1)
6020 if (!isdigit (str[k]) && str[k] != '_')
6021 return 0;
14f9c5c9
AS
6022 return 1;
6023 }
6024 return 0;
6025}
d2e4a39e 6026
aeb5907d
JB
6027/* Return non-zero if the string starting at NAME and ending before
6028 NAME_END contains no capital letters. */
529cad9c
PH
6029
6030static int
6031is_valid_name_for_wild_match (const char *name0)
6032{
6033 const char *decoded_name = ada_decode (name0);
6034 int i;
6035
5823c3ef
JB
6036 /* If the decoded name starts with an angle bracket, it means that
6037 NAME0 does not follow the GNAT encoding format. It should then
6038 not be allowed as a possible wild match. */
6039 if (decoded_name[0] == '<')
6040 return 0;
6041
529cad9c
PH
6042 for (i=0; decoded_name[i] != '\0'; i++)
6043 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
6044 return 0;
6045
6046 return 1;
6047}
6048
73589123
PH
6049/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
6050 that could start a simple name. Assumes that *NAMEP points into
6051 the string beginning at NAME0. */
4c4b4cd2 6052
14f9c5c9 6053static int
73589123 6054advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 6055{
73589123 6056 const char *name = *namep;
5b4ee69b 6057
5823c3ef 6058 while (1)
14f9c5c9 6059 {
aa27d0b3 6060 int t0, t1;
73589123
PH
6061
6062 t0 = *name;
6063 if (t0 == '_')
6064 {
6065 t1 = name[1];
6066 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
6067 {
6068 name += 1;
61012eef 6069 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
6070 break;
6071 else
6072 name += 1;
6073 }
aa27d0b3
JB
6074 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
6075 || name[2] == target0))
73589123
PH
6076 {
6077 name += 2;
6078 break;
6079 }
6080 else
6081 return 0;
6082 }
6083 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
6084 name += 1;
6085 else
5823c3ef 6086 return 0;
73589123
PH
6087 }
6088
6089 *namep = name;
6090 return 1;
6091}
6092
6093/* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
6094 informational suffixes of NAME (i.e., for which is_name_suffix is
6095 true). Assumes that PATN is a lower-cased Ada simple name. */
6096
6097static int
6098wild_match (const char *name, const char *patn)
6099{
22e048c9 6100 const char *p;
73589123
PH
6101 const char *name0 = name;
6102
6103 while (1)
6104 {
6105 const char *match = name;
6106
6107 if (*name == *patn)
6108 {
6109 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6110 if (*p != *name)
6111 break;
6112 if (*p == '\0' && is_name_suffix (name))
6113 return match != name0 && !is_valid_name_for_wild_match (name0);
6114
6115 if (name[-1] == '_')
6116 name -= 1;
6117 }
6118 if (!advance_wild_match (&name, name0, *patn))
6119 return 1;
96d887e8 6120 }
96d887e8
PH
6121}
6122
40658b94
PH
6123/* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
6124 informational suffix. */
6125
c4d840bd
PH
6126static int
6127full_match (const char *sym_name, const char *search_name)
6128{
40658b94 6129 return !match_name (sym_name, search_name, 0);
c4d840bd
PH
6130}
6131
6132
96d887e8
PH
6133/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
6134 vector *defn_symbols, updating the list of symbols in OBSTACKP
0963b4bd 6135 (if necessary). If WILD, treat as NAME with a wildcard prefix.
4eeaa230 6136 OBJFILE is the section containing BLOCK. */
96d887e8
PH
6137
6138static void
6139ada_add_block_symbols (struct obstack *obstackp,
f0c5f9b2 6140 const struct block *block, const char *name,
96d887e8 6141 domain_enum domain, struct objfile *objfile,
2570f2b7 6142 int wild)
96d887e8 6143{
8157b174 6144 struct block_iterator iter;
96d887e8
PH
6145 int name_len = strlen (name);
6146 /* A matching argument symbol, if any. */
6147 struct symbol *arg_sym;
6148 /* Set true when we find a matching non-argument symbol. */
6149 int found_sym;
6150 struct symbol *sym;
6151
6152 arg_sym = NULL;
6153 found_sym = 0;
6154 if (wild)
6155 {
8157b174
TT
6156 for (sym = block_iter_match_first (block, name, wild_match, &iter);
6157 sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
76a01679 6158 {
4186eb54
KS
6159 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6160 SYMBOL_DOMAIN (sym), domain)
73589123 6161 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
76a01679 6162 {
2a2d4dc3
AS
6163 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
6164 continue;
6165 else if (SYMBOL_IS_ARGUMENT (sym))
6166 arg_sym = sym;
6167 else
6168 {
76a01679
JB
6169 found_sym = 1;
6170 add_defn_to_vec (obstackp,
6171 fixup_symbol_section (sym, objfile),
2570f2b7 6172 block);
76a01679
JB
6173 }
6174 }
6175 }
96d887e8
PH
6176 }
6177 else
6178 {
8157b174
TT
6179 for (sym = block_iter_match_first (block, name, full_match, &iter);
6180 sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
76a01679 6181 {
4186eb54
KS
6182 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6183 SYMBOL_DOMAIN (sym), domain))
76a01679 6184 {
c4d840bd
PH
6185 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6186 {
6187 if (SYMBOL_IS_ARGUMENT (sym))
6188 arg_sym = sym;
6189 else
2a2d4dc3 6190 {
c4d840bd
PH
6191 found_sym = 1;
6192 add_defn_to_vec (obstackp,
6193 fixup_symbol_section (sym, objfile),
6194 block);
2a2d4dc3 6195 }
c4d840bd 6196 }
76a01679
JB
6197 }
6198 }
96d887e8
PH
6199 }
6200
22cee43f
PMR
6201 /* Handle renamings. */
6202
6203 if (ada_add_block_renamings (obstackp, block, name, domain, wild))
6204 found_sym = 1;
6205
96d887e8
PH
6206 if (!found_sym && arg_sym != NULL)
6207 {
76a01679
JB
6208 add_defn_to_vec (obstackp,
6209 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6210 block);
96d887e8
PH
6211 }
6212
6213 if (!wild)
6214 {
6215 arg_sym = NULL;
6216 found_sym = 0;
6217
6218 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6219 {
4186eb54
KS
6220 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
6221 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
6222 {
6223 int cmp;
6224
6225 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
6226 if (cmp == 0)
6227 {
61012eef 6228 cmp = !startswith (SYMBOL_LINKAGE_NAME (sym), "_ada_");
76a01679
JB
6229 if (cmp == 0)
6230 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
6231 name_len);
6232 }
6233
6234 if (cmp == 0
6235 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
6236 {
2a2d4dc3
AS
6237 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6238 {
6239 if (SYMBOL_IS_ARGUMENT (sym))
6240 arg_sym = sym;
6241 else
6242 {
6243 found_sym = 1;
6244 add_defn_to_vec (obstackp,
6245 fixup_symbol_section (sym, objfile),
6246 block);
6247 }
6248 }
76a01679
JB
6249 }
6250 }
76a01679 6251 }
96d887e8
PH
6252
6253 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6254 They aren't parameters, right? */
6255 if (!found_sym && arg_sym != NULL)
6256 {
6257 add_defn_to_vec (obstackp,
76a01679 6258 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6259 block);
96d887e8
PH
6260 }
6261 }
6262}
6263\f
41d27058
JB
6264
6265 /* Symbol Completion */
6266
6267/* If SYM_NAME is a completion candidate for TEXT, return this symbol
6268 name in a form that's appropriate for the completion. The result
6269 does not need to be deallocated, but is only good until the next call.
6270
6271 TEXT_LEN is equal to the length of TEXT.
e701b3c0 6272 Perform a wild match if WILD_MATCH_P is set.
6ea35997 6273 ENCODED_P should be set if TEXT represents the start of a symbol name
41d27058
JB
6274 in its encoded form. */
6275
6276static const char *
6277symbol_completion_match (const char *sym_name,
6278 const char *text, int text_len,
6ea35997 6279 int wild_match_p, int encoded_p)
41d27058 6280{
41d27058
JB
6281 const int verbatim_match = (text[0] == '<');
6282 int match = 0;
6283
6284 if (verbatim_match)
6285 {
6286 /* Strip the leading angle bracket. */
6287 text = text + 1;
6288 text_len--;
6289 }
6290
6291 /* First, test against the fully qualified name of the symbol. */
6292
6293 if (strncmp (sym_name, text, text_len) == 0)
6294 match = 1;
6295
6ea35997 6296 if (match && !encoded_p)
41d27058
JB
6297 {
6298 /* One needed check before declaring a positive match is to verify
6299 that iff we are doing a verbatim match, the decoded version
6300 of the symbol name starts with '<'. Otherwise, this symbol name
6301 is not a suitable completion. */
6302 const char *sym_name_copy = sym_name;
6303 int has_angle_bracket;
6304
6305 sym_name = ada_decode (sym_name);
6306 has_angle_bracket = (sym_name[0] == '<');
6307 match = (has_angle_bracket == verbatim_match);
6308 sym_name = sym_name_copy;
6309 }
6310
6311 if (match && !verbatim_match)
6312 {
6313 /* When doing non-verbatim match, another check that needs to
6314 be done is to verify that the potentially matching symbol name
6315 does not include capital letters, because the ada-mode would
6316 not be able to understand these symbol names without the
6317 angle bracket notation. */
6318 const char *tmp;
6319
6320 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6321 if (*tmp != '\0')
6322 match = 0;
6323 }
6324
6325 /* Second: Try wild matching... */
6326
e701b3c0 6327 if (!match && wild_match_p)
41d27058
JB
6328 {
6329 /* Since we are doing wild matching, this means that TEXT
6330 may represent an unqualified symbol name. We therefore must
6331 also compare TEXT against the unqualified name of the symbol. */
6332 sym_name = ada_unqualified_name (ada_decode (sym_name));
6333
6334 if (strncmp (sym_name, text, text_len) == 0)
6335 match = 1;
6336 }
6337
6338 /* Finally: If we found a mach, prepare the result to return. */
6339
6340 if (!match)
6341 return NULL;
6342
6343 if (verbatim_match)
6344 sym_name = add_angle_brackets (sym_name);
6345
6ea35997 6346 if (!encoded_p)
41d27058
JB
6347 sym_name = ada_decode (sym_name);
6348
6349 return sym_name;
6350}
6351
6352/* A companion function to ada_make_symbol_completion_list().
6353 Check if SYM_NAME represents a symbol which name would be suitable
6354 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6355 it is appended at the end of the given string vector SV.
6356
6357 ORIG_TEXT is the string original string from the user command
6358 that needs to be completed. WORD is the entire command on which
6359 completion should be performed. These two parameters are used to
6360 determine which part of the symbol name should be added to the
6361 completion vector.
c0af1706 6362 if WILD_MATCH_P is set, then wild matching is performed.
cb8e9b97 6363 ENCODED_P should be set if TEXT represents a symbol name in its
41d27058
JB
6364 encoded formed (in which case the completion should also be
6365 encoded). */
6366
6367static void
d6565258 6368symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
6369 const char *sym_name,
6370 const char *text, int text_len,
6371 const char *orig_text, const char *word,
cb8e9b97 6372 int wild_match_p, int encoded_p)
41d27058
JB
6373{
6374 const char *match = symbol_completion_match (sym_name, text, text_len,
cb8e9b97 6375 wild_match_p, encoded_p);
41d27058
JB
6376 char *completion;
6377
6378 if (match == NULL)
6379 return;
6380
6381 /* We found a match, so add the appropriate completion to the given
6382 string vector. */
6383
6384 if (word == orig_text)
6385 {
224c3ddb 6386 completion = (char *) xmalloc (strlen (match) + 5);
41d27058
JB
6387 strcpy (completion, match);
6388 }
6389 else if (word > orig_text)
6390 {
6391 /* Return some portion of sym_name. */
224c3ddb 6392 completion = (char *) xmalloc (strlen (match) + 5);
41d27058
JB
6393 strcpy (completion, match + (word - orig_text));
6394 }
6395 else
6396 {
6397 /* Return some of ORIG_TEXT plus sym_name. */
224c3ddb 6398 completion = (char *) xmalloc (strlen (match) + (orig_text - word) + 5);
41d27058
JB
6399 strncpy (completion, word, orig_text - word);
6400 completion[orig_text - word] = '\0';
6401 strcat (completion, match);
6402 }
6403
d6565258 6404 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
6405}
6406
ccefe4c4 6407/* An object of this type is passed as the user_data argument to the
bb4142cf 6408 expand_symtabs_matching method. */
ccefe4c4
TT
6409struct add_partial_datum
6410{
6411 VEC(char_ptr) **completions;
6f937416 6412 const char *text;
ccefe4c4 6413 int text_len;
6f937416
PA
6414 const char *text0;
6415 const char *word;
ccefe4c4
TT
6416 int wild_match;
6417 int encoded;
6418};
6419
bb4142cf
DE
6420/* A callback for expand_symtabs_matching. */
6421
7b08b9eb 6422static int
bb4142cf 6423ada_complete_symbol_matcher (const char *name, void *user_data)
ccefe4c4 6424{
9a3c8263 6425 struct add_partial_datum *data = (struct add_partial_datum *) user_data;
7b08b9eb
JK
6426
6427 return symbol_completion_match (name, data->text, data->text_len,
6428 data->wild_match, data->encoded) != NULL;
ccefe4c4
TT
6429}
6430
49c4e619
TT
6431/* Return a list of possible symbol names completing TEXT0. WORD is
6432 the entire command on which completion is made. */
41d27058 6433
49c4e619 6434static VEC (char_ptr) *
6f937416
PA
6435ada_make_symbol_completion_list (const char *text0, const char *word,
6436 enum type_code code)
41d27058
JB
6437{
6438 char *text;
6439 int text_len;
b1ed564a
JB
6440 int wild_match_p;
6441 int encoded_p;
2ba95b9b 6442 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058 6443 struct symbol *sym;
43f3e411 6444 struct compunit_symtab *s;
41d27058
JB
6445 struct minimal_symbol *msymbol;
6446 struct objfile *objfile;
3977b71f 6447 const struct block *b, *surrounding_static_block = 0;
41d27058 6448 int i;
8157b174 6449 struct block_iterator iter;
b8fea896 6450 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
41d27058 6451
2f68a895
TT
6452 gdb_assert (code == TYPE_CODE_UNDEF);
6453
41d27058
JB
6454 if (text0[0] == '<')
6455 {
6456 text = xstrdup (text0);
6457 make_cleanup (xfree, text);
6458 text_len = strlen (text);
b1ed564a
JB
6459 wild_match_p = 0;
6460 encoded_p = 1;
41d27058
JB
6461 }
6462 else
6463 {
6464 text = xstrdup (ada_encode (text0));
6465 make_cleanup (xfree, text);
6466 text_len = strlen (text);
6467 for (i = 0; i < text_len; i++)
6468 text[i] = tolower (text[i]);
6469
b1ed564a 6470 encoded_p = (strstr (text0, "__") != NULL);
41d27058
JB
6471 /* If the name contains a ".", then the user is entering a fully
6472 qualified entity name, and the match must not be done in wild
6473 mode. Similarly, if the user wants to complete what looks like
6474 an encoded name, the match must not be done in wild mode. */
b1ed564a 6475 wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
41d27058
JB
6476 }
6477
6478 /* First, look at the partial symtab symbols. */
41d27058 6479 {
ccefe4c4
TT
6480 struct add_partial_datum data;
6481
6482 data.completions = &completions;
6483 data.text = text;
6484 data.text_len = text_len;
6485 data.text0 = text0;
6486 data.word = word;
b1ed564a
JB
6487 data.wild_match = wild_match_p;
6488 data.encoded = encoded_p;
276d885b
GB
6489 expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
6490 ALL_DOMAIN, &data);
41d27058
JB
6491 }
6492
6493 /* At this point scan through the misc symbol vectors and add each
6494 symbol you find to the list. Eventually we want to ignore
6495 anything that isn't a text symbol (everything else will be
6496 handled by the psymtab code above). */
6497
6498 ALL_MSYMBOLS (objfile, msymbol)
6499 {
6500 QUIT;
efd66ac6 6501 symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
b1ed564a
JB
6502 text, text_len, text0, word, wild_match_p,
6503 encoded_p);
41d27058
JB
6504 }
6505
6506 /* Search upwards from currently selected frame (so that we can
6507 complete on local vars. */
6508
6509 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6510 {
6511 if (!BLOCK_SUPERBLOCK (b))
6512 surrounding_static_block = b; /* For elmin of dups */
6513
6514 ALL_BLOCK_SYMBOLS (b, iter, sym)
6515 {
d6565258 6516 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6517 text, text_len, text0, word,
b1ed564a 6518 wild_match_p, encoded_p);
41d27058
JB
6519 }
6520 }
6521
6522 /* Go through the symtabs and check the externs and statics for
43f3e411 6523 symbols which match. */
41d27058 6524
43f3e411 6525 ALL_COMPUNITS (objfile, s)
41d27058
JB
6526 {
6527 QUIT;
43f3e411 6528 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
41d27058
JB
6529 ALL_BLOCK_SYMBOLS (b, iter, sym)
6530 {
d6565258 6531 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6532 text, text_len, text0, word,
b1ed564a 6533 wild_match_p, encoded_p);
41d27058
JB
6534 }
6535 }
6536
43f3e411 6537 ALL_COMPUNITS (objfile, s)
41d27058
JB
6538 {
6539 QUIT;
43f3e411 6540 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
41d27058
JB
6541 /* Don't do this block twice. */
6542 if (b == surrounding_static_block)
6543 continue;
6544 ALL_BLOCK_SYMBOLS (b, iter, sym)
6545 {
d6565258 6546 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6547 text, text_len, text0, word,
b1ed564a 6548 wild_match_p, encoded_p);
41d27058
JB
6549 }
6550 }
6551
b8fea896 6552 do_cleanups (old_chain);
49c4e619 6553 return completions;
41d27058
JB
6554}
6555
963a6417 6556 /* Field Access */
96d887e8 6557
73fb9985
JB
6558/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6559 for tagged types. */
6560
6561static int
6562ada_is_dispatch_table_ptr_type (struct type *type)
6563{
0d5cff50 6564 const char *name;
73fb9985
JB
6565
6566 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6567 return 0;
6568
6569 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6570 if (name == NULL)
6571 return 0;
6572
6573 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6574}
6575
ac4a2da4
JG
6576/* Return non-zero if TYPE is an interface tag. */
6577
6578static int
6579ada_is_interface_tag (struct type *type)
6580{
6581 const char *name = TYPE_NAME (type);
6582
6583 if (name == NULL)
6584 return 0;
6585
6586 return (strcmp (name, "ada__tags__interface_tag") == 0);
6587}
6588
963a6417
PH
6589/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6590 to be invisible to users. */
96d887e8 6591
963a6417
PH
6592int
6593ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6594{
963a6417
PH
6595 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6596 return 1;
ffde82bf 6597
73fb9985
JB
6598 /* Check the name of that field. */
6599 {
6600 const char *name = TYPE_FIELD_NAME (type, field_num);
6601
6602 /* Anonymous field names should not be printed.
6603 brobecker/2007-02-20: I don't think this can actually happen
6604 but we don't want to print the value of annonymous fields anyway. */
6605 if (name == NULL)
6606 return 1;
6607
ffde82bf
JB
6608 /* Normally, fields whose name start with an underscore ("_")
6609 are fields that have been internally generated by the compiler,
6610 and thus should not be printed. The "_parent" field is special,
6611 however: This is a field internally generated by the compiler
6612 for tagged types, and it contains the components inherited from
6613 the parent type. This field should not be printed as is, but
6614 should not be ignored either. */
61012eef 6615 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6616 return 1;
6617 }
6618
ac4a2da4
JG
6619 /* If this is the dispatch table of a tagged type or an interface tag,
6620 then ignore. */
73fb9985 6621 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6622 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6623 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6624 return 1;
6625
6626 /* Not a special field, so it should not be ignored. */
6627 return 0;
963a6417 6628}
96d887e8 6629
963a6417 6630/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6631 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6632
963a6417
PH
6633int
6634ada_is_tagged_type (struct type *type, int refok)
6635{
6636 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6637}
96d887e8 6638
963a6417 6639/* True iff TYPE represents the type of X'Tag */
96d887e8 6640
963a6417
PH
6641int
6642ada_is_tag_type (struct type *type)
6643{
460efde1
JB
6644 type = ada_check_typedef (type);
6645
963a6417
PH
6646 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6647 return 0;
6648 else
96d887e8 6649 {
963a6417 6650 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6651
963a6417
PH
6652 return (name != NULL
6653 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6654 }
96d887e8
PH
6655}
6656
963a6417 6657/* The type of the tag on VAL. */
76a01679 6658
963a6417
PH
6659struct type *
6660ada_tag_type (struct value *val)
96d887e8 6661{
df407dfe 6662 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 6663}
96d887e8 6664
b50d69b5
JG
6665/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6666 retired at Ada 05). */
6667
6668static int
6669is_ada95_tag (struct value *tag)
6670{
6671 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6672}
6673
963a6417 6674/* The value of the tag on VAL. */
96d887e8 6675
963a6417
PH
6676struct value *
6677ada_value_tag (struct value *val)
6678{
03ee6b2e 6679 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6680}
6681
963a6417
PH
6682/* The value of the tag on the object of type TYPE whose contents are
6683 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6684 ADDRESS. */
96d887e8 6685
963a6417 6686static struct value *
10a2c479 6687value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6688 const gdb_byte *valaddr,
963a6417 6689 CORE_ADDR address)
96d887e8 6690{
b5385fc0 6691 int tag_byte_offset;
963a6417 6692 struct type *tag_type;
5b4ee69b 6693
963a6417 6694 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6695 NULL, NULL, NULL))
96d887e8 6696 {
fc1a4b47 6697 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6698 ? NULL
6699 : valaddr + tag_byte_offset);
963a6417 6700 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6701
963a6417 6702 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6703 }
963a6417
PH
6704 return NULL;
6705}
96d887e8 6706
963a6417
PH
6707static struct type *
6708type_from_tag (struct value *tag)
6709{
6710 const char *type_name = ada_tag_name (tag);
5b4ee69b 6711
963a6417
PH
6712 if (type_name != NULL)
6713 return ada_find_any_type (ada_encode (type_name));
6714 return NULL;
6715}
96d887e8 6716
b50d69b5
JG
6717/* Given a value OBJ of a tagged type, return a value of this
6718 type at the base address of the object. The base address, as
6719 defined in Ada.Tags, it is the address of the primary tag of
6720 the object, and therefore where the field values of its full
6721 view can be fetched. */
6722
6723struct value *
6724ada_tag_value_at_base_address (struct value *obj)
6725{
b50d69b5
JG
6726 struct value *val;
6727 LONGEST offset_to_top = 0;
6728 struct type *ptr_type, *obj_type;
6729 struct value *tag;
6730 CORE_ADDR base_address;
6731
6732 obj_type = value_type (obj);
6733
6734 /* It is the responsability of the caller to deref pointers. */
6735
6736 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6737 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6738 return obj;
6739
6740 tag = ada_value_tag (obj);
6741 if (!tag)
6742 return obj;
6743
6744 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6745
6746 if (is_ada95_tag (tag))
6747 return obj;
6748
6749 ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6750 ptr_type = lookup_pointer_type (ptr_type);
6751 val = value_cast (ptr_type, tag);
6752 if (!val)
6753 return obj;
6754
6755 /* It is perfectly possible that an exception be raised while
6756 trying to determine the base address, just like for the tag;
6757 see ada_tag_name for more details. We do not print the error
6758 message for the same reason. */
6759
492d29ea 6760 TRY
b50d69b5
JG
6761 {
6762 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6763 }
6764
492d29ea
PA
6765 CATCH (e, RETURN_MASK_ERROR)
6766 {
6767 return obj;
6768 }
6769 END_CATCH
b50d69b5
JG
6770
6771 /* If offset is null, nothing to do. */
6772
6773 if (offset_to_top == 0)
6774 return obj;
6775
6776 /* -1 is a special case in Ada.Tags; however, what should be done
6777 is not quite clear from the documentation. So do nothing for
6778 now. */
6779
6780 if (offset_to_top == -1)
6781 return obj;
6782
6783 base_address = value_address (obj) - offset_to_top;
6784 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6785
6786 /* Make sure that we have a proper tag at the new address.
6787 Otherwise, offset_to_top is bogus (which can happen when
6788 the object is not initialized yet). */
6789
6790 if (!tag)
6791 return obj;
6792
6793 obj_type = type_from_tag (tag);
6794
6795 if (!obj_type)
6796 return obj;
6797
6798 return value_from_contents_and_address (obj_type, NULL, base_address);
6799}
6800
1b611343
JB
6801/* Return the "ada__tags__type_specific_data" type. */
6802
6803static struct type *
6804ada_get_tsd_type (struct inferior *inf)
963a6417 6805{
1b611343 6806 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6807
1b611343
JB
6808 if (data->tsd_type == 0)
6809 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6810 return data->tsd_type;
6811}
529cad9c 6812
1b611343
JB
6813/* Return the TSD (type-specific data) associated to the given TAG.
6814 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6815
1b611343 6816 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6817
1b611343
JB
6818static struct value *
6819ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6820{
4c4b4cd2 6821 struct value *val;
1b611343 6822 struct type *type;
5b4ee69b 6823
1b611343
JB
6824 /* First option: The TSD is simply stored as a field of our TAG.
6825 Only older versions of GNAT would use this format, but we have
6826 to test it first, because there are no visible markers for
6827 the current approach except the absence of that field. */
529cad9c 6828
1b611343
JB
6829 val = ada_value_struct_elt (tag, "tsd", 1);
6830 if (val)
6831 return val;
e802dbe0 6832
1b611343
JB
6833 /* Try the second representation for the dispatch table (in which
6834 there is no explicit 'tsd' field in the referent of the tag pointer,
6835 and instead the tsd pointer is stored just before the dispatch
6836 table. */
e802dbe0 6837
1b611343
JB
6838 type = ada_get_tsd_type (current_inferior());
6839 if (type == NULL)
6840 return NULL;
6841 type = lookup_pointer_type (lookup_pointer_type (type));
6842 val = value_cast (type, tag);
6843 if (val == NULL)
6844 return NULL;
6845 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6846}
6847
1b611343
JB
6848/* Given the TSD of a tag (type-specific data), return a string
6849 containing the name of the associated type.
6850
6851 The returned value is good until the next call. May return NULL
6852 if we are unable to determine the tag name. */
6853
6854static char *
6855ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6856{
529cad9c
PH
6857 static char name[1024];
6858 char *p;
1b611343 6859 struct value *val;
529cad9c 6860
1b611343 6861 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6862 if (val == NULL)
1b611343 6863 return NULL;
4c4b4cd2
PH
6864 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6865 for (p = name; *p != '\0'; p += 1)
6866 if (isalpha (*p))
6867 *p = tolower (*p);
1b611343 6868 return name;
4c4b4cd2
PH
6869}
6870
6871/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6872 a C string.
6873
6874 Return NULL if the TAG is not an Ada tag, or if we were unable to
6875 determine the name of that tag. The result is good until the next
6876 call. */
4c4b4cd2
PH
6877
6878const char *
6879ada_tag_name (struct value *tag)
6880{
1b611343 6881 char *name = NULL;
5b4ee69b 6882
df407dfe 6883 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6884 return NULL;
1b611343
JB
6885
6886 /* It is perfectly possible that an exception be raised while trying
6887 to determine the TAG's name, even under normal circumstances:
6888 The associated variable may be uninitialized or corrupted, for
6889 instance. We do not let any exception propagate past this point.
6890 instead we return NULL.
6891
6892 We also do not print the error message either (which often is very
6893 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6894 the caller print a more meaningful message if necessary. */
492d29ea 6895 TRY
1b611343
JB
6896 {
6897 struct value *tsd = ada_get_tsd_from_tag (tag);
6898
6899 if (tsd != NULL)
6900 name = ada_tag_name_from_tsd (tsd);
6901 }
492d29ea
PA
6902 CATCH (e, RETURN_MASK_ERROR)
6903 {
6904 }
6905 END_CATCH
1b611343
JB
6906
6907 return name;
4c4b4cd2
PH
6908}
6909
6910/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6911
d2e4a39e 6912struct type *
ebf56fd3 6913ada_parent_type (struct type *type)
14f9c5c9
AS
6914{
6915 int i;
6916
61ee279c 6917 type = ada_check_typedef (type);
14f9c5c9
AS
6918
6919 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6920 return NULL;
6921
6922 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6923 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6924 {
6925 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6926
6927 /* If the _parent field is a pointer, then dereference it. */
6928 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6929 parent_type = TYPE_TARGET_TYPE (parent_type);
6930 /* If there is a parallel XVS type, get the actual base type. */
6931 parent_type = ada_get_base_type (parent_type);
6932
6933 return ada_check_typedef (parent_type);
6934 }
14f9c5c9
AS
6935
6936 return NULL;
6937}
6938
4c4b4cd2
PH
6939/* True iff field number FIELD_NUM of structure type TYPE contains the
6940 parent-type (inherited) fields of a derived type. Assumes TYPE is
6941 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6942
6943int
ebf56fd3 6944ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6945{
61ee279c 6946 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6947
4c4b4cd2 6948 return (name != NULL
61012eef
GB
6949 && (startswith (name, "PARENT")
6950 || startswith (name, "_parent")));
14f9c5c9
AS
6951}
6952
4c4b4cd2 6953/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6954 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6955 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6956 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6957 structures. */
14f9c5c9
AS
6958
6959int
ebf56fd3 6960ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6961{
d2e4a39e 6962 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6963
d2e4a39e 6964 return (name != NULL
61012eef 6965 && (startswith (name, "PARENT")
4c4b4cd2 6966 || strcmp (name, "REP") == 0
61012eef 6967 || startswith (name, "_parent")
4c4b4cd2 6968 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6969}
6970
4c4b4cd2
PH
6971/* True iff field number FIELD_NUM of structure or union type TYPE
6972 is a variant wrapper. Assumes TYPE is a structure type with at least
6973 FIELD_NUM+1 fields. */
14f9c5c9
AS
6974
6975int
ebf56fd3 6976ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6977{
d2e4a39e 6978 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6979
14f9c5c9 6980 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 6981 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
6982 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6983 == TYPE_CODE_UNION)));
14f9c5c9
AS
6984}
6985
6986/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6987 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6988 returns the type of the controlling discriminant for the variant.
6989 May return NULL if the type could not be found. */
14f9c5c9 6990
d2e4a39e 6991struct type *
ebf56fd3 6992ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6993{
d2e4a39e 6994 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6995
7c964f07 6996 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
6997}
6998
4c4b4cd2 6999/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 7000 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 7001 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
7002
7003int
ebf56fd3 7004ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 7005{
d2e4a39e 7006 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 7007
14f9c5c9
AS
7008 return (name != NULL && name[0] == 'O');
7009}
7010
7011/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
7012 returns the name of the discriminant controlling the variant.
7013 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 7014
d2e4a39e 7015char *
ebf56fd3 7016ada_variant_discrim_name (struct type *type0)
14f9c5c9 7017{
d2e4a39e 7018 static char *result = NULL;
14f9c5c9 7019 static size_t result_len = 0;
d2e4a39e
AS
7020 struct type *type;
7021 const char *name;
7022 const char *discrim_end;
7023 const char *discrim_start;
14f9c5c9
AS
7024
7025 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
7026 type = TYPE_TARGET_TYPE (type0);
7027 else
7028 type = type0;
7029
7030 name = ada_type_name (type);
7031
7032 if (name == NULL || name[0] == '\000')
7033 return "";
7034
7035 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
7036 discrim_end -= 1)
7037 {
61012eef 7038 if (startswith (discrim_end, "___XVN"))
4c4b4cd2 7039 break;
14f9c5c9
AS
7040 }
7041 if (discrim_end == name)
7042 return "";
7043
d2e4a39e 7044 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
7045 discrim_start -= 1)
7046 {
d2e4a39e 7047 if (discrim_start == name + 1)
4c4b4cd2 7048 return "";
76a01679 7049 if ((discrim_start > name + 3
61012eef 7050 && startswith (discrim_start - 3, "___"))
4c4b4cd2
PH
7051 || discrim_start[-1] == '.')
7052 break;
14f9c5c9
AS
7053 }
7054
7055 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
7056 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 7057 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
7058 return result;
7059}
7060
4c4b4cd2
PH
7061/* Scan STR for a subtype-encoded number, beginning at position K.
7062 Put the position of the character just past the number scanned in
7063 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
7064 Return 1 if there was a valid number at the given position, and 0
7065 otherwise. A "subtype-encoded" number consists of the absolute value
7066 in decimal, followed by the letter 'm' to indicate a negative number.
7067 Assumes 0m does not occur. */
14f9c5c9
AS
7068
7069int
d2e4a39e 7070ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
7071{
7072 ULONGEST RU;
7073
d2e4a39e 7074 if (!isdigit (str[k]))
14f9c5c9
AS
7075 return 0;
7076
4c4b4cd2 7077 /* Do it the hard way so as not to make any assumption about
14f9c5c9 7078 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 7079 LONGEST. */
14f9c5c9
AS
7080 RU = 0;
7081 while (isdigit (str[k]))
7082 {
d2e4a39e 7083 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
7084 k += 1;
7085 }
7086
d2e4a39e 7087 if (str[k] == 'm')
14f9c5c9
AS
7088 {
7089 if (R != NULL)
4c4b4cd2 7090 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
7091 k += 1;
7092 }
7093 else if (R != NULL)
7094 *R = (LONGEST) RU;
7095
4c4b4cd2 7096 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
7097 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
7098 number representable as a LONGEST (although either would probably work
7099 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 7100 above is always equivalent to the negative of RU. */
14f9c5c9
AS
7101
7102 if (new_k != NULL)
7103 *new_k = k;
7104 return 1;
7105}
7106
4c4b4cd2
PH
7107/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
7108 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
7109 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 7110
d2e4a39e 7111int
ebf56fd3 7112ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 7113{
d2e4a39e 7114 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
7115 int p;
7116
7117 p = 0;
7118 while (1)
7119 {
d2e4a39e 7120 switch (name[p])
4c4b4cd2
PH
7121 {
7122 case '\0':
7123 return 0;
7124 case 'S':
7125 {
7126 LONGEST W;
5b4ee69b 7127
4c4b4cd2
PH
7128 if (!ada_scan_number (name, p + 1, &W, &p))
7129 return 0;
7130 if (val == W)
7131 return 1;
7132 break;
7133 }
7134 case 'R':
7135 {
7136 LONGEST L, U;
5b4ee69b 7137
4c4b4cd2
PH
7138 if (!ada_scan_number (name, p + 1, &L, &p)
7139 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
7140 return 0;
7141 if (val >= L && val <= U)
7142 return 1;
7143 break;
7144 }
7145 case 'O':
7146 return 1;
7147 default:
7148 return 0;
7149 }
7150 }
7151}
7152
0963b4bd 7153/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
7154
7155/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
7156 ARG_TYPE, extract and return the value of one of its (non-static)
7157 fields. FIELDNO says which field. Differs from value_primitive_field
7158 only in that it can handle packed values of arbitrary type. */
14f9c5c9 7159
4c4b4cd2 7160static struct value *
d2e4a39e 7161ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 7162 struct type *arg_type)
14f9c5c9 7163{
14f9c5c9
AS
7164 struct type *type;
7165
61ee279c 7166 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
7167 type = TYPE_FIELD_TYPE (arg_type, fieldno);
7168
4c4b4cd2 7169 /* Handle packed fields. */
14f9c5c9
AS
7170
7171 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
7172 {
7173 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7174 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 7175
0fd88904 7176 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
7177 offset + bit_pos / 8,
7178 bit_pos % 8, bit_size, type);
14f9c5c9
AS
7179 }
7180 else
7181 return value_primitive_field (arg1, offset, fieldno, arg_type);
7182}
7183
52ce6436
PH
7184/* Find field with name NAME in object of type TYPE. If found,
7185 set the following for each argument that is non-null:
7186 - *FIELD_TYPE_P to the field's type;
7187 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
7188 an object of that type;
7189 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
7190 - *BIT_SIZE_P to its size in bits if the field is packed, and
7191 0 otherwise;
7192 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7193 fields up to but not including the desired field, or by the total
7194 number of fields if not found. A NULL value of NAME never
7195 matches; the function just counts visible fields in this case.
7196
0963b4bd 7197 Returns 1 if found, 0 otherwise. */
52ce6436 7198
4c4b4cd2 7199static int
0d5cff50 7200find_struct_field (const char *name, struct type *type, int offset,
76a01679 7201 struct type **field_type_p,
52ce6436
PH
7202 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7203 int *index_p)
4c4b4cd2
PH
7204{
7205 int i;
7206
61ee279c 7207 type = ada_check_typedef (type);
76a01679 7208
52ce6436
PH
7209 if (field_type_p != NULL)
7210 *field_type_p = NULL;
7211 if (byte_offset_p != NULL)
d5d6fca5 7212 *byte_offset_p = 0;
52ce6436
PH
7213 if (bit_offset_p != NULL)
7214 *bit_offset_p = 0;
7215 if (bit_size_p != NULL)
7216 *bit_size_p = 0;
7217
7218 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
7219 {
7220 int bit_pos = TYPE_FIELD_BITPOS (type, i);
7221 int fld_offset = offset + bit_pos / 8;
0d5cff50 7222 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 7223
4c4b4cd2
PH
7224 if (t_field_name == NULL)
7225 continue;
7226
52ce6436 7227 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
7228 {
7229 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 7230
52ce6436
PH
7231 if (field_type_p != NULL)
7232 *field_type_p = TYPE_FIELD_TYPE (type, i);
7233 if (byte_offset_p != NULL)
7234 *byte_offset_p = fld_offset;
7235 if (bit_offset_p != NULL)
7236 *bit_offset_p = bit_pos % 8;
7237 if (bit_size_p != NULL)
7238 *bit_size_p = bit_size;
76a01679
JB
7239 return 1;
7240 }
4c4b4cd2
PH
7241 else if (ada_is_wrapper_field (type, i))
7242 {
52ce6436
PH
7243 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7244 field_type_p, byte_offset_p, bit_offset_p,
7245 bit_size_p, index_p))
76a01679
JB
7246 return 1;
7247 }
4c4b4cd2
PH
7248 else if (ada_is_variant_part (type, i))
7249 {
52ce6436
PH
7250 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7251 fixed type?? */
4c4b4cd2 7252 int j;
52ce6436
PH
7253 struct type *field_type
7254 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7255
52ce6436 7256 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7257 {
76a01679
JB
7258 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7259 fld_offset
7260 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7261 field_type_p, byte_offset_p,
52ce6436 7262 bit_offset_p, bit_size_p, index_p))
76a01679 7263 return 1;
4c4b4cd2
PH
7264 }
7265 }
52ce6436
PH
7266 else if (index_p != NULL)
7267 *index_p += 1;
4c4b4cd2
PH
7268 }
7269 return 0;
7270}
7271
0963b4bd 7272/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7273
52ce6436
PH
7274static int
7275num_visible_fields (struct type *type)
7276{
7277 int n;
5b4ee69b 7278
52ce6436
PH
7279 n = 0;
7280 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7281 return n;
7282}
14f9c5c9 7283
4c4b4cd2 7284/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7285 and search in it assuming it has (class) type TYPE.
7286 If found, return value, else return NULL.
7287
4c4b4cd2 7288 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 7289
4c4b4cd2 7290static struct value *
108d56a4 7291ada_search_struct_field (const char *name, struct value *arg, int offset,
4c4b4cd2 7292 struct type *type)
14f9c5c9
AS
7293{
7294 int i;
14f9c5c9 7295
5b4ee69b 7296 type = ada_check_typedef (type);
52ce6436 7297 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 7298 {
0d5cff50 7299 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7300
7301 if (t_field_name == NULL)
4c4b4cd2 7302 continue;
14f9c5c9
AS
7303
7304 else if (field_name_match (t_field_name, name))
4c4b4cd2 7305 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7306
7307 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7308 {
0963b4bd 7309 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
7310 ada_search_struct_field (name, arg,
7311 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7312 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7313
4c4b4cd2
PH
7314 if (v != NULL)
7315 return v;
7316 }
14f9c5c9
AS
7317
7318 else if (ada_is_variant_part (type, i))
4c4b4cd2 7319 {
0963b4bd 7320 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7321 int j;
5b4ee69b
MS
7322 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7323 i));
4c4b4cd2
PH
7324 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7325
52ce6436 7326 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7327 {
0963b4bd
MS
7328 struct value *v = ada_search_struct_field /* Force line
7329 break. */
06d5cf63
JB
7330 (name, arg,
7331 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7332 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7333
4c4b4cd2
PH
7334 if (v != NULL)
7335 return v;
7336 }
7337 }
14f9c5c9
AS
7338 }
7339 return NULL;
7340}
d2e4a39e 7341
52ce6436
PH
7342static struct value *ada_index_struct_field_1 (int *, struct value *,
7343 int, struct type *);
7344
7345
7346/* Return field #INDEX in ARG, where the index is that returned by
7347 * find_struct_field through its INDEX_P argument. Adjust the address
7348 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7349 * If found, return value, else return NULL. */
52ce6436
PH
7350
7351static struct value *
7352ada_index_struct_field (int index, struct value *arg, int offset,
7353 struct type *type)
7354{
7355 return ada_index_struct_field_1 (&index, arg, offset, type);
7356}
7357
7358
7359/* Auxiliary function for ada_index_struct_field. Like
7360 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7361 * *INDEX_P. */
52ce6436
PH
7362
7363static struct value *
7364ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7365 struct type *type)
7366{
7367 int i;
7368 type = ada_check_typedef (type);
7369
7370 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7371 {
7372 if (TYPE_FIELD_NAME (type, i) == NULL)
7373 continue;
7374 else if (ada_is_wrapper_field (type, i))
7375 {
0963b4bd 7376 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7377 ada_index_struct_field_1 (index_p, arg,
7378 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7379 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7380
52ce6436
PH
7381 if (v != NULL)
7382 return v;
7383 }
7384
7385 else if (ada_is_variant_part (type, i))
7386 {
7387 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7388 find_struct_field. */
52ce6436
PH
7389 error (_("Cannot assign this kind of variant record"));
7390 }
7391 else if (*index_p == 0)
7392 return ada_value_primitive_field (arg, offset, i, type);
7393 else
7394 *index_p -= 1;
7395 }
7396 return NULL;
7397}
7398
4c4b4cd2
PH
7399/* Given ARG, a value of type (pointer or reference to a)*
7400 structure/union, extract the component named NAME from the ultimate
7401 target structure/union and return it as a value with its
f5938064 7402 appropriate type.
14f9c5c9 7403
4c4b4cd2
PH
7404 The routine searches for NAME among all members of the structure itself
7405 and (recursively) among all members of any wrapper members
14f9c5c9
AS
7406 (e.g., '_parent').
7407
03ee6b2e
PH
7408 If NO_ERR, then simply return NULL in case of error, rather than
7409 calling error. */
14f9c5c9 7410
d2e4a39e 7411struct value *
03ee6b2e 7412ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 7413{
4c4b4cd2 7414 struct type *t, *t1;
d2e4a39e 7415 struct value *v;
14f9c5c9 7416
4c4b4cd2 7417 v = NULL;
df407dfe 7418 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
7419 if (TYPE_CODE (t) == TYPE_CODE_REF)
7420 {
7421 t1 = TYPE_TARGET_TYPE (t);
7422 if (t1 == NULL)
03ee6b2e 7423 goto BadValue;
61ee279c 7424 t1 = ada_check_typedef (t1);
4c4b4cd2 7425 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 7426 {
994b9211 7427 arg = coerce_ref (arg);
76a01679
JB
7428 t = t1;
7429 }
4c4b4cd2 7430 }
14f9c5c9 7431
4c4b4cd2
PH
7432 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7433 {
7434 t1 = TYPE_TARGET_TYPE (t);
7435 if (t1 == NULL)
03ee6b2e 7436 goto BadValue;
61ee279c 7437 t1 = ada_check_typedef (t1);
4c4b4cd2 7438 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
7439 {
7440 arg = value_ind (arg);
7441 t = t1;
7442 }
4c4b4cd2 7443 else
76a01679 7444 break;
4c4b4cd2 7445 }
14f9c5c9 7446
4c4b4cd2 7447 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 7448 goto BadValue;
14f9c5c9 7449
4c4b4cd2
PH
7450 if (t1 == t)
7451 v = ada_search_struct_field (name, arg, 0, t);
7452 else
7453 {
7454 int bit_offset, bit_size, byte_offset;
7455 struct type *field_type;
7456 CORE_ADDR address;
7457
76a01679 7458 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 7459 address = value_address (ada_value_ind (arg));
4c4b4cd2 7460 else
b50d69b5 7461 address = value_address (ada_coerce_ref (arg));
14f9c5c9 7462
1ed6ede0 7463 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
7464 if (find_struct_field (name, t1, 0,
7465 &field_type, &byte_offset, &bit_offset,
52ce6436 7466 &bit_size, NULL))
76a01679
JB
7467 {
7468 if (bit_size != 0)
7469 {
714e53ab
PH
7470 if (TYPE_CODE (t) == TYPE_CODE_REF)
7471 arg = ada_coerce_ref (arg);
7472 else
7473 arg = ada_value_ind (arg);
76a01679
JB
7474 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7475 bit_offset, bit_size,
7476 field_type);
7477 }
7478 else
f5938064 7479 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
7480 }
7481 }
7482
03ee6b2e
PH
7483 if (v != NULL || no_err)
7484 return v;
7485 else
323e0a4a 7486 error (_("There is no member named %s."), name);
14f9c5c9 7487
03ee6b2e
PH
7488 BadValue:
7489 if (no_err)
7490 return NULL;
7491 else
0963b4bd
MS
7492 error (_("Attempt to extract a component of "
7493 "a value that is not a record."));
14f9c5c9
AS
7494}
7495
7496/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7497 If DISPP is non-null, add its byte displacement from the beginning of a
7498 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7499 work for packed fields).
7500
7501 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7502 followed by "___".
14f9c5c9 7503
0963b4bd 7504 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7505 be a (pointer or reference)+ to a struct or union, and the
7506 ultimate target type will be searched.
14f9c5c9
AS
7507
7508 Looks recursively into variant clauses and parent types.
7509
4c4b4cd2
PH
7510 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7511 TYPE is not a type of the right kind. */
14f9c5c9 7512
4c4b4cd2 7513static struct type *
76a01679
JB
7514ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7515 int noerr, int *dispp)
14f9c5c9
AS
7516{
7517 int i;
7518
7519 if (name == NULL)
7520 goto BadName;
7521
76a01679 7522 if (refok && type != NULL)
4c4b4cd2
PH
7523 while (1)
7524 {
61ee279c 7525 type = ada_check_typedef (type);
76a01679
JB
7526 if (TYPE_CODE (type) != TYPE_CODE_PTR
7527 && TYPE_CODE (type) != TYPE_CODE_REF)
7528 break;
7529 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7530 }
14f9c5c9 7531
76a01679 7532 if (type == NULL
1265e4aa
JB
7533 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7534 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 7535 {
4c4b4cd2 7536 if (noerr)
76a01679 7537 return NULL;
4c4b4cd2 7538 else
76a01679
JB
7539 {
7540 target_terminal_ours ();
7541 gdb_flush (gdb_stdout);
323e0a4a
AC
7542 if (type == NULL)
7543 error (_("Type (null) is not a structure or union type"));
7544 else
7545 {
7546 /* XXX: type_sprint */
7547 fprintf_unfiltered (gdb_stderr, _("Type "));
7548 type_print (type, "", gdb_stderr, -1);
7549 error (_(" is not a structure or union type"));
7550 }
76a01679 7551 }
14f9c5c9
AS
7552 }
7553
7554 type = to_static_fixed_type (type);
7555
7556 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7557 {
0d5cff50 7558 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7559 struct type *t;
7560 int disp;
d2e4a39e 7561
14f9c5c9 7562 if (t_field_name == NULL)
4c4b4cd2 7563 continue;
14f9c5c9
AS
7564
7565 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
7566 {
7567 if (dispp != NULL)
7568 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
460efde1 7569 return TYPE_FIELD_TYPE (type, i);
4c4b4cd2 7570 }
14f9c5c9
AS
7571
7572 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
7573 {
7574 disp = 0;
7575 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7576 0, 1, &disp);
7577 if (t != NULL)
7578 {
7579 if (dispp != NULL)
7580 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7581 return t;
7582 }
7583 }
14f9c5c9
AS
7584
7585 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7586 {
7587 int j;
5b4ee69b
MS
7588 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7589 i));
4c4b4cd2
PH
7590
7591 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7592 {
b1f33ddd
JB
7593 /* FIXME pnh 2008/01/26: We check for a field that is
7594 NOT wrapped in a struct, since the compiler sometimes
7595 generates these for unchecked variant types. Revisit
0963b4bd 7596 if the compiler changes this practice. */
0d5cff50 7597 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 7598 disp = 0;
b1f33ddd
JB
7599 if (v_field_name != NULL
7600 && field_name_match (v_field_name, name))
460efde1 7601 t = TYPE_FIELD_TYPE (field_type, j);
b1f33ddd 7602 else
0963b4bd
MS
7603 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7604 j),
b1f33ddd
JB
7605 name, 0, 1, &disp);
7606
4c4b4cd2
PH
7607 if (t != NULL)
7608 {
7609 if (dispp != NULL)
7610 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7611 return t;
7612 }
7613 }
7614 }
14f9c5c9
AS
7615
7616 }
7617
7618BadName:
d2e4a39e 7619 if (!noerr)
14f9c5c9
AS
7620 {
7621 target_terminal_ours ();
7622 gdb_flush (gdb_stdout);
323e0a4a
AC
7623 if (name == NULL)
7624 {
7625 /* XXX: type_sprint */
7626 fprintf_unfiltered (gdb_stderr, _("Type "));
7627 type_print (type, "", gdb_stderr, -1);
7628 error (_(" has no component named <null>"));
7629 }
7630 else
7631 {
7632 /* XXX: type_sprint */
7633 fprintf_unfiltered (gdb_stderr, _("Type "));
7634 type_print (type, "", gdb_stderr, -1);
7635 error (_(" has no component named %s"), name);
7636 }
14f9c5c9
AS
7637 }
7638
7639 return NULL;
7640}
7641
b1f33ddd
JB
7642/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7643 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7644 represents an unchecked union (that is, the variant part of a
0963b4bd 7645 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7646
7647static int
7648is_unchecked_variant (struct type *var_type, struct type *outer_type)
7649{
7650 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7651
b1f33ddd
JB
7652 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7653 == NULL);
7654}
7655
7656
14f9c5c9
AS
7657/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7658 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7659 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7660 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7661
d2e4a39e 7662int
ebf56fd3 7663ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7664 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7665{
7666 int others_clause;
7667 int i;
d2e4a39e 7668 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7669 struct value *outer;
7670 struct value *discrim;
14f9c5c9
AS
7671 LONGEST discrim_val;
7672
012370f6
TT
7673 /* Using plain value_from_contents_and_address here causes problems
7674 because we will end up trying to resolve a type that is currently
7675 being constructed. */
7676 outer = value_from_contents_and_address_unresolved (outer_type,
7677 outer_valaddr, 0);
0c281816
JB
7678 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7679 if (discrim == NULL)
14f9c5c9 7680 return -1;
0c281816 7681 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7682
7683 others_clause = -1;
7684 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7685 {
7686 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7687 others_clause = i;
14f9c5c9 7688 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7689 return i;
14f9c5c9
AS
7690 }
7691
7692 return others_clause;
7693}
d2e4a39e 7694\f
14f9c5c9
AS
7695
7696
4c4b4cd2 7697 /* Dynamic-Sized Records */
14f9c5c9
AS
7698
7699/* Strategy: The type ostensibly attached to a value with dynamic size
7700 (i.e., a size that is not statically recorded in the debugging
7701 data) does not accurately reflect the size or layout of the value.
7702 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7703 conventional types that are constructed on the fly. */
14f9c5c9
AS
7704
7705/* There is a subtle and tricky problem here. In general, we cannot
7706 determine the size of dynamic records without its data. However,
7707 the 'struct value' data structure, which GDB uses to represent
7708 quantities in the inferior process (the target), requires the size
7709 of the type at the time of its allocation in order to reserve space
7710 for GDB's internal copy of the data. That's why the
7711 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7712 rather than struct value*s.
14f9c5c9
AS
7713
7714 However, GDB's internal history variables ($1, $2, etc.) are
7715 struct value*s containing internal copies of the data that are not, in
7716 general, the same as the data at their corresponding addresses in
7717 the target. Fortunately, the types we give to these values are all
7718 conventional, fixed-size types (as per the strategy described
7719 above), so that we don't usually have to perform the
7720 'to_fixed_xxx_type' conversions to look at their values.
7721 Unfortunately, there is one exception: if one of the internal
7722 history variables is an array whose elements are unconstrained
7723 records, then we will need to create distinct fixed types for each
7724 element selected. */
7725
7726/* The upshot of all of this is that many routines take a (type, host
7727 address, target address) triple as arguments to represent a value.
7728 The host address, if non-null, is supposed to contain an internal
7729 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7730 target at the target address. */
14f9c5c9
AS
7731
7732/* Assuming that VAL0 represents a pointer value, the result of
7733 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7734 dynamic-sized types. */
14f9c5c9 7735
d2e4a39e
AS
7736struct value *
7737ada_value_ind (struct value *val0)
14f9c5c9 7738{
c48db5ca 7739 struct value *val = value_ind (val0);
5b4ee69b 7740
b50d69b5
JG
7741 if (ada_is_tagged_type (value_type (val), 0))
7742 val = ada_tag_value_at_base_address (val);
7743
4c4b4cd2 7744 return ada_to_fixed_value (val);
14f9c5c9
AS
7745}
7746
7747/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7748 qualifiers on VAL0. */
7749
d2e4a39e
AS
7750static struct value *
7751ada_coerce_ref (struct value *val0)
7752{
df407dfe 7753 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7754 {
7755 struct value *val = val0;
5b4ee69b 7756
994b9211 7757 val = coerce_ref (val);
b50d69b5
JG
7758
7759 if (ada_is_tagged_type (value_type (val), 0))
7760 val = ada_tag_value_at_base_address (val);
7761
4c4b4cd2 7762 return ada_to_fixed_value (val);
d2e4a39e
AS
7763 }
7764 else
14f9c5c9
AS
7765 return val0;
7766}
7767
7768/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7769 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7770
7771static unsigned int
ebf56fd3 7772align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7773{
7774 return (off + alignment - 1) & ~(alignment - 1);
7775}
7776
4c4b4cd2 7777/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7778
7779static unsigned int
ebf56fd3 7780field_alignment (struct type *type, int f)
14f9c5c9 7781{
d2e4a39e 7782 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7783 int len;
14f9c5c9
AS
7784 int align_offset;
7785
64a1bf19
JB
7786 /* The field name should never be null, unless the debugging information
7787 is somehow malformed. In this case, we assume the field does not
7788 require any alignment. */
7789 if (name == NULL)
7790 return 1;
7791
7792 len = strlen (name);
7793
4c4b4cd2
PH
7794 if (!isdigit (name[len - 1]))
7795 return 1;
14f9c5c9 7796
d2e4a39e 7797 if (isdigit (name[len - 2]))
14f9c5c9
AS
7798 align_offset = len - 2;
7799 else
7800 align_offset = len - 1;
7801
61012eef 7802 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7803 return TARGET_CHAR_BIT;
7804
4c4b4cd2
PH
7805 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7806}
7807
852dff6c 7808/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7809
852dff6c
JB
7810static struct symbol *
7811ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7812{
7813 struct symbol *sym;
7814
7815 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7816 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7817 return sym;
7818
4186eb54
KS
7819 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7820 return sym;
14f9c5c9
AS
7821}
7822
dddfab26
UW
7823/* Find a type named NAME. Ignores ambiguity. This routine will look
7824 solely for types defined by debug info, it will not search the GDB
7825 primitive types. */
4c4b4cd2 7826
852dff6c 7827static struct type *
ebf56fd3 7828ada_find_any_type (const char *name)
14f9c5c9 7829{
852dff6c 7830 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7831
14f9c5c9 7832 if (sym != NULL)
dddfab26 7833 return SYMBOL_TYPE (sym);
14f9c5c9 7834
dddfab26 7835 return NULL;
14f9c5c9
AS
7836}
7837
739593e0
JB
7838/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7839 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7840 symbol, in which case it is returned. Otherwise, this looks for
7841 symbols whose name is that of NAME_SYM suffixed with "___XR".
7842 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
7843
7844struct symbol *
270140bd 7845ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 7846{
739593e0 7847 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
7848 struct symbol *sym;
7849
739593e0
JB
7850 if (strstr (name, "___XR") != NULL)
7851 return name_sym;
7852
aeb5907d
JB
7853 sym = find_old_style_renaming_symbol (name, block);
7854
7855 if (sym != NULL)
7856 return sym;
7857
0963b4bd 7858 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 7859 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
7860 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7861 return sym;
7862 else
7863 return NULL;
7864}
7865
7866static struct symbol *
270140bd 7867find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 7868{
7f0df278 7869 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
7870 char *rename;
7871
7872 if (function_sym != NULL)
7873 {
7874 /* If the symbol is defined inside a function, NAME is not fully
7875 qualified. This means we need to prepend the function name
7876 as well as adding the ``___XR'' suffix to build the name of
7877 the associated renaming symbol. */
0d5cff50 7878 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
7879 /* Function names sometimes contain suffixes used
7880 for instance to qualify nested subprograms. When building
7881 the XR type name, we need to make sure that this suffix is
7882 not included. So do not include any suffix in the function
7883 name length below. */
69fadcdf 7884 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
7885 const int rename_len = function_name_len + 2 /* "__" */
7886 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 7887
529cad9c 7888 /* Strip the suffix if necessary. */
69fadcdf
JB
7889 ada_remove_trailing_digits (function_name, &function_name_len);
7890 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7891 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 7892
4c4b4cd2
PH
7893 /* Library-level functions are a special case, as GNAT adds
7894 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 7895 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
7896 have this prefix, so we need to skip this prefix if present. */
7897 if (function_name_len > 5 /* "_ada_" */
7898 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
7899 {
7900 function_name += 5;
7901 function_name_len -= 5;
7902 }
4c4b4cd2
PH
7903
7904 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
7905 strncpy (rename, function_name, function_name_len);
7906 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7907 "__%s___XR", name);
4c4b4cd2
PH
7908 }
7909 else
7910 {
7911 const int rename_len = strlen (name) + 6;
5b4ee69b 7912
4c4b4cd2 7913 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 7914 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
7915 }
7916
852dff6c 7917 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
7918}
7919
14f9c5c9 7920/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7921 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7922 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7923 otherwise return 0. */
7924
14f9c5c9 7925int
d2e4a39e 7926ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7927{
7928 if (type1 == NULL)
7929 return 1;
7930 else if (type0 == NULL)
7931 return 0;
7932 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7933 return 1;
7934 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7935 return 0;
4c4b4cd2
PH
7936 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7937 return 1;
ad82864c 7938 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7939 return 1;
4c4b4cd2
PH
7940 else if (ada_is_array_descriptor_type (type0)
7941 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7942 return 1;
aeb5907d
JB
7943 else
7944 {
7945 const char *type0_name = type_name_no_tag (type0);
7946 const char *type1_name = type_name_no_tag (type1);
7947
7948 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7949 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7950 return 1;
7951 }
14f9c5c9
AS
7952 return 0;
7953}
7954
7955/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
7956 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7957
0d5cff50 7958const char *
d2e4a39e 7959ada_type_name (struct type *type)
14f9c5c9 7960{
d2e4a39e 7961 if (type == NULL)
14f9c5c9
AS
7962 return NULL;
7963 else if (TYPE_NAME (type) != NULL)
7964 return TYPE_NAME (type);
7965 else
7966 return TYPE_TAG_NAME (type);
7967}
7968
b4ba55a1
JB
7969/* Search the list of "descriptive" types associated to TYPE for a type
7970 whose name is NAME. */
7971
7972static struct type *
7973find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7974{
931e5bc3 7975 struct type *result, *tmp;
b4ba55a1 7976
c6044dd1
JB
7977 if (ada_ignore_descriptive_types_p)
7978 return NULL;
7979
b4ba55a1
JB
7980 /* If there no descriptive-type info, then there is no parallel type
7981 to be found. */
7982 if (!HAVE_GNAT_AUX_INFO (type))
7983 return NULL;
7984
7985 result = TYPE_DESCRIPTIVE_TYPE (type);
7986 while (result != NULL)
7987 {
0d5cff50 7988 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7989
7990 if (result_name == NULL)
7991 {
7992 warning (_("unexpected null name on descriptive type"));
7993 return NULL;
7994 }
7995
7996 /* If the names match, stop. */
7997 if (strcmp (result_name, name) == 0)
7998 break;
7999
8000 /* Otherwise, look at the next item on the list, if any. */
8001 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
8002 tmp = TYPE_DESCRIPTIVE_TYPE (result);
8003 else
8004 tmp = NULL;
8005
8006 /* If not found either, try after having resolved the typedef. */
8007 if (tmp != NULL)
8008 result = tmp;
b4ba55a1 8009 else
931e5bc3 8010 {
f168693b 8011 result = check_typedef (result);
931e5bc3
JG
8012 if (HAVE_GNAT_AUX_INFO (result))
8013 result = TYPE_DESCRIPTIVE_TYPE (result);
8014 else
8015 result = NULL;
8016 }
b4ba55a1
JB
8017 }
8018
8019 /* If we didn't find a match, see whether this is a packed array. With
8020 older compilers, the descriptive type information is either absent or
8021 irrelevant when it comes to packed arrays so the above lookup fails.
8022 Fall back to using a parallel lookup by name in this case. */
12ab9e09 8023 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
8024 return ada_find_any_type (name);
8025
8026 return result;
8027}
8028
8029/* Find a parallel type to TYPE with the specified NAME, using the
8030 descriptive type taken from the debugging information, if available,
8031 and otherwise using the (slower) name-based method. */
8032
8033static struct type *
8034ada_find_parallel_type_with_name (struct type *type, const char *name)
8035{
8036 struct type *result = NULL;
8037
8038 if (HAVE_GNAT_AUX_INFO (type))
8039 result = find_parallel_type_by_descriptive_type (type, name);
8040 else
8041 result = ada_find_any_type (name);
8042
8043 return result;
8044}
8045
8046/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 8047 SUFFIX to the name of TYPE. */
14f9c5c9 8048
d2e4a39e 8049struct type *
ebf56fd3 8050ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 8051{
0d5cff50 8052 char *name;
fe978cb0 8053 const char *type_name = ada_type_name (type);
14f9c5c9 8054 int len;
d2e4a39e 8055
fe978cb0 8056 if (type_name == NULL)
14f9c5c9
AS
8057 return NULL;
8058
fe978cb0 8059 len = strlen (type_name);
14f9c5c9 8060
b4ba55a1 8061 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 8062
fe978cb0 8063 strcpy (name, type_name);
14f9c5c9
AS
8064 strcpy (name + len, suffix);
8065
b4ba55a1 8066 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
8067}
8068
14f9c5c9 8069/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 8070 type describing its fields. Otherwise, return NULL. */
14f9c5c9 8071
d2e4a39e
AS
8072static struct type *
8073dynamic_template_type (struct type *type)
14f9c5c9 8074{
61ee279c 8075 type = ada_check_typedef (type);
14f9c5c9
AS
8076
8077 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 8078 || ada_type_name (type) == NULL)
14f9c5c9 8079 return NULL;
d2e4a39e 8080 else
14f9c5c9
AS
8081 {
8082 int len = strlen (ada_type_name (type));
5b4ee69b 8083
4c4b4cd2
PH
8084 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
8085 return type;
14f9c5c9 8086 else
4c4b4cd2 8087 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
8088 }
8089}
8090
8091/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 8092 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 8093
d2e4a39e
AS
8094static int
8095is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
8096{
8097 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 8098
d2e4a39e 8099 return name != NULL
14f9c5c9
AS
8100 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
8101 && strstr (name, "___XVL") != NULL;
8102}
8103
4c4b4cd2
PH
8104/* The index of the variant field of TYPE, or -1 if TYPE does not
8105 represent a variant record type. */
14f9c5c9 8106
d2e4a39e 8107static int
4c4b4cd2 8108variant_field_index (struct type *type)
14f9c5c9
AS
8109{
8110 int f;
8111
4c4b4cd2
PH
8112 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
8113 return -1;
8114
8115 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
8116 {
8117 if (ada_is_variant_part (type, f))
8118 return f;
8119 }
8120 return -1;
14f9c5c9
AS
8121}
8122
4c4b4cd2
PH
8123/* A record type with no fields. */
8124
d2e4a39e 8125static struct type *
fe978cb0 8126empty_record (struct type *templ)
14f9c5c9 8127{
fe978cb0 8128 struct type *type = alloc_type_copy (templ);
5b4ee69b 8129
14f9c5c9
AS
8130 TYPE_CODE (type) = TYPE_CODE_STRUCT;
8131 TYPE_NFIELDS (type) = 0;
8132 TYPE_FIELDS (type) = NULL;
b1f33ddd 8133 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
8134 TYPE_NAME (type) = "<empty>";
8135 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
8136 TYPE_LENGTH (type) = 0;
8137 return type;
8138}
8139
8140/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
8141 the value of type TYPE at VALADDR or ADDRESS (see comments at
8142 the beginning of this section) VAL according to GNAT conventions.
8143 DVAL0 should describe the (portion of a) record that contains any
df407dfe 8144 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
8145 an outer-level type (i.e., as opposed to a branch of a variant.) A
8146 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 8147 of the variant.
14f9c5c9 8148
4c4b4cd2
PH
8149 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
8150 length are not statically known are discarded. As a consequence,
8151 VALADDR, ADDRESS and DVAL0 are ignored.
8152
8153 NOTE: Limitations: For now, we assume that dynamic fields and
8154 variants occupy whole numbers of bytes. However, they need not be
8155 byte-aligned. */
8156
8157struct type *
10a2c479 8158ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 8159 const gdb_byte *valaddr,
4c4b4cd2
PH
8160 CORE_ADDR address, struct value *dval0,
8161 int keep_dynamic_fields)
14f9c5c9 8162{
d2e4a39e
AS
8163 struct value *mark = value_mark ();
8164 struct value *dval;
8165 struct type *rtype;
14f9c5c9 8166 int nfields, bit_len;
4c4b4cd2 8167 int variant_field;
14f9c5c9 8168 long off;
d94e4f4f 8169 int fld_bit_len;
14f9c5c9
AS
8170 int f;
8171
4c4b4cd2
PH
8172 /* Compute the number of fields in this record type that are going
8173 to be processed: unless keep_dynamic_fields, this includes only
8174 fields whose position and length are static will be processed. */
8175 if (keep_dynamic_fields)
8176 nfields = TYPE_NFIELDS (type);
8177 else
8178 {
8179 nfields = 0;
76a01679 8180 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
8181 && !ada_is_variant_part (type, nfields)
8182 && !is_dynamic_field (type, nfields))
8183 nfields++;
8184 }
8185
e9bb382b 8186 rtype = alloc_type_copy (type);
14f9c5c9
AS
8187 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
8188 INIT_CPLUS_SPECIFIC (rtype);
8189 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 8190 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
8191 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8192 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
8193 TYPE_NAME (rtype) = ada_type_name (type);
8194 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 8195 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 8196
d2e4a39e
AS
8197 off = 0;
8198 bit_len = 0;
4c4b4cd2
PH
8199 variant_field = -1;
8200
14f9c5c9
AS
8201 for (f = 0; f < nfields; f += 1)
8202 {
6c038f32
PH
8203 off = align_value (off, field_alignment (type, f))
8204 + TYPE_FIELD_BITPOS (type, f);
945b3a32 8205 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 8206 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 8207
d2e4a39e 8208 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
8209 {
8210 variant_field = f;
d94e4f4f 8211 fld_bit_len = 0;
4c4b4cd2 8212 }
14f9c5c9 8213 else if (is_dynamic_field (type, f))
4c4b4cd2 8214 {
284614f0
JB
8215 const gdb_byte *field_valaddr = valaddr;
8216 CORE_ADDR field_address = address;
8217 struct type *field_type =
8218 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8219
4c4b4cd2 8220 if (dval0 == NULL)
b5304971
JG
8221 {
8222 /* rtype's length is computed based on the run-time
8223 value of discriminants. If the discriminants are not
8224 initialized, the type size may be completely bogus and
0963b4bd 8225 GDB may fail to allocate a value for it. So check the
b5304971 8226 size first before creating the value. */
c1b5a1a6 8227 ada_ensure_varsize_limit (rtype);
012370f6
TT
8228 /* Using plain value_from_contents_and_address here
8229 causes problems because we will end up trying to
8230 resolve a type that is currently being
8231 constructed. */
8232 dval = value_from_contents_and_address_unresolved (rtype,
8233 valaddr,
8234 address);
9f1f738a 8235 rtype = value_type (dval);
b5304971 8236 }
4c4b4cd2
PH
8237 else
8238 dval = dval0;
8239
284614f0
JB
8240 /* If the type referenced by this field is an aligner type, we need
8241 to unwrap that aligner type, because its size might not be set.
8242 Keeping the aligner type would cause us to compute the wrong
8243 size for this field, impacting the offset of the all the fields
8244 that follow this one. */
8245 if (ada_is_aligner_type (field_type))
8246 {
8247 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8248
8249 field_valaddr = cond_offset_host (field_valaddr, field_offset);
8250 field_address = cond_offset_target (field_address, field_offset);
8251 field_type = ada_aligned_type (field_type);
8252 }
8253
8254 field_valaddr = cond_offset_host (field_valaddr,
8255 off / TARGET_CHAR_BIT);
8256 field_address = cond_offset_target (field_address,
8257 off / TARGET_CHAR_BIT);
8258
8259 /* Get the fixed type of the field. Note that, in this case,
8260 we do not want to get the real type out of the tag: if
8261 the current field is the parent part of a tagged record,
8262 we will get the tag of the object. Clearly wrong: the real
8263 type of the parent is not the real type of the child. We
8264 would end up in an infinite loop. */
8265 field_type = ada_get_base_type (field_type);
8266 field_type = ada_to_fixed_type (field_type, field_valaddr,
8267 field_address, dval, 0);
27f2a97b
JB
8268 /* If the field size is already larger than the maximum
8269 object size, then the record itself will necessarily
8270 be larger than the maximum object size. We need to make
8271 this check now, because the size might be so ridiculously
8272 large (due to an uninitialized variable in the inferior)
8273 that it would cause an overflow when adding it to the
8274 record size. */
c1b5a1a6 8275 ada_ensure_varsize_limit (field_type);
284614f0
JB
8276
8277 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 8278 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
8279 /* The multiplication can potentially overflow. But because
8280 the field length has been size-checked just above, and
8281 assuming that the maximum size is a reasonable value,
8282 an overflow should not happen in practice. So rather than
8283 adding overflow recovery code to this already complex code,
8284 we just assume that it's not going to happen. */
d94e4f4f 8285 fld_bit_len =
4c4b4cd2
PH
8286 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8287 }
14f9c5c9 8288 else
4c4b4cd2 8289 {
5ded5331
JB
8290 /* Note: If this field's type is a typedef, it is important
8291 to preserve the typedef layer.
8292
8293 Otherwise, we might be transforming a typedef to a fat
8294 pointer (encoding a pointer to an unconstrained array),
8295 into a basic fat pointer (encoding an unconstrained
8296 array). As both types are implemented using the same
8297 structure, the typedef is the only clue which allows us
8298 to distinguish between the two options. Stripping it
8299 would prevent us from printing this field appropriately. */
8300 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
8301 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8302 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 8303 fld_bit_len =
4c4b4cd2
PH
8304 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8305 else
5ded5331
JB
8306 {
8307 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8308
8309 /* We need to be careful of typedefs when computing
8310 the length of our field. If this is a typedef,
8311 get the length of the target type, not the length
8312 of the typedef. */
8313 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
8314 field_type = ada_typedef_target_type (field_type);
8315
8316 fld_bit_len =
8317 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8318 }
4c4b4cd2 8319 }
14f9c5c9 8320 if (off + fld_bit_len > bit_len)
4c4b4cd2 8321 bit_len = off + fld_bit_len;
d94e4f4f 8322 off += fld_bit_len;
4c4b4cd2
PH
8323 TYPE_LENGTH (rtype) =
8324 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 8325 }
4c4b4cd2
PH
8326
8327 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 8328 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
8329 the record. This can happen in the presence of representation
8330 clauses. */
8331 if (variant_field >= 0)
8332 {
8333 struct type *branch_type;
8334
8335 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8336
8337 if (dval0 == NULL)
9f1f738a 8338 {
012370f6
TT
8339 /* Using plain value_from_contents_and_address here causes
8340 problems because we will end up trying to resolve a type
8341 that is currently being constructed. */
8342 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8343 address);
9f1f738a
SA
8344 rtype = value_type (dval);
8345 }
4c4b4cd2
PH
8346 else
8347 dval = dval0;
8348
8349 branch_type =
8350 to_fixed_variant_branch_type
8351 (TYPE_FIELD_TYPE (type, variant_field),
8352 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8353 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8354 if (branch_type == NULL)
8355 {
8356 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8357 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8358 TYPE_NFIELDS (rtype) -= 1;
8359 }
8360 else
8361 {
8362 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8363 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8364 fld_bit_len =
8365 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8366 TARGET_CHAR_BIT;
8367 if (off + fld_bit_len > bit_len)
8368 bit_len = off + fld_bit_len;
8369 TYPE_LENGTH (rtype) =
8370 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8371 }
8372 }
8373
714e53ab
PH
8374 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8375 should contain the alignment of that record, which should be a strictly
8376 positive value. If null or negative, then something is wrong, most
8377 probably in the debug info. In that case, we don't round up the size
0963b4bd 8378 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8379 the current RTYPE length might be good enough for our purposes. */
8380 if (TYPE_LENGTH (type) <= 0)
8381 {
323e0a4a
AC
8382 if (TYPE_NAME (rtype))
8383 warning (_("Invalid type size for `%s' detected: %d."),
8384 TYPE_NAME (rtype), TYPE_LENGTH (type));
8385 else
8386 warning (_("Invalid type size for <unnamed> detected: %d."),
8387 TYPE_LENGTH (type));
714e53ab
PH
8388 }
8389 else
8390 {
8391 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8392 TYPE_LENGTH (type));
8393 }
14f9c5c9
AS
8394
8395 value_free_to_mark (mark);
d2e4a39e 8396 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8397 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8398 return rtype;
8399}
8400
4c4b4cd2
PH
8401/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8402 of 1. */
14f9c5c9 8403
d2e4a39e 8404static struct type *
fc1a4b47 8405template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8406 CORE_ADDR address, struct value *dval0)
8407{
8408 return ada_template_to_fixed_record_type_1 (type, valaddr,
8409 address, dval0, 1);
8410}
8411
8412/* An ordinary record type in which ___XVL-convention fields and
8413 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8414 static approximations, containing all possible fields. Uses
8415 no runtime values. Useless for use in values, but that's OK,
8416 since the results are used only for type determinations. Works on both
8417 structs and unions. Representation note: to save space, we memorize
8418 the result of this function in the TYPE_TARGET_TYPE of the
8419 template type. */
8420
8421static struct type *
8422template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8423{
8424 struct type *type;
8425 int nfields;
8426 int f;
8427
9e195661
PMR
8428 /* No need no do anything if the input type is already fixed. */
8429 if (TYPE_FIXED_INSTANCE (type0))
8430 return type0;
8431
8432 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8433 if (TYPE_TARGET_TYPE (type0) != NULL)
8434 return TYPE_TARGET_TYPE (type0);
8435
9e195661 8436 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8437 type = type0;
9e195661
PMR
8438 nfields = TYPE_NFIELDS (type0);
8439
8440 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8441 recompute all over next time. */
8442 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8443
8444 for (f = 0; f < nfields; f += 1)
8445 {
460efde1 8446 struct type *field_type = TYPE_FIELD_TYPE (type0, f);
4c4b4cd2 8447 struct type *new_type;
14f9c5c9 8448
4c4b4cd2 8449 if (is_dynamic_field (type0, f))
460efde1
JB
8450 {
8451 field_type = ada_check_typedef (field_type);
8452 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8453 }
14f9c5c9 8454 else
f192137b 8455 new_type = static_unwrap_type (field_type);
9e195661
PMR
8456
8457 if (new_type != field_type)
8458 {
8459 /* Clone TYPE0 only the first time we get a new field type. */
8460 if (type == type0)
8461 {
8462 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
8463 TYPE_CODE (type) = TYPE_CODE (type0);
8464 INIT_CPLUS_SPECIFIC (type);
8465 TYPE_NFIELDS (type) = nfields;
8466 TYPE_FIELDS (type) = (struct field *)
8467 TYPE_ALLOC (type, nfields * sizeof (struct field));
8468 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8469 sizeof (struct field) * nfields);
8470 TYPE_NAME (type) = ada_type_name (type0);
8471 TYPE_TAG_NAME (type) = NULL;
8472 TYPE_FIXED_INSTANCE (type) = 1;
8473 TYPE_LENGTH (type) = 0;
8474 }
8475 TYPE_FIELD_TYPE (type, f) = new_type;
8476 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8477 }
14f9c5c9 8478 }
9e195661 8479
14f9c5c9
AS
8480 return type;
8481}
8482
4c4b4cd2 8483/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8484 whose address in memory is ADDRESS, returns a revision of TYPE,
8485 which should be a non-dynamic-sized record, in which the variant
8486 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8487 for discriminant values in DVAL0, which can be NULL if the record
8488 contains the necessary discriminant values. */
8489
d2e4a39e 8490static struct type *
fc1a4b47 8491to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8492 CORE_ADDR address, struct value *dval0)
14f9c5c9 8493{
d2e4a39e 8494 struct value *mark = value_mark ();
4c4b4cd2 8495 struct value *dval;
d2e4a39e 8496 struct type *rtype;
14f9c5c9
AS
8497 struct type *branch_type;
8498 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 8499 int variant_field = variant_field_index (type);
14f9c5c9 8500
4c4b4cd2 8501 if (variant_field == -1)
14f9c5c9
AS
8502 return type;
8503
4c4b4cd2 8504 if (dval0 == NULL)
9f1f738a
SA
8505 {
8506 dval = value_from_contents_and_address (type, valaddr, address);
8507 type = value_type (dval);
8508 }
4c4b4cd2
PH
8509 else
8510 dval = dval0;
8511
e9bb382b 8512 rtype = alloc_type_copy (type);
14f9c5c9 8513 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
8514 INIT_CPLUS_SPECIFIC (rtype);
8515 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
8516 TYPE_FIELDS (rtype) =
8517 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8518 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 8519 sizeof (struct field) * nfields);
14f9c5c9
AS
8520 TYPE_NAME (rtype) = ada_type_name (type);
8521 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 8522 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8523 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8524
4c4b4cd2
PH
8525 branch_type = to_fixed_variant_branch_type
8526 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8527 cond_offset_host (valaddr,
4c4b4cd2
PH
8528 TYPE_FIELD_BITPOS (type, variant_field)
8529 / TARGET_CHAR_BIT),
d2e4a39e 8530 cond_offset_target (address,
4c4b4cd2
PH
8531 TYPE_FIELD_BITPOS (type, variant_field)
8532 / TARGET_CHAR_BIT), dval);
d2e4a39e 8533 if (branch_type == NULL)
14f9c5c9 8534 {
4c4b4cd2 8535 int f;
5b4ee69b 8536
4c4b4cd2
PH
8537 for (f = variant_field + 1; f < nfields; f += 1)
8538 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 8539 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
8540 }
8541 else
8542 {
4c4b4cd2
PH
8543 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8544 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8545 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8546 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8547 }
4c4b4cd2 8548 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8549
4c4b4cd2 8550 value_free_to_mark (mark);
14f9c5c9
AS
8551 return rtype;
8552}
8553
8554/* An ordinary record type (with fixed-length fields) that describes
8555 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8556 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8557 should be in DVAL, a record value; it may be NULL if the object
8558 at ADDR itself contains any necessary discriminant values.
8559 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8560 values from the record are needed. Except in the case that DVAL,
8561 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8562 unchecked) is replaced by a particular branch of the variant.
8563
8564 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8565 is questionable and may be removed. It can arise during the
8566 processing of an unconstrained-array-of-record type where all the
8567 variant branches have exactly the same size. This is because in
8568 such cases, the compiler does not bother to use the XVS convention
8569 when encoding the record. I am currently dubious of this
8570 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8571
d2e4a39e 8572static struct type *
fc1a4b47 8573to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8574 CORE_ADDR address, struct value *dval)
14f9c5c9 8575{
d2e4a39e 8576 struct type *templ_type;
14f9c5c9 8577
876cecd0 8578 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8579 return type0;
8580
d2e4a39e 8581 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8582
8583 if (templ_type != NULL)
8584 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8585 else if (variant_field_index (type0) >= 0)
8586 {
8587 if (dval == NULL && valaddr == NULL && address == 0)
8588 return type0;
8589 return to_record_with_fixed_variant_part (type0, valaddr, address,
8590 dval);
8591 }
14f9c5c9
AS
8592 else
8593 {
876cecd0 8594 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8595 return type0;
8596 }
8597
8598}
8599
8600/* An ordinary record type (with fixed-length fields) that describes
8601 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8602 union type. Any necessary discriminants' values should be in DVAL,
8603 a record value. That is, this routine selects the appropriate
8604 branch of the union at ADDR according to the discriminant value
b1f33ddd 8605 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8606 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8607
d2e4a39e 8608static struct type *
fc1a4b47 8609to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8610 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8611{
8612 int which;
d2e4a39e
AS
8613 struct type *templ_type;
8614 struct type *var_type;
14f9c5c9
AS
8615
8616 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8617 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8618 else
14f9c5c9
AS
8619 var_type = var_type0;
8620
8621 templ_type = ada_find_parallel_type (var_type, "___XVU");
8622
8623 if (templ_type != NULL)
8624 var_type = templ_type;
8625
b1f33ddd
JB
8626 if (is_unchecked_variant (var_type, value_type (dval)))
8627 return var_type0;
d2e4a39e
AS
8628 which =
8629 ada_which_variant_applies (var_type,
0fd88904 8630 value_type (dval), value_contents (dval));
14f9c5c9
AS
8631
8632 if (which < 0)
e9bb382b 8633 return empty_record (var_type);
14f9c5c9 8634 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8635 return to_fixed_record_type
d2e4a39e
AS
8636 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8637 valaddr, address, dval);
4c4b4cd2 8638 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8639 return
8640 to_fixed_record_type
8641 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8642 else
8643 return TYPE_FIELD_TYPE (var_type, which);
8644}
8645
8908fca5
JB
8646/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8647 ENCODING_TYPE, a type following the GNAT conventions for discrete
8648 type encodings, only carries redundant information. */
8649
8650static int
8651ada_is_redundant_range_encoding (struct type *range_type,
8652 struct type *encoding_type)
8653{
8654 struct type *fixed_range_type;
108d56a4 8655 const char *bounds_str;
8908fca5
JB
8656 int n;
8657 LONGEST lo, hi;
8658
8659 gdb_assert (TYPE_CODE (range_type) == TYPE_CODE_RANGE);
8660
005e2509
JB
8661 if (TYPE_CODE (get_base_type (range_type))
8662 != TYPE_CODE (get_base_type (encoding_type)))
8663 {
8664 /* The compiler probably used a simple base type to describe
8665 the range type instead of the range's actual base type,
8666 expecting us to get the real base type from the encoding
8667 anyway. In this situation, the encoding cannot be ignored
8668 as redundant. */
8669 return 0;
8670 }
8671
8908fca5
JB
8672 if (is_dynamic_type (range_type))
8673 return 0;
8674
8675 if (TYPE_NAME (encoding_type) == NULL)
8676 return 0;
8677
8678 bounds_str = strstr (TYPE_NAME (encoding_type), "___XDLU_");
8679 if (bounds_str == NULL)
8680 return 0;
8681
8682 n = 8; /* Skip "___XDLU_". */
8683 if (!ada_scan_number (bounds_str, n, &lo, &n))
8684 return 0;
8685 if (TYPE_LOW_BOUND (range_type) != lo)
8686 return 0;
8687
8688 n += 2; /* Skip the "__" separator between the two bounds. */
8689 if (!ada_scan_number (bounds_str, n, &hi, &n))
8690 return 0;
8691 if (TYPE_HIGH_BOUND (range_type) != hi)
8692 return 0;
8693
8694 return 1;
8695}
8696
8697/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8698 a type following the GNAT encoding for describing array type
8699 indices, only carries redundant information. */
8700
8701static int
8702ada_is_redundant_index_type_desc (struct type *array_type,
8703 struct type *desc_type)
8704{
8705 struct type *this_layer = check_typedef (array_type);
8706 int i;
8707
8708 for (i = 0; i < TYPE_NFIELDS (desc_type); i++)
8709 {
8710 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8711 TYPE_FIELD_TYPE (desc_type, i)))
8712 return 0;
8713 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8714 }
8715
8716 return 1;
8717}
8718
14f9c5c9
AS
8719/* Assuming that TYPE0 is an array type describing the type of a value
8720 at ADDR, and that DVAL describes a record containing any
8721 discriminants used in TYPE0, returns a type for the value that
8722 contains no dynamic components (that is, no components whose sizes
8723 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8724 true, gives an error message if the resulting type's size is over
4c4b4cd2 8725 varsize_limit. */
14f9c5c9 8726
d2e4a39e
AS
8727static struct type *
8728to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8729 int ignore_too_big)
14f9c5c9 8730{
d2e4a39e
AS
8731 struct type *index_type_desc;
8732 struct type *result;
ad82864c 8733 int constrained_packed_array_p;
931e5bc3 8734 static const char *xa_suffix = "___XA";
14f9c5c9 8735
b0dd7688 8736 type0 = ada_check_typedef (type0);
284614f0 8737 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8738 return type0;
14f9c5c9 8739
ad82864c
JB
8740 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8741 if (constrained_packed_array_p)
8742 type0 = decode_constrained_packed_array_type (type0);
284614f0 8743
931e5bc3
JG
8744 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8745
8746 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8747 encoding suffixed with 'P' may still be generated. If so,
8748 it should be used to find the XA type. */
8749
8750 if (index_type_desc == NULL)
8751 {
1da0522e 8752 const char *type_name = ada_type_name (type0);
931e5bc3 8753
1da0522e 8754 if (type_name != NULL)
931e5bc3 8755 {
1da0522e 8756 const int len = strlen (type_name);
931e5bc3
JG
8757 char *name = (char *) alloca (len + strlen (xa_suffix));
8758
1da0522e 8759 if (type_name[len - 1] == 'P')
931e5bc3 8760 {
1da0522e 8761 strcpy (name, type_name);
931e5bc3
JG
8762 strcpy (name + len - 1, xa_suffix);
8763 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8764 }
8765 }
8766 }
8767
28c85d6c 8768 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8769 if (index_type_desc != NULL
8770 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8771 {
8772 /* Ignore this ___XA parallel type, as it does not bring any
8773 useful information. This allows us to avoid creating fixed
8774 versions of the array's index types, which would be identical
8775 to the original ones. This, in turn, can also help avoid
8776 the creation of fixed versions of the array itself. */
8777 index_type_desc = NULL;
8778 }
8779
14f9c5c9
AS
8780 if (index_type_desc == NULL)
8781 {
61ee279c 8782 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8783
14f9c5c9 8784 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8785 depend on the contents of the array in properly constructed
8786 debugging data. */
529cad9c
PH
8787 /* Create a fixed version of the array element type.
8788 We're not providing the address of an element here,
e1d5a0d2 8789 and thus the actual object value cannot be inspected to do
529cad9c
PH
8790 the conversion. This should not be a problem, since arrays of
8791 unconstrained objects are not allowed. In particular, all
8792 the elements of an array of a tagged type should all be of
8793 the same type specified in the debugging info. No need to
8794 consult the object tag. */
1ed6ede0 8795 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8796
284614f0
JB
8797 /* Make sure we always create a new array type when dealing with
8798 packed array types, since we're going to fix-up the array
8799 type length and element bitsize a little further down. */
ad82864c 8800 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8801 result = type0;
14f9c5c9 8802 else
e9bb382b 8803 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8804 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8805 }
8806 else
8807 {
8808 int i;
8809 struct type *elt_type0;
8810
8811 elt_type0 = type0;
8812 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8813 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8814
8815 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8816 depend on the contents of the array in properly constructed
8817 debugging data. */
529cad9c
PH
8818 /* Create a fixed version of the array element type.
8819 We're not providing the address of an element here,
e1d5a0d2 8820 and thus the actual object value cannot be inspected to do
529cad9c
PH
8821 the conversion. This should not be a problem, since arrays of
8822 unconstrained objects are not allowed. In particular, all
8823 the elements of an array of a tagged type should all be of
8824 the same type specified in the debugging info. No need to
8825 consult the object tag. */
1ed6ede0
JB
8826 result =
8827 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8828
8829 elt_type0 = type0;
14f9c5c9 8830 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8831 {
8832 struct type *range_type =
28c85d6c 8833 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8834
e9bb382b 8835 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8836 result, range_type);
1ce677a4 8837 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8838 }
d2e4a39e 8839 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8840 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8841 }
8842
2e6fda7d
JB
8843 /* We want to preserve the type name. This can be useful when
8844 trying to get the type name of a value that has already been
8845 printed (for instance, if the user did "print VAR; whatis $". */
8846 TYPE_NAME (result) = TYPE_NAME (type0);
8847
ad82864c 8848 if (constrained_packed_array_p)
284614f0
JB
8849 {
8850 /* So far, the resulting type has been created as if the original
8851 type was a regular (non-packed) array type. As a result, the
8852 bitsize of the array elements needs to be set again, and the array
8853 length needs to be recomputed based on that bitsize. */
8854 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8855 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8856
8857 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8858 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8859 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8860 TYPE_LENGTH (result)++;
8861 }
8862
876cecd0 8863 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 8864 return result;
d2e4a39e 8865}
14f9c5c9
AS
8866
8867
8868/* A standard type (containing no dynamically sized components)
8869 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8870 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8871 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8872 ADDRESS or in VALADDR contains these discriminants.
8873
1ed6ede0
JB
8874 If CHECK_TAG is not null, in the case of tagged types, this function
8875 attempts to locate the object's tag and use it to compute the actual
8876 type. However, when ADDRESS is null, we cannot use it to determine the
8877 location of the tag, and therefore compute the tagged type's actual type.
8878 So we return the tagged type without consulting the tag. */
529cad9c 8879
f192137b
JB
8880static struct type *
8881ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 8882 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8883{
61ee279c 8884 type = ada_check_typedef (type);
d2e4a39e
AS
8885 switch (TYPE_CODE (type))
8886 {
8887 default:
14f9c5c9 8888 return type;
d2e4a39e 8889 case TYPE_CODE_STRUCT:
4c4b4cd2 8890 {
76a01679 8891 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
8892 struct type *fixed_record_type =
8893 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 8894
529cad9c
PH
8895 /* If STATIC_TYPE is a tagged type and we know the object's address,
8896 then we can determine its tag, and compute the object's actual
0963b4bd 8897 type from there. Note that we have to use the fixed record
1ed6ede0
JB
8898 type (the parent part of the record may have dynamic fields
8899 and the way the location of _tag is expressed may depend on
8900 them). */
529cad9c 8901
1ed6ede0 8902 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 8903 {
b50d69b5
JG
8904 struct value *tag =
8905 value_tag_from_contents_and_address
8906 (fixed_record_type,
8907 valaddr,
8908 address);
8909 struct type *real_type = type_from_tag (tag);
8910 struct value *obj =
8911 value_from_contents_and_address (fixed_record_type,
8912 valaddr,
8913 address);
9f1f738a 8914 fixed_record_type = value_type (obj);
76a01679 8915 if (real_type != NULL)
b50d69b5
JG
8916 return to_fixed_record_type
8917 (real_type, NULL,
8918 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 8919 }
4af88198
JB
8920
8921 /* Check to see if there is a parallel ___XVZ variable.
8922 If there is, then it provides the actual size of our type. */
8923 else if (ada_type_name (fixed_record_type) != NULL)
8924 {
0d5cff50 8925 const char *name = ada_type_name (fixed_record_type);
224c3ddb
SM
8926 char *xvz_name
8927 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
4af88198
JB
8928 int xvz_found = 0;
8929 LONGEST size;
8930
88c15c34 8931 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
8932 size = get_int_var_value (xvz_name, &xvz_found);
8933 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8934 {
8935 fixed_record_type = copy_type (fixed_record_type);
8936 TYPE_LENGTH (fixed_record_type) = size;
8937
8938 /* The FIXED_RECORD_TYPE may have be a stub. We have
8939 observed this when the debugging info is STABS, and
8940 apparently it is something that is hard to fix.
8941
8942 In practice, we don't need the actual type definition
8943 at all, because the presence of the XVZ variable allows us
8944 to assume that there must be a XVS type as well, which we
8945 should be able to use later, when we need the actual type
8946 definition.
8947
8948 In the meantime, pretend that the "fixed" type we are
8949 returning is NOT a stub, because this can cause trouble
8950 when using this type to create new types targeting it.
8951 Indeed, the associated creation routines often check
8952 whether the target type is a stub and will try to replace
0963b4bd 8953 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
8954 might cause the new type to have the wrong size too.
8955 Consider the case of an array, for instance, where the size
8956 of the array is computed from the number of elements in
8957 our array multiplied by the size of its element. */
8958 TYPE_STUB (fixed_record_type) = 0;
8959 }
8960 }
1ed6ede0 8961 return fixed_record_type;
4c4b4cd2 8962 }
d2e4a39e 8963 case TYPE_CODE_ARRAY:
4c4b4cd2 8964 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8965 case TYPE_CODE_UNION:
8966 if (dval == NULL)
4c4b4cd2 8967 return type;
d2e4a39e 8968 else
4c4b4cd2 8969 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8970 }
14f9c5c9
AS
8971}
8972
f192137b
JB
8973/* The same as ada_to_fixed_type_1, except that it preserves the type
8974 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8975
8976 The typedef layer needs be preserved in order to differentiate between
8977 arrays and array pointers when both types are implemented using the same
8978 fat pointer. In the array pointer case, the pointer is encoded as
8979 a typedef of the pointer type. For instance, considering:
8980
8981 type String_Access is access String;
8982 S1 : String_Access := null;
8983
8984 To the debugger, S1 is defined as a typedef of type String. But
8985 to the user, it is a pointer. So if the user tries to print S1,
8986 we should not dereference the array, but print the array address
8987 instead.
8988
8989 If we didn't preserve the typedef layer, we would lose the fact that
8990 the type is to be presented as a pointer (needs de-reference before
8991 being printed). And we would also use the source-level type name. */
f192137b
JB
8992
8993struct type *
8994ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8995 CORE_ADDR address, struct value *dval, int check_tag)
8996
8997{
8998 struct type *fixed_type =
8999 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
9000
96dbd2c1
JB
9001 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
9002 then preserve the typedef layer.
9003
9004 Implementation note: We can only check the main-type portion of
9005 the TYPE and FIXED_TYPE, because eliminating the typedef layer
9006 from TYPE now returns a type that has the same instance flags
9007 as TYPE. For instance, if TYPE is a "typedef const", and its
9008 target type is a "struct", then the typedef elimination will return
9009 a "const" version of the target type. See check_typedef for more
9010 details about how the typedef layer elimination is done.
9011
9012 brobecker/2010-11-19: It seems to me that the only case where it is
9013 useful to preserve the typedef layer is when dealing with fat pointers.
9014 Perhaps, we could add a check for that and preserve the typedef layer
9015 only in that situation. But this seems unecessary so far, probably
9016 because we call check_typedef/ada_check_typedef pretty much everywhere.
9017 */
f192137b 9018 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 9019 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 9020 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
9021 return type;
9022
9023 return fixed_type;
9024}
9025
14f9c5c9 9026/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 9027 TYPE0, but based on no runtime data. */
14f9c5c9 9028
d2e4a39e
AS
9029static struct type *
9030to_static_fixed_type (struct type *type0)
14f9c5c9 9031{
d2e4a39e 9032 struct type *type;
14f9c5c9
AS
9033
9034 if (type0 == NULL)
9035 return NULL;
9036
876cecd0 9037 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
9038 return type0;
9039
61ee279c 9040 type0 = ada_check_typedef (type0);
d2e4a39e 9041
14f9c5c9
AS
9042 switch (TYPE_CODE (type0))
9043 {
9044 default:
9045 return type0;
9046 case TYPE_CODE_STRUCT:
9047 type = dynamic_template_type (type0);
d2e4a39e 9048 if (type != NULL)
4c4b4cd2
PH
9049 return template_to_static_fixed_type (type);
9050 else
9051 return template_to_static_fixed_type (type0);
14f9c5c9
AS
9052 case TYPE_CODE_UNION:
9053 type = ada_find_parallel_type (type0, "___XVU");
9054 if (type != NULL)
4c4b4cd2
PH
9055 return template_to_static_fixed_type (type);
9056 else
9057 return template_to_static_fixed_type (type0);
14f9c5c9
AS
9058 }
9059}
9060
4c4b4cd2
PH
9061/* A static approximation of TYPE with all type wrappers removed. */
9062
d2e4a39e
AS
9063static struct type *
9064static_unwrap_type (struct type *type)
14f9c5c9
AS
9065{
9066 if (ada_is_aligner_type (type))
9067 {
61ee279c 9068 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 9069 if (ada_type_name (type1) == NULL)
4c4b4cd2 9070 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
9071
9072 return static_unwrap_type (type1);
9073 }
d2e4a39e 9074 else
14f9c5c9 9075 {
d2e4a39e 9076 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 9077
d2e4a39e 9078 if (raw_real_type == type)
4c4b4cd2 9079 return type;
14f9c5c9 9080 else
4c4b4cd2 9081 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
9082 }
9083}
9084
9085/* In some cases, incomplete and private types require
4c4b4cd2 9086 cross-references that are not resolved as records (for example,
14f9c5c9
AS
9087 type Foo;
9088 type FooP is access Foo;
9089 V: FooP;
9090 type Foo is array ...;
4c4b4cd2 9091 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
9092 cross-references to such types, we instead substitute for FooP a
9093 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 9094 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
9095
9096/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
9097 exists, otherwise TYPE. */
9098
d2e4a39e 9099struct type *
61ee279c 9100ada_check_typedef (struct type *type)
14f9c5c9 9101{
727e3d2e
JB
9102 if (type == NULL)
9103 return NULL;
9104
720d1a40
JB
9105 /* If our type is a typedef type of a fat pointer, then we're done.
9106 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
9107 what allows us to distinguish between fat pointers that represent
9108 array types, and fat pointers that represent array access types
9109 (in both cases, the compiler implements them as fat pointers). */
9110 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
9111 && is_thick_pntr (ada_typedef_target_type (type)))
9112 return type;
9113
f168693b 9114 type = check_typedef (type);
14f9c5c9 9115 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 9116 || !TYPE_STUB (type)
14f9c5c9
AS
9117 || TYPE_TAG_NAME (type) == NULL)
9118 return type;
d2e4a39e 9119 else
14f9c5c9 9120 {
0d5cff50 9121 const char *name = TYPE_TAG_NAME (type);
d2e4a39e 9122 struct type *type1 = ada_find_any_type (name);
5b4ee69b 9123
05e522ef
JB
9124 if (type1 == NULL)
9125 return type;
9126
9127 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
9128 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
9129 types, only for the typedef-to-array types). If that's the case,
9130 strip the typedef layer. */
9131 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
9132 type1 = ada_check_typedef (type1);
9133
9134 return type1;
14f9c5c9
AS
9135 }
9136}
9137
9138/* A value representing the data at VALADDR/ADDRESS as described by
9139 type TYPE0, but with a standard (static-sized) type that correctly
9140 describes it. If VAL0 is not NULL and TYPE0 already is a standard
9141 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 9142 creation of struct values]. */
14f9c5c9 9143
4c4b4cd2
PH
9144static struct value *
9145ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
9146 struct value *val0)
14f9c5c9 9147{
1ed6ede0 9148 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 9149
14f9c5c9
AS
9150 if (type == type0 && val0 != NULL)
9151 return val0;
d2e4a39e 9152 else
4c4b4cd2
PH
9153 return value_from_contents_and_address (type, 0, address);
9154}
9155
9156/* A value representing VAL, but with a standard (static-sized) type
9157 that correctly describes it. Does not necessarily create a new
9158 value. */
9159
0c3acc09 9160struct value *
4c4b4cd2
PH
9161ada_to_fixed_value (struct value *val)
9162{
c48db5ca
JB
9163 val = unwrap_value (val);
9164 val = ada_to_fixed_value_create (value_type (val),
9165 value_address (val),
9166 val);
9167 return val;
14f9c5c9 9168}
d2e4a39e 9169\f
14f9c5c9 9170
14f9c5c9
AS
9171/* Attributes */
9172
4c4b4cd2
PH
9173/* Table mapping attribute numbers to names.
9174 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 9175
d2e4a39e 9176static const char *attribute_names[] = {
14f9c5c9
AS
9177 "<?>",
9178
d2e4a39e 9179 "first",
14f9c5c9
AS
9180 "last",
9181 "length",
9182 "image",
14f9c5c9
AS
9183 "max",
9184 "min",
4c4b4cd2
PH
9185 "modulus",
9186 "pos",
9187 "size",
9188 "tag",
14f9c5c9 9189 "val",
14f9c5c9
AS
9190 0
9191};
9192
d2e4a39e 9193const char *
4c4b4cd2 9194ada_attribute_name (enum exp_opcode n)
14f9c5c9 9195{
4c4b4cd2
PH
9196 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9197 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
9198 else
9199 return attribute_names[0];
9200}
9201
4c4b4cd2 9202/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 9203
4c4b4cd2
PH
9204static LONGEST
9205pos_atr (struct value *arg)
14f9c5c9 9206{
24209737
PH
9207 struct value *val = coerce_ref (arg);
9208 struct type *type = value_type (val);
aa715135 9209 LONGEST result;
14f9c5c9 9210
d2e4a39e 9211 if (!discrete_type_p (type))
323e0a4a 9212 error (_("'POS only defined on discrete types"));
14f9c5c9 9213
aa715135
JG
9214 if (!discrete_position (type, value_as_long (val), &result))
9215 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 9216
aa715135 9217 return result;
4c4b4cd2
PH
9218}
9219
9220static struct value *
3cb382c9 9221value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 9222{
3cb382c9 9223 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
9224}
9225
4c4b4cd2 9226/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 9227
d2e4a39e
AS
9228static struct value *
9229value_val_atr (struct type *type, struct value *arg)
14f9c5c9 9230{
d2e4a39e 9231 if (!discrete_type_p (type))
323e0a4a 9232 error (_("'VAL only defined on discrete types"));
df407dfe 9233 if (!integer_type_p (value_type (arg)))
323e0a4a 9234 error (_("'VAL requires integral argument"));
14f9c5c9
AS
9235
9236 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
9237 {
9238 long pos = value_as_long (arg);
5b4ee69b 9239
14f9c5c9 9240 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 9241 error (_("argument to 'VAL out of range"));
14e75d8e 9242 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
9243 }
9244 else
9245 return value_from_longest (type, value_as_long (arg));
9246}
14f9c5c9 9247\f
d2e4a39e 9248
4c4b4cd2 9249 /* Evaluation */
14f9c5c9 9250
4c4b4cd2
PH
9251/* True if TYPE appears to be an Ada character type.
9252 [At the moment, this is true only for Character and Wide_Character;
9253 It is a heuristic test that could stand improvement]. */
14f9c5c9 9254
d2e4a39e
AS
9255int
9256ada_is_character_type (struct type *type)
14f9c5c9 9257{
7b9f71f2
JB
9258 const char *name;
9259
9260 /* If the type code says it's a character, then assume it really is,
9261 and don't check any further. */
9262 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
9263 return 1;
9264
9265 /* Otherwise, assume it's a character type iff it is a discrete type
9266 with a known character type name. */
9267 name = ada_type_name (type);
9268 return (name != NULL
9269 && (TYPE_CODE (type) == TYPE_CODE_INT
9270 || TYPE_CODE (type) == TYPE_CODE_RANGE)
9271 && (strcmp (name, "character") == 0
9272 || strcmp (name, "wide_character") == 0
5a517ebd 9273 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 9274 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
9275}
9276
4c4b4cd2 9277/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
9278
9279int
ebf56fd3 9280ada_is_string_type (struct type *type)
14f9c5c9 9281{
61ee279c 9282 type = ada_check_typedef (type);
d2e4a39e 9283 if (type != NULL
14f9c5c9 9284 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
9285 && (ada_is_simple_array_type (type)
9286 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
9287 && ada_array_arity (type) == 1)
9288 {
9289 struct type *elttype = ada_array_element_type (type, 1);
9290
9291 return ada_is_character_type (elttype);
9292 }
d2e4a39e 9293 else
14f9c5c9
AS
9294 return 0;
9295}
9296
5bf03f13
JB
9297/* The compiler sometimes provides a parallel XVS type for a given
9298 PAD type. Normally, it is safe to follow the PAD type directly,
9299 but older versions of the compiler have a bug that causes the offset
9300 of its "F" field to be wrong. Following that field in that case
9301 would lead to incorrect results, but this can be worked around
9302 by ignoring the PAD type and using the associated XVS type instead.
9303
9304 Set to True if the debugger should trust the contents of PAD types.
9305 Otherwise, ignore the PAD type if there is a parallel XVS type. */
9306static int trust_pad_over_xvs = 1;
14f9c5c9
AS
9307
9308/* True if TYPE is a struct type introduced by the compiler to force the
9309 alignment of a value. Such types have a single field with a
4c4b4cd2 9310 distinctive name. */
14f9c5c9
AS
9311
9312int
ebf56fd3 9313ada_is_aligner_type (struct type *type)
14f9c5c9 9314{
61ee279c 9315 type = ada_check_typedef (type);
714e53ab 9316
5bf03f13 9317 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
9318 return 0;
9319
14f9c5c9 9320 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
9321 && TYPE_NFIELDS (type) == 1
9322 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
9323}
9324
9325/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 9326 the parallel type. */
14f9c5c9 9327
d2e4a39e
AS
9328struct type *
9329ada_get_base_type (struct type *raw_type)
14f9c5c9 9330{
d2e4a39e
AS
9331 struct type *real_type_namer;
9332 struct type *raw_real_type;
14f9c5c9
AS
9333
9334 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
9335 return raw_type;
9336
284614f0
JB
9337 if (ada_is_aligner_type (raw_type))
9338 /* The encoding specifies that we should always use the aligner type.
9339 So, even if this aligner type has an associated XVS type, we should
9340 simply ignore it.
9341
9342 According to the compiler gurus, an XVS type parallel to an aligner
9343 type may exist because of a stabs limitation. In stabs, aligner
9344 types are empty because the field has a variable-sized type, and
9345 thus cannot actually be used as an aligner type. As a result,
9346 we need the associated parallel XVS type to decode the type.
9347 Since the policy in the compiler is to not change the internal
9348 representation based on the debugging info format, we sometimes
9349 end up having a redundant XVS type parallel to the aligner type. */
9350 return raw_type;
9351
14f9c5c9 9352 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9353 if (real_type_namer == NULL
14f9c5c9
AS
9354 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
9355 || TYPE_NFIELDS (real_type_namer) != 1)
9356 return raw_type;
9357
f80d3ff2
JB
9358 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
9359 {
9360 /* This is an older encoding form where the base type needs to be
9361 looked up by name. We prefer the newer enconding because it is
9362 more efficient. */
9363 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9364 if (raw_real_type == NULL)
9365 return raw_type;
9366 else
9367 return raw_real_type;
9368 }
9369
9370 /* The field in our XVS type is a reference to the base type. */
9371 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 9372}
14f9c5c9 9373
4c4b4cd2 9374/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9375
d2e4a39e
AS
9376struct type *
9377ada_aligned_type (struct type *type)
14f9c5c9
AS
9378{
9379 if (ada_is_aligner_type (type))
9380 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9381 else
9382 return ada_get_base_type (type);
9383}
9384
9385
9386/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9387 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9388
fc1a4b47
AC
9389const gdb_byte *
9390ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9391{
d2e4a39e 9392 if (ada_is_aligner_type (type))
14f9c5c9 9393 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
9394 valaddr +
9395 TYPE_FIELD_BITPOS (type,
9396 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9397 else
9398 return valaddr;
9399}
9400
4c4b4cd2
PH
9401
9402
14f9c5c9 9403/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9404 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9405const char *
9406ada_enum_name (const char *name)
14f9c5c9 9407{
4c4b4cd2
PH
9408 static char *result;
9409 static size_t result_len = 0;
d2e4a39e 9410 char *tmp;
14f9c5c9 9411
4c4b4cd2
PH
9412 /* First, unqualify the enumeration name:
9413 1. Search for the last '.' character. If we find one, then skip
177b42fe 9414 all the preceding characters, the unqualified name starts
76a01679 9415 right after that dot.
4c4b4cd2 9416 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9417 translates dots into "__". Search forward for double underscores,
9418 but stop searching when we hit an overloading suffix, which is
9419 of the form "__" followed by digits. */
4c4b4cd2 9420
c3e5cd34
PH
9421 tmp = strrchr (name, '.');
9422 if (tmp != NULL)
4c4b4cd2
PH
9423 name = tmp + 1;
9424 else
14f9c5c9 9425 {
4c4b4cd2
PH
9426 while ((tmp = strstr (name, "__")) != NULL)
9427 {
9428 if (isdigit (tmp[2]))
9429 break;
9430 else
9431 name = tmp + 2;
9432 }
14f9c5c9
AS
9433 }
9434
9435 if (name[0] == 'Q')
9436 {
14f9c5c9 9437 int v;
5b4ee69b 9438
14f9c5c9 9439 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
9440 {
9441 if (sscanf (name + 2, "%x", &v) != 1)
9442 return name;
9443 }
14f9c5c9 9444 else
4c4b4cd2 9445 return name;
14f9c5c9 9446
4c4b4cd2 9447 GROW_VECT (result, result_len, 16);
14f9c5c9 9448 if (isascii (v) && isprint (v))
88c15c34 9449 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9450 else if (name[1] == 'U')
88c15c34 9451 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9452 else
88c15c34 9453 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9454
9455 return result;
9456 }
d2e4a39e 9457 else
4c4b4cd2 9458 {
c3e5cd34
PH
9459 tmp = strstr (name, "__");
9460 if (tmp == NULL)
9461 tmp = strstr (name, "$");
9462 if (tmp != NULL)
4c4b4cd2
PH
9463 {
9464 GROW_VECT (result, result_len, tmp - name + 1);
9465 strncpy (result, name, tmp - name);
9466 result[tmp - name] = '\0';
9467 return result;
9468 }
9469
9470 return name;
9471 }
14f9c5c9
AS
9472}
9473
14f9c5c9
AS
9474/* Evaluate the subexpression of EXP starting at *POS as for
9475 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9476 expression. */
14f9c5c9 9477
d2e4a39e
AS
9478static struct value *
9479evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9480{
4b27a620 9481 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9482}
9483
9484/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9485 value it wraps. */
14f9c5c9 9486
d2e4a39e
AS
9487static struct value *
9488unwrap_value (struct value *val)
14f9c5c9 9489{
df407dfe 9490 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9491
14f9c5c9
AS
9492 if (ada_is_aligner_type (type))
9493 {
de4d072f 9494 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9495 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9496
14f9c5c9 9497 if (ada_type_name (val_type) == NULL)
4c4b4cd2 9498 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
9499
9500 return unwrap_value (v);
9501 }
d2e4a39e 9502 else
14f9c5c9 9503 {
d2e4a39e 9504 struct type *raw_real_type =
61ee279c 9505 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9506
5bf03f13
JB
9507 /* If there is no parallel XVS or XVE type, then the value is
9508 already unwrapped. Return it without further modification. */
9509 if ((type == raw_real_type)
9510 && ada_find_parallel_type (type, "___XVE") == NULL)
9511 return val;
14f9c5c9 9512
d2e4a39e 9513 return
4c4b4cd2
PH
9514 coerce_unspec_val_to_type
9515 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9516 value_address (val),
1ed6ede0 9517 NULL, 1));
14f9c5c9
AS
9518 }
9519}
d2e4a39e
AS
9520
9521static struct value *
9522cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
9523{
9524 LONGEST val;
9525
df407dfe 9526 if (type == value_type (arg))
14f9c5c9 9527 return arg;
df407dfe 9528 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 9529 val = ada_float_to_fixed (type,
df407dfe 9530 ada_fixed_to_float (value_type (arg),
4c4b4cd2 9531 value_as_long (arg)));
d2e4a39e 9532 else
14f9c5c9 9533 {
a53b7a21 9534 DOUBLEST argd = value_as_double (arg);
5b4ee69b 9535
14f9c5c9
AS
9536 val = ada_float_to_fixed (type, argd);
9537 }
9538
9539 return value_from_longest (type, val);
9540}
9541
d2e4a39e 9542static struct value *
a53b7a21 9543cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9544{
df407dfe 9545 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 9546 value_as_long (arg));
5b4ee69b 9547
a53b7a21 9548 return value_from_double (type, val);
14f9c5c9
AS
9549}
9550
d99dcf51
JB
9551/* Given two array types T1 and T2, return nonzero iff both arrays
9552 contain the same number of elements. */
9553
9554static int
9555ada_same_array_size_p (struct type *t1, struct type *t2)
9556{
9557 LONGEST lo1, hi1, lo2, hi2;
9558
9559 /* Get the array bounds in order to verify that the size of
9560 the two arrays match. */
9561 if (!get_array_bounds (t1, &lo1, &hi1)
9562 || !get_array_bounds (t2, &lo2, &hi2))
9563 error (_("unable to determine array bounds"));
9564
9565 /* To make things easier for size comparison, normalize a bit
9566 the case of empty arrays by making sure that the difference
9567 between upper bound and lower bound is always -1. */
9568 if (lo1 > hi1)
9569 hi1 = lo1 - 1;
9570 if (lo2 > hi2)
9571 hi2 = lo2 - 1;
9572
9573 return (hi1 - lo1 == hi2 - lo2);
9574}
9575
9576/* Assuming that VAL is an array of integrals, and TYPE represents
9577 an array with the same number of elements, but with wider integral
9578 elements, return an array "casted" to TYPE. In practice, this
9579 means that the returned array is built by casting each element
9580 of the original array into TYPE's (wider) element type. */
9581
9582static struct value *
9583ada_promote_array_of_integrals (struct type *type, struct value *val)
9584{
9585 struct type *elt_type = TYPE_TARGET_TYPE (type);
9586 LONGEST lo, hi;
9587 struct value *res;
9588 LONGEST i;
9589
9590 /* Verify that both val and type are arrays of scalars, and
9591 that the size of val's elements is smaller than the size
9592 of type's element. */
9593 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9594 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9595 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9596 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9597 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9598 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9599
9600 if (!get_array_bounds (type, &lo, &hi))
9601 error (_("unable to determine array bounds"));
9602
9603 res = allocate_value (type);
9604
9605 /* Promote each array element. */
9606 for (i = 0; i < hi - lo + 1; i++)
9607 {
9608 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9609
9610 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9611 value_contents_all (elt), TYPE_LENGTH (elt_type));
9612 }
9613
9614 return res;
9615}
9616
4c4b4cd2
PH
9617/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9618 return the converted value. */
9619
d2e4a39e
AS
9620static struct value *
9621coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9622{
df407dfe 9623 struct type *type2 = value_type (val);
5b4ee69b 9624
14f9c5c9
AS
9625 if (type == type2)
9626 return val;
9627
61ee279c
PH
9628 type2 = ada_check_typedef (type2);
9629 type = ada_check_typedef (type);
14f9c5c9 9630
d2e4a39e
AS
9631 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9632 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
9633 {
9634 val = ada_value_ind (val);
df407dfe 9635 type2 = value_type (val);
14f9c5c9
AS
9636 }
9637
d2e4a39e 9638 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
9639 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9640 {
d99dcf51
JB
9641 if (!ada_same_array_size_p (type, type2))
9642 error (_("cannot assign arrays of different length"));
9643
9644 if (is_integral_type (TYPE_TARGET_TYPE (type))
9645 && is_integral_type (TYPE_TARGET_TYPE (type2))
9646 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9647 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9648 {
9649 /* Allow implicit promotion of the array elements to
9650 a wider type. */
9651 return ada_promote_array_of_integrals (type, val);
9652 }
9653
9654 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9655 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9656 error (_("Incompatible types in assignment"));
04624583 9657 deprecated_set_value_type (val, type);
14f9c5c9 9658 }
d2e4a39e 9659 return val;
14f9c5c9
AS
9660}
9661
4c4b4cd2
PH
9662static struct value *
9663ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9664{
9665 struct value *val;
9666 struct type *type1, *type2;
9667 LONGEST v, v1, v2;
9668
994b9211
AC
9669 arg1 = coerce_ref (arg1);
9670 arg2 = coerce_ref (arg2);
18af8284
JB
9671 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9672 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9673
76a01679
JB
9674 if (TYPE_CODE (type1) != TYPE_CODE_INT
9675 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
9676 return value_binop (arg1, arg2, op);
9677
76a01679 9678 switch (op)
4c4b4cd2
PH
9679 {
9680 case BINOP_MOD:
9681 case BINOP_DIV:
9682 case BINOP_REM:
9683 break;
9684 default:
9685 return value_binop (arg1, arg2, op);
9686 }
9687
9688 v2 = value_as_long (arg2);
9689 if (v2 == 0)
323e0a4a 9690 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9691
9692 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9693 return value_binop (arg1, arg2, op);
9694
9695 v1 = value_as_long (arg1);
9696 switch (op)
9697 {
9698 case BINOP_DIV:
9699 v = v1 / v2;
76a01679
JB
9700 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9701 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9702 break;
9703 case BINOP_REM:
9704 v = v1 % v2;
76a01679
JB
9705 if (v * v1 < 0)
9706 v -= v2;
4c4b4cd2
PH
9707 break;
9708 default:
9709 /* Should not reach this point. */
9710 v = 0;
9711 }
9712
9713 val = allocate_value (type1);
990a07ab 9714 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9715 TYPE_LENGTH (value_type (val)),
9716 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9717 return val;
9718}
9719
9720static int
9721ada_value_equal (struct value *arg1, struct value *arg2)
9722{
df407dfe
AC
9723 if (ada_is_direct_array_type (value_type (arg1))
9724 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9725 {
f58b38bf
JB
9726 /* Automatically dereference any array reference before
9727 we attempt to perform the comparison. */
9728 arg1 = ada_coerce_ref (arg1);
9729 arg2 = ada_coerce_ref (arg2);
9730
4c4b4cd2
PH
9731 arg1 = ada_coerce_to_simple_array (arg1);
9732 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
9733 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9734 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 9735 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9736 /* FIXME: The following works only for types whose
76a01679
JB
9737 representations use all bits (no padding or undefined bits)
9738 and do not have user-defined equality. */
9739 return
df407dfe 9740 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 9741 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 9742 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
9743 }
9744 return value_equal (arg1, arg2);
9745}
9746
52ce6436
PH
9747/* Total number of component associations in the aggregate starting at
9748 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9749 OP_AGGREGATE. */
52ce6436
PH
9750
9751static int
9752num_component_specs (struct expression *exp, int pc)
9753{
9754 int n, m, i;
5b4ee69b 9755
52ce6436
PH
9756 m = exp->elts[pc + 1].longconst;
9757 pc += 3;
9758 n = 0;
9759 for (i = 0; i < m; i += 1)
9760 {
9761 switch (exp->elts[pc].opcode)
9762 {
9763 default:
9764 n += 1;
9765 break;
9766 case OP_CHOICES:
9767 n += exp->elts[pc + 1].longconst;
9768 break;
9769 }
9770 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9771 }
9772 return n;
9773}
9774
9775/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9776 component of LHS (a simple array or a record), updating *POS past
9777 the expression, assuming that LHS is contained in CONTAINER. Does
9778 not modify the inferior's memory, nor does it modify LHS (unless
9779 LHS == CONTAINER). */
9780
9781static void
9782assign_component (struct value *container, struct value *lhs, LONGEST index,
9783 struct expression *exp, int *pos)
9784{
9785 struct value *mark = value_mark ();
9786 struct value *elt;
5b4ee69b 9787
52ce6436
PH
9788 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9789 {
22601c15
UW
9790 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9791 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9792
52ce6436
PH
9793 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9794 }
9795 else
9796 {
9797 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9798 elt = ada_to_fixed_value (elt);
52ce6436
PH
9799 }
9800
9801 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9802 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9803 else
9804 value_assign_to_component (container, elt,
9805 ada_evaluate_subexp (NULL, exp, pos,
9806 EVAL_NORMAL));
9807
9808 value_free_to_mark (mark);
9809}
9810
9811/* Assuming that LHS represents an lvalue having a record or array
9812 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9813 of that aggregate's value to LHS, advancing *POS past the
9814 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9815 lvalue containing LHS (possibly LHS itself). Does not modify
9816 the inferior's memory, nor does it modify the contents of
0963b4bd 9817 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9818
9819static struct value *
9820assign_aggregate (struct value *container,
9821 struct value *lhs, struct expression *exp,
9822 int *pos, enum noside noside)
9823{
9824 struct type *lhs_type;
9825 int n = exp->elts[*pos+1].longconst;
9826 LONGEST low_index, high_index;
9827 int num_specs;
9828 LONGEST *indices;
9829 int max_indices, num_indices;
52ce6436 9830 int i;
52ce6436
PH
9831
9832 *pos += 3;
9833 if (noside != EVAL_NORMAL)
9834 {
52ce6436
PH
9835 for (i = 0; i < n; i += 1)
9836 ada_evaluate_subexp (NULL, exp, pos, noside);
9837 return container;
9838 }
9839
9840 container = ada_coerce_ref (container);
9841 if (ada_is_direct_array_type (value_type (container)))
9842 container = ada_coerce_to_simple_array (container);
9843 lhs = ada_coerce_ref (lhs);
9844 if (!deprecated_value_modifiable (lhs))
9845 error (_("Left operand of assignment is not a modifiable lvalue."));
9846
9847 lhs_type = value_type (lhs);
9848 if (ada_is_direct_array_type (lhs_type))
9849 {
9850 lhs = ada_coerce_to_simple_array (lhs);
9851 lhs_type = value_type (lhs);
9852 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9853 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
9854 }
9855 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9856 {
9857 low_index = 0;
9858 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9859 }
9860 else
9861 error (_("Left-hand side must be array or record."));
9862
9863 num_specs = num_component_specs (exp, *pos - 3);
9864 max_indices = 4 * num_specs + 4;
8d749320 9865 indices = XALLOCAVEC (LONGEST, max_indices);
52ce6436
PH
9866 indices[0] = indices[1] = low_index - 1;
9867 indices[2] = indices[3] = high_index + 1;
9868 num_indices = 4;
9869
9870 for (i = 0; i < n; i += 1)
9871 {
9872 switch (exp->elts[*pos].opcode)
9873 {
1fbf5ada
JB
9874 case OP_CHOICES:
9875 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9876 &num_indices, max_indices,
9877 low_index, high_index);
9878 break;
9879 case OP_POSITIONAL:
9880 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
9881 &num_indices, max_indices,
9882 low_index, high_index);
1fbf5ada
JB
9883 break;
9884 case OP_OTHERS:
9885 if (i != n-1)
9886 error (_("Misplaced 'others' clause"));
9887 aggregate_assign_others (container, lhs, exp, pos, indices,
9888 num_indices, low_index, high_index);
9889 break;
9890 default:
9891 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9892 }
9893 }
9894
9895 return container;
9896}
9897
9898/* Assign into the component of LHS indexed by the OP_POSITIONAL
9899 construct at *POS, updating *POS past the construct, given that
9900 the positions are relative to lower bound LOW, where HIGH is the
9901 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9902 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 9903 assign_aggregate. */
52ce6436
PH
9904static void
9905aggregate_assign_positional (struct value *container,
9906 struct value *lhs, struct expression *exp,
9907 int *pos, LONGEST *indices, int *num_indices,
9908 int max_indices, LONGEST low, LONGEST high)
9909{
9910 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9911
9912 if (ind - 1 == high)
e1d5a0d2 9913 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9914 if (ind <= high)
9915 {
9916 add_component_interval (ind, ind, indices, num_indices, max_indices);
9917 *pos += 3;
9918 assign_component (container, lhs, ind, exp, pos);
9919 }
9920 else
9921 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9922}
9923
9924/* Assign into the components of LHS indexed by the OP_CHOICES
9925 construct at *POS, updating *POS past the construct, given that
9926 the allowable indices are LOW..HIGH. Record the indices assigned
9927 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 9928 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9929static void
9930aggregate_assign_from_choices (struct value *container,
9931 struct value *lhs, struct expression *exp,
9932 int *pos, LONGEST *indices, int *num_indices,
9933 int max_indices, LONGEST low, LONGEST high)
9934{
9935 int j;
9936 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9937 int choice_pos, expr_pc;
9938 int is_array = ada_is_direct_array_type (value_type (lhs));
9939
9940 choice_pos = *pos += 3;
9941
9942 for (j = 0; j < n_choices; j += 1)
9943 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9944 expr_pc = *pos;
9945 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9946
9947 for (j = 0; j < n_choices; j += 1)
9948 {
9949 LONGEST lower, upper;
9950 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9951
52ce6436
PH
9952 if (op == OP_DISCRETE_RANGE)
9953 {
9954 choice_pos += 1;
9955 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9956 EVAL_NORMAL));
9957 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9958 EVAL_NORMAL));
9959 }
9960 else if (is_array)
9961 {
9962 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9963 EVAL_NORMAL));
9964 upper = lower;
9965 }
9966 else
9967 {
9968 int ind;
0d5cff50 9969 const char *name;
5b4ee69b 9970
52ce6436
PH
9971 switch (op)
9972 {
9973 case OP_NAME:
9974 name = &exp->elts[choice_pos + 2].string;
9975 break;
9976 case OP_VAR_VALUE:
9977 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9978 break;
9979 default:
9980 error (_("Invalid record component association."));
9981 }
9982 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9983 ind = 0;
9984 if (! find_struct_field (name, value_type (lhs), 0,
9985 NULL, NULL, NULL, NULL, &ind))
9986 error (_("Unknown component name: %s."), name);
9987 lower = upper = ind;
9988 }
9989
9990 if (lower <= upper && (lower < low || upper > high))
9991 error (_("Index in component association out of bounds."));
9992
9993 add_component_interval (lower, upper, indices, num_indices,
9994 max_indices);
9995 while (lower <= upper)
9996 {
9997 int pos1;
5b4ee69b 9998
52ce6436
PH
9999 pos1 = expr_pc;
10000 assign_component (container, lhs, lower, exp, &pos1);
10001 lower += 1;
10002 }
10003 }
10004}
10005
10006/* Assign the value of the expression in the OP_OTHERS construct in
10007 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
10008 have not been previously assigned. The index intervals already assigned
10009 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 10010 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
10011static void
10012aggregate_assign_others (struct value *container,
10013 struct value *lhs, struct expression *exp,
10014 int *pos, LONGEST *indices, int num_indices,
10015 LONGEST low, LONGEST high)
10016{
10017 int i;
5ce64950 10018 int expr_pc = *pos + 1;
52ce6436
PH
10019
10020 for (i = 0; i < num_indices - 2; i += 2)
10021 {
10022 LONGEST ind;
5b4ee69b 10023
52ce6436
PH
10024 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
10025 {
5ce64950 10026 int localpos;
5b4ee69b 10027
5ce64950
MS
10028 localpos = expr_pc;
10029 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
10030 }
10031 }
10032 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
10033}
10034
10035/* Add the interval [LOW .. HIGH] to the sorted set of intervals
10036 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
10037 modifying *SIZE as needed. It is an error if *SIZE exceeds
10038 MAX_SIZE. The resulting intervals do not overlap. */
10039static void
10040add_component_interval (LONGEST low, LONGEST high,
10041 LONGEST* indices, int *size, int max_size)
10042{
10043 int i, j;
5b4ee69b 10044
52ce6436
PH
10045 for (i = 0; i < *size; i += 2) {
10046 if (high >= indices[i] && low <= indices[i + 1])
10047 {
10048 int kh;
5b4ee69b 10049
52ce6436
PH
10050 for (kh = i + 2; kh < *size; kh += 2)
10051 if (high < indices[kh])
10052 break;
10053 if (low < indices[i])
10054 indices[i] = low;
10055 indices[i + 1] = indices[kh - 1];
10056 if (high > indices[i + 1])
10057 indices[i + 1] = high;
10058 memcpy (indices + i + 2, indices + kh, *size - kh);
10059 *size -= kh - i - 2;
10060 return;
10061 }
10062 else if (high < indices[i])
10063 break;
10064 }
10065
10066 if (*size == max_size)
10067 error (_("Internal error: miscounted aggregate components."));
10068 *size += 2;
10069 for (j = *size-1; j >= i+2; j -= 1)
10070 indices[j] = indices[j - 2];
10071 indices[i] = low;
10072 indices[i + 1] = high;
10073}
10074
6e48bd2c
JB
10075/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
10076 is different. */
10077
10078static struct value *
10079ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
10080{
10081 if (type == ada_check_typedef (value_type (arg2)))
10082 return arg2;
10083
10084 if (ada_is_fixed_point_type (type))
10085 return (cast_to_fixed (type, arg2));
10086
10087 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10088 return cast_from_fixed (type, arg2);
6e48bd2c
JB
10089
10090 return value_cast (type, arg2);
10091}
10092
284614f0
JB
10093/* Evaluating Ada expressions, and printing their result.
10094 ------------------------------------------------------
10095
21649b50
JB
10096 1. Introduction:
10097 ----------------
10098
284614f0
JB
10099 We usually evaluate an Ada expression in order to print its value.
10100 We also evaluate an expression in order to print its type, which
10101 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
10102 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
10103 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
10104 the evaluation compared to the EVAL_NORMAL, but is otherwise very
10105 similar.
10106
10107 Evaluating expressions is a little more complicated for Ada entities
10108 than it is for entities in languages such as C. The main reason for
10109 this is that Ada provides types whose definition might be dynamic.
10110 One example of such types is variant records. Or another example
10111 would be an array whose bounds can only be known at run time.
10112
10113 The following description is a general guide as to what should be
10114 done (and what should NOT be done) in order to evaluate an expression
10115 involving such types, and when. This does not cover how the semantic
10116 information is encoded by GNAT as this is covered separatly. For the
10117 document used as the reference for the GNAT encoding, see exp_dbug.ads
10118 in the GNAT sources.
10119
10120 Ideally, we should embed each part of this description next to its
10121 associated code. Unfortunately, the amount of code is so vast right
10122 now that it's hard to see whether the code handling a particular
10123 situation might be duplicated or not. One day, when the code is
10124 cleaned up, this guide might become redundant with the comments
10125 inserted in the code, and we might want to remove it.
10126
21649b50
JB
10127 2. ``Fixing'' an Entity, the Simple Case:
10128 -----------------------------------------
10129
284614f0
JB
10130 When evaluating Ada expressions, the tricky issue is that they may
10131 reference entities whose type contents and size are not statically
10132 known. Consider for instance a variant record:
10133
10134 type Rec (Empty : Boolean := True) is record
10135 case Empty is
10136 when True => null;
10137 when False => Value : Integer;
10138 end case;
10139 end record;
10140 Yes : Rec := (Empty => False, Value => 1);
10141 No : Rec := (empty => True);
10142
10143 The size and contents of that record depends on the value of the
10144 descriminant (Rec.Empty). At this point, neither the debugging
10145 information nor the associated type structure in GDB are able to
10146 express such dynamic types. So what the debugger does is to create
10147 "fixed" versions of the type that applies to the specific object.
10148 We also informally refer to this opperation as "fixing" an object,
10149 which means creating its associated fixed type.
10150
10151 Example: when printing the value of variable "Yes" above, its fixed
10152 type would look like this:
10153
10154 type Rec is record
10155 Empty : Boolean;
10156 Value : Integer;
10157 end record;
10158
10159 On the other hand, if we printed the value of "No", its fixed type
10160 would become:
10161
10162 type Rec is record
10163 Empty : Boolean;
10164 end record;
10165
10166 Things become a little more complicated when trying to fix an entity
10167 with a dynamic type that directly contains another dynamic type,
10168 such as an array of variant records, for instance. There are
10169 two possible cases: Arrays, and records.
10170
21649b50
JB
10171 3. ``Fixing'' Arrays:
10172 ---------------------
10173
10174 The type structure in GDB describes an array in terms of its bounds,
10175 and the type of its elements. By design, all elements in the array
10176 have the same type and we cannot represent an array of variant elements
10177 using the current type structure in GDB. When fixing an array,
10178 we cannot fix the array element, as we would potentially need one
10179 fixed type per element of the array. As a result, the best we can do
10180 when fixing an array is to produce an array whose bounds and size
10181 are correct (allowing us to read it from memory), but without having
10182 touched its element type. Fixing each element will be done later,
10183 when (if) necessary.
10184
10185 Arrays are a little simpler to handle than records, because the same
10186 amount of memory is allocated for each element of the array, even if
1b536f04 10187 the amount of space actually used by each element differs from element
21649b50 10188 to element. Consider for instance the following array of type Rec:
284614f0
JB
10189
10190 type Rec_Array is array (1 .. 2) of Rec;
10191
1b536f04
JB
10192 The actual amount of memory occupied by each element might be different
10193 from element to element, depending on the value of their discriminant.
21649b50 10194 But the amount of space reserved for each element in the array remains
1b536f04 10195 fixed regardless. So we simply need to compute that size using
21649b50
JB
10196 the debugging information available, from which we can then determine
10197 the array size (we multiply the number of elements of the array by
10198 the size of each element).
10199
10200 The simplest case is when we have an array of a constrained element
10201 type. For instance, consider the following type declarations:
10202
10203 type Bounded_String (Max_Size : Integer) is
10204 Length : Integer;
10205 Buffer : String (1 .. Max_Size);
10206 end record;
10207 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10208
10209 In this case, the compiler describes the array as an array of
10210 variable-size elements (identified by its XVS suffix) for which
10211 the size can be read in the parallel XVZ variable.
10212
10213 In the case of an array of an unconstrained element type, the compiler
10214 wraps the array element inside a private PAD type. This type should not
10215 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
10216 that we also use the adjective "aligner" in our code to designate
10217 these wrapper types.
10218
1b536f04 10219 In some cases, the size allocated for each element is statically
21649b50
JB
10220 known. In that case, the PAD type already has the correct size,
10221 and the array element should remain unfixed.
10222
10223 But there are cases when this size is not statically known.
10224 For instance, assuming that "Five" is an integer variable:
284614f0
JB
10225
10226 type Dynamic is array (1 .. Five) of Integer;
10227 type Wrapper (Has_Length : Boolean := False) is record
10228 Data : Dynamic;
10229 case Has_Length is
10230 when True => Length : Integer;
10231 when False => null;
10232 end case;
10233 end record;
10234 type Wrapper_Array is array (1 .. 2) of Wrapper;
10235
10236 Hello : Wrapper_Array := (others => (Has_Length => True,
10237 Data => (others => 17),
10238 Length => 1));
10239
10240
10241 The debugging info would describe variable Hello as being an
10242 array of a PAD type. The size of that PAD type is not statically
10243 known, but can be determined using a parallel XVZ variable.
10244 In that case, a copy of the PAD type with the correct size should
10245 be used for the fixed array.
10246
21649b50
JB
10247 3. ``Fixing'' record type objects:
10248 ----------------------------------
10249
10250 Things are slightly different from arrays in the case of dynamic
284614f0
JB
10251 record types. In this case, in order to compute the associated
10252 fixed type, we need to determine the size and offset of each of
10253 its components. This, in turn, requires us to compute the fixed
10254 type of each of these components.
10255
10256 Consider for instance the example:
10257
10258 type Bounded_String (Max_Size : Natural) is record
10259 Str : String (1 .. Max_Size);
10260 Length : Natural;
10261 end record;
10262 My_String : Bounded_String (Max_Size => 10);
10263
10264 In that case, the position of field "Length" depends on the size
10265 of field Str, which itself depends on the value of the Max_Size
21649b50 10266 discriminant. In order to fix the type of variable My_String,
284614f0
JB
10267 we need to fix the type of field Str. Therefore, fixing a variant
10268 record requires us to fix each of its components.
10269
10270 However, if a component does not have a dynamic size, the component
10271 should not be fixed. In particular, fields that use a PAD type
10272 should not fixed. Here is an example where this might happen
10273 (assuming type Rec above):
10274
10275 type Container (Big : Boolean) is record
10276 First : Rec;
10277 After : Integer;
10278 case Big is
10279 when True => Another : Integer;
10280 when False => null;
10281 end case;
10282 end record;
10283 My_Container : Container := (Big => False,
10284 First => (Empty => True),
10285 After => 42);
10286
10287 In that example, the compiler creates a PAD type for component First,
10288 whose size is constant, and then positions the component After just
10289 right after it. The offset of component After is therefore constant
10290 in this case.
10291
10292 The debugger computes the position of each field based on an algorithm
10293 that uses, among other things, the actual position and size of the field
21649b50
JB
10294 preceding it. Let's now imagine that the user is trying to print
10295 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
10296 end up computing the offset of field After based on the size of the
10297 fixed version of field First. And since in our example First has
10298 only one actual field, the size of the fixed type is actually smaller
10299 than the amount of space allocated to that field, and thus we would
10300 compute the wrong offset of field After.
10301
21649b50
JB
10302 To make things more complicated, we need to watch out for dynamic
10303 components of variant records (identified by the ___XVL suffix in
10304 the component name). Even if the target type is a PAD type, the size
10305 of that type might not be statically known. So the PAD type needs
10306 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10307 we might end up with the wrong size for our component. This can be
10308 observed with the following type declarations:
284614f0
JB
10309
10310 type Octal is new Integer range 0 .. 7;
10311 type Octal_Array is array (Positive range <>) of Octal;
10312 pragma Pack (Octal_Array);
10313
10314 type Octal_Buffer (Size : Positive) is record
10315 Buffer : Octal_Array (1 .. Size);
10316 Length : Integer;
10317 end record;
10318
10319 In that case, Buffer is a PAD type whose size is unset and needs
10320 to be computed by fixing the unwrapped type.
10321
21649b50
JB
10322 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10323 ----------------------------------------------------------
10324
10325 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
10326 thus far, be actually fixed?
10327
10328 The answer is: Only when referencing that element. For instance
10329 when selecting one component of a record, this specific component
10330 should be fixed at that point in time. Or when printing the value
10331 of a record, each component should be fixed before its value gets
10332 printed. Similarly for arrays, the element of the array should be
10333 fixed when printing each element of the array, or when extracting
10334 one element out of that array. On the other hand, fixing should
10335 not be performed on the elements when taking a slice of an array!
10336
10337 Note that one of the side-effects of miscomputing the offset and
10338 size of each field is that we end up also miscomputing the size
10339 of the containing type. This can have adverse results when computing
10340 the value of an entity. GDB fetches the value of an entity based
10341 on the size of its type, and thus a wrong size causes GDB to fetch
10342 the wrong amount of memory. In the case where the computed size is
10343 too small, GDB fetches too little data to print the value of our
10344 entiry. Results in this case as unpredicatble, as we usually read
10345 past the buffer containing the data =:-o. */
10346
10347/* Implement the evaluate_exp routine in the exp_descriptor structure
10348 for the Ada language. */
10349
52ce6436 10350static struct value *
ebf56fd3 10351ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 10352 int *pos, enum noside noside)
14f9c5c9
AS
10353{
10354 enum exp_opcode op;
b5385fc0 10355 int tem;
14f9c5c9 10356 int pc;
5ec18f2b 10357 int preeval_pos;
14f9c5c9
AS
10358 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10359 struct type *type;
52ce6436 10360 int nargs, oplen;
d2e4a39e 10361 struct value **argvec;
14f9c5c9 10362
d2e4a39e
AS
10363 pc = *pos;
10364 *pos += 1;
14f9c5c9
AS
10365 op = exp->elts[pc].opcode;
10366
d2e4a39e 10367 switch (op)
14f9c5c9
AS
10368 {
10369 default:
10370 *pos -= 1;
6e48bd2c 10371 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10372
10373 if (noside == EVAL_NORMAL)
10374 arg1 = unwrap_value (arg1);
6e48bd2c
JB
10375
10376 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
10377 then we need to perform the conversion manually, because
10378 evaluate_subexp_standard doesn't do it. This conversion is
10379 necessary in Ada because the different kinds of float/fixed
10380 types in Ada have different representations.
10381
10382 Similarly, we need to perform the conversion from OP_LONG
10383 ourselves. */
10384 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
10385 arg1 = ada_value_cast (expect_type, arg1, noside);
10386
10387 return arg1;
4c4b4cd2
PH
10388
10389 case OP_STRING:
10390 {
76a01679 10391 struct value *result;
5b4ee69b 10392
76a01679
JB
10393 *pos -= 1;
10394 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10395 /* The result type will have code OP_STRING, bashed there from
10396 OP_ARRAY. Bash it back. */
df407dfe
AC
10397 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
10398 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 10399 return result;
4c4b4cd2 10400 }
14f9c5c9
AS
10401
10402 case UNOP_CAST:
10403 (*pos) += 2;
10404 type = exp->elts[pc + 1].type;
10405 arg1 = evaluate_subexp (type, exp, pos, noside);
10406 if (noside == EVAL_SKIP)
4c4b4cd2 10407 goto nosideret;
6e48bd2c 10408 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
10409 return arg1;
10410
4c4b4cd2
PH
10411 case UNOP_QUAL:
10412 (*pos) += 2;
10413 type = exp->elts[pc + 1].type;
10414 return ada_evaluate_subexp (type, exp, pos, noside);
10415
14f9c5c9
AS
10416 case BINOP_ASSIGN:
10417 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
10418 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10419 {
10420 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10421 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10422 return arg1;
10423 return ada_value_assign (arg1, arg1);
10424 }
003f3813
JB
10425 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10426 except if the lhs of our assignment is a convenience variable.
10427 In the case of assigning to a convenience variable, the lhs
10428 should be exactly the result of the evaluation of the rhs. */
10429 type = value_type (arg1);
10430 if (VALUE_LVAL (arg1) == lval_internalvar)
10431 type = NULL;
10432 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10433 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10434 return arg1;
df407dfe
AC
10435 if (ada_is_fixed_point_type (value_type (arg1)))
10436 arg2 = cast_to_fixed (value_type (arg1), arg2);
10437 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 10438 error
323e0a4a 10439 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 10440 else
df407dfe 10441 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10442 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10443
10444 case BINOP_ADD:
10445 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10446 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10447 if (noside == EVAL_SKIP)
4c4b4cd2 10448 goto nosideret;
2ac8a782
JB
10449 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10450 return (value_from_longest
10451 (value_type (arg1),
10452 value_as_long (arg1) + value_as_long (arg2)));
c40cc657
JB
10453 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10454 return (value_from_longest
10455 (value_type (arg2),
10456 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
10457 if ((ada_is_fixed_point_type (value_type (arg1))
10458 || ada_is_fixed_point_type (value_type (arg2)))
10459 && value_type (arg1) != value_type (arg2))
323e0a4a 10460 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10461 /* Do the addition, and cast the result to the type of the first
10462 argument. We cannot cast the result to a reference type, so if
10463 ARG1 is a reference type, find its underlying type. */
10464 type = value_type (arg1);
10465 while (TYPE_CODE (type) == TYPE_CODE_REF)
10466 type = TYPE_TARGET_TYPE (type);
f44316fa 10467 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10468 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10469
10470 case BINOP_SUB:
10471 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10472 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10473 if (noside == EVAL_SKIP)
4c4b4cd2 10474 goto nosideret;
2ac8a782
JB
10475 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10476 return (value_from_longest
10477 (value_type (arg1),
10478 value_as_long (arg1) - value_as_long (arg2)));
c40cc657
JB
10479 if (TYPE_CODE (value_type (arg2)) == TYPE_CODE_PTR)
10480 return (value_from_longest
10481 (value_type (arg2),
10482 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
10483 if ((ada_is_fixed_point_type (value_type (arg1))
10484 || ada_is_fixed_point_type (value_type (arg2)))
10485 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10486 error (_("Operands of fixed-point subtraction "
10487 "must have the same type"));
b7789565
JB
10488 /* Do the substraction, and cast the result to the type of the first
10489 argument. We cannot cast the result to a reference type, so if
10490 ARG1 is a reference type, find its underlying type. */
10491 type = value_type (arg1);
10492 while (TYPE_CODE (type) == TYPE_CODE_REF)
10493 type = TYPE_TARGET_TYPE (type);
f44316fa 10494 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10495 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10496
10497 case BINOP_MUL:
10498 case BINOP_DIV:
e1578042
JB
10499 case BINOP_REM:
10500 case BINOP_MOD:
14f9c5c9
AS
10501 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10502 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10503 if (noside == EVAL_SKIP)
4c4b4cd2 10504 goto nosideret;
e1578042 10505 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10506 {
10507 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10508 return value_zero (value_type (arg1), not_lval);
10509 }
14f9c5c9 10510 else
4c4b4cd2 10511 {
a53b7a21 10512 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 10513 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 10514 arg1 = cast_from_fixed (type, arg1);
df407dfe 10515 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10516 arg2 = cast_from_fixed (type, arg2);
f44316fa 10517 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10518 return ada_value_binop (arg1, arg2, op);
10519 }
10520
4c4b4cd2
PH
10521 case BINOP_EQUAL:
10522 case BINOP_NOTEQUAL:
14f9c5c9 10523 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10524 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10525 if (noside == EVAL_SKIP)
76a01679 10526 goto nosideret;
4c4b4cd2 10527 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10528 tem = 0;
4c4b4cd2 10529 else
f44316fa
UW
10530 {
10531 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10532 tem = ada_value_equal (arg1, arg2);
10533 }
4c4b4cd2 10534 if (op == BINOP_NOTEQUAL)
76a01679 10535 tem = !tem;
fbb06eb1
UW
10536 type = language_bool_type (exp->language_defn, exp->gdbarch);
10537 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10538
10539 case UNOP_NEG:
10540 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10541 if (noside == EVAL_SKIP)
10542 goto nosideret;
df407dfe
AC
10543 else if (ada_is_fixed_point_type (value_type (arg1)))
10544 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10545 else
f44316fa
UW
10546 {
10547 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10548 return value_neg (arg1);
10549 }
4c4b4cd2 10550
2330c6c6
JB
10551 case BINOP_LOGICAL_AND:
10552 case BINOP_LOGICAL_OR:
10553 case UNOP_LOGICAL_NOT:
000d5124
JB
10554 {
10555 struct value *val;
10556
10557 *pos -= 1;
10558 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10559 type = language_bool_type (exp->language_defn, exp->gdbarch);
10560 return value_cast (type, val);
000d5124 10561 }
2330c6c6
JB
10562
10563 case BINOP_BITWISE_AND:
10564 case BINOP_BITWISE_IOR:
10565 case BINOP_BITWISE_XOR:
000d5124
JB
10566 {
10567 struct value *val;
10568
10569 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10570 *pos = pc;
10571 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10572
10573 return value_cast (value_type (arg1), val);
10574 }
2330c6c6 10575
14f9c5c9
AS
10576 case OP_VAR_VALUE:
10577 *pos -= 1;
6799def4 10578
14f9c5c9 10579 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10580 {
10581 *pos += 4;
10582 goto nosideret;
10583 }
da5c522f
JB
10584
10585 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10586 /* Only encountered when an unresolved symbol occurs in a
10587 context other than a function call, in which case, it is
52ce6436 10588 invalid. */
323e0a4a 10589 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 10590 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
da5c522f
JB
10591
10592 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10593 {
0c1f74cf 10594 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10595 /* Check to see if this is a tagged type. We also need to handle
10596 the case where the type is a reference to a tagged type, but
10597 we have to be careful to exclude pointers to tagged types.
10598 The latter should be shown as usual (as a pointer), whereas
10599 a reference should mostly be transparent to the user. */
10600 if (ada_is_tagged_type (type, 0)
023db19c 10601 || (TYPE_CODE (type) == TYPE_CODE_REF
31dbc1c5 10602 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10603 {
10604 /* Tagged types are a little special in the fact that the real
10605 type is dynamic and can only be determined by inspecting the
10606 object's tag. This means that we need to get the object's
10607 value first (EVAL_NORMAL) and then extract the actual object
10608 type from its tag.
10609
10610 Note that we cannot skip the final step where we extract
10611 the object type from its tag, because the EVAL_NORMAL phase
10612 results in dynamic components being resolved into fixed ones.
10613 This can cause problems when trying to print the type
10614 description of tagged types whose parent has a dynamic size:
10615 We use the type name of the "_parent" component in order
10616 to print the name of the ancestor type in the type description.
10617 If that component had a dynamic size, the resolution into
10618 a fixed type would result in the loss of that type name,
10619 thus preventing us from printing the name of the ancestor
10620 type in the type description. */
10621 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10622
10623 if (TYPE_CODE (type) != TYPE_CODE_REF)
10624 {
10625 struct type *actual_type;
10626
10627 actual_type = type_from_tag (ada_value_tag (arg1));
10628 if (actual_type == NULL)
10629 /* If, for some reason, we were unable to determine
10630 the actual type from the tag, then use the static
10631 approximation that we just computed as a fallback.
10632 This can happen if the debugging information is
10633 incomplete, for instance. */
10634 actual_type = type;
10635 return value_zero (actual_type, not_lval);
10636 }
10637 else
10638 {
10639 /* In the case of a ref, ada_coerce_ref takes care
10640 of determining the actual type. But the evaluation
10641 should return a ref as it should be valid to ask
10642 for its address; so rebuild a ref after coerce. */
10643 arg1 = ada_coerce_ref (arg1);
10644 return value_ref (arg1);
10645 }
10646 }
0c1f74cf 10647
84754697
JB
10648 /* Records and unions for which GNAT encodings have been
10649 generated need to be statically fixed as well.
10650 Otherwise, non-static fixing produces a type where
10651 all dynamic properties are removed, which prevents "ptype"
10652 from being able to completely describe the type.
10653 For instance, a case statement in a variant record would be
10654 replaced by the relevant components based on the actual
10655 value of the discriminants. */
10656 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
10657 && dynamic_template_type (type) != NULL)
10658 || (TYPE_CODE (type) == TYPE_CODE_UNION
10659 && ada_find_parallel_type (type, "___XVU") != NULL))
10660 {
10661 *pos += 4;
10662 return value_zero (to_static_fixed_type (type), not_lval);
10663 }
4c4b4cd2 10664 }
da5c522f
JB
10665
10666 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10667 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10668
10669 case OP_FUNCALL:
10670 (*pos) += 2;
10671
10672 /* Allocate arg vector, including space for the function to be
10673 called in argvec[0] and a terminating NULL. */
10674 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10675 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10676
10677 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10678 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10679 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
10680 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10681 else
10682 {
10683 for (tem = 0; tem <= nargs; tem += 1)
10684 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10685 argvec[tem] = 0;
10686
10687 if (noside == EVAL_SKIP)
10688 goto nosideret;
10689 }
10690
ad82864c
JB
10691 if (ada_is_constrained_packed_array_type
10692 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10693 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
10694 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10695 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10696 /* This is a packed array that has already been fixed, and
10697 therefore already coerced to a simple array. Nothing further
10698 to do. */
10699 ;
e6c2c623
PMR
10700 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF)
10701 {
10702 /* Make sure we dereference references so that all the code below
10703 feels like it's really handling the referenced value. Wrapping
10704 types (for alignment) may be there, so make sure we strip them as
10705 well. */
10706 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10707 }
10708 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10709 && VALUE_LVAL (argvec[0]) == lval_memory)
10710 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10711
df407dfe 10712 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10713
10714 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10715 them. So, if this is an array typedef (encoding use for array
10716 access types encoded as fat pointers), strip it now. */
720d1a40
JB
10717 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10718 type = ada_typedef_target_type (type);
10719
4c4b4cd2
PH
10720 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10721 {
61ee279c 10722 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
10723 {
10724 case TYPE_CODE_FUNC:
61ee279c 10725 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10726 break;
10727 case TYPE_CODE_ARRAY:
10728 break;
10729 case TYPE_CODE_STRUCT:
10730 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10731 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10732 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10733 break;
10734 default:
323e0a4a 10735 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10736 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10737 break;
10738 }
10739 }
10740
10741 switch (TYPE_CODE (type))
10742 {
10743 case TYPE_CODE_FUNC:
10744 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972
PH
10745 {
10746 struct type *rtype = TYPE_TARGET_TYPE (type);
10747
10748 if (TYPE_GNU_IFUNC (type))
10749 return allocate_value (TYPE_TARGET_TYPE (rtype));
10750 return allocate_value (rtype);
10751 }
4c4b4cd2 10752 return call_function_by_hand (argvec[0], nargs, argvec + 1);
c8ea1972
PH
10753 case TYPE_CODE_INTERNAL_FUNCTION:
10754 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10755 /* We don't know anything about what the internal
10756 function might return, but we have to return
10757 something. */
10758 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10759 not_lval);
10760 else
10761 return call_internal_function (exp->gdbarch, exp->language_defn,
10762 argvec[0], nargs, argvec + 1);
10763
4c4b4cd2
PH
10764 case TYPE_CODE_STRUCT:
10765 {
10766 int arity;
10767
4c4b4cd2
PH
10768 arity = ada_array_arity (type);
10769 type = ada_array_element_type (type, nargs);
10770 if (type == NULL)
323e0a4a 10771 error (_("cannot subscript or call a record"));
4c4b4cd2 10772 if (arity != nargs)
323e0a4a 10773 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 10774 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 10775 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10776 return
10777 unwrap_value (ada_value_subscript
10778 (argvec[0], nargs, argvec + 1));
10779 }
10780 case TYPE_CODE_ARRAY:
10781 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10782 {
10783 type = ada_array_element_type (type, nargs);
10784 if (type == NULL)
323e0a4a 10785 error (_("element type of array unknown"));
4c4b4cd2 10786 else
0a07e705 10787 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10788 }
10789 return
10790 unwrap_value (ada_value_subscript
10791 (ada_coerce_to_simple_array (argvec[0]),
10792 nargs, argvec + 1));
10793 case TYPE_CODE_PTR: /* Pointer to array */
4c4b4cd2
PH
10794 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10795 {
deede10c 10796 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
4c4b4cd2
PH
10797 type = ada_array_element_type (type, nargs);
10798 if (type == NULL)
323e0a4a 10799 error (_("element type of array unknown"));
4c4b4cd2 10800 else
0a07e705 10801 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10802 }
10803 return
deede10c
JB
10804 unwrap_value (ada_value_ptr_subscript (argvec[0],
10805 nargs, argvec + 1));
4c4b4cd2
PH
10806
10807 default:
e1d5a0d2
PH
10808 error (_("Attempt to index or call something other than an "
10809 "array or function"));
4c4b4cd2
PH
10810 }
10811
10812 case TERNOP_SLICE:
10813 {
10814 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10815 struct value *low_bound_val =
10816 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
10817 struct value *high_bound_val =
10818 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10819 LONGEST low_bound;
10820 LONGEST high_bound;
5b4ee69b 10821
994b9211
AC
10822 low_bound_val = coerce_ref (low_bound_val);
10823 high_bound_val = coerce_ref (high_bound_val);
aa715135
JG
10824 low_bound = value_as_long (low_bound_val);
10825 high_bound = value_as_long (high_bound_val);
963a6417 10826
4c4b4cd2
PH
10827 if (noside == EVAL_SKIP)
10828 goto nosideret;
10829
4c4b4cd2
PH
10830 /* If this is a reference to an aligner type, then remove all
10831 the aligners. */
df407dfe
AC
10832 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10833 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10834 TYPE_TARGET_TYPE (value_type (array)) =
10835 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 10836
ad82864c 10837 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 10838 error (_("cannot slice a packed array"));
4c4b4cd2
PH
10839
10840 /* If this is a reference to an array or an array lvalue,
10841 convert to a pointer. */
df407dfe
AC
10842 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10843 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
10844 && VALUE_LVAL (array) == lval_memory))
10845 array = value_addr (array);
10846
1265e4aa 10847 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 10848 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 10849 (value_type (array))))
0b5d8877 10850 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
10851
10852 array = ada_coerce_to_simple_array_ptr (array);
10853
714e53ab
PH
10854 /* If we have more than one level of pointer indirection,
10855 dereference the value until we get only one level. */
df407dfe
AC
10856 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10857 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
10858 == TYPE_CODE_PTR))
10859 array = value_ind (array);
10860
10861 /* Make sure we really do have an array type before going further,
10862 to avoid a SEGV when trying to get the index type or the target
10863 type later down the road if the debug info generated by
10864 the compiler is incorrect or incomplete. */
df407dfe 10865 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 10866 error (_("cannot take slice of non-array"));
714e53ab 10867
828292f2
JB
10868 if (TYPE_CODE (ada_check_typedef (value_type (array)))
10869 == TYPE_CODE_PTR)
4c4b4cd2 10870 {
828292f2
JB
10871 struct type *type0 = ada_check_typedef (value_type (array));
10872
0b5d8877 10873 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 10874 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
10875 else
10876 {
10877 struct type *arr_type0 =
828292f2 10878 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 10879
f5938064
JG
10880 return ada_value_slice_from_ptr (array, arr_type0,
10881 longest_to_int (low_bound),
10882 longest_to_int (high_bound));
4c4b4cd2
PH
10883 }
10884 }
10885 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10886 return array;
10887 else if (high_bound < low_bound)
df407dfe 10888 return empty_array (value_type (array), low_bound);
4c4b4cd2 10889 else
529cad9c
PH
10890 return ada_value_slice (array, longest_to_int (low_bound),
10891 longest_to_int (high_bound));
4c4b4cd2 10892 }
14f9c5c9 10893
4c4b4cd2
PH
10894 case UNOP_IN_RANGE:
10895 (*pos) += 2;
10896 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 10897 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 10898
14f9c5c9 10899 if (noside == EVAL_SKIP)
4c4b4cd2 10900 goto nosideret;
14f9c5c9 10901
4c4b4cd2
PH
10902 switch (TYPE_CODE (type))
10903 {
10904 default:
e1d5a0d2
PH
10905 lim_warning (_("Membership test incompletely implemented; "
10906 "always returns true"));
fbb06eb1
UW
10907 type = language_bool_type (exp->language_defn, exp->gdbarch);
10908 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
10909
10910 case TYPE_CODE_RANGE:
030b4912
UW
10911 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10912 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
10913 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10914 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
10915 type = language_bool_type (exp->language_defn, exp->gdbarch);
10916 return
10917 value_from_longest (type,
4c4b4cd2
PH
10918 (value_less (arg1, arg3)
10919 || value_equal (arg1, arg3))
10920 && (value_less (arg2, arg1)
10921 || value_equal (arg2, arg1)));
10922 }
10923
10924 case BINOP_IN_BOUNDS:
14f9c5c9 10925 (*pos) += 2;
4c4b4cd2
PH
10926 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10927 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10928
4c4b4cd2
PH
10929 if (noside == EVAL_SKIP)
10930 goto nosideret;
14f9c5c9 10931
4c4b4cd2 10932 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
10933 {
10934 type = language_bool_type (exp->language_defn, exp->gdbarch);
10935 return value_zero (type, not_lval);
10936 }
14f9c5c9 10937
4c4b4cd2 10938 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10939
1eea4ebd
UW
10940 type = ada_index_type (value_type (arg2), tem, "range");
10941 if (!type)
10942 type = value_type (arg1);
14f9c5c9 10943
1eea4ebd
UW
10944 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10945 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 10946
f44316fa
UW
10947 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10948 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10949 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10950 return
fbb06eb1 10951 value_from_longest (type,
4c4b4cd2
PH
10952 (value_less (arg1, arg3)
10953 || value_equal (arg1, arg3))
10954 && (value_less (arg2, arg1)
10955 || value_equal (arg2, arg1)));
10956
10957 case TERNOP_IN_RANGE:
10958 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10959 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10960 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10961
10962 if (noside == EVAL_SKIP)
10963 goto nosideret;
10964
f44316fa
UW
10965 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10966 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10967 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10968 return
fbb06eb1 10969 value_from_longest (type,
4c4b4cd2
PH
10970 (value_less (arg1, arg3)
10971 || value_equal (arg1, arg3))
10972 && (value_less (arg2, arg1)
10973 || value_equal (arg2, arg1)));
10974
10975 case OP_ATR_FIRST:
10976 case OP_ATR_LAST:
10977 case OP_ATR_LENGTH:
10978 {
76a01679 10979 struct type *type_arg;
5b4ee69b 10980
76a01679
JB
10981 if (exp->elts[*pos].opcode == OP_TYPE)
10982 {
10983 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10984 arg1 = NULL;
5bc23cb3 10985 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
10986 }
10987 else
10988 {
10989 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10990 type_arg = NULL;
10991 }
10992
10993 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 10994 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
10995 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10996 *pos += 4;
10997
10998 if (noside == EVAL_SKIP)
10999 goto nosideret;
11000
11001 if (type_arg == NULL)
11002 {
11003 arg1 = ada_coerce_ref (arg1);
11004
ad82864c 11005 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
11006 arg1 = ada_coerce_to_simple_array (arg1);
11007
aa4fb036 11008 if (op == OP_ATR_LENGTH)
1eea4ebd 11009 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11010 else
11011 {
11012 type = ada_index_type (value_type (arg1), tem,
11013 ada_attribute_name (op));
11014 if (type == NULL)
11015 type = builtin_type (exp->gdbarch)->builtin_int;
11016 }
76a01679
JB
11017
11018 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 11019 return allocate_value (type);
76a01679
JB
11020
11021 switch (op)
11022 {
11023 default: /* Should never happen. */
323e0a4a 11024 error (_("unexpected attribute encountered"));
76a01679 11025 case OP_ATR_FIRST:
1eea4ebd
UW
11026 return value_from_longest
11027 (type, ada_array_bound (arg1, tem, 0));
76a01679 11028 case OP_ATR_LAST:
1eea4ebd
UW
11029 return value_from_longest
11030 (type, ada_array_bound (arg1, tem, 1));
76a01679 11031 case OP_ATR_LENGTH:
1eea4ebd
UW
11032 return value_from_longest
11033 (type, ada_array_length (arg1, tem));
76a01679
JB
11034 }
11035 }
11036 else if (discrete_type_p (type_arg))
11037 {
11038 struct type *range_type;
0d5cff50 11039 const char *name = ada_type_name (type_arg);
5b4ee69b 11040
76a01679
JB
11041 range_type = NULL;
11042 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 11043 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
11044 if (range_type == NULL)
11045 range_type = type_arg;
11046 switch (op)
11047 {
11048 default:
323e0a4a 11049 error (_("unexpected attribute encountered"));
76a01679 11050 case OP_ATR_FIRST:
690cc4eb 11051 return value_from_longest
43bbcdc2 11052 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 11053 case OP_ATR_LAST:
690cc4eb 11054 return value_from_longest
43bbcdc2 11055 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 11056 case OP_ATR_LENGTH:
323e0a4a 11057 error (_("the 'length attribute applies only to array types"));
76a01679
JB
11058 }
11059 }
11060 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 11061 error (_("unimplemented type attribute"));
76a01679
JB
11062 else
11063 {
11064 LONGEST low, high;
11065
ad82864c
JB
11066 if (ada_is_constrained_packed_array_type (type_arg))
11067 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 11068
aa4fb036 11069 if (op == OP_ATR_LENGTH)
1eea4ebd 11070 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11071 else
11072 {
11073 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
11074 if (type == NULL)
11075 type = builtin_type (exp->gdbarch)->builtin_int;
11076 }
1eea4ebd 11077
76a01679
JB
11078 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11079 return allocate_value (type);
11080
11081 switch (op)
11082 {
11083 default:
323e0a4a 11084 error (_("unexpected attribute encountered"));
76a01679 11085 case OP_ATR_FIRST:
1eea4ebd 11086 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
11087 return value_from_longest (type, low);
11088 case OP_ATR_LAST:
1eea4ebd 11089 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11090 return value_from_longest (type, high);
11091 case OP_ATR_LENGTH:
1eea4ebd
UW
11092 low = ada_array_bound_from_type (type_arg, tem, 0);
11093 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11094 return value_from_longest (type, high - low + 1);
11095 }
11096 }
14f9c5c9
AS
11097 }
11098
4c4b4cd2
PH
11099 case OP_ATR_TAG:
11100 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11101 if (noside == EVAL_SKIP)
76a01679 11102 goto nosideret;
4c4b4cd2
PH
11103
11104 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11105 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
11106
11107 return ada_value_tag (arg1);
11108
11109 case OP_ATR_MIN:
11110 case OP_ATR_MAX:
11111 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11112 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11113 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11114 if (noside == EVAL_SKIP)
76a01679 11115 goto nosideret;
d2e4a39e 11116 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11117 return value_zero (value_type (arg1), not_lval);
14f9c5c9 11118 else
f44316fa
UW
11119 {
11120 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11121 return value_binop (arg1, arg2,
11122 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
11123 }
14f9c5c9 11124
4c4b4cd2
PH
11125 case OP_ATR_MODULUS:
11126 {
31dedfee 11127 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 11128
5b4ee69b 11129 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
11130 if (noside == EVAL_SKIP)
11131 goto nosideret;
4c4b4cd2 11132
76a01679 11133 if (!ada_is_modular_type (type_arg))
323e0a4a 11134 error (_("'modulus must be applied to modular type"));
4c4b4cd2 11135
76a01679
JB
11136 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11137 ada_modulus (type_arg));
4c4b4cd2
PH
11138 }
11139
11140
11141 case OP_ATR_POS:
11142 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11143 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11144 if (noside == EVAL_SKIP)
76a01679 11145 goto nosideret;
3cb382c9
UW
11146 type = builtin_type (exp->gdbarch)->builtin_int;
11147 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11148 return value_zero (type, not_lval);
14f9c5c9 11149 else
3cb382c9 11150 return value_pos_atr (type, arg1);
14f9c5c9 11151
4c4b4cd2
PH
11152 case OP_ATR_SIZE:
11153 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
11154 type = value_type (arg1);
11155
11156 /* If the argument is a reference, then dereference its type, since
11157 the user is really asking for the size of the actual object,
11158 not the size of the pointer. */
11159 if (TYPE_CODE (type) == TYPE_CODE_REF)
11160 type = TYPE_TARGET_TYPE (type);
11161
4c4b4cd2 11162 if (noside == EVAL_SKIP)
76a01679 11163 goto nosideret;
4c4b4cd2 11164 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 11165 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 11166 else
22601c15 11167 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 11168 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
11169
11170 case OP_ATR_VAL:
11171 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 11172 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 11173 type = exp->elts[pc + 2].type;
14f9c5c9 11174 if (noside == EVAL_SKIP)
76a01679 11175 goto nosideret;
4c4b4cd2 11176 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11177 return value_zero (type, not_lval);
4c4b4cd2 11178 else
76a01679 11179 return value_val_atr (type, arg1);
4c4b4cd2
PH
11180
11181 case BINOP_EXP:
11182 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11183 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11184 if (noside == EVAL_SKIP)
11185 goto nosideret;
11186 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11187 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 11188 else
f44316fa
UW
11189 {
11190 /* For integer exponentiation operations,
11191 only promote the first argument. */
11192 if (is_integral_type (value_type (arg2)))
11193 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11194 else
11195 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11196
11197 return value_binop (arg1, arg2, op);
11198 }
4c4b4cd2
PH
11199
11200 case UNOP_PLUS:
11201 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11202 if (noside == EVAL_SKIP)
11203 goto nosideret;
11204 else
11205 return arg1;
11206
11207 case UNOP_ABS:
11208 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11209 if (noside == EVAL_SKIP)
11210 goto nosideret;
f44316fa 11211 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 11212 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 11213 return value_neg (arg1);
14f9c5c9 11214 else
4c4b4cd2 11215 return arg1;
14f9c5c9
AS
11216
11217 case UNOP_IND:
5ec18f2b 11218 preeval_pos = *pos;
6b0d7253 11219 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 11220 if (noside == EVAL_SKIP)
4c4b4cd2 11221 goto nosideret;
df407dfe 11222 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11223 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
11224 {
11225 if (ada_is_array_descriptor_type (type))
11226 /* GDB allows dereferencing GNAT array descriptors. */
11227 {
11228 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 11229
4c4b4cd2 11230 if (arrType == NULL)
323e0a4a 11231 error (_("Attempt to dereference null array pointer."));
00a4c844 11232 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
11233 }
11234 else if (TYPE_CODE (type) == TYPE_CODE_PTR
11235 || TYPE_CODE (type) == TYPE_CODE_REF
11236 /* In C you can dereference an array to get the 1st elt. */
11237 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab 11238 {
5ec18f2b
JG
11239 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11240 only be determined by inspecting the object's tag.
11241 This means that we need to evaluate completely the
11242 expression in order to get its type. */
11243
023db19c
JB
11244 if ((TYPE_CODE (type) == TYPE_CODE_REF
11245 || TYPE_CODE (type) == TYPE_CODE_PTR)
5ec18f2b
JG
11246 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11247 {
11248 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11249 EVAL_NORMAL);
11250 type = value_type (ada_value_ind (arg1));
11251 }
11252 else
11253 {
11254 type = to_static_fixed_type
11255 (ada_aligned_type
11256 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11257 }
c1b5a1a6 11258 ada_ensure_varsize_limit (type);
714e53ab
PH
11259 return value_zero (type, lval_memory);
11260 }
4c4b4cd2 11261 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
11262 {
11263 /* GDB allows dereferencing an int. */
11264 if (expect_type == NULL)
11265 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11266 lval_memory);
11267 else
11268 {
11269 expect_type =
11270 to_static_fixed_type (ada_aligned_type (expect_type));
11271 return value_zero (expect_type, lval_memory);
11272 }
11273 }
4c4b4cd2 11274 else
323e0a4a 11275 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 11276 }
0963b4bd 11277 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11278 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11279
96967637
JB
11280 if (TYPE_CODE (type) == TYPE_CODE_INT)
11281 /* GDB allows dereferencing an int. If we were given
11282 the expect_type, then use that as the target type.
11283 Otherwise, assume that the target type is an int. */
11284 {
11285 if (expect_type != NULL)
11286 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11287 arg1));
11288 else
11289 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11290 (CORE_ADDR) value_as_address (arg1));
11291 }
6b0d7253 11292
4c4b4cd2
PH
11293 if (ada_is_array_descriptor_type (type))
11294 /* GDB allows dereferencing GNAT array descriptors. */
11295 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11296 else
4c4b4cd2 11297 return ada_value_ind (arg1);
14f9c5c9
AS
11298
11299 case STRUCTOP_STRUCT:
11300 tem = longest_to_int (exp->elts[pc + 1].longconst);
11301 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11302 preeval_pos = *pos;
14f9c5c9
AS
11303 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11304 if (noside == EVAL_SKIP)
4c4b4cd2 11305 goto nosideret;
14f9c5c9 11306 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11307 {
df407dfe 11308 struct type *type1 = value_type (arg1);
5b4ee69b 11309
76a01679
JB
11310 if (ada_is_tagged_type (type1, 1))
11311 {
11312 type = ada_lookup_struct_elt_type (type1,
11313 &exp->elts[pc + 2].string,
11314 1, 1, NULL);
5ec18f2b
JG
11315
11316 /* If the field is not found, check if it exists in the
11317 extension of this object's type. This means that we
11318 need to evaluate completely the expression. */
11319
76a01679 11320 if (type == NULL)
5ec18f2b
JG
11321 {
11322 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11323 EVAL_NORMAL);
11324 arg1 = ada_value_struct_elt (arg1,
11325 &exp->elts[pc + 2].string,
11326 0);
11327 arg1 = unwrap_value (arg1);
11328 type = value_type (ada_to_fixed_value (arg1));
11329 }
76a01679
JB
11330 }
11331 else
11332 type =
11333 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11334 0, NULL);
11335
11336 return value_zero (ada_aligned_type (type), lval_memory);
11337 }
14f9c5c9 11338 else
284614f0
JB
11339 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11340 arg1 = unwrap_value (arg1);
11341 return ada_to_fixed_value (arg1);
11342
14f9c5c9 11343 case OP_TYPE:
4c4b4cd2
PH
11344 /* The value is not supposed to be used. This is here to make it
11345 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11346 (*pos) += 2;
11347 if (noside == EVAL_SKIP)
4c4b4cd2 11348 goto nosideret;
14f9c5c9 11349 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 11350 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11351 else
323e0a4a 11352 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11353
11354 case OP_AGGREGATE:
11355 case OP_CHOICES:
11356 case OP_OTHERS:
11357 case OP_DISCRETE_RANGE:
11358 case OP_POSITIONAL:
11359 case OP_NAME:
11360 if (noside == EVAL_NORMAL)
11361 switch (op)
11362 {
11363 case OP_NAME:
11364 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11365 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11366 case OP_AGGREGATE:
11367 error (_("Aggregates only allowed on the right of an assignment"));
11368 default:
0963b4bd
MS
11369 internal_error (__FILE__, __LINE__,
11370 _("aggregate apparently mangled"));
52ce6436
PH
11371 }
11372
11373 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11374 *pos += oplen - 1;
11375 for (tem = 0; tem < nargs; tem += 1)
11376 ada_evaluate_subexp (NULL, exp, pos, noside);
11377 goto nosideret;
14f9c5c9
AS
11378 }
11379
11380nosideret:
22601c15 11381 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 11382}
14f9c5c9 11383\f
d2e4a39e 11384
4c4b4cd2 11385 /* Fixed point */
14f9c5c9
AS
11386
11387/* If TYPE encodes an Ada fixed-point type, return the suffix of the
11388 type name that encodes the 'small and 'delta information.
4c4b4cd2 11389 Otherwise, return NULL. */
14f9c5c9 11390
d2e4a39e 11391static const char *
ebf56fd3 11392fixed_type_info (struct type *type)
14f9c5c9 11393{
d2e4a39e 11394 const char *name = ada_type_name (type);
14f9c5c9
AS
11395 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
11396
d2e4a39e
AS
11397 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11398 {
14f9c5c9 11399 const char *tail = strstr (name, "___XF_");
5b4ee69b 11400
14f9c5c9 11401 if (tail == NULL)
4c4b4cd2 11402 return NULL;
d2e4a39e 11403 else
4c4b4cd2 11404 return tail + 5;
14f9c5c9
AS
11405 }
11406 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
11407 return fixed_type_info (TYPE_TARGET_TYPE (type));
11408 else
11409 return NULL;
11410}
11411
4c4b4cd2 11412/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
11413
11414int
ebf56fd3 11415ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
11416{
11417 return fixed_type_info (type) != NULL;
11418}
11419
4c4b4cd2
PH
11420/* Return non-zero iff TYPE represents a System.Address type. */
11421
11422int
11423ada_is_system_address_type (struct type *type)
11424{
11425 return (TYPE_NAME (type)
11426 && strcmp (TYPE_NAME (type), "system__address") == 0);
11427}
11428
14f9c5c9
AS
11429/* Assuming that TYPE is the representation of an Ada fixed-point
11430 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 11431 delta cannot be determined. */
14f9c5c9
AS
11432
11433DOUBLEST
ebf56fd3 11434ada_delta (struct type *type)
14f9c5c9
AS
11435{
11436 const char *encoding = fixed_type_info (type);
facc390f 11437 DOUBLEST num, den;
14f9c5c9 11438
facc390f
JB
11439 /* Strictly speaking, num and den are encoded as integer. However,
11440 they may not fit into a long, and they will have to be converted
11441 to DOUBLEST anyway. So scan them as DOUBLEST. */
11442 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11443 &num, &den) < 2)
14f9c5c9 11444 return -1.0;
d2e4a39e 11445 else
facc390f 11446 return num / den;
14f9c5c9
AS
11447}
11448
11449/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 11450 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
11451
11452static DOUBLEST
ebf56fd3 11453scaling_factor (struct type *type)
14f9c5c9
AS
11454{
11455 const char *encoding = fixed_type_info (type);
facc390f 11456 DOUBLEST num0, den0, num1, den1;
14f9c5c9 11457 int n;
d2e4a39e 11458
facc390f
JB
11459 /* Strictly speaking, num's and den's are encoded as integer. However,
11460 they may not fit into a long, and they will have to be converted
11461 to DOUBLEST anyway. So scan them as DOUBLEST. */
11462 n = sscanf (encoding,
11463 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
11464 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
11465 &num0, &den0, &num1, &den1);
14f9c5c9
AS
11466
11467 if (n < 2)
11468 return 1.0;
11469 else if (n == 4)
facc390f 11470 return num1 / den1;
d2e4a39e 11471 else
facc390f 11472 return num0 / den0;
14f9c5c9
AS
11473}
11474
11475
11476/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 11477 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
11478
11479DOUBLEST
ebf56fd3 11480ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 11481{
d2e4a39e 11482 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
11483}
11484
4c4b4cd2
PH
11485/* The representation of a fixed-point value of type TYPE
11486 corresponding to the value X. */
14f9c5c9
AS
11487
11488LONGEST
ebf56fd3 11489ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
11490{
11491 return (LONGEST) (x / scaling_factor (type) + 0.5);
11492}
11493
14f9c5c9 11494\f
d2e4a39e 11495
4c4b4cd2 11496 /* Range types */
14f9c5c9
AS
11497
11498/* Scan STR beginning at position K for a discriminant name, and
11499 return the value of that discriminant field of DVAL in *PX. If
11500 PNEW_K is not null, put the position of the character beyond the
11501 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11502 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11503
11504static int
108d56a4 11505scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
76a01679 11506 int *pnew_k)
14f9c5c9
AS
11507{
11508 static char *bound_buffer = NULL;
11509 static size_t bound_buffer_len = 0;
5da1a4d3 11510 const char *pstart, *pend, *bound;
d2e4a39e 11511 struct value *bound_val;
14f9c5c9
AS
11512
11513 if (dval == NULL || str == NULL || str[k] == '\0')
11514 return 0;
11515
5da1a4d3
SM
11516 pstart = str + k;
11517 pend = strstr (pstart, "__");
14f9c5c9
AS
11518 if (pend == NULL)
11519 {
5da1a4d3 11520 bound = pstart;
14f9c5c9
AS
11521 k += strlen (bound);
11522 }
d2e4a39e 11523 else
14f9c5c9 11524 {
5da1a4d3
SM
11525 int len = pend - pstart;
11526
11527 /* Strip __ and beyond. */
11528 GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11529 strncpy (bound_buffer, pstart, len);
11530 bound_buffer[len] = '\0';
11531
14f9c5c9 11532 bound = bound_buffer;
d2e4a39e 11533 k = pend - str;
14f9c5c9 11534 }
d2e4a39e 11535
df407dfe 11536 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11537 if (bound_val == NULL)
11538 return 0;
11539
11540 *px = value_as_long (bound_val);
11541 if (pnew_k != NULL)
11542 *pnew_k = k;
11543 return 1;
11544}
11545
11546/* Value of variable named NAME in the current environment. If
11547 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11548 otherwise causes an error with message ERR_MSG. */
11549
d2e4a39e
AS
11550static struct value *
11551get_var_value (char *name, char *err_msg)
14f9c5c9 11552{
d12307c1 11553 struct block_symbol *syms;
14f9c5c9
AS
11554 int nsyms;
11555
4c4b4cd2 11556 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
4eeaa230 11557 &syms);
14f9c5c9
AS
11558
11559 if (nsyms != 1)
11560 {
11561 if (err_msg == NULL)
4c4b4cd2 11562 return 0;
14f9c5c9 11563 else
8a3fe4f8 11564 error (("%s"), err_msg);
14f9c5c9
AS
11565 }
11566
d12307c1 11567 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11568}
d2e4a39e 11569
14f9c5c9 11570/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
11571 no such variable found, returns 0, and sets *FLAG to 0. If
11572 successful, sets *FLAG to 1. */
11573
14f9c5c9 11574LONGEST
4c4b4cd2 11575get_int_var_value (char *name, int *flag)
14f9c5c9 11576{
4c4b4cd2 11577 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11578
14f9c5c9
AS
11579 if (var_val == 0)
11580 {
11581 if (flag != NULL)
4c4b4cd2 11582 *flag = 0;
14f9c5c9
AS
11583 return 0;
11584 }
11585 else
11586 {
11587 if (flag != NULL)
4c4b4cd2 11588 *flag = 1;
14f9c5c9
AS
11589 return value_as_long (var_val);
11590 }
11591}
d2e4a39e 11592
14f9c5c9
AS
11593
11594/* Return a range type whose base type is that of the range type named
11595 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11596 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11597 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11598 corresponding range type from debug information; fall back to using it
11599 if symbol lookup fails. If a new type must be created, allocate it
11600 like ORIG_TYPE was. The bounds information, in general, is encoded
11601 in NAME, the base type given in the named range type. */
14f9c5c9 11602
d2e4a39e 11603static struct type *
28c85d6c 11604to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11605{
0d5cff50 11606 const char *name;
14f9c5c9 11607 struct type *base_type;
108d56a4 11608 const char *subtype_info;
14f9c5c9 11609
28c85d6c
JB
11610 gdb_assert (raw_type != NULL);
11611 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 11612
1ce677a4 11613 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
11614 base_type = TYPE_TARGET_TYPE (raw_type);
11615 else
11616 base_type = raw_type;
11617
28c85d6c 11618 name = TYPE_NAME (raw_type);
14f9c5c9
AS
11619 subtype_info = strstr (name, "___XD");
11620 if (subtype_info == NULL)
690cc4eb 11621 {
43bbcdc2
PH
11622 LONGEST L = ada_discrete_type_low_bound (raw_type);
11623 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11624
690cc4eb
PH
11625 if (L < INT_MIN || U > INT_MAX)
11626 return raw_type;
11627 else
0c9c3474
SA
11628 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11629 L, U);
690cc4eb 11630 }
14f9c5c9
AS
11631 else
11632 {
11633 static char *name_buf = NULL;
11634 static size_t name_len = 0;
11635 int prefix_len = subtype_info - name;
11636 LONGEST L, U;
11637 struct type *type;
108d56a4 11638 const char *bounds_str;
14f9c5c9
AS
11639 int n;
11640
11641 GROW_VECT (name_buf, name_len, prefix_len + 5);
11642 strncpy (name_buf, name, prefix_len);
11643 name_buf[prefix_len] = '\0';
11644
11645 subtype_info += 5;
11646 bounds_str = strchr (subtype_info, '_');
11647 n = 1;
11648
d2e4a39e 11649 if (*subtype_info == 'L')
4c4b4cd2
PH
11650 {
11651 if (!ada_scan_number (bounds_str, n, &L, &n)
11652 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11653 return raw_type;
11654 if (bounds_str[n] == '_')
11655 n += 2;
0963b4bd 11656 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11657 n += 1;
11658 subtype_info += 1;
11659 }
d2e4a39e 11660 else
4c4b4cd2
PH
11661 {
11662 int ok;
5b4ee69b 11663
4c4b4cd2
PH
11664 strcpy (name_buf + prefix_len, "___L");
11665 L = get_int_var_value (name_buf, &ok);
11666 if (!ok)
11667 {
323e0a4a 11668 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11669 L = 1;
11670 }
11671 }
14f9c5c9 11672
d2e4a39e 11673 if (*subtype_info == 'U')
4c4b4cd2
PH
11674 {
11675 if (!ada_scan_number (bounds_str, n, &U, &n)
11676 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11677 return raw_type;
11678 }
d2e4a39e 11679 else
4c4b4cd2
PH
11680 {
11681 int ok;
5b4ee69b 11682
4c4b4cd2
PH
11683 strcpy (name_buf + prefix_len, "___U");
11684 U = get_int_var_value (name_buf, &ok);
11685 if (!ok)
11686 {
323e0a4a 11687 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11688 U = L;
11689 }
11690 }
14f9c5c9 11691
0c9c3474
SA
11692 type = create_static_range_type (alloc_type_copy (raw_type),
11693 base_type, L, U);
d2e4a39e 11694 TYPE_NAME (type) = name;
14f9c5c9
AS
11695 return type;
11696 }
11697}
11698
4c4b4cd2
PH
11699/* True iff NAME is the name of a range type. */
11700
14f9c5c9 11701int
d2e4a39e 11702ada_is_range_type_name (const char *name)
14f9c5c9
AS
11703{
11704 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11705}
14f9c5c9 11706\f
d2e4a39e 11707
4c4b4cd2
PH
11708 /* Modular types */
11709
11710/* True iff TYPE is an Ada modular type. */
14f9c5c9 11711
14f9c5c9 11712int
d2e4a39e 11713ada_is_modular_type (struct type *type)
14f9c5c9 11714{
18af8284 11715 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
11716
11717 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 11718 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 11719 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11720}
11721
4c4b4cd2
PH
11722/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11723
61ee279c 11724ULONGEST
0056e4d5 11725ada_modulus (struct type *type)
14f9c5c9 11726{
43bbcdc2 11727 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11728}
d2e4a39e 11729\f
f7f9143b
JB
11730
11731/* Ada exception catchpoint support:
11732 ---------------------------------
11733
11734 We support 3 kinds of exception catchpoints:
11735 . catchpoints on Ada exceptions
11736 . catchpoints on unhandled Ada exceptions
11737 . catchpoints on failed assertions
11738
11739 Exceptions raised during failed assertions, or unhandled exceptions
11740 could perfectly be caught with the general catchpoint on Ada exceptions.
11741 However, we can easily differentiate these two special cases, and having
11742 the option to distinguish these two cases from the rest can be useful
11743 to zero-in on certain situations.
11744
11745 Exception catchpoints are a specialized form of breakpoint,
11746 since they rely on inserting breakpoints inside known routines
11747 of the GNAT runtime. The implementation therefore uses a standard
11748 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11749 of breakpoint_ops.
11750
0259addd
JB
11751 Support in the runtime for exception catchpoints have been changed
11752 a few times already, and these changes affect the implementation
11753 of these catchpoints. In order to be able to support several
11754 variants of the runtime, we use a sniffer that will determine
28010a5d 11755 the runtime variant used by the program being debugged. */
f7f9143b 11756
82eacd52
JB
11757/* Ada's standard exceptions.
11758
11759 The Ada 83 standard also defined Numeric_Error. But there so many
11760 situations where it was unclear from the Ada 83 Reference Manual
11761 (RM) whether Constraint_Error or Numeric_Error should be raised,
11762 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11763 Interpretation saying that anytime the RM says that Numeric_Error
11764 should be raised, the implementation may raise Constraint_Error.
11765 Ada 95 went one step further and pretty much removed Numeric_Error
11766 from the list of standard exceptions (it made it a renaming of
11767 Constraint_Error, to help preserve compatibility when compiling
11768 an Ada83 compiler). As such, we do not include Numeric_Error from
11769 this list of standard exceptions. */
3d0b0fa3
JB
11770
11771static char *standard_exc[] = {
11772 "constraint_error",
11773 "program_error",
11774 "storage_error",
11775 "tasking_error"
11776};
11777
0259addd
JB
11778typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11779
11780/* A structure that describes how to support exception catchpoints
11781 for a given executable. */
11782
11783struct exception_support_info
11784{
11785 /* The name of the symbol to break on in order to insert
11786 a catchpoint on exceptions. */
11787 const char *catch_exception_sym;
11788
11789 /* The name of the symbol to break on in order to insert
11790 a catchpoint on unhandled exceptions. */
11791 const char *catch_exception_unhandled_sym;
11792
11793 /* The name of the symbol to break on in order to insert
11794 a catchpoint on failed assertions. */
11795 const char *catch_assert_sym;
11796
11797 /* Assuming that the inferior just triggered an unhandled exception
11798 catchpoint, this function is responsible for returning the address
11799 in inferior memory where the name of that exception is stored.
11800 Return zero if the address could not be computed. */
11801 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11802};
11803
11804static CORE_ADDR ada_unhandled_exception_name_addr (void);
11805static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11806
11807/* The following exception support info structure describes how to
11808 implement exception catchpoints with the latest version of the
11809 Ada runtime (as of 2007-03-06). */
11810
11811static const struct exception_support_info default_exception_support_info =
11812{
11813 "__gnat_debug_raise_exception", /* catch_exception_sym */
11814 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11815 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11816 ada_unhandled_exception_name_addr
11817};
11818
11819/* The following exception support info structure describes how to
11820 implement exception catchpoints with a slightly older version
11821 of the Ada runtime. */
11822
11823static const struct exception_support_info exception_support_info_fallback =
11824{
11825 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11826 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11827 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11828 ada_unhandled_exception_name_addr_from_raise
11829};
11830
f17011e0
JB
11831/* Return nonzero if we can detect the exception support routines
11832 described in EINFO.
11833
11834 This function errors out if an abnormal situation is detected
11835 (for instance, if we find the exception support routines, but
11836 that support is found to be incomplete). */
11837
11838static int
11839ada_has_this_exception_support (const struct exception_support_info *einfo)
11840{
11841 struct symbol *sym;
11842
11843 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11844 that should be compiled with debugging information. As a result, we
11845 expect to find that symbol in the symtabs. */
11846
11847 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11848 if (sym == NULL)
a6af7abe
JB
11849 {
11850 /* Perhaps we did not find our symbol because the Ada runtime was
11851 compiled without debugging info, or simply stripped of it.
11852 It happens on some GNU/Linux distributions for instance, where
11853 users have to install a separate debug package in order to get
11854 the runtime's debugging info. In that situation, let the user
11855 know why we cannot insert an Ada exception catchpoint.
11856
11857 Note: Just for the purpose of inserting our Ada exception
11858 catchpoint, we could rely purely on the associated minimal symbol.
11859 But we would be operating in degraded mode anyway, since we are
11860 still lacking the debugging info needed later on to extract
11861 the name of the exception being raised (this name is printed in
11862 the catchpoint message, and is also used when trying to catch
11863 a specific exception). We do not handle this case for now. */
3b7344d5 11864 struct bound_minimal_symbol msym
1c8e84b0
JB
11865 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11866
3b7344d5 11867 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11868 error (_("Your Ada runtime appears to be missing some debugging "
11869 "information.\nCannot insert Ada exception catchpoint "
11870 "in this configuration."));
11871
11872 return 0;
11873 }
f17011e0
JB
11874
11875 /* Make sure that the symbol we found corresponds to a function. */
11876
11877 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11878 error (_("Symbol \"%s\" is not a function (class = %d)"),
11879 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11880
11881 return 1;
11882}
11883
0259addd
JB
11884/* Inspect the Ada runtime and determine which exception info structure
11885 should be used to provide support for exception catchpoints.
11886
3eecfa55
JB
11887 This function will always set the per-inferior exception_info,
11888 or raise an error. */
0259addd
JB
11889
11890static void
11891ada_exception_support_info_sniffer (void)
11892{
3eecfa55 11893 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11894
11895 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11896 if (data->exception_info != NULL)
0259addd
JB
11897 return;
11898
11899 /* Check the latest (default) exception support info. */
f17011e0 11900 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11901 {
3eecfa55 11902 data->exception_info = &default_exception_support_info;
0259addd
JB
11903 return;
11904 }
11905
11906 /* Try our fallback exception suport info. */
f17011e0 11907 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11908 {
3eecfa55 11909 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11910 return;
11911 }
11912
11913 /* Sometimes, it is normal for us to not be able to find the routine
11914 we are looking for. This happens when the program is linked with
11915 the shared version of the GNAT runtime, and the program has not been
11916 started yet. Inform the user of these two possible causes if
11917 applicable. */
11918
ccefe4c4 11919 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11920 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11921
11922 /* If the symbol does not exist, then check that the program is
11923 already started, to make sure that shared libraries have been
11924 loaded. If it is not started, this may mean that the symbol is
11925 in a shared library. */
11926
11927 if (ptid_get_pid (inferior_ptid) == 0)
11928 error (_("Unable to insert catchpoint. Try to start the program first."));
11929
11930 /* At this point, we know that we are debugging an Ada program and
11931 that the inferior has been started, but we still are not able to
0963b4bd 11932 find the run-time symbols. That can mean that we are in
0259addd
JB
11933 configurable run time mode, or that a-except as been optimized
11934 out by the linker... In any case, at this point it is not worth
11935 supporting this feature. */
11936
7dda8cff 11937 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11938}
11939
f7f9143b
JB
11940/* True iff FRAME is very likely to be that of a function that is
11941 part of the runtime system. This is all very heuristic, but is
11942 intended to be used as advice as to what frames are uninteresting
11943 to most users. */
11944
11945static int
11946is_known_support_routine (struct frame_info *frame)
11947{
4ed6b5be 11948 struct symtab_and_line sal;
55b87a52 11949 char *func_name;
692465f1 11950 enum language func_lang;
f7f9143b 11951 int i;
f35a17b5 11952 const char *fullname;
f7f9143b 11953
4ed6b5be
JB
11954 /* If this code does not have any debugging information (no symtab),
11955 This cannot be any user code. */
f7f9143b 11956
4ed6b5be 11957 find_frame_sal (frame, &sal);
f7f9143b
JB
11958 if (sal.symtab == NULL)
11959 return 1;
11960
4ed6b5be
JB
11961 /* If there is a symtab, but the associated source file cannot be
11962 located, then assume this is not user code: Selecting a frame
11963 for which we cannot display the code would not be very helpful
11964 for the user. This should also take care of case such as VxWorks
11965 where the kernel has some debugging info provided for a few units. */
f7f9143b 11966
f35a17b5
JK
11967 fullname = symtab_to_fullname (sal.symtab);
11968 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11969 return 1;
11970
4ed6b5be
JB
11971 /* Check the unit filename againt the Ada runtime file naming.
11972 We also check the name of the objfile against the name of some
11973 known system libraries that sometimes come with debugging info
11974 too. */
11975
f7f9143b
JB
11976 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11977 {
11978 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11979 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 11980 return 1;
eb822aa6
DE
11981 if (SYMTAB_OBJFILE (sal.symtab) != NULL
11982 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
4ed6b5be 11983 return 1;
f7f9143b
JB
11984 }
11985
4ed6b5be 11986 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11987
e9e07ba6 11988 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
11989 if (func_name == NULL)
11990 return 1;
11991
11992 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11993 {
11994 re_comp (known_auxiliary_function_name_patterns[i]);
11995 if (re_exec (func_name))
55b87a52
KS
11996 {
11997 xfree (func_name);
11998 return 1;
11999 }
f7f9143b
JB
12000 }
12001
55b87a52 12002 xfree (func_name);
f7f9143b
JB
12003 return 0;
12004}
12005
12006/* Find the first frame that contains debugging information and that is not
12007 part of the Ada run-time, starting from FI and moving upward. */
12008
0ef643c8 12009void
f7f9143b
JB
12010ada_find_printable_frame (struct frame_info *fi)
12011{
12012 for (; fi != NULL; fi = get_prev_frame (fi))
12013 {
12014 if (!is_known_support_routine (fi))
12015 {
12016 select_frame (fi);
12017 break;
12018 }
12019 }
12020
12021}
12022
12023/* Assuming that the inferior just triggered an unhandled exception
12024 catchpoint, return the address in inferior memory where the name
12025 of the exception is stored.
12026
12027 Return zero if the address could not be computed. */
12028
12029static CORE_ADDR
12030ada_unhandled_exception_name_addr (void)
0259addd
JB
12031{
12032 return parse_and_eval_address ("e.full_name");
12033}
12034
12035/* Same as ada_unhandled_exception_name_addr, except that this function
12036 should be used when the inferior uses an older version of the runtime,
12037 where the exception name needs to be extracted from a specific frame
12038 several frames up in the callstack. */
12039
12040static CORE_ADDR
12041ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
12042{
12043 int frame_level;
12044 struct frame_info *fi;
3eecfa55 12045 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
55b87a52 12046 struct cleanup *old_chain;
f7f9143b
JB
12047
12048 /* To determine the name of this exception, we need to select
12049 the frame corresponding to RAISE_SYM_NAME. This frame is
12050 at least 3 levels up, so we simply skip the first 3 frames
12051 without checking the name of their associated function. */
12052 fi = get_current_frame ();
12053 for (frame_level = 0; frame_level < 3; frame_level += 1)
12054 if (fi != NULL)
12055 fi = get_prev_frame (fi);
12056
55b87a52 12057 old_chain = make_cleanup (null_cleanup, NULL);
f7f9143b
JB
12058 while (fi != NULL)
12059 {
55b87a52 12060 char *func_name;
692465f1
JB
12061 enum language func_lang;
12062
e9e07ba6 12063 find_frame_funname (fi, &func_name, &func_lang, NULL);
55b87a52
KS
12064 if (func_name != NULL)
12065 {
12066 make_cleanup (xfree, func_name);
12067
12068 if (strcmp (func_name,
12069 data->exception_info->catch_exception_sym) == 0)
12070 break; /* We found the frame we were looking for... */
12071 fi = get_prev_frame (fi);
12072 }
f7f9143b 12073 }
55b87a52 12074 do_cleanups (old_chain);
f7f9143b
JB
12075
12076 if (fi == NULL)
12077 return 0;
12078
12079 select_frame (fi);
12080 return parse_and_eval_address ("id.full_name");
12081}
12082
12083/* Assuming the inferior just triggered an Ada exception catchpoint
12084 (of any type), return the address in inferior memory where the name
12085 of the exception is stored, if applicable.
12086
12087 Return zero if the address could not be computed, or if not relevant. */
12088
12089static CORE_ADDR
761269c8 12090ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12091 struct breakpoint *b)
12092{
3eecfa55
JB
12093 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12094
f7f9143b
JB
12095 switch (ex)
12096 {
761269c8 12097 case ada_catch_exception:
f7f9143b
JB
12098 return (parse_and_eval_address ("e.full_name"));
12099 break;
12100
761269c8 12101 case ada_catch_exception_unhandled:
3eecfa55 12102 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
12103 break;
12104
761269c8 12105 case ada_catch_assert:
f7f9143b
JB
12106 return 0; /* Exception name is not relevant in this case. */
12107 break;
12108
12109 default:
12110 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12111 break;
12112 }
12113
12114 return 0; /* Should never be reached. */
12115}
12116
12117/* Same as ada_exception_name_addr_1, except that it intercepts and contains
12118 any error that ada_exception_name_addr_1 might cause to be thrown.
12119 When an error is intercepted, a warning with the error message is printed,
12120 and zero is returned. */
12121
12122static CORE_ADDR
761269c8 12123ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12124 struct breakpoint *b)
12125{
f7f9143b
JB
12126 CORE_ADDR result = 0;
12127
492d29ea 12128 TRY
f7f9143b
JB
12129 {
12130 result = ada_exception_name_addr_1 (ex, b);
12131 }
12132
492d29ea 12133 CATCH (e, RETURN_MASK_ERROR)
f7f9143b
JB
12134 {
12135 warning (_("failed to get exception name: %s"), e.message);
12136 return 0;
12137 }
492d29ea 12138 END_CATCH
f7f9143b
JB
12139
12140 return result;
12141}
12142
28010a5d
PA
12143static char *ada_exception_catchpoint_cond_string (const char *excep_string);
12144
12145/* Ada catchpoints.
12146
12147 In the case of catchpoints on Ada exceptions, the catchpoint will
12148 stop the target on every exception the program throws. When a user
12149 specifies the name of a specific exception, we translate this
12150 request into a condition expression (in text form), and then parse
12151 it into an expression stored in each of the catchpoint's locations.
12152 We then use this condition to check whether the exception that was
12153 raised is the one the user is interested in. If not, then the
12154 target is resumed again. We store the name of the requested
12155 exception, in order to be able to re-set the condition expression
12156 when symbols change. */
12157
12158/* An instance of this type is used to represent an Ada catchpoint
12159 breakpoint location. It includes a "struct bp_location" as a kind
12160 of base class; users downcast to "struct bp_location *" when
12161 needed. */
12162
12163struct ada_catchpoint_location
12164{
12165 /* The base class. */
12166 struct bp_location base;
12167
12168 /* The condition that checks whether the exception that was raised
12169 is the specific exception the user specified on catchpoint
12170 creation. */
12171 struct expression *excep_cond_expr;
12172};
12173
12174/* Implement the DTOR method in the bp_location_ops structure for all
12175 Ada exception catchpoint kinds. */
12176
12177static void
12178ada_catchpoint_location_dtor (struct bp_location *bl)
12179{
12180 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
12181
12182 xfree (al->excep_cond_expr);
12183}
12184
12185/* The vtable to be used in Ada catchpoint locations. */
12186
12187static const struct bp_location_ops ada_catchpoint_location_ops =
12188{
12189 ada_catchpoint_location_dtor
12190};
12191
12192/* An instance of this type is used to represent an Ada catchpoint.
12193 It includes a "struct breakpoint" as a kind of base class; users
12194 downcast to "struct breakpoint *" when needed. */
12195
12196struct ada_catchpoint
12197{
12198 /* The base class. */
12199 struct breakpoint base;
12200
12201 /* The name of the specific exception the user specified. */
12202 char *excep_string;
12203};
12204
12205/* Parse the exception condition string in the context of each of the
12206 catchpoint's locations, and store them for later evaluation. */
12207
12208static void
12209create_excep_cond_exprs (struct ada_catchpoint *c)
12210{
12211 struct cleanup *old_chain;
12212 struct bp_location *bl;
12213 char *cond_string;
12214
12215 /* Nothing to do if there's no specific exception to catch. */
12216 if (c->excep_string == NULL)
12217 return;
12218
12219 /* Same if there are no locations... */
12220 if (c->base.loc == NULL)
12221 return;
12222
12223 /* Compute the condition expression in text form, from the specific
12224 expection we want to catch. */
12225 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
12226 old_chain = make_cleanup (xfree, cond_string);
12227
12228 /* Iterate over all the catchpoint's locations, and parse an
12229 expression for each. */
12230 for (bl = c->base.loc; bl != NULL; bl = bl->next)
12231 {
12232 struct ada_catchpoint_location *ada_loc
12233 = (struct ada_catchpoint_location *) bl;
12234 struct expression *exp = NULL;
12235
12236 if (!bl->shlib_disabled)
12237 {
bbc13ae3 12238 const char *s;
28010a5d
PA
12239
12240 s = cond_string;
492d29ea 12241 TRY
28010a5d 12242 {
1bb9788d
TT
12243 exp = parse_exp_1 (&s, bl->address,
12244 block_for_pc (bl->address), 0);
28010a5d 12245 }
492d29ea 12246 CATCH (e, RETURN_MASK_ERROR)
849f2b52
JB
12247 {
12248 warning (_("failed to reevaluate internal exception condition "
12249 "for catchpoint %d: %s"),
12250 c->base.number, e.message);
12251 /* There is a bug in GCC on sparc-solaris when building with
12252 optimization which causes EXP to change unexpectedly
12253 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
12254 The problem should be fixed starting with GCC 4.9.
12255 In the meantime, work around it by forcing EXP back
12256 to NULL. */
12257 exp = NULL;
12258 }
492d29ea 12259 END_CATCH
28010a5d
PA
12260 }
12261
12262 ada_loc->excep_cond_expr = exp;
12263 }
12264
12265 do_cleanups (old_chain);
12266}
12267
12268/* Implement the DTOR method in the breakpoint_ops structure for all
12269 exception catchpoint kinds. */
12270
12271static void
761269c8 12272dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
12273{
12274 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12275
12276 xfree (c->excep_string);
348d480f 12277
2060206e 12278 bkpt_breakpoint_ops.dtor (b);
28010a5d
PA
12279}
12280
12281/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12282 structure for all exception catchpoint kinds. */
12283
12284static struct bp_location *
761269c8 12285allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
12286 struct breakpoint *self)
12287{
12288 struct ada_catchpoint_location *loc;
12289
12290 loc = XNEW (struct ada_catchpoint_location);
12291 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
12292 loc->excep_cond_expr = NULL;
12293 return &loc->base;
12294}
12295
12296/* Implement the RE_SET method in the breakpoint_ops structure for all
12297 exception catchpoint kinds. */
12298
12299static void
761269c8 12300re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
12301{
12302 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12303
12304 /* Call the base class's method. This updates the catchpoint's
12305 locations. */
2060206e 12306 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12307
12308 /* Reparse the exception conditional expressions. One for each
12309 location. */
12310 create_excep_cond_exprs (c);
12311}
12312
12313/* Returns true if we should stop for this breakpoint hit. If the
12314 user specified a specific exception, we only want to cause a stop
12315 if the program thrown that exception. */
12316
12317static int
12318should_stop_exception (const struct bp_location *bl)
12319{
12320 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12321 const struct ada_catchpoint_location *ada_loc
12322 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12323 int stop;
12324
12325 /* With no specific exception, should always stop. */
12326 if (c->excep_string == NULL)
12327 return 1;
12328
12329 if (ada_loc->excep_cond_expr == NULL)
12330 {
12331 /* We will have a NULL expression if back when we were creating
12332 the expressions, this location's had failed to parse. */
12333 return 1;
12334 }
12335
12336 stop = 1;
492d29ea 12337 TRY
28010a5d
PA
12338 {
12339 struct value *mark;
12340
12341 mark = value_mark ();
12342 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
12343 value_free_to_mark (mark);
12344 }
492d29ea
PA
12345 CATCH (ex, RETURN_MASK_ALL)
12346 {
12347 exception_fprintf (gdb_stderr, ex,
12348 _("Error in testing exception condition:\n"));
12349 }
12350 END_CATCH
12351
28010a5d
PA
12352 return stop;
12353}
12354
12355/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12356 for all exception catchpoint kinds. */
12357
12358static void
761269c8 12359check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
12360{
12361 bs->stop = should_stop_exception (bs->bp_location_at);
12362}
12363
f7f9143b
JB
12364/* Implement the PRINT_IT method in the breakpoint_ops structure
12365 for all exception catchpoint kinds. */
12366
12367static enum print_stop_action
761269c8 12368print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 12369{
79a45e25 12370 struct ui_out *uiout = current_uiout;
348d480f
PA
12371 struct breakpoint *b = bs->breakpoint_at;
12372
956a9fb9 12373 annotate_catchpoint (b->number);
f7f9143b 12374
956a9fb9 12375 if (ui_out_is_mi_like_p (uiout))
f7f9143b 12376 {
956a9fb9
JB
12377 ui_out_field_string (uiout, "reason",
12378 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12379 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
f7f9143b
JB
12380 }
12381
00eb2c4a
JB
12382 ui_out_text (uiout,
12383 b->disposition == disp_del ? "\nTemporary catchpoint "
12384 : "\nCatchpoint ");
956a9fb9
JB
12385 ui_out_field_int (uiout, "bkptno", b->number);
12386 ui_out_text (uiout, ", ");
f7f9143b 12387
f7f9143b
JB
12388 switch (ex)
12389 {
761269c8
JB
12390 case ada_catch_exception:
12391 case ada_catch_exception_unhandled:
956a9fb9
JB
12392 {
12393 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
12394 char exception_name[256];
12395
12396 if (addr != 0)
12397 {
c714b426
PA
12398 read_memory (addr, (gdb_byte *) exception_name,
12399 sizeof (exception_name) - 1);
956a9fb9
JB
12400 exception_name [sizeof (exception_name) - 1] = '\0';
12401 }
12402 else
12403 {
12404 /* For some reason, we were unable to read the exception
12405 name. This could happen if the Runtime was compiled
12406 without debugging info, for instance. In that case,
12407 just replace the exception name by the generic string
12408 "exception" - it will read as "an exception" in the
12409 notification we are about to print. */
967cff16 12410 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12411 }
12412 /* In the case of unhandled exception breakpoints, we print
12413 the exception name as "unhandled EXCEPTION_NAME", to make
12414 it clearer to the user which kind of catchpoint just got
12415 hit. We used ui_out_text to make sure that this extra
12416 info does not pollute the exception name in the MI case. */
761269c8 12417 if (ex == ada_catch_exception_unhandled)
956a9fb9
JB
12418 ui_out_text (uiout, "unhandled ");
12419 ui_out_field_string (uiout, "exception-name", exception_name);
12420 }
12421 break;
761269c8 12422 case ada_catch_assert:
956a9fb9
JB
12423 /* In this case, the name of the exception is not really
12424 important. Just print "failed assertion" to make it clearer
12425 that his program just hit an assertion-failure catchpoint.
12426 We used ui_out_text because this info does not belong in
12427 the MI output. */
12428 ui_out_text (uiout, "failed assertion");
12429 break;
f7f9143b 12430 }
956a9fb9
JB
12431 ui_out_text (uiout, " at ");
12432 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12433
12434 return PRINT_SRC_AND_LOC;
12435}
12436
12437/* Implement the PRINT_ONE method in the breakpoint_ops structure
12438 for all exception catchpoint kinds. */
12439
12440static void
761269c8 12441print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 12442 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12443{
79a45e25 12444 struct ui_out *uiout = current_uiout;
28010a5d 12445 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12446 struct value_print_options opts;
12447
12448 get_user_print_options (&opts);
12449 if (opts.addressprint)
f7f9143b
JB
12450 {
12451 annotate_field (4);
5af949e3 12452 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
12453 }
12454
12455 annotate_field (5);
a6d9a66e 12456 *last_loc = b->loc;
f7f9143b
JB
12457 switch (ex)
12458 {
761269c8 12459 case ada_catch_exception:
28010a5d 12460 if (c->excep_string != NULL)
f7f9143b 12461 {
28010a5d
PA
12462 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12463
f7f9143b
JB
12464 ui_out_field_string (uiout, "what", msg);
12465 xfree (msg);
12466 }
12467 else
12468 ui_out_field_string (uiout, "what", "all Ada exceptions");
12469
12470 break;
12471
761269c8 12472 case ada_catch_exception_unhandled:
f7f9143b
JB
12473 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
12474 break;
12475
761269c8 12476 case ada_catch_assert:
f7f9143b
JB
12477 ui_out_field_string (uiout, "what", "failed Ada assertions");
12478 break;
12479
12480 default:
12481 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12482 break;
12483 }
12484}
12485
12486/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12487 for all exception catchpoint kinds. */
12488
12489static void
761269c8 12490print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12491 struct breakpoint *b)
12492{
28010a5d 12493 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12494 struct ui_out *uiout = current_uiout;
28010a5d 12495
00eb2c4a
JB
12496 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12497 : _("Catchpoint "));
12498 ui_out_field_int (uiout, "bkptno", b->number);
12499 ui_out_text (uiout, ": ");
12500
f7f9143b
JB
12501 switch (ex)
12502 {
761269c8 12503 case ada_catch_exception:
28010a5d 12504 if (c->excep_string != NULL)
00eb2c4a
JB
12505 {
12506 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12507 struct cleanup *old_chain = make_cleanup (xfree, info);
12508
12509 ui_out_text (uiout, info);
12510 do_cleanups (old_chain);
12511 }
f7f9143b 12512 else
00eb2c4a 12513 ui_out_text (uiout, _("all Ada exceptions"));
f7f9143b
JB
12514 break;
12515
761269c8 12516 case ada_catch_exception_unhandled:
00eb2c4a 12517 ui_out_text (uiout, _("unhandled Ada exceptions"));
f7f9143b
JB
12518 break;
12519
761269c8 12520 case ada_catch_assert:
00eb2c4a 12521 ui_out_text (uiout, _("failed Ada assertions"));
f7f9143b
JB
12522 break;
12523
12524 default:
12525 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12526 break;
12527 }
12528}
12529
6149aea9
PA
12530/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12531 for all exception catchpoint kinds. */
12532
12533static void
761269c8 12534print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
12535 struct breakpoint *b, struct ui_file *fp)
12536{
28010a5d
PA
12537 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12538
6149aea9
PA
12539 switch (ex)
12540 {
761269c8 12541 case ada_catch_exception:
6149aea9 12542 fprintf_filtered (fp, "catch exception");
28010a5d
PA
12543 if (c->excep_string != NULL)
12544 fprintf_filtered (fp, " %s", c->excep_string);
6149aea9
PA
12545 break;
12546
761269c8 12547 case ada_catch_exception_unhandled:
78076abc 12548 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12549 break;
12550
761269c8 12551 case ada_catch_assert:
6149aea9
PA
12552 fprintf_filtered (fp, "catch assert");
12553 break;
12554
12555 default:
12556 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12557 }
d9b3f62e 12558 print_recreate_thread (b, fp);
6149aea9
PA
12559}
12560
f7f9143b
JB
12561/* Virtual table for "catch exception" breakpoints. */
12562
28010a5d
PA
12563static void
12564dtor_catch_exception (struct breakpoint *b)
12565{
761269c8 12566 dtor_exception (ada_catch_exception, b);
28010a5d
PA
12567}
12568
12569static struct bp_location *
12570allocate_location_catch_exception (struct breakpoint *self)
12571{
761269c8 12572 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
12573}
12574
12575static void
12576re_set_catch_exception (struct breakpoint *b)
12577{
761269c8 12578 re_set_exception (ada_catch_exception, b);
28010a5d
PA
12579}
12580
12581static void
12582check_status_catch_exception (bpstat bs)
12583{
761269c8 12584 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
12585}
12586
f7f9143b 12587static enum print_stop_action
348d480f 12588print_it_catch_exception (bpstat bs)
f7f9143b 12589{
761269c8 12590 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
12591}
12592
12593static void
a6d9a66e 12594print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12595{
761269c8 12596 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
12597}
12598
12599static void
12600print_mention_catch_exception (struct breakpoint *b)
12601{
761269c8 12602 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
12603}
12604
6149aea9
PA
12605static void
12606print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12607{
761269c8 12608 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
12609}
12610
2060206e 12611static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
12612
12613/* Virtual table for "catch exception unhandled" breakpoints. */
12614
28010a5d
PA
12615static void
12616dtor_catch_exception_unhandled (struct breakpoint *b)
12617{
761269c8 12618 dtor_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12619}
12620
12621static struct bp_location *
12622allocate_location_catch_exception_unhandled (struct breakpoint *self)
12623{
761269c8 12624 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
12625}
12626
12627static void
12628re_set_catch_exception_unhandled (struct breakpoint *b)
12629{
761269c8 12630 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12631}
12632
12633static void
12634check_status_catch_exception_unhandled (bpstat bs)
12635{
761269c8 12636 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
12637}
12638
f7f9143b 12639static enum print_stop_action
348d480f 12640print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 12641{
761269c8 12642 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
12643}
12644
12645static void
a6d9a66e
UW
12646print_one_catch_exception_unhandled (struct breakpoint *b,
12647 struct bp_location **last_loc)
f7f9143b 12648{
761269c8 12649 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
12650}
12651
12652static void
12653print_mention_catch_exception_unhandled (struct breakpoint *b)
12654{
761269c8 12655 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
12656}
12657
6149aea9
PA
12658static void
12659print_recreate_catch_exception_unhandled (struct breakpoint *b,
12660 struct ui_file *fp)
12661{
761269c8 12662 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
12663}
12664
2060206e 12665static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
12666
12667/* Virtual table for "catch assert" breakpoints. */
12668
28010a5d
PA
12669static void
12670dtor_catch_assert (struct breakpoint *b)
12671{
761269c8 12672 dtor_exception (ada_catch_assert, b);
28010a5d
PA
12673}
12674
12675static struct bp_location *
12676allocate_location_catch_assert (struct breakpoint *self)
12677{
761269c8 12678 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
12679}
12680
12681static void
12682re_set_catch_assert (struct breakpoint *b)
12683{
761269c8 12684 re_set_exception (ada_catch_assert, b);
28010a5d
PA
12685}
12686
12687static void
12688check_status_catch_assert (bpstat bs)
12689{
761269c8 12690 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
12691}
12692
f7f9143b 12693static enum print_stop_action
348d480f 12694print_it_catch_assert (bpstat bs)
f7f9143b 12695{
761269c8 12696 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
12697}
12698
12699static void
a6d9a66e 12700print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12701{
761269c8 12702 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
12703}
12704
12705static void
12706print_mention_catch_assert (struct breakpoint *b)
12707{
761269c8 12708 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
12709}
12710
6149aea9
PA
12711static void
12712print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12713{
761269c8 12714 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
12715}
12716
2060206e 12717static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 12718
f7f9143b
JB
12719/* Return a newly allocated copy of the first space-separated token
12720 in ARGSP, and then adjust ARGSP to point immediately after that
12721 token.
12722
12723 Return NULL if ARGPS does not contain any more tokens. */
12724
12725static char *
12726ada_get_next_arg (char **argsp)
12727{
12728 char *args = *argsp;
12729 char *end;
12730 char *result;
12731
0fcd72ba 12732 args = skip_spaces (args);
f7f9143b
JB
12733 if (args[0] == '\0')
12734 return NULL; /* No more arguments. */
12735
12736 /* Find the end of the current argument. */
12737
0fcd72ba 12738 end = skip_to_space (args);
f7f9143b
JB
12739
12740 /* Adjust ARGSP to point to the start of the next argument. */
12741
12742 *argsp = end;
12743
12744 /* Make a copy of the current argument and return it. */
12745
224c3ddb 12746 result = (char *) xmalloc (end - args + 1);
f7f9143b
JB
12747 strncpy (result, args, end - args);
12748 result[end - args] = '\0';
12749
12750 return result;
12751}
12752
12753/* Split the arguments specified in a "catch exception" command.
12754 Set EX to the appropriate catchpoint type.
28010a5d 12755 Set EXCEP_STRING to the name of the specific exception if
5845583d
JB
12756 specified by the user.
12757 If a condition is found at the end of the arguments, the condition
12758 expression is stored in COND_STRING (memory must be deallocated
12759 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12760
12761static void
12762catch_ada_exception_command_split (char *args,
761269c8 12763 enum ada_exception_catchpoint_kind *ex,
5845583d
JB
12764 char **excep_string,
12765 char **cond_string)
f7f9143b
JB
12766{
12767 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12768 char *exception_name;
5845583d 12769 char *cond = NULL;
f7f9143b
JB
12770
12771 exception_name = ada_get_next_arg (&args);
5845583d
JB
12772 if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12773 {
12774 /* This is not an exception name; this is the start of a condition
12775 expression for a catchpoint on all exceptions. So, "un-get"
12776 this token, and set exception_name to NULL. */
12777 xfree (exception_name);
12778 exception_name = NULL;
12779 args -= 2;
12780 }
f7f9143b
JB
12781 make_cleanup (xfree, exception_name);
12782
5845583d 12783 /* Check to see if we have a condition. */
f7f9143b 12784
0fcd72ba 12785 args = skip_spaces (args);
61012eef 12786 if (startswith (args, "if")
5845583d
JB
12787 && (isspace (args[2]) || args[2] == '\0'))
12788 {
12789 args += 2;
12790 args = skip_spaces (args);
12791
12792 if (args[0] == '\0')
12793 error (_("Condition missing after `if' keyword"));
12794 cond = xstrdup (args);
12795 make_cleanup (xfree, cond);
12796
12797 args += strlen (args);
12798 }
12799
12800 /* Check that we do not have any more arguments. Anything else
12801 is unexpected. */
f7f9143b
JB
12802
12803 if (args[0] != '\0')
12804 error (_("Junk at end of expression"));
12805
12806 discard_cleanups (old_chain);
12807
12808 if (exception_name == NULL)
12809 {
12810 /* Catch all exceptions. */
761269c8 12811 *ex = ada_catch_exception;
28010a5d 12812 *excep_string = NULL;
f7f9143b
JB
12813 }
12814 else if (strcmp (exception_name, "unhandled") == 0)
12815 {
12816 /* Catch unhandled exceptions. */
761269c8 12817 *ex = ada_catch_exception_unhandled;
28010a5d 12818 *excep_string = NULL;
f7f9143b
JB
12819 }
12820 else
12821 {
12822 /* Catch a specific exception. */
761269c8 12823 *ex = ada_catch_exception;
28010a5d 12824 *excep_string = exception_name;
f7f9143b 12825 }
5845583d 12826 *cond_string = cond;
f7f9143b
JB
12827}
12828
12829/* Return the name of the symbol on which we should break in order to
12830 implement a catchpoint of the EX kind. */
12831
12832static const char *
761269c8 12833ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12834{
3eecfa55
JB
12835 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12836
12837 gdb_assert (data->exception_info != NULL);
0259addd 12838
f7f9143b
JB
12839 switch (ex)
12840 {
761269c8 12841 case ada_catch_exception:
3eecfa55 12842 return (data->exception_info->catch_exception_sym);
f7f9143b 12843 break;
761269c8 12844 case ada_catch_exception_unhandled:
3eecfa55 12845 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 12846 break;
761269c8 12847 case ada_catch_assert:
3eecfa55 12848 return (data->exception_info->catch_assert_sym);
f7f9143b
JB
12849 break;
12850 default:
12851 internal_error (__FILE__, __LINE__,
12852 _("unexpected catchpoint kind (%d)"), ex);
12853 }
12854}
12855
12856/* Return the breakpoint ops "virtual table" used for catchpoints
12857 of the EX kind. */
12858
c0a91b2b 12859static const struct breakpoint_ops *
761269c8 12860ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12861{
12862 switch (ex)
12863 {
761269c8 12864 case ada_catch_exception:
f7f9143b
JB
12865 return (&catch_exception_breakpoint_ops);
12866 break;
761269c8 12867 case ada_catch_exception_unhandled:
f7f9143b
JB
12868 return (&catch_exception_unhandled_breakpoint_ops);
12869 break;
761269c8 12870 case ada_catch_assert:
f7f9143b
JB
12871 return (&catch_assert_breakpoint_ops);
12872 break;
12873 default:
12874 internal_error (__FILE__, __LINE__,
12875 _("unexpected catchpoint kind (%d)"), ex);
12876 }
12877}
12878
12879/* Return the condition that will be used to match the current exception
12880 being raised with the exception that the user wants to catch. This
12881 assumes that this condition is used when the inferior just triggered
12882 an exception catchpoint.
12883
12884 The string returned is a newly allocated string that needs to be
12885 deallocated later. */
12886
12887static char *
28010a5d 12888ada_exception_catchpoint_cond_string (const char *excep_string)
f7f9143b 12889{
3d0b0fa3
JB
12890 int i;
12891
0963b4bd 12892 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12893 runtime units that have been compiled without debugging info; if
28010a5d 12894 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12895 exception (e.g. "constraint_error") then, during the evaluation
12896 of the condition expression, the symbol lookup on this name would
0963b4bd 12897 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12898 may then be set only on user-defined exceptions which have the
12899 same not-fully-qualified name (e.g. my_package.constraint_error).
12900
12901 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12902 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12903 exception constraint_error" is rewritten into "catch exception
12904 standard.constraint_error".
12905
12906 If an exception named contraint_error is defined in another package of
12907 the inferior program, then the only way to specify this exception as a
12908 breakpoint condition is to use its fully-qualified named:
12909 e.g. my_package.constraint_error. */
12910
12911 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12912 {
28010a5d 12913 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3
JB
12914 {
12915 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
28010a5d 12916 excep_string);
3d0b0fa3
JB
12917 }
12918 }
28010a5d 12919 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
f7f9143b
JB
12920}
12921
12922/* Return the symtab_and_line that should be used to insert an exception
12923 catchpoint of the TYPE kind.
12924
28010a5d
PA
12925 EXCEP_STRING should contain the name of a specific exception that
12926 the catchpoint should catch, or NULL otherwise.
f7f9143b 12927
28010a5d
PA
12928 ADDR_STRING returns the name of the function where the real
12929 breakpoint that implements the catchpoints is set, depending on the
12930 type of catchpoint we need to create. */
f7f9143b
JB
12931
12932static struct symtab_and_line
761269c8 12933ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
c0a91b2b 12934 char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12935{
12936 const char *sym_name;
12937 struct symbol *sym;
f7f9143b 12938
0259addd
JB
12939 /* First, find out which exception support info to use. */
12940 ada_exception_support_info_sniffer ();
12941
12942 /* Then lookup the function on which we will break in order to catch
f7f9143b 12943 the Ada exceptions requested by the user. */
f7f9143b
JB
12944 sym_name = ada_exception_sym_name (ex);
12945 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12946
f17011e0
JB
12947 /* We can assume that SYM is not NULL at this stage. If the symbol
12948 did not exist, ada_exception_support_info_sniffer would have
12949 raised an exception.
f7f9143b 12950
f17011e0
JB
12951 Also, ada_exception_support_info_sniffer should have already
12952 verified that SYM is a function symbol. */
12953 gdb_assert (sym != NULL);
12954 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
f7f9143b
JB
12955
12956 /* Set ADDR_STRING. */
f7f9143b
JB
12957 *addr_string = xstrdup (sym_name);
12958
f7f9143b 12959 /* Set OPS. */
4b9eee8c 12960 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12961
f17011e0 12962 return find_function_start_sal (sym, 1);
f7f9143b
JB
12963}
12964
b4a5b78b 12965/* Create an Ada exception catchpoint.
f7f9143b 12966
b4a5b78b 12967 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12968
2df4d1d5
JB
12969 If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12970 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12971 of the exception to which this catchpoint applies. When not NULL,
12972 the string must be allocated on the heap, and its deallocation
12973 is no longer the responsibility of the caller.
12974
12975 COND_STRING, if not NULL, is the catchpoint condition. This string
12976 must be allocated on the heap, and its deallocation is no longer
12977 the responsibility of the caller.
f7f9143b 12978
b4a5b78b
JB
12979 TEMPFLAG, if nonzero, means that the underlying breakpoint
12980 should be temporary.
28010a5d 12981
b4a5b78b 12982 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12983
349774ef 12984void
28010a5d 12985create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12986 enum ada_exception_catchpoint_kind ex_kind,
28010a5d 12987 char *excep_string,
5845583d 12988 char *cond_string,
28010a5d 12989 int tempflag,
349774ef 12990 int disabled,
28010a5d
PA
12991 int from_tty)
12992{
12993 struct ada_catchpoint *c;
b4a5b78b
JB
12994 char *addr_string = NULL;
12995 const struct breakpoint_ops *ops = NULL;
12996 struct symtab_and_line sal
12997 = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
28010a5d
PA
12998
12999 c = XNEW (struct ada_catchpoint);
13000 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
349774ef 13001 ops, tempflag, disabled, from_tty);
28010a5d
PA
13002 c->excep_string = excep_string;
13003 create_excep_cond_exprs (c);
5845583d
JB
13004 if (cond_string != NULL)
13005 set_breakpoint_condition (&c->base, cond_string, from_tty);
3ea46bff 13006 install_breakpoint (0, &c->base, 1);
f7f9143b
JB
13007}
13008
9ac4176b
PA
13009/* Implement the "catch exception" command. */
13010
13011static void
13012catch_ada_exception_command (char *arg, int from_tty,
13013 struct cmd_list_element *command)
13014{
13015 struct gdbarch *gdbarch = get_current_arch ();
13016 int tempflag;
761269c8 13017 enum ada_exception_catchpoint_kind ex_kind;
28010a5d 13018 char *excep_string = NULL;
5845583d 13019 char *cond_string = NULL;
9ac4176b
PA
13020
13021 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13022
13023 if (!arg)
13024 arg = "";
b4a5b78b
JB
13025 catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
13026 &cond_string);
13027 create_ada_exception_catchpoint (gdbarch, ex_kind,
13028 excep_string, cond_string,
349774ef
JB
13029 tempflag, 1 /* enabled */,
13030 from_tty);
9ac4176b
PA
13031}
13032
b4a5b78b 13033/* Split the arguments specified in a "catch assert" command.
5845583d 13034
b4a5b78b
JB
13035 ARGS contains the command's arguments (or the empty string if
13036 no arguments were passed).
5845583d
JB
13037
13038 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 13039 (the memory needs to be deallocated after use). */
5845583d 13040
b4a5b78b
JB
13041static void
13042catch_ada_assert_command_split (char *args, char **cond_string)
f7f9143b 13043{
5845583d 13044 args = skip_spaces (args);
f7f9143b 13045
5845583d 13046 /* Check whether a condition was provided. */
61012eef 13047 if (startswith (args, "if")
5845583d 13048 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 13049 {
5845583d 13050 args += 2;
0fcd72ba 13051 args = skip_spaces (args);
5845583d
JB
13052 if (args[0] == '\0')
13053 error (_("condition missing after `if' keyword"));
13054 *cond_string = xstrdup (args);
f7f9143b
JB
13055 }
13056
5845583d
JB
13057 /* Otherwise, there should be no other argument at the end of
13058 the command. */
13059 else if (args[0] != '\0')
13060 error (_("Junk at end of arguments."));
f7f9143b
JB
13061}
13062
9ac4176b
PA
13063/* Implement the "catch assert" command. */
13064
13065static void
13066catch_assert_command (char *arg, int from_tty,
13067 struct cmd_list_element *command)
13068{
13069 struct gdbarch *gdbarch = get_current_arch ();
13070 int tempflag;
5845583d 13071 char *cond_string = NULL;
9ac4176b
PA
13072
13073 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13074
13075 if (!arg)
13076 arg = "";
b4a5b78b 13077 catch_ada_assert_command_split (arg, &cond_string);
761269c8 13078 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
b4a5b78b 13079 NULL, cond_string,
349774ef
JB
13080 tempflag, 1 /* enabled */,
13081 from_tty);
9ac4176b 13082}
778865d3
JB
13083
13084/* Return non-zero if the symbol SYM is an Ada exception object. */
13085
13086static int
13087ada_is_exception_sym (struct symbol *sym)
13088{
13089 const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
13090
13091 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
13092 && SYMBOL_CLASS (sym) != LOC_BLOCK
13093 && SYMBOL_CLASS (sym) != LOC_CONST
13094 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13095 && type_name != NULL && strcmp (type_name, "exception") == 0);
13096}
13097
13098/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13099 Ada exception object. This matches all exceptions except the ones
13100 defined by the Ada language. */
13101
13102static int
13103ada_is_non_standard_exception_sym (struct symbol *sym)
13104{
13105 int i;
13106
13107 if (!ada_is_exception_sym (sym))
13108 return 0;
13109
13110 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13111 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
13112 return 0; /* A standard exception. */
13113
13114 /* Numeric_Error is also a standard exception, so exclude it.
13115 See the STANDARD_EXC description for more details as to why
13116 this exception is not listed in that array. */
13117 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
13118 return 0;
13119
13120 return 1;
13121}
13122
13123/* A helper function for qsort, comparing two struct ada_exc_info
13124 objects.
13125
13126 The comparison is determined first by exception name, and then
13127 by exception address. */
13128
13129static int
13130compare_ada_exception_info (const void *a, const void *b)
13131{
13132 const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
13133 const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
13134 int result;
13135
13136 result = strcmp (exc_a->name, exc_b->name);
13137 if (result != 0)
13138 return result;
13139
13140 if (exc_a->addr < exc_b->addr)
13141 return -1;
13142 if (exc_a->addr > exc_b->addr)
13143 return 1;
13144
13145 return 0;
13146}
13147
13148/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13149 routine, but keeping the first SKIP elements untouched.
13150
13151 All duplicates are also removed. */
13152
13153static void
13154sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
13155 int skip)
13156{
13157 struct ada_exc_info *to_sort
13158 = VEC_address (ada_exc_info, *exceptions) + skip;
13159 int to_sort_len
13160 = VEC_length (ada_exc_info, *exceptions) - skip;
13161 int i, j;
13162
13163 qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
13164 compare_ada_exception_info);
13165
13166 for (i = 1, j = 1; i < to_sort_len; i++)
13167 if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
13168 to_sort[j++] = to_sort[i];
13169 to_sort_len = j;
13170 VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
13171}
13172
13173/* A function intended as the "name_matcher" callback in the struct
13174 quick_symbol_functions' expand_symtabs_matching method.
13175
13176 SEARCH_NAME is the symbol's search name.
13177
13178 If USER_DATA is not NULL, it is a pointer to a regext_t object
13179 used to match the symbol (by natural name). Otherwise, when USER_DATA
13180 is null, no filtering is performed, and all symbols are a positive
13181 match. */
13182
13183static int
13184ada_exc_search_name_matches (const char *search_name, void *user_data)
13185{
9a3c8263 13186 regex_t *preg = (regex_t *) user_data;
778865d3
JB
13187
13188 if (preg == NULL)
13189 return 1;
13190
13191 /* In Ada, the symbol "search name" is a linkage name, whereas
13192 the regular expression used to do the matching refers to
13193 the natural name. So match against the decoded name. */
13194 return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
13195}
13196
13197/* Add all exceptions defined by the Ada standard whose name match
13198 a regular expression.
13199
13200 If PREG is not NULL, then this regexp_t object is used to
13201 perform the symbol name matching. Otherwise, no name-based
13202 filtering is performed.
13203
13204 EXCEPTIONS is a vector of exceptions to which matching exceptions
13205 gets pushed. */
13206
13207static void
13208ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13209{
13210 int i;
13211
13212 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13213 {
13214 if (preg == NULL
13215 || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
13216 {
13217 struct bound_minimal_symbol msymbol
13218 = ada_lookup_simple_minsym (standard_exc[i]);
13219
13220 if (msymbol.minsym != NULL)
13221 {
13222 struct ada_exc_info info
77e371c0 13223 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3
JB
13224
13225 VEC_safe_push (ada_exc_info, *exceptions, &info);
13226 }
13227 }
13228 }
13229}
13230
13231/* Add all Ada exceptions defined locally and accessible from the given
13232 FRAME.
13233
13234 If PREG is not NULL, then this regexp_t object is used to
13235 perform the symbol name matching. Otherwise, no name-based
13236 filtering is performed.
13237
13238 EXCEPTIONS is a vector of exceptions to which matching exceptions
13239 gets pushed. */
13240
13241static void
13242ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
13243 VEC(ada_exc_info) **exceptions)
13244{
3977b71f 13245 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
13246
13247 while (block != 0)
13248 {
13249 struct block_iterator iter;
13250 struct symbol *sym;
13251
13252 ALL_BLOCK_SYMBOLS (block, iter, sym)
13253 {
13254 switch (SYMBOL_CLASS (sym))
13255 {
13256 case LOC_TYPEDEF:
13257 case LOC_BLOCK:
13258 case LOC_CONST:
13259 break;
13260 default:
13261 if (ada_is_exception_sym (sym))
13262 {
13263 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
13264 SYMBOL_VALUE_ADDRESS (sym)};
13265
13266 VEC_safe_push (ada_exc_info, *exceptions, &info);
13267 }
13268 }
13269 }
13270 if (BLOCK_FUNCTION (block) != NULL)
13271 break;
13272 block = BLOCK_SUPERBLOCK (block);
13273 }
13274}
13275
13276/* Add all exceptions defined globally whose name name match
13277 a regular expression, excluding standard exceptions.
13278
13279 The reason we exclude standard exceptions is that they need
13280 to be handled separately: Standard exceptions are defined inside
13281 a runtime unit which is normally not compiled with debugging info,
13282 and thus usually do not show up in our symbol search. However,
13283 if the unit was in fact built with debugging info, we need to
13284 exclude them because they would duplicate the entry we found
13285 during the special loop that specifically searches for those
13286 standard exceptions.
13287
13288 If PREG is not NULL, then this regexp_t object is used to
13289 perform the symbol name matching. Otherwise, no name-based
13290 filtering is performed.
13291
13292 EXCEPTIONS is a vector of exceptions to which matching exceptions
13293 gets pushed. */
13294
13295static void
13296ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
13297{
13298 struct objfile *objfile;
43f3e411 13299 struct compunit_symtab *s;
778865d3 13300
276d885b 13301 expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
bb4142cf 13302 VARIABLES_DOMAIN, preg);
778865d3 13303
43f3e411 13304 ALL_COMPUNITS (objfile, s)
778865d3 13305 {
43f3e411 13306 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
778865d3
JB
13307 int i;
13308
13309 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13310 {
13311 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
13312 struct block_iterator iter;
13313 struct symbol *sym;
13314
13315 ALL_BLOCK_SYMBOLS (b, iter, sym)
13316 if (ada_is_non_standard_exception_sym (sym)
13317 && (preg == NULL
13318 || regexec (preg, SYMBOL_NATURAL_NAME (sym),
13319 0, NULL, 0) == 0))
13320 {
13321 struct ada_exc_info info
13322 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
13323
13324 VEC_safe_push (ada_exc_info, *exceptions, &info);
13325 }
13326 }
13327 }
13328}
13329
13330/* Implements ada_exceptions_list with the regular expression passed
13331 as a regex_t, rather than a string.
13332
13333 If not NULL, PREG is used to filter out exceptions whose names
13334 do not match. Otherwise, all exceptions are listed. */
13335
13336static VEC(ada_exc_info) *
13337ada_exceptions_list_1 (regex_t *preg)
13338{
13339 VEC(ada_exc_info) *result = NULL;
13340 struct cleanup *old_chain
13341 = make_cleanup (VEC_cleanup (ada_exc_info), &result);
13342 int prev_len;
13343
13344 /* First, list the known standard exceptions. These exceptions
13345 need to be handled separately, as they are usually defined in
13346 runtime units that have been compiled without debugging info. */
13347
13348 ada_add_standard_exceptions (preg, &result);
13349
13350 /* Next, find all exceptions whose scope is local and accessible
13351 from the currently selected frame. */
13352
13353 if (has_stack_frames ())
13354 {
13355 prev_len = VEC_length (ada_exc_info, result);
13356 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13357 &result);
13358 if (VEC_length (ada_exc_info, result) > prev_len)
13359 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13360 }
13361
13362 /* Add all exceptions whose scope is global. */
13363
13364 prev_len = VEC_length (ada_exc_info, result);
13365 ada_add_global_exceptions (preg, &result);
13366 if (VEC_length (ada_exc_info, result) > prev_len)
13367 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13368
13369 discard_cleanups (old_chain);
13370 return result;
13371}
13372
13373/* Return a vector of ada_exc_info.
13374
13375 If REGEXP is NULL, all exceptions are included in the result.
13376 Otherwise, it should contain a valid regular expression,
13377 and only the exceptions whose names match that regular expression
13378 are included in the result.
13379
13380 The exceptions are sorted in the following order:
13381 - Standard exceptions (defined by the Ada language), in
13382 alphabetical order;
13383 - Exceptions only visible from the current frame, in
13384 alphabetical order;
13385 - Exceptions whose scope is global, in alphabetical order. */
13386
13387VEC(ada_exc_info) *
13388ada_exceptions_list (const char *regexp)
13389{
13390 VEC(ada_exc_info) *result = NULL;
13391 struct cleanup *old_chain = NULL;
13392 regex_t reg;
13393
13394 if (regexp != NULL)
13395 old_chain = compile_rx_or_error (&reg, regexp,
13396 _("invalid regular expression"));
13397
13398 result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
13399
13400 if (old_chain != NULL)
13401 do_cleanups (old_chain);
13402 return result;
13403}
13404
13405/* Implement the "info exceptions" command. */
13406
13407static void
13408info_exceptions_command (char *regexp, int from_tty)
13409{
13410 VEC(ada_exc_info) *exceptions;
13411 struct cleanup *cleanup;
13412 struct gdbarch *gdbarch = get_current_arch ();
13413 int ix;
13414 struct ada_exc_info *info;
13415
13416 exceptions = ada_exceptions_list (regexp);
13417 cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
13418
13419 if (regexp != NULL)
13420 printf_filtered
13421 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13422 else
13423 printf_filtered (_("All defined Ada exceptions:\n"));
13424
13425 for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
13426 printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
13427
13428 do_cleanups (cleanup);
13429}
13430
4c4b4cd2
PH
13431 /* Operators */
13432/* Information about operators given special treatment in functions
13433 below. */
13434/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13435
13436#define ADA_OPERATORS \
13437 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13438 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13439 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13440 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13441 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13442 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13443 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13444 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13445 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13446 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13447 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13448 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13449 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13450 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13451 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13452 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13453 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13454 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13455 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13456
13457static void
554794dc
SDJ
13458ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13459 int *argsp)
4c4b4cd2
PH
13460{
13461 switch (exp->elts[pc - 1].opcode)
13462 {
76a01679 13463 default:
4c4b4cd2
PH
13464 operator_length_standard (exp, pc, oplenp, argsp);
13465 break;
13466
13467#define OP_DEFN(op, len, args, binop) \
13468 case op: *oplenp = len; *argsp = args; break;
13469 ADA_OPERATORS;
13470#undef OP_DEFN
52ce6436
PH
13471
13472 case OP_AGGREGATE:
13473 *oplenp = 3;
13474 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13475 break;
13476
13477 case OP_CHOICES:
13478 *oplenp = 3;
13479 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13480 break;
4c4b4cd2
PH
13481 }
13482}
13483
c0201579
JK
13484/* Implementation of the exp_descriptor method operator_check. */
13485
13486static int
13487ada_operator_check (struct expression *exp, int pos,
13488 int (*objfile_func) (struct objfile *objfile, void *data),
13489 void *data)
13490{
13491 const union exp_element *const elts = exp->elts;
13492 struct type *type = NULL;
13493
13494 switch (elts[pos].opcode)
13495 {
13496 case UNOP_IN_RANGE:
13497 case UNOP_QUAL:
13498 type = elts[pos + 1].type;
13499 break;
13500
13501 default:
13502 return operator_check_standard (exp, pos, objfile_func, data);
13503 }
13504
13505 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13506
13507 if (type && TYPE_OBJFILE (type)
13508 && (*objfile_func) (TYPE_OBJFILE (type), data))
13509 return 1;
13510
13511 return 0;
13512}
13513
4c4b4cd2
PH
13514static char *
13515ada_op_name (enum exp_opcode opcode)
13516{
13517 switch (opcode)
13518 {
76a01679 13519 default:
4c4b4cd2 13520 return op_name_standard (opcode);
52ce6436 13521
4c4b4cd2
PH
13522#define OP_DEFN(op, len, args, binop) case op: return #op;
13523 ADA_OPERATORS;
13524#undef OP_DEFN
52ce6436
PH
13525
13526 case OP_AGGREGATE:
13527 return "OP_AGGREGATE";
13528 case OP_CHOICES:
13529 return "OP_CHOICES";
13530 case OP_NAME:
13531 return "OP_NAME";
4c4b4cd2
PH
13532 }
13533}
13534
13535/* As for operator_length, but assumes PC is pointing at the first
13536 element of the operator, and gives meaningful results only for the
52ce6436 13537 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13538
13539static void
76a01679
JB
13540ada_forward_operator_length (struct expression *exp, int pc,
13541 int *oplenp, int *argsp)
4c4b4cd2 13542{
76a01679 13543 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13544 {
13545 default:
13546 *oplenp = *argsp = 0;
13547 break;
52ce6436 13548
4c4b4cd2
PH
13549#define OP_DEFN(op, len, args, binop) \
13550 case op: *oplenp = len; *argsp = args; break;
13551 ADA_OPERATORS;
13552#undef OP_DEFN
52ce6436
PH
13553
13554 case OP_AGGREGATE:
13555 *oplenp = 3;
13556 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13557 break;
13558
13559 case OP_CHOICES:
13560 *oplenp = 3;
13561 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13562 break;
13563
13564 case OP_STRING:
13565 case OP_NAME:
13566 {
13567 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13568
52ce6436
PH
13569 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13570 *argsp = 0;
13571 break;
13572 }
4c4b4cd2
PH
13573 }
13574}
13575
13576static int
13577ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13578{
13579 enum exp_opcode op = exp->elts[elt].opcode;
13580 int oplen, nargs;
13581 int pc = elt;
13582 int i;
76a01679 13583
4c4b4cd2
PH
13584 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13585
76a01679 13586 switch (op)
4c4b4cd2 13587 {
76a01679 13588 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13589 case OP_ATR_FIRST:
13590 case OP_ATR_LAST:
13591 case OP_ATR_LENGTH:
13592 case OP_ATR_IMAGE:
13593 case OP_ATR_MAX:
13594 case OP_ATR_MIN:
13595 case OP_ATR_MODULUS:
13596 case OP_ATR_POS:
13597 case OP_ATR_SIZE:
13598 case OP_ATR_TAG:
13599 case OP_ATR_VAL:
13600 break;
13601
13602 case UNOP_IN_RANGE:
13603 case UNOP_QUAL:
323e0a4a
AC
13604 /* XXX: gdb_sprint_host_address, type_sprint */
13605 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13606 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13607 fprintf_filtered (stream, " (");
13608 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13609 fprintf_filtered (stream, ")");
13610 break;
13611 case BINOP_IN_BOUNDS:
52ce6436
PH
13612 fprintf_filtered (stream, " (%d)",
13613 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13614 break;
13615 case TERNOP_IN_RANGE:
13616 break;
13617
52ce6436
PH
13618 case OP_AGGREGATE:
13619 case OP_OTHERS:
13620 case OP_DISCRETE_RANGE:
13621 case OP_POSITIONAL:
13622 case OP_CHOICES:
13623 break;
13624
13625 case OP_NAME:
13626 case OP_STRING:
13627 {
13628 char *name = &exp->elts[elt + 2].string;
13629 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13630
52ce6436
PH
13631 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13632 break;
13633 }
13634
4c4b4cd2
PH
13635 default:
13636 return dump_subexp_body_standard (exp, stream, elt);
13637 }
13638
13639 elt += oplen;
13640 for (i = 0; i < nargs; i += 1)
13641 elt = dump_subexp (exp, stream, elt);
13642
13643 return elt;
13644}
13645
13646/* The Ada extension of print_subexp (q.v.). */
13647
76a01679
JB
13648static void
13649ada_print_subexp (struct expression *exp, int *pos,
13650 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13651{
52ce6436 13652 int oplen, nargs, i;
4c4b4cd2
PH
13653 int pc = *pos;
13654 enum exp_opcode op = exp->elts[pc].opcode;
13655
13656 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13657
52ce6436 13658 *pos += oplen;
4c4b4cd2
PH
13659 switch (op)
13660 {
13661 default:
52ce6436 13662 *pos -= oplen;
4c4b4cd2
PH
13663 print_subexp_standard (exp, pos, stream, prec);
13664 return;
13665
13666 case OP_VAR_VALUE:
4c4b4cd2
PH
13667 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13668 return;
13669
13670 case BINOP_IN_BOUNDS:
323e0a4a 13671 /* XXX: sprint_subexp */
4c4b4cd2 13672 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13673 fputs_filtered (" in ", stream);
4c4b4cd2 13674 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13675 fputs_filtered ("'range", stream);
4c4b4cd2 13676 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13677 fprintf_filtered (stream, "(%ld)",
13678 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13679 return;
13680
13681 case TERNOP_IN_RANGE:
4c4b4cd2 13682 if (prec >= PREC_EQUAL)
76a01679 13683 fputs_filtered ("(", stream);
323e0a4a 13684 /* XXX: sprint_subexp */
4c4b4cd2 13685 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13686 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13687 print_subexp (exp, pos, stream, PREC_EQUAL);
13688 fputs_filtered (" .. ", stream);
13689 print_subexp (exp, pos, stream, PREC_EQUAL);
13690 if (prec >= PREC_EQUAL)
76a01679
JB
13691 fputs_filtered (")", stream);
13692 return;
4c4b4cd2
PH
13693
13694 case OP_ATR_FIRST:
13695 case OP_ATR_LAST:
13696 case OP_ATR_LENGTH:
13697 case OP_ATR_IMAGE:
13698 case OP_ATR_MAX:
13699 case OP_ATR_MIN:
13700 case OP_ATR_MODULUS:
13701 case OP_ATR_POS:
13702 case OP_ATR_SIZE:
13703 case OP_ATR_TAG:
13704 case OP_ATR_VAL:
4c4b4cd2 13705 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
13706 {
13707 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
13708 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13709 &type_print_raw_options);
76a01679
JB
13710 *pos += 3;
13711 }
4c4b4cd2 13712 else
76a01679 13713 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13714 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13715 if (nargs > 1)
76a01679
JB
13716 {
13717 int tem;
5b4ee69b 13718
76a01679
JB
13719 for (tem = 1; tem < nargs; tem += 1)
13720 {
13721 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13722 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13723 }
13724 fputs_filtered (")", stream);
13725 }
4c4b4cd2 13726 return;
14f9c5c9 13727
4c4b4cd2 13728 case UNOP_QUAL:
4c4b4cd2
PH
13729 type_print (exp->elts[pc + 1].type, "", stream, 0);
13730 fputs_filtered ("'(", stream);
13731 print_subexp (exp, pos, stream, PREC_PREFIX);
13732 fputs_filtered (")", stream);
13733 return;
14f9c5c9 13734
4c4b4cd2 13735 case UNOP_IN_RANGE:
323e0a4a 13736 /* XXX: sprint_subexp */
4c4b4cd2 13737 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13738 fputs_filtered (" in ", stream);
79d43c61
TT
13739 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13740 &type_print_raw_options);
4c4b4cd2 13741 return;
52ce6436
PH
13742
13743 case OP_DISCRETE_RANGE:
13744 print_subexp (exp, pos, stream, PREC_SUFFIX);
13745 fputs_filtered ("..", stream);
13746 print_subexp (exp, pos, stream, PREC_SUFFIX);
13747 return;
13748
13749 case OP_OTHERS:
13750 fputs_filtered ("others => ", stream);
13751 print_subexp (exp, pos, stream, PREC_SUFFIX);
13752 return;
13753
13754 case OP_CHOICES:
13755 for (i = 0; i < nargs-1; i += 1)
13756 {
13757 if (i > 0)
13758 fputs_filtered ("|", stream);
13759 print_subexp (exp, pos, stream, PREC_SUFFIX);
13760 }
13761 fputs_filtered (" => ", stream);
13762 print_subexp (exp, pos, stream, PREC_SUFFIX);
13763 return;
13764
13765 case OP_POSITIONAL:
13766 print_subexp (exp, pos, stream, PREC_SUFFIX);
13767 return;
13768
13769 case OP_AGGREGATE:
13770 fputs_filtered ("(", stream);
13771 for (i = 0; i < nargs; i += 1)
13772 {
13773 if (i > 0)
13774 fputs_filtered (", ", stream);
13775 print_subexp (exp, pos, stream, PREC_SUFFIX);
13776 }
13777 fputs_filtered (")", stream);
13778 return;
4c4b4cd2
PH
13779 }
13780}
14f9c5c9
AS
13781
13782/* Table mapping opcodes into strings for printing operators
13783 and precedences of the operators. */
13784
d2e4a39e
AS
13785static const struct op_print ada_op_print_tab[] = {
13786 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13787 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13788 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13789 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13790 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13791 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13792 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13793 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13794 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13795 {">=", BINOP_GEQ, PREC_ORDER, 0},
13796 {">", BINOP_GTR, PREC_ORDER, 0},
13797 {"<", BINOP_LESS, PREC_ORDER, 0},
13798 {">>", BINOP_RSH, PREC_SHIFT, 0},
13799 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13800 {"+", BINOP_ADD, PREC_ADD, 0},
13801 {"-", BINOP_SUB, PREC_ADD, 0},
13802 {"&", BINOP_CONCAT, PREC_ADD, 0},
13803 {"*", BINOP_MUL, PREC_MUL, 0},
13804 {"/", BINOP_DIV, PREC_MUL, 0},
13805 {"rem", BINOP_REM, PREC_MUL, 0},
13806 {"mod", BINOP_MOD, PREC_MUL, 0},
13807 {"**", BINOP_EXP, PREC_REPEAT, 0},
13808 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13809 {"-", UNOP_NEG, PREC_PREFIX, 0},
13810 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13811 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13812 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13813 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13814 {".all", UNOP_IND, PREC_SUFFIX, 1},
13815 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13816 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 13817 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9
AS
13818};
13819\f
72d5681a
PH
13820enum ada_primitive_types {
13821 ada_primitive_type_int,
13822 ada_primitive_type_long,
13823 ada_primitive_type_short,
13824 ada_primitive_type_char,
13825 ada_primitive_type_float,
13826 ada_primitive_type_double,
13827 ada_primitive_type_void,
13828 ada_primitive_type_long_long,
13829 ada_primitive_type_long_double,
13830 ada_primitive_type_natural,
13831 ada_primitive_type_positive,
13832 ada_primitive_type_system_address,
13833 nr_ada_primitive_types
13834};
6c038f32
PH
13835
13836static void
d4a9a881 13837ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
13838 struct language_arch_info *lai)
13839{
d4a9a881 13840 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 13841
72d5681a 13842 lai->primitive_type_vector
d4a9a881 13843 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 13844 struct type *);
e9bb382b
UW
13845
13846 lai->primitive_type_vector [ada_primitive_type_int]
13847 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13848 0, "integer");
13849 lai->primitive_type_vector [ada_primitive_type_long]
13850 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13851 0, "long_integer");
13852 lai->primitive_type_vector [ada_primitive_type_short]
13853 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13854 0, "short_integer");
13855 lai->string_char_type
13856 = lai->primitive_type_vector [ada_primitive_type_char]
cd7c1778 13857 = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
e9bb382b
UW
13858 lai->primitive_type_vector [ada_primitive_type_float]
13859 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13860 "float", NULL);
13861 lai->primitive_type_vector [ada_primitive_type_double]
13862 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13863 "long_float", NULL);
13864 lai->primitive_type_vector [ada_primitive_type_long_long]
13865 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13866 0, "long_long_integer");
13867 lai->primitive_type_vector [ada_primitive_type_long_double]
13868 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13869 "long_long_float", NULL);
13870 lai->primitive_type_vector [ada_primitive_type_natural]
13871 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13872 0, "natural");
13873 lai->primitive_type_vector [ada_primitive_type_positive]
13874 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13875 0, "positive");
13876 lai->primitive_type_vector [ada_primitive_type_void]
13877 = builtin->builtin_void;
13878
13879 lai->primitive_type_vector [ada_primitive_type_system_address]
13880 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
13881 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13882 = "system__address";
fbb06eb1 13883
47e729a8 13884 lai->bool_type_symbol = NULL;
fbb06eb1 13885 lai->bool_type_default = builtin->builtin_bool;
6c038f32 13886}
6c038f32
PH
13887\f
13888 /* Language vector */
13889
13890/* Not really used, but needed in the ada_language_defn. */
13891
13892static void
6c7a06a3 13893emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 13894{
6c7a06a3 13895 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
13896}
13897
13898static int
410a0ff2 13899parse (struct parser_state *ps)
6c038f32
PH
13900{
13901 warnings_issued = 0;
410a0ff2 13902 return ada_parse (ps);
6c038f32
PH
13903}
13904
13905static const struct exp_descriptor ada_exp_descriptor = {
13906 ada_print_subexp,
13907 ada_operator_length,
c0201579 13908 ada_operator_check,
6c038f32
PH
13909 ada_op_name,
13910 ada_dump_subexp_body,
13911 ada_evaluate_subexp
13912};
13913
1a119f36 13914/* Implement the "la_get_symbol_name_cmp" language_defn method
74ccd7f5
JB
13915 for Ada. */
13916
1a119f36
JB
13917static symbol_name_cmp_ftype
13918ada_get_symbol_name_cmp (const char *lookup_name)
74ccd7f5
JB
13919{
13920 if (should_use_wild_match (lookup_name))
13921 return wild_match;
13922 else
13923 return compare_names;
13924}
13925
a5ee536b
JB
13926/* Implement the "la_read_var_value" language_defn method for Ada. */
13927
13928static struct value *
63e43d3a
PMR
13929ada_read_var_value (struct symbol *var, const struct block *var_block,
13930 struct frame_info *frame)
a5ee536b 13931{
3977b71f 13932 const struct block *frame_block = NULL;
a5ee536b
JB
13933 struct symbol *renaming_sym = NULL;
13934
13935 /* The only case where default_read_var_value is not sufficient
13936 is when VAR is a renaming... */
13937 if (frame)
13938 frame_block = get_frame_block (frame, NULL);
13939 if (frame_block)
13940 renaming_sym = ada_find_renaming_symbol (var, frame_block);
13941 if (renaming_sym != NULL)
13942 return ada_read_renaming_var_value (renaming_sym, frame_block);
13943
13944 /* This is a typical case where we expect the default_read_var_value
13945 function to work. */
63e43d3a 13946 return default_read_var_value (var, var_block, frame);
a5ee536b
JB
13947}
13948
6c038f32
PH
13949const struct language_defn ada_language_defn = {
13950 "ada", /* Language name */
6abde28f 13951 "Ada",
6c038f32 13952 language_ada,
6c038f32 13953 range_check_off,
6c038f32
PH
13954 case_sensitive_on, /* Yes, Ada is case-insensitive, but
13955 that's not quite what this means. */
6c038f32 13956 array_row_major,
9a044a89 13957 macro_expansion_no,
6c038f32
PH
13958 &ada_exp_descriptor,
13959 parse,
13960 ada_error,
13961 resolve,
13962 ada_printchar, /* Print a character constant */
13963 ada_printstr, /* Function to print string constant */
13964 emit_char, /* Function to print single char (not used) */
6c038f32 13965 ada_print_type, /* Print a type using appropriate syntax */
be942545 13966 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
13967 ada_val_print, /* Print a value using appropriate syntax */
13968 ada_value_print, /* Print a top-level value */
a5ee536b 13969 ada_read_var_value, /* la_read_var_value */
6c038f32 13970 NULL, /* Language specific skip_trampoline */
2b2d9e11 13971 NULL, /* name_of_this */
6c038f32
PH
13972 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
13973 basic_lookup_transparent_type, /* lookup_transparent_type */
13974 ada_la_decode, /* Language specific symbol demangler */
0963b4bd
MS
13975 NULL, /* Language specific
13976 class_name_from_physname */
6c038f32
PH
13977 ada_op_print_tab, /* expression operators for printing */
13978 0, /* c-style arrays */
13979 1, /* String lower bound */
6c038f32 13980 ada_get_gdb_completer_word_break_characters,
41d27058 13981 ada_make_symbol_completion_list,
72d5681a 13982 ada_language_arch_info,
e79af960 13983 ada_print_array_index,
41f1b697 13984 default_pass_by_reference,
ae6a3a4c 13985 c_get_string,
1a119f36 13986 ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */
f8eba3c6 13987 ada_iterate_over_symbols,
a53b64ea 13988 &ada_varobj_ops,
bb2ec1b3
TT
13989 NULL,
13990 NULL,
6c038f32
PH
13991 LANG_MAGIC
13992};
13993
2c0b251b
PA
13994/* Provide a prototype to silence -Wmissing-prototypes. */
13995extern initialize_file_ftype _initialize_ada_language;
13996
5bf03f13
JB
13997/* Command-list for the "set/show ada" prefix command. */
13998static struct cmd_list_element *set_ada_list;
13999static struct cmd_list_element *show_ada_list;
14000
14001/* Implement the "set ada" prefix command. */
14002
14003static void
14004set_ada_command (char *arg, int from_tty)
14005{
14006 printf_unfiltered (_(\
14007"\"set ada\" must be followed by the name of a setting.\n"));
635c7e8a 14008 help_list (set_ada_list, "set ada ", all_commands, gdb_stdout);
5bf03f13
JB
14009}
14010
14011/* Implement the "show ada" prefix command. */
14012
14013static void
14014show_ada_command (char *args, int from_tty)
14015{
14016 cmd_show_list (show_ada_list, from_tty, "");
14017}
14018
2060206e
PA
14019static void
14020initialize_ada_catchpoint_ops (void)
14021{
14022 struct breakpoint_ops *ops;
14023
14024 initialize_breakpoint_ops ();
14025
14026 ops = &catch_exception_breakpoint_ops;
14027 *ops = bkpt_breakpoint_ops;
14028 ops->dtor = dtor_catch_exception;
14029 ops->allocate_location = allocate_location_catch_exception;
14030 ops->re_set = re_set_catch_exception;
14031 ops->check_status = check_status_catch_exception;
14032 ops->print_it = print_it_catch_exception;
14033 ops->print_one = print_one_catch_exception;
14034 ops->print_mention = print_mention_catch_exception;
14035 ops->print_recreate = print_recreate_catch_exception;
14036
14037 ops = &catch_exception_unhandled_breakpoint_ops;
14038 *ops = bkpt_breakpoint_ops;
14039 ops->dtor = dtor_catch_exception_unhandled;
14040 ops->allocate_location = allocate_location_catch_exception_unhandled;
14041 ops->re_set = re_set_catch_exception_unhandled;
14042 ops->check_status = check_status_catch_exception_unhandled;
14043 ops->print_it = print_it_catch_exception_unhandled;
14044 ops->print_one = print_one_catch_exception_unhandled;
14045 ops->print_mention = print_mention_catch_exception_unhandled;
14046 ops->print_recreate = print_recreate_catch_exception_unhandled;
14047
14048 ops = &catch_assert_breakpoint_ops;
14049 *ops = bkpt_breakpoint_ops;
14050 ops->dtor = dtor_catch_assert;
14051 ops->allocate_location = allocate_location_catch_assert;
14052 ops->re_set = re_set_catch_assert;
14053 ops->check_status = check_status_catch_assert;
14054 ops->print_it = print_it_catch_assert;
14055 ops->print_one = print_one_catch_assert;
14056 ops->print_mention = print_mention_catch_assert;
14057 ops->print_recreate = print_recreate_catch_assert;
14058}
14059
3d9434b5
JB
14060/* This module's 'new_objfile' observer. */
14061
14062static void
14063ada_new_objfile_observer (struct objfile *objfile)
14064{
14065 ada_clear_symbol_cache ();
14066}
14067
14068/* This module's 'free_objfile' observer. */
14069
14070static void
14071ada_free_objfile_observer (struct objfile *objfile)
14072{
14073 ada_clear_symbol_cache ();
14074}
14075
d2e4a39e 14076void
6c038f32 14077_initialize_ada_language (void)
14f9c5c9 14078{
6c038f32
PH
14079 add_language (&ada_language_defn);
14080
2060206e
PA
14081 initialize_ada_catchpoint_ops ();
14082
5bf03f13
JB
14083 add_prefix_cmd ("ada", no_class, set_ada_command,
14084 _("Prefix command for changing Ada-specfic settings"),
14085 &set_ada_list, "set ada ", 0, &setlist);
14086
14087 add_prefix_cmd ("ada", no_class, show_ada_command,
14088 _("Generic command for showing Ada-specific settings."),
14089 &show_ada_list, "show ada ", 0, &showlist);
14090
14091 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14092 &trust_pad_over_xvs, _("\
14093Enable or disable an optimization trusting PAD types over XVS types"), _("\
14094Show whether an optimization trusting PAD types over XVS types is activated"),
14095 _("\
14096This is related to the encoding used by the GNAT compiler. The debugger\n\
14097should normally trust the contents of PAD types, but certain older versions\n\
14098of GNAT have a bug that sometimes causes the information in the PAD type\n\
14099to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14100work around this bug. It is always safe to turn this option \"off\", but\n\
14101this incurs a slight performance penalty, so it is recommended to NOT change\n\
14102this option to \"off\" unless necessary."),
14103 NULL, NULL, &set_ada_list, &show_ada_list);
14104
9ac4176b
PA
14105 add_catch_command ("exception", _("\
14106Catch Ada exceptions, when raised.\n\
14107With an argument, catch only exceptions with the given name."),
14108 catch_ada_exception_command,
14109 NULL,
14110 CATCH_PERMANENT,
14111 CATCH_TEMPORARY);
14112 add_catch_command ("assert", _("\
14113Catch failed Ada assertions, when raised.\n\
14114With an argument, catch only exceptions with the given name."),
14115 catch_assert_command,
14116 NULL,
14117 CATCH_PERMANENT,
14118 CATCH_TEMPORARY);
14119
6c038f32 14120 varsize_limit = 65536;
6c038f32 14121
778865d3
JB
14122 add_info ("exceptions", info_exceptions_command,
14123 _("\
14124List all Ada exception names.\n\
14125If a regular expression is passed as an argument, only those matching\n\
14126the regular expression are listed."));
14127
c6044dd1
JB
14128 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
14129 _("Set Ada maintenance-related variables."),
14130 &maint_set_ada_cmdlist, "maintenance set ada ",
14131 0/*allow-unknown*/, &maintenance_set_cmdlist);
14132
14133 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
14134 _("Show Ada maintenance-related variables"),
14135 &maint_show_ada_cmdlist, "maintenance show ada ",
14136 0/*allow-unknown*/, &maintenance_show_cmdlist);
14137
14138 add_setshow_boolean_cmd
14139 ("ignore-descriptive-types", class_maintenance,
14140 &ada_ignore_descriptive_types_p,
14141 _("Set whether descriptive types generated by GNAT should be ignored."),
14142 _("Show whether descriptive types generated by GNAT should be ignored."),
14143 _("\
14144When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14145DWARF attribute."),
14146 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14147
6c038f32
PH
14148 obstack_init (&symbol_list_obstack);
14149
14150 decoded_names_store = htab_create_alloc
14151 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
14152 NULL, xcalloc, xfree);
6b69afc4 14153
3d9434b5
JB
14154 /* The ada-lang observers. */
14155 observer_attach_new_objfile (ada_new_objfile_observer);
14156 observer_attach_free_objfile (ada_free_objfile_observer);
e802dbe0 14157 observer_attach_inferior_exit (ada_inferior_exit);
ee01b665
JB
14158
14159 /* Setup various context-specific data. */
e802dbe0 14160 ada_inferior_data
8e260fc0 14161 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
ee01b665
JB
14162 ada_pspace_data_handle
14163 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14f9c5c9 14164}