]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
Fix seg-faults when fetching the frags of local symbols.
[thirdparty/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
ecd75fc8 3 Copyright (C) 1992-2014 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 <stdio.h>
0e9f083f 23#include <string.h>
14f9c5c9
AS
24#include <ctype.h>
25#include <stdarg.h>
26#include "demangle.h"
4c4b4cd2
PH
27#include "gdb_regex.h"
28#include "frame.h"
14f9c5c9
AS
29#include "symtab.h"
30#include "gdbtypes.h"
31#include "gdbcmd.h"
32#include "expression.h"
33#include "parser-defs.h"
34#include "language.h"
a53b64ea 35#include "varobj.h"
14f9c5c9
AS
36#include "c-lang.h"
37#include "inferior.h"
38#include "symfile.h"
39#include "objfiles.h"
40#include "breakpoint.h"
41#include "gdbcore.h"
4c4b4cd2
PH
42#include "hashtab.h"
43#include "gdb_obstack.h"
14f9c5c9 44#include "ada-lang.h"
4c4b4cd2 45#include "completer.h"
53ce3c39 46#include <sys/stat.h>
14f9c5c9 47#include "ui-out.h"
fe898f56 48#include "block.h"
04714b91 49#include "infcall.h"
de4f826b 50#include "dictionary.h"
60250e8b 51#include "exceptions.h"
f7f9143b
JB
52#include "annotate.h"
53#include "valprint.h"
9bbc9174 54#include "source.h"
0259addd 55#include "observer.h"
2ba95b9b 56#include "vec.h"
692465f1 57#include "stack.h"
fa864999 58#include "gdb_vecs.h"
79d43c61 59#include "typeprint.h"
14f9c5c9 60
ccefe4c4 61#include "psymtab.h"
40bc484c 62#include "value.h"
956a9fb9 63#include "mi/mi-common.h"
9ac4176b 64#include "arch-utils.h"
0fcd72ba 65#include "cli/cli-utils.h"
ccefe4c4 66
4c4b4cd2 67/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 68 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
69 Copied from valarith.c. */
70
71#ifndef TRUNCATION_TOWARDS_ZERO
72#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
73#endif
74
d2e4a39e 75static struct type *desc_base_type (struct type *);
14f9c5c9 76
d2e4a39e 77static struct type *desc_bounds_type (struct type *);
14f9c5c9 78
d2e4a39e 79static struct value *desc_bounds (struct value *);
14f9c5c9 80
d2e4a39e 81static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 82
d2e4a39e 83static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 84
556bdfd4 85static struct type *desc_data_target_type (struct type *);
14f9c5c9 86
d2e4a39e 87static struct value *desc_data (struct value *);
14f9c5c9 88
d2e4a39e 89static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 90
d2e4a39e 91static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 92
d2e4a39e 93static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 94
d2e4a39e 95static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 96
d2e4a39e 97static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 98
d2e4a39e 99static struct type *desc_index_type (struct type *, int);
14f9c5c9 100
d2e4a39e 101static int desc_arity (struct type *);
14f9c5c9 102
d2e4a39e 103static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 104
d2e4a39e 105static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 106
40658b94
PH
107static int full_match (const char *, const char *);
108
40bc484c 109static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 110
4c4b4cd2 111static void ada_add_block_symbols (struct obstack *,
f0c5f9b2 112 const struct block *, const char *,
2570f2b7 113 domain_enum, struct objfile *, int);
14f9c5c9 114
4c4b4cd2 115static int is_nonfunction (struct ada_symbol_info *, 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
122static struct ada_symbol_info *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
4c4b4cd2
PH
218static struct value *ada_search_struct_field (char *, struct value *, int,
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
4c4b4cd2
PH
230static int ada_resolve_function (struct ada_symbol_info *, int,
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
PH
238
239static void check_size (const struct type *);
52ce6436
PH
240
241static struct value *ada_index_struct_field (int, struct value *, int,
242 struct type *);
243
244static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
245 struct expression *,
246 int *, enum noside);
52ce6436
PH
247
248static void aggregate_assign_from_choices (struct value *, struct value *,
249 struct expression *,
250 int *, LONGEST *, int *,
251 int, LONGEST, LONGEST);
252
253static void aggregate_assign_positional (struct value *, struct value *,
254 struct expression *,
255 int *, LONGEST *, int *, int,
256 LONGEST, LONGEST);
257
258
259static void aggregate_assign_others (struct value *, struct value *,
260 struct expression *,
261 int *, LONGEST *, int, LONGEST, LONGEST);
262
263
264static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
265
266
267static struct value *ada_evaluate_subexp (struct type *, struct expression *,
268 int *, enum noside);
269
270static void ada_forward_operator_length (struct expression *, int, int *,
271 int *);
852dff6c
JB
272
273static struct type *ada_find_any_type (const char *name);
4c4b4cd2
PH
274\f
275
ee01b665
JB
276/* The result of a symbol lookup to be stored in our symbol cache. */
277
278struct cache_entry
279{
280 /* The name used to perform the lookup. */
281 const char *name;
282 /* The namespace used during the lookup. */
283 domain_enum namespace;
284 /* The symbol returned by the lookup, or NULL if no matching symbol
285 was found. */
286 struct symbol *sym;
287 /* The block where the symbol was found, or NULL if no matching
288 symbol was found. */
289 const struct block *block;
290 /* A pointer to the next entry with the same hash. */
291 struct cache_entry *next;
292};
293
294/* The Ada symbol cache, used to store the result of Ada-mode symbol
295 lookups in the course of executing the user's commands.
296
297 The cache is implemented using a simple, fixed-sized hash.
298 The size is fixed on the grounds that there are not likely to be
299 all that many symbols looked up during any given session, regardless
300 of the size of the symbol table. If we decide to go to a resizable
301 table, let's just use the stuff from libiberty instead. */
302
303#define HASH_SIZE 1009
304
305struct ada_symbol_cache
306{
307 /* An obstack used to store the entries in our cache. */
308 struct obstack cache_space;
309
310 /* The root of the hash table used to implement our symbol cache. */
311 struct cache_entry *root[HASH_SIZE];
312};
313
314static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
76a01679 315
4c4b4cd2 316/* Maximum-sized dynamic type. */
14f9c5c9
AS
317static unsigned int varsize_limit;
318
4c4b4cd2
PH
319/* FIXME: brobecker/2003-09-17: No longer a const because it is
320 returned by a function that does not return a const char *. */
321static char *ada_completer_word_break_characters =
322#ifdef VMS
323 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
324#else
14f9c5c9 325 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 326#endif
14f9c5c9 327
4c4b4cd2 328/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 329static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 330 = "__gnat_ada_main_program_name";
14f9c5c9 331
4c4b4cd2
PH
332/* Limit on the number of warnings to raise per expression evaluation. */
333static int warning_limit = 2;
334
335/* Number of warning messages issued; reset to 0 by cleanups after
336 expression evaluation. */
337static int warnings_issued = 0;
338
339static const char *known_runtime_file_name_patterns[] = {
340 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
341};
342
343static const char *known_auxiliary_function_name_patterns[] = {
344 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
345};
346
347/* Space for allocating results of ada_lookup_symbol_list. */
348static struct obstack symbol_list_obstack;
349
c6044dd1
JB
350/* Maintenance-related settings for this module. */
351
352static struct cmd_list_element *maint_set_ada_cmdlist;
353static struct cmd_list_element *maint_show_ada_cmdlist;
354
355/* Implement the "maintenance set ada" (prefix) command. */
356
357static void
358maint_set_ada_cmd (char *args, int from_tty)
359{
360 help_list (maint_set_ada_cmdlist, "maintenance set ada ", -1, gdb_stdout);
361}
362
363/* Implement the "maintenance show ada" (prefix) command. */
364
365static void
366maint_show_ada_cmd (char *args, int from_tty)
367{
368 cmd_show_list (maint_show_ada_cmdlist, from_tty, "");
369}
370
371/* The "maintenance ada set/show ignore-descriptive-type" value. */
372
373static int ada_ignore_descriptive_types_p = 0;
374
e802dbe0
JB
375 /* Inferior-specific data. */
376
377/* Per-inferior data for this module. */
378
379struct ada_inferior_data
380{
381 /* The ada__tags__type_specific_data type, which is used when decoding
382 tagged types. With older versions of GNAT, this type was directly
383 accessible through a component ("tsd") in the object tag. But this
384 is no longer the case, so we cache it for each inferior. */
385 struct type *tsd_type;
3eecfa55
JB
386
387 /* The exception_support_info data. This data is used to determine
388 how to implement support for Ada exception catchpoints in a given
389 inferior. */
390 const struct exception_support_info *exception_info;
e802dbe0
JB
391};
392
393/* Our key to this module's inferior data. */
394static const struct inferior_data *ada_inferior_data;
395
396/* A cleanup routine for our inferior data. */
397static void
398ada_inferior_data_cleanup (struct inferior *inf, void *arg)
399{
400 struct ada_inferior_data *data;
401
402 data = inferior_data (inf, ada_inferior_data);
403 if (data != NULL)
404 xfree (data);
405}
406
407/* Return our inferior data for the given inferior (INF).
408
409 This function always returns a valid pointer to an allocated
410 ada_inferior_data structure. If INF's inferior data has not
411 been previously set, this functions creates a new one with all
412 fields set to zero, sets INF's inferior to it, and then returns
413 a pointer to that newly allocated ada_inferior_data. */
414
415static struct ada_inferior_data *
416get_ada_inferior_data (struct inferior *inf)
417{
418 struct ada_inferior_data *data;
419
420 data = inferior_data (inf, ada_inferior_data);
421 if (data == NULL)
422 {
41bf6aca 423 data = XCNEW (struct ada_inferior_data);
e802dbe0
JB
424 set_inferior_data (inf, ada_inferior_data, data);
425 }
426
427 return data;
428}
429
430/* Perform all necessary cleanups regarding our module's inferior data
431 that is required after the inferior INF just exited. */
432
433static void
434ada_inferior_exit (struct inferior *inf)
435{
436 ada_inferior_data_cleanup (inf, NULL);
437 set_inferior_data (inf, ada_inferior_data, NULL);
438}
439
ee01b665
JB
440
441 /* program-space-specific data. */
442
443/* This module's per-program-space data. */
444struct ada_pspace_data
445{
446 /* The Ada symbol cache. */
447 struct ada_symbol_cache *sym_cache;
448};
449
450/* Key to our per-program-space data. */
451static const struct program_space_data *ada_pspace_data_handle;
452
453/* Return this module's data for the given program space (PSPACE).
454 If not is found, add a zero'ed one now.
455
456 This function always returns a valid object. */
457
458static struct ada_pspace_data *
459get_ada_pspace_data (struct program_space *pspace)
460{
461 struct ada_pspace_data *data;
462
463 data = program_space_data (pspace, ada_pspace_data_handle);
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{
478 struct ada_pspace_data *pspace_data = data;
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{
529 const char *result = strrchr (decoded_name, '.');
530
531 if (result != NULL)
532 result++; /* Skip the dot... */
533 else
534 result = decoded_name;
535
536 return result;
537}
538
539/* Return a string starting with '<', followed by STR, and '>'.
540 The result is good until the next call. */
541
542static char *
543add_angle_brackets (const char *str)
544{
545 static char *result = NULL;
546
547 xfree (result);
88c15c34 548 result = xstrprintf ("<%s>", str);
41d27058
JB
549 return result;
550}
96d887e8 551
4c4b4cd2
PH
552static char *
553ada_get_gdb_completer_word_break_characters (void)
554{
555 return ada_completer_word_break_characters;
556}
557
e79af960
JB
558/* Print an array element index using the Ada syntax. */
559
560static void
561ada_print_array_index (struct value *index_value, struct ui_file *stream,
79a45b7d 562 const struct value_print_options *options)
e79af960 563{
79a45b7d 564 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
565 fprintf_filtered (stream, " => ");
566}
567
f27cf670 568/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 569 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 570 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 571
f27cf670
AS
572void *
573grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 574{
d2e4a39e
AS
575 if (*size < min_size)
576 {
577 *size *= 2;
578 if (*size < min_size)
4c4b4cd2 579 *size = min_size;
f27cf670 580 vect = xrealloc (vect, *size * element_size);
d2e4a39e 581 }
f27cf670 582 return vect;
14f9c5c9
AS
583}
584
585/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 586 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
587
588static int
ebf56fd3 589field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
590{
591 int len = strlen (target);
5b4ee69b 592
d2e4a39e 593 return
4c4b4cd2
PH
594 (strncmp (field_name, target, len) == 0
595 && (field_name[len] == '\0'
596 || (strncmp (field_name + len, "___", 3) == 0
76a01679
JB
597 && strcmp (field_name + strlen (field_name) - 6,
598 "___XVN") != 0)));
14f9c5c9
AS
599}
600
601
872c8b51
JB
602/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
603 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
604 and return its index. This function also handles fields whose name
605 have ___ suffixes because the compiler sometimes alters their name
606 by adding such a suffix to represent fields with certain constraints.
607 If the field could not be found, return a negative number if
608 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
609
610int
611ada_get_field_index (const struct type *type, const char *field_name,
612 int maybe_missing)
613{
614 int fieldno;
872c8b51
JB
615 struct type *struct_type = check_typedef ((struct type *) type);
616
617 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
618 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
619 return fieldno;
620
621 if (!maybe_missing)
323e0a4a 622 error (_("Unable to find field %s in struct %s. Aborting"),
872c8b51 623 field_name, TYPE_NAME (struct_type));
4c4b4cd2
PH
624
625 return -1;
626}
627
628/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
629
630int
d2e4a39e 631ada_name_prefix_len (const char *name)
14f9c5c9
AS
632{
633 if (name == NULL)
634 return 0;
d2e4a39e 635 else
14f9c5c9 636 {
d2e4a39e 637 const char *p = strstr (name, "___");
5b4ee69b 638
14f9c5c9 639 if (p == NULL)
4c4b4cd2 640 return strlen (name);
14f9c5c9 641 else
4c4b4cd2 642 return p - name;
14f9c5c9
AS
643 }
644}
645
4c4b4cd2
PH
646/* Return non-zero if SUFFIX is a suffix of STR.
647 Return zero if STR is null. */
648
14f9c5c9 649static int
d2e4a39e 650is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
651{
652 int len1, len2;
5b4ee69b 653
14f9c5c9
AS
654 if (str == NULL)
655 return 0;
656 len1 = strlen (str);
657 len2 = strlen (suffix);
4c4b4cd2 658 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
659}
660
4c4b4cd2
PH
661/* The contents of value VAL, treated as a value of type TYPE. The
662 result is an lval in memory if VAL is. */
14f9c5c9 663
d2e4a39e 664static struct value *
4c4b4cd2 665coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 666{
61ee279c 667 type = ada_check_typedef (type);
df407dfe 668 if (value_type (val) == type)
4c4b4cd2 669 return val;
d2e4a39e 670 else
14f9c5c9 671 {
4c4b4cd2
PH
672 struct value *result;
673
674 /* Make sure that the object size is not unreasonable before
675 trying to allocate some memory for it. */
714e53ab 676 check_size (type);
4c4b4cd2 677
41e8491f
JK
678 if (value_lazy (val)
679 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
680 result = allocate_value_lazy (type);
681 else
682 {
683 result = allocate_value (type);
684 memcpy (value_contents_raw (result), value_contents (val),
685 TYPE_LENGTH (type));
686 }
74bcbdf3 687 set_value_component_location (result, val);
9bbda503
AC
688 set_value_bitsize (result, value_bitsize (val));
689 set_value_bitpos (result, value_bitpos (val));
42ae5230 690 set_value_address (result, value_address (val));
eca07816 691 set_value_optimized_out (result, value_optimized_out_const (val));
14f9c5c9
AS
692 return result;
693 }
694}
695
fc1a4b47
AC
696static const gdb_byte *
697cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
698{
699 if (valaddr == NULL)
700 return NULL;
701 else
702 return valaddr + offset;
703}
704
705static CORE_ADDR
ebf56fd3 706cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
707{
708 if (address == 0)
709 return 0;
d2e4a39e 710 else
14f9c5c9
AS
711 return address + offset;
712}
713
4c4b4cd2
PH
714/* Issue a warning (as for the definition of warning in utils.c, but
715 with exactly one argument rather than ...), unless the limit on the
716 number of warnings has passed during the evaluation of the current
717 expression. */
a2249542 718
77109804
AC
719/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
720 provided by "complaint". */
a0b31db1 721static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 722
14f9c5c9 723static void
a2249542 724lim_warning (const char *format, ...)
14f9c5c9 725{
a2249542 726 va_list args;
a2249542 727
5b4ee69b 728 va_start (args, format);
4c4b4cd2
PH
729 warnings_issued += 1;
730 if (warnings_issued <= warning_limit)
a2249542
MK
731 vwarning (format, args);
732
733 va_end (args);
4c4b4cd2
PH
734}
735
714e53ab
PH
736/* Issue an error if the size of an object of type T is unreasonable,
737 i.e. if it would be a bad idea to allocate a value of this type in
738 GDB. */
739
740static void
741check_size (const struct type *type)
742{
743 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 744 error (_("object size is larger than varsize-limit"));
714e53ab
PH
745}
746
0963b4bd 747/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 748static LONGEST
c3e5cd34 749max_of_size (int size)
4c4b4cd2 750{
76a01679 751 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 752
76a01679 753 return top_bit | (top_bit - 1);
4c4b4cd2
PH
754}
755
0963b4bd 756/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 757static LONGEST
c3e5cd34 758min_of_size (int size)
4c4b4cd2 759{
c3e5cd34 760 return -max_of_size (size) - 1;
4c4b4cd2
PH
761}
762
0963b4bd 763/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 764static ULONGEST
c3e5cd34 765umax_of_size (int size)
4c4b4cd2 766{
76a01679 767 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 768
76a01679 769 return top_bit | (top_bit - 1);
4c4b4cd2
PH
770}
771
0963b4bd 772/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
773static LONGEST
774max_of_type (struct type *t)
4c4b4cd2 775{
c3e5cd34
PH
776 if (TYPE_UNSIGNED (t))
777 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
778 else
779 return max_of_size (TYPE_LENGTH (t));
780}
781
0963b4bd 782/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
783static LONGEST
784min_of_type (struct type *t)
785{
786 if (TYPE_UNSIGNED (t))
787 return 0;
788 else
789 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
790}
791
792/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
793LONGEST
794ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 795{
8739bc53 796 type = resolve_dynamic_type (type, 0);
76a01679 797 switch (TYPE_CODE (type))
4c4b4cd2
PH
798 {
799 case TYPE_CODE_RANGE:
690cc4eb 800 return TYPE_HIGH_BOUND (type);
4c4b4cd2 801 case TYPE_CODE_ENUM:
14e75d8e 802 return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
690cc4eb
PH
803 case TYPE_CODE_BOOL:
804 return 1;
805 case TYPE_CODE_CHAR:
76a01679 806 case TYPE_CODE_INT:
690cc4eb 807 return max_of_type (type);
4c4b4cd2 808 default:
43bbcdc2 809 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
810 }
811}
812
14e75d8e 813/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
814LONGEST
815ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 816{
8739bc53 817 type = resolve_dynamic_type (type, 0);
76a01679 818 switch (TYPE_CODE (type))
4c4b4cd2
PH
819 {
820 case TYPE_CODE_RANGE:
690cc4eb 821 return TYPE_LOW_BOUND (type);
4c4b4cd2 822 case TYPE_CODE_ENUM:
14e75d8e 823 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
824 case TYPE_CODE_BOOL:
825 return 0;
826 case TYPE_CODE_CHAR:
76a01679 827 case TYPE_CODE_INT:
690cc4eb 828 return min_of_type (type);
4c4b4cd2 829 default:
43bbcdc2 830 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
831 }
832}
833
834/* The identity on non-range types. For range types, the underlying
76a01679 835 non-range scalar type. */
4c4b4cd2
PH
836
837static struct type *
18af8284 838get_base_type (struct type *type)
4c4b4cd2
PH
839{
840 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
841 {
76a01679
JB
842 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
843 return type;
4c4b4cd2
PH
844 type = TYPE_TARGET_TYPE (type);
845 }
846 return type;
14f9c5c9 847}
41246937
JB
848
849/* Return a decoded version of the given VALUE. This means returning
850 a value whose type is obtained by applying all the GNAT-specific
851 encondings, making the resulting type a static but standard description
852 of the initial type. */
853
854struct value *
855ada_get_decoded_value (struct value *value)
856{
857 struct type *type = ada_check_typedef (value_type (value));
858
859 if (ada_is_array_descriptor_type (type)
860 || (ada_is_constrained_packed_array_type (type)
861 && TYPE_CODE (type) != TYPE_CODE_PTR))
862 {
863 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */
864 value = ada_coerce_to_simple_array_ptr (value);
865 else
866 value = ada_coerce_to_simple_array (value);
867 }
868 else
869 value = ada_to_fixed_value (value);
870
871 return value;
872}
873
874/* Same as ada_get_decoded_value, but with the given TYPE.
875 Because there is no associated actual value for this type,
876 the resulting type might be a best-effort approximation in
877 the case of dynamic types. */
878
879struct type *
880ada_get_decoded_type (struct type *type)
881{
882 type = to_static_fixed_type (type);
883 if (ada_is_constrained_packed_array_type (type))
884 type = ada_coerce_to_simple_array_type (type);
885 return type;
886}
887
4c4b4cd2 888\f
76a01679 889
4c4b4cd2 890 /* Language Selection */
14f9c5c9
AS
891
892/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 893 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 894
14f9c5c9 895enum language
ccefe4c4 896ada_update_initial_language (enum language lang)
14f9c5c9 897{
d2e4a39e 898 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
3b7344d5 899 (struct objfile *) NULL).minsym != NULL)
4c4b4cd2 900 return language_ada;
14f9c5c9
AS
901
902 return lang;
903}
96d887e8
PH
904
905/* If the main procedure is written in Ada, then return its name.
906 The result is good until the next call. Return NULL if the main
907 procedure doesn't appear to be in Ada. */
908
909char *
910ada_main_name (void)
911{
3b7344d5 912 struct bound_minimal_symbol msym;
f9bc20b9 913 static char *main_program_name = NULL;
6c038f32 914
96d887e8
PH
915 /* For Ada, the name of the main procedure is stored in a specific
916 string constant, generated by the binder. Look for that symbol,
917 extract its address, and then read that string. If we didn't find
918 that string, then most probably the main procedure is not written
919 in Ada. */
920 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
921
3b7344d5 922 if (msym.minsym != NULL)
96d887e8 923 {
f9bc20b9
JB
924 CORE_ADDR main_program_name_addr;
925 int err_code;
926
77e371c0 927 main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 928 if (main_program_name_addr == 0)
323e0a4a 929 error (_("Invalid address for Ada main program name."));
96d887e8 930
f9bc20b9
JB
931 xfree (main_program_name);
932 target_read_string (main_program_name_addr, &main_program_name,
933 1024, &err_code);
934
935 if (err_code != 0)
936 return NULL;
96d887e8
PH
937 return main_program_name;
938 }
939
940 /* The main procedure doesn't seem to be in Ada. */
941 return NULL;
942}
14f9c5c9 943\f
4c4b4cd2 944 /* Symbols */
d2e4a39e 945
4c4b4cd2
PH
946/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
947 of NULLs. */
14f9c5c9 948
d2e4a39e
AS
949const struct ada_opname_map ada_opname_table[] = {
950 {"Oadd", "\"+\"", BINOP_ADD},
951 {"Osubtract", "\"-\"", BINOP_SUB},
952 {"Omultiply", "\"*\"", BINOP_MUL},
953 {"Odivide", "\"/\"", BINOP_DIV},
954 {"Omod", "\"mod\"", BINOP_MOD},
955 {"Orem", "\"rem\"", BINOP_REM},
956 {"Oexpon", "\"**\"", BINOP_EXP},
957 {"Olt", "\"<\"", BINOP_LESS},
958 {"Ole", "\"<=\"", BINOP_LEQ},
959 {"Ogt", "\">\"", BINOP_GTR},
960 {"Oge", "\">=\"", BINOP_GEQ},
961 {"Oeq", "\"=\"", BINOP_EQUAL},
962 {"One", "\"/=\"", BINOP_NOTEQUAL},
963 {"Oand", "\"and\"", BINOP_BITWISE_AND},
964 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
965 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
966 {"Oconcat", "\"&\"", BINOP_CONCAT},
967 {"Oabs", "\"abs\"", UNOP_ABS},
968 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
969 {"Oadd", "\"+\"", UNOP_PLUS},
970 {"Osubtract", "\"-\"", UNOP_NEG},
971 {NULL, NULL}
14f9c5c9
AS
972};
973
4c4b4cd2
PH
974/* The "encoded" form of DECODED, according to GNAT conventions.
975 The result is valid until the next call to ada_encode. */
976
14f9c5c9 977char *
4c4b4cd2 978ada_encode (const char *decoded)
14f9c5c9 979{
4c4b4cd2
PH
980 static char *encoding_buffer = NULL;
981 static size_t encoding_buffer_size = 0;
d2e4a39e 982 const char *p;
14f9c5c9 983 int k;
d2e4a39e 984
4c4b4cd2 985 if (decoded == NULL)
14f9c5c9
AS
986 return NULL;
987
4c4b4cd2
PH
988 GROW_VECT (encoding_buffer, encoding_buffer_size,
989 2 * strlen (decoded) + 10);
14f9c5c9
AS
990
991 k = 0;
4c4b4cd2 992 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 993 {
cdc7bb92 994 if (*p == '.')
4c4b4cd2
PH
995 {
996 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
997 k += 2;
998 }
14f9c5c9 999 else if (*p == '"')
4c4b4cd2
PH
1000 {
1001 const struct ada_opname_map *mapping;
1002
1003 for (mapping = ada_opname_table;
1265e4aa
JB
1004 mapping->encoded != NULL
1005 && strncmp (mapping->decoded, p,
1006 strlen (mapping->decoded)) != 0; mapping += 1)
4c4b4cd2
PH
1007 ;
1008 if (mapping->encoded == NULL)
323e0a4a 1009 error (_("invalid Ada operator name: %s"), p);
4c4b4cd2
PH
1010 strcpy (encoding_buffer + k, mapping->encoded);
1011 k += strlen (mapping->encoded);
1012 break;
1013 }
d2e4a39e 1014 else
4c4b4cd2
PH
1015 {
1016 encoding_buffer[k] = *p;
1017 k += 1;
1018 }
14f9c5c9
AS
1019 }
1020
4c4b4cd2
PH
1021 encoding_buffer[k] = '\0';
1022 return encoding_buffer;
14f9c5c9
AS
1023}
1024
1025/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
1026 quotes, unfolded, but with the quotes stripped away. Result good
1027 to next call. */
1028
d2e4a39e
AS
1029char *
1030ada_fold_name (const char *name)
14f9c5c9 1031{
d2e4a39e 1032 static char *fold_buffer = NULL;
14f9c5c9
AS
1033 static size_t fold_buffer_size = 0;
1034
1035 int len = strlen (name);
d2e4a39e 1036 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
1037
1038 if (name[0] == '\'')
1039 {
d2e4a39e
AS
1040 strncpy (fold_buffer, name + 1, len - 2);
1041 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
1042 }
1043 else
1044 {
1045 int i;
5b4ee69b 1046
14f9c5c9 1047 for (i = 0; i <= len; i += 1)
4c4b4cd2 1048 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
1049 }
1050
1051 return fold_buffer;
1052}
1053
529cad9c
PH
1054/* Return nonzero if C is either a digit or a lowercase alphabet character. */
1055
1056static int
1057is_lower_alphanum (const char c)
1058{
1059 return (isdigit (c) || (isalpha (c) && islower (c)));
1060}
1061
c90092fe
JB
1062/* ENCODED is the linkage name of a symbol and LEN contains its length.
1063 This function saves in LEN the length of that same symbol name but
1064 without either of these suffixes:
29480c32
JB
1065 . .{DIGIT}+
1066 . ${DIGIT}+
1067 . ___{DIGIT}+
1068 . __{DIGIT}+.
c90092fe 1069
29480c32
JB
1070 These are suffixes introduced by the compiler for entities such as
1071 nested subprogram for instance, in order to avoid name clashes.
1072 They do not serve any purpose for the debugger. */
1073
1074static void
1075ada_remove_trailing_digits (const char *encoded, int *len)
1076{
1077 if (*len > 1 && isdigit (encoded[*len - 1]))
1078 {
1079 int i = *len - 2;
5b4ee69b 1080
29480c32
JB
1081 while (i > 0 && isdigit (encoded[i]))
1082 i--;
1083 if (i >= 0 && encoded[i] == '.')
1084 *len = i;
1085 else if (i >= 0 && encoded[i] == '$')
1086 *len = i;
1087 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
1088 *len = i - 2;
1089 else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
1090 *len = i - 1;
1091 }
1092}
1093
1094/* Remove the suffix introduced by the compiler for protected object
1095 subprograms. */
1096
1097static void
1098ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1099{
1100 /* Remove trailing N. */
1101
1102 /* Protected entry subprograms are broken into two
1103 separate subprograms: The first one is unprotected, and has
1104 a 'N' suffix; the second is the protected version, and has
0963b4bd 1105 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1106 the protection. Since the P subprograms are internally generated,
1107 we leave these names undecoded, giving the user a clue that this
1108 entity is internal. */
1109
1110 if (*len > 1
1111 && encoded[*len - 1] == 'N'
1112 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1113 *len = *len - 1;
1114}
1115
69fadcdf
JB
1116/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
1117
1118static void
1119ada_remove_Xbn_suffix (const char *encoded, int *len)
1120{
1121 int i = *len - 1;
1122
1123 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1124 i--;
1125
1126 if (encoded[i] != 'X')
1127 return;
1128
1129 if (i == 0)
1130 return;
1131
1132 if (isalnum (encoded[i-1]))
1133 *len = i;
1134}
1135
29480c32
JB
1136/* If ENCODED follows the GNAT entity encoding conventions, then return
1137 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1138 replaced by ENCODED.
14f9c5c9 1139
4c4b4cd2 1140 The resulting string is valid until the next call of ada_decode.
29480c32 1141 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
1142 is returned. */
1143
1144const char *
1145ada_decode (const char *encoded)
14f9c5c9
AS
1146{
1147 int i, j;
1148 int len0;
d2e4a39e 1149 const char *p;
4c4b4cd2 1150 char *decoded;
14f9c5c9 1151 int at_start_name;
4c4b4cd2
PH
1152 static char *decoding_buffer = NULL;
1153 static size_t decoding_buffer_size = 0;
d2e4a39e 1154
29480c32
JB
1155 /* The name of the Ada main procedure starts with "_ada_".
1156 This prefix is not part of the decoded name, so skip this part
1157 if we see this prefix. */
4c4b4cd2
PH
1158 if (strncmp (encoded, "_ada_", 5) == 0)
1159 encoded += 5;
14f9c5c9 1160
29480c32
JB
1161 /* If the name starts with '_', then it is not a properly encoded
1162 name, so do not attempt to decode it. Similarly, if the name
1163 starts with '<', the name should not be decoded. */
4c4b4cd2 1164 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1165 goto Suppress;
1166
4c4b4cd2 1167 len0 = strlen (encoded);
4c4b4cd2 1168
29480c32
JB
1169 ada_remove_trailing_digits (encoded, &len0);
1170 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1171
4c4b4cd2
PH
1172 /* Remove the ___X.* suffix if present. Do not forget to verify that
1173 the suffix is located before the current "end" of ENCODED. We want
1174 to avoid re-matching parts of ENCODED that have previously been
1175 marked as discarded (by decrementing LEN0). */
1176 p = strstr (encoded, "___");
1177 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1178 {
1179 if (p[3] == 'X')
4c4b4cd2 1180 len0 = p - encoded;
14f9c5c9 1181 else
4c4b4cd2 1182 goto Suppress;
14f9c5c9 1183 }
4c4b4cd2 1184
29480c32
JB
1185 /* Remove any trailing TKB suffix. It tells us that this symbol
1186 is for the body of a task, but that information does not actually
1187 appear in the decoded name. */
1188
4c4b4cd2 1189 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
14f9c5c9 1190 len0 -= 3;
76a01679 1191
a10967fa
JB
1192 /* Remove any trailing TB suffix. The TB suffix is slightly different
1193 from the TKB suffix because it is used for non-anonymous task
1194 bodies. */
1195
1196 if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1197 len0 -= 2;
1198
29480c32
JB
1199 /* Remove trailing "B" suffixes. */
1200 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1201
4c4b4cd2 1202 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
14f9c5c9
AS
1203 len0 -= 1;
1204
4c4b4cd2 1205 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1206
4c4b4cd2
PH
1207 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1208 decoded = decoding_buffer;
14f9c5c9 1209
29480c32
JB
1210 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1211
4c4b4cd2 1212 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1213 {
4c4b4cd2
PH
1214 i = len0 - 2;
1215 while ((i >= 0 && isdigit (encoded[i]))
1216 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1217 i -= 1;
1218 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1219 len0 = i - 1;
1220 else if (encoded[i] == '$')
1221 len0 = i;
d2e4a39e 1222 }
14f9c5c9 1223
29480c32
JB
1224 /* The first few characters that are not alphabetic are not part
1225 of any encoding we use, so we can copy them over verbatim. */
1226
4c4b4cd2
PH
1227 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1228 decoded[j] = encoded[i];
14f9c5c9
AS
1229
1230 at_start_name = 1;
1231 while (i < len0)
1232 {
29480c32 1233 /* Is this a symbol function? */
4c4b4cd2
PH
1234 if (at_start_name && encoded[i] == 'O')
1235 {
1236 int k;
5b4ee69b 1237
4c4b4cd2
PH
1238 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1239 {
1240 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1241 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1242 op_len - 1) == 0)
1243 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1244 {
1245 strcpy (decoded + j, ada_opname_table[k].decoded);
1246 at_start_name = 0;
1247 i += op_len;
1248 j += strlen (ada_opname_table[k].decoded);
1249 break;
1250 }
1251 }
1252 if (ada_opname_table[k].encoded != NULL)
1253 continue;
1254 }
14f9c5c9
AS
1255 at_start_name = 0;
1256
529cad9c
PH
1257 /* Replace "TK__" with "__", which will eventually be translated
1258 into "." (just below). */
1259
4c4b4cd2
PH
1260 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1261 i += 2;
529cad9c 1262
29480c32
JB
1263 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1264 be translated into "." (just below). These are internal names
1265 generated for anonymous blocks inside which our symbol is nested. */
1266
1267 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1268 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1269 && isdigit (encoded [i+4]))
1270 {
1271 int k = i + 5;
1272
1273 while (k < len0 && isdigit (encoded[k]))
1274 k++; /* Skip any extra digit. */
1275
1276 /* Double-check that the "__B_{DIGITS}+" sequence we found
1277 is indeed followed by "__". */
1278 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1279 i = k;
1280 }
1281
529cad9c
PH
1282 /* Remove _E{DIGITS}+[sb] */
1283
1284 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1285 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1286 one implements the actual entry code, and has a suffix following
1287 the convention above; the second one implements the barrier and
1288 uses the same convention as above, except that the 'E' is replaced
1289 by a 'B'.
1290
1291 Just as above, we do not decode the name of barrier functions
1292 to give the user a clue that the code he is debugging has been
1293 internally generated. */
1294
1295 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1296 && isdigit (encoded[i+2]))
1297 {
1298 int k = i + 3;
1299
1300 while (k < len0 && isdigit (encoded[k]))
1301 k++;
1302
1303 if (k < len0
1304 && (encoded[k] == 'b' || encoded[k] == 's'))
1305 {
1306 k++;
1307 /* Just as an extra precaution, make sure that if this
1308 suffix is followed by anything else, it is a '_'.
1309 Otherwise, we matched this sequence by accident. */
1310 if (k == len0
1311 || (k < len0 && encoded[k] == '_'))
1312 i = k;
1313 }
1314 }
1315
1316 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1317 the GNAT front-end in protected object subprograms. */
1318
1319 if (i < len0 + 3
1320 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1321 {
1322 /* Backtrack a bit up until we reach either the begining of
1323 the encoded name, or "__". Make sure that we only find
1324 digits or lowercase characters. */
1325 const char *ptr = encoded + i - 1;
1326
1327 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1328 ptr--;
1329 if (ptr < encoded
1330 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1331 i++;
1332 }
1333
4c4b4cd2
PH
1334 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1335 {
29480c32
JB
1336 /* This is a X[bn]* sequence not separated from the previous
1337 part of the name with a non-alpha-numeric character (in other
1338 words, immediately following an alpha-numeric character), then
1339 verify that it is placed at the end of the encoded name. If
1340 not, then the encoding is not valid and we should abort the
1341 decoding. Otherwise, just skip it, it is used in body-nested
1342 package names. */
4c4b4cd2
PH
1343 do
1344 i += 1;
1345 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1346 if (i < len0)
1347 goto Suppress;
1348 }
cdc7bb92 1349 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1350 {
29480c32 1351 /* Replace '__' by '.'. */
4c4b4cd2
PH
1352 decoded[j] = '.';
1353 at_start_name = 1;
1354 i += 2;
1355 j += 1;
1356 }
14f9c5c9 1357 else
4c4b4cd2 1358 {
29480c32
JB
1359 /* It's a character part of the decoded name, so just copy it
1360 over. */
4c4b4cd2
PH
1361 decoded[j] = encoded[i];
1362 i += 1;
1363 j += 1;
1364 }
14f9c5c9 1365 }
4c4b4cd2 1366 decoded[j] = '\000';
14f9c5c9 1367
29480c32
JB
1368 /* Decoded names should never contain any uppercase character.
1369 Double-check this, and abort the decoding if we find one. */
1370
4c4b4cd2
PH
1371 for (i = 0; decoded[i] != '\0'; i += 1)
1372 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1373 goto Suppress;
1374
4c4b4cd2
PH
1375 if (strcmp (decoded, encoded) == 0)
1376 return encoded;
1377 else
1378 return decoded;
14f9c5c9
AS
1379
1380Suppress:
4c4b4cd2
PH
1381 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1382 decoded = decoding_buffer;
1383 if (encoded[0] == '<')
1384 strcpy (decoded, encoded);
14f9c5c9 1385 else
88c15c34 1386 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1387 return decoded;
1388
1389}
1390
1391/* Table for keeping permanent unique copies of decoded names. Once
1392 allocated, names in this table are never released. While this is a
1393 storage leak, it should not be significant unless there are massive
1394 changes in the set of decoded names in successive versions of a
1395 symbol table loaded during a single session. */
1396static struct htab *decoded_names_store;
1397
1398/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1399 in the language-specific part of GSYMBOL, if it has not been
1400 previously computed. Tries to save the decoded name in the same
1401 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1402 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1403 GSYMBOL).
4c4b4cd2
PH
1404 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1405 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1406 when a decoded name is cached in it. */
4c4b4cd2 1407
45e6c716 1408const char *
f85f34ed 1409ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1410{
f85f34ed
TT
1411 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1412 const char **resultp =
1413 &gsymbol->language_specific.mangled_lang.demangled_name;
5b4ee69b 1414
f85f34ed 1415 if (!gsymbol->ada_mangled)
4c4b4cd2
PH
1416 {
1417 const char *decoded = ada_decode (gsymbol->name);
f85f34ed 1418 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1419
f85f34ed 1420 gsymbol->ada_mangled = 1;
5b4ee69b 1421
f85f34ed
TT
1422 if (obstack != NULL)
1423 *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1424 else
76a01679 1425 {
f85f34ed
TT
1426 /* Sometimes, we can't find a corresponding objfile, in
1427 which case, we put the result on the heap. Since we only
1428 decode when needed, we hope this usually does not cause a
1429 significant memory leak (FIXME). */
1430
76a01679
JB
1431 char **slot = (char **) htab_find_slot (decoded_names_store,
1432 decoded, INSERT);
5b4ee69b 1433
76a01679
JB
1434 if (*slot == NULL)
1435 *slot = xstrdup (decoded);
1436 *resultp = *slot;
1437 }
4c4b4cd2 1438 }
14f9c5c9 1439
4c4b4cd2
PH
1440 return *resultp;
1441}
76a01679 1442
2c0b251b 1443static char *
76a01679 1444ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1445{
1446 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1447}
1448
1449/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
4c4b4cd2
PH
1450 suffixes that encode debugging information or leading _ada_ on
1451 SYM_NAME (see is_name_suffix commentary for the debugging
1452 information that is ignored). If WILD, then NAME need only match a
1453 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1454 either argument is NULL. */
14f9c5c9 1455
2c0b251b 1456static int
40658b94 1457match_name (const char *sym_name, const char *name, int wild)
14f9c5c9
AS
1458{
1459 if (sym_name == NULL || name == NULL)
1460 return 0;
1461 else if (wild)
73589123 1462 return wild_match (sym_name, name) == 0;
d2e4a39e
AS
1463 else
1464 {
1465 int len_name = strlen (name);
5b4ee69b 1466
4c4b4cd2
PH
1467 return (strncmp (sym_name, name, len_name) == 0
1468 && is_name_suffix (sym_name + len_name))
1469 || (strncmp (sym_name, "_ada_", 5) == 0
1470 && strncmp (sym_name + 5, name, len_name) == 0
1471 && is_name_suffix (sym_name + len_name + 5));
d2e4a39e 1472 }
14f9c5c9 1473}
14f9c5c9 1474\f
d2e4a39e 1475
4c4b4cd2 1476 /* Arrays */
14f9c5c9 1477
28c85d6c
JB
1478/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1479 generated by the GNAT compiler to describe the index type used
1480 for each dimension of an array, check whether it follows the latest
1481 known encoding. If not, fix it up to conform to the latest encoding.
1482 Otherwise, do nothing. This function also does nothing if
1483 INDEX_DESC_TYPE is NULL.
1484
1485 The GNAT encoding used to describle the array index type evolved a bit.
1486 Initially, the information would be provided through the name of each
1487 field of the structure type only, while the type of these fields was
1488 described as unspecified and irrelevant. The debugger was then expected
1489 to perform a global type lookup using the name of that field in order
1490 to get access to the full index type description. Because these global
1491 lookups can be very expensive, the encoding was later enhanced to make
1492 the global lookup unnecessary by defining the field type as being
1493 the full index type description.
1494
1495 The purpose of this routine is to allow us to support older versions
1496 of the compiler by detecting the use of the older encoding, and by
1497 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1498 we essentially replace each field's meaningless type by the associated
1499 index subtype). */
1500
1501void
1502ada_fixup_array_indexes_type (struct type *index_desc_type)
1503{
1504 int i;
1505
1506 if (index_desc_type == NULL)
1507 return;
1508 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1509
1510 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1511 to check one field only, no need to check them all). If not, return
1512 now.
1513
1514 If our INDEX_DESC_TYPE was generated using the older encoding,
1515 the field type should be a meaningless integer type whose name
1516 is not equal to the field name. */
1517 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1518 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1519 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1520 return;
1521
1522 /* Fixup each field of INDEX_DESC_TYPE. */
1523 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1524 {
0d5cff50 1525 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1526 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1527
1528 if (raw_type)
1529 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1530 }
1531}
1532
4c4b4cd2 1533/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1534
d2e4a39e
AS
1535static char *bound_name[] = {
1536 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1537 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1538};
1539
1540/* Maximum number of array dimensions we are prepared to handle. */
1541
4c4b4cd2 1542#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1543
14f9c5c9 1544
4c4b4cd2
PH
1545/* The desc_* routines return primitive portions of array descriptors
1546 (fat pointers). */
14f9c5c9
AS
1547
1548/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1549 level of indirection, if needed. */
1550
d2e4a39e
AS
1551static struct type *
1552desc_base_type (struct type *type)
14f9c5c9
AS
1553{
1554 if (type == NULL)
1555 return NULL;
61ee279c 1556 type = ada_check_typedef (type);
720d1a40
JB
1557 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1558 type = ada_typedef_target_type (type);
1559
1265e4aa
JB
1560 if (type != NULL
1561 && (TYPE_CODE (type) == TYPE_CODE_PTR
1562 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1563 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1564 else
1565 return type;
1566}
1567
4c4b4cd2
PH
1568/* True iff TYPE indicates a "thin" array pointer type. */
1569
14f9c5c9 1570static int
d2e4a39e 1571is_thin_pntr (struct type *type)
14f9c5c9 1572{
d2e4a39e 1573 return
14f9c5c9
AS
1574 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1575 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1576}
1577
4c4b4cd2
PH
1578/* The descriptor type for thin pointer type TYPE. */
1579
d2e4a39e
AS
1580static struct type *
1581thin_descriptor_type (struct type *type)
14f9c5c9 1582{
d2e4a39e 1583 struct type *base_type = desc_base_type (type);
5b4ee69b 1584
14f9c5c9
AS
1585 if (base_type == NULL)
1586 return NULL;
1587 if (is_suffix (ada_type_name (base_type), "___XVE"))
1588 return base_type;
d2e4a39e 1589 else
14f9c5c9 1590 {
d2e4a39e 1591 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1592
14f9c5c9 1593 if (alt_type == NULL)
4c4b4cd2 1594 return base_type;
14f9c5c9 1595 else
4c4b4cd2 1596 return alt_type;
14f9c5c9
AS
1597 }
1598}
1599
4c4b4cd2
PH
1600/* A pointer to the array data for thin-pointer value VAL. */
1601
d2e4a39e
AS
1602static struct value *
1603thin_data_pntr (struct value *val)
14f9c5c9 1604{
828292f2 1605 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1606 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1607
556bdfd4
UW
1608 data_type = lookup_pointer_type (data_type);
1609
14f9c5c9 1610 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1611 return value_cast (data_type, value_copy (val));
d2e4a39e 1612 else
42ae5230 1613 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1614}
1615
4c4b4cd2
PH
1616/* True iff TYPE indicates a "thick" array pointer type. */
1617
14f9c5c9 1618static int
d2e4a39e 1619is_thick_pntr (struct type *type)
14f9c5c9
AS
1620{
1621 type = desc_base_type (type);
1622 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1623 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1624}
1625
4c4b4cd2
PH
1626/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1627 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1628
d2e4a39e
AS
1629static struct type *
1630desc_bounds_type (struct type *type)
14f9c5c9 1631{
d2e4a39e 1632 struct type *r;
14f9c5c9
AS
1633
1634 type = desc_base_type (type);
1635
1636 if (type == NULL)
1637 return NULL;
1638 else if (is_thin_pntr (type))
1639 {
1640 type = thin_descriptor_type (type);
1641 if (type == NULL)
4c4b4cd2 1642 return NULL;
14f9c5c9
AS
1643 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1644 if (r != NULL)
61ee279c 1645 return ada_check_typedef (r);
14f9c5c9
AS
1646 }
1647 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1648 {
1649 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1650 if (r != NULL)
61ee279c 1651 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1652 }
1653 return NULL;
1654}
1655
1656/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1657 one, a pointer to its bounds data. Otherwise NULL. */
1658
d2e4a39e
AS
1659static struct value *
1660desc_bounds (struct value *arr)
14f9c5c9 1661{
df407dfe 1662 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1663
d2e4a39e 1664 if (is_thin_pntr (type))
14f9c5c9 1665 {
d2e4a39e 1666 struct type *bounds_type =
4c4b4cd2 1667 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1668 LONGEST addr;
1669
4cdfadb1 1670 if (bounds_type == NULL)
323e0a4a 1671 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1672
1673 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1674 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1675 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1676 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1677 addr = value_as_long (arr);
d2e4a39e 1678 else
42ae5230 1679 addr = value_address (arr);
14f9c5c9 1680
d2e4a39e 1681 return
4c4b4cd2
PH
1682 value_from_longest (lookup_pointer_type (bounds_type),
1683 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1684 }
1685
1686 else if (is_thick_pntr (type))
05e522ef
JB
1687 {
1688 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1689 _("Bad GNAT array descriptor"));
1690 struct type *p_bounds_type = value_type (p_bounds);
1691
1692 if (p_bounds_type
1693 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1694 {
1695 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1696
1697 if (TYPE_STUB (target_type))
1698 p_bounds = value_cast (lookup_pointer_type
1699 (ada_check_typedef (target_type)),
1700 p_bounds);
1701 }
1702 else
1703 error (_("Bad GNAT array descriptor"));
1704
1705 return p_bounds;
1706 }
14f9c5c9
AS
1707 else
1708 return NULL;
1709}
1710
4c4b4cd2
PH
1711/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1712 position of the field containing the address of the bounds data. */
1713
14f9c5c9 1714static int
d2e4a39e 1715fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1716{
1717 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1718}
1719
1720/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1721 size of the field containing the address of the bounds data. */
1722
14f9c5c9 1723static int
d2e4a39e 1724fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1725{
1726 type = desc_base_type (type);
1727
d2e4a39e 1728 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1729 return TYPE_FIELD_BITSIZE (type, 1);
1730 else
61ee279c 1731 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1732}
1733
4c4b4cd2 1734/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1735 pointer to one, the type of its array data (a array-with-no-bounds type);
1736 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1737 data. */
4c4b4cd2 1738
d2e4a39e 1739static struct type *
556bdfd4 1740desc_data_target_type (struct type *type)
14f9c5c9
AS
1741{
1742 type = desc_base_type (type);
1743
4c4b4cd2 1744 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1745 if (is_thin_pntr (type))
556bdfd4 1746 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1747 else if (is_thick_pntr (type))
556bdfd4
UW
1748 {
1749 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1750
1751 if (data_type
1752 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1753 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1754 }
1755
1756 return NULL;
14f9c5c9
AS
1757}
1758
1759/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1760 its array data. */
4c4b4cd2 1761
d2e4a39e
AS
1762static struct value *
1763desc_data (struct value *arr)
14f9c5c9 1764{
df407dfe 1765 struct type *type = value_type (arr);
5b4ee69b 1766
14f9c5c9
AS
1767 if (is_thin_pntr (type))
1768 return thin_data_pntr (arr);
1769 else if (is_thick_pntr (type))
d2e4a39e 1770 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1771 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1772 else
1773 return NULL;
1774}
1775
1776
1777/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1778 position of the field containing the address of the data. */
1779
14f9c5c9 1780static int
d2e4a39e 1781fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1782{
1783 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1784}
1785
1786/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1787 size of the field containing the address of the data. */
1788
14f9c5c9 1789static int
d2e4a39e 1790fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1791{
1792 type = desc_base_type (type);
1793
1794 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1795 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1796 else
14f9c5c9
AS
1797 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1798}
1799
4c4b4cd2 1800/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1801 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1802 bound, if WHICH is 1. The first bound is I=1. */
1803
d2e4a39e
AS
1804static struct value *
1805desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1806{
d2e4a39e 1807 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1808 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1809}
1810
1811/* If BOUNDS is an array-bounds structure type, return the bit position
1812 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1813 bound, if WHICH is 1. The first bound is I=1. */
1814
14f9c5c9 1815static int
d2e4a39e 1816desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1817{
d2e4a39e 1818 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1819}
1820
1821/* If BOUNDS is an array-bounds structure type, return the bit field size
1822 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1823 bound, if WHICH is 1. The first bound is I=1. */
1824
76a01679 1825static int
d2e4a39e 1826desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1827{
1828 type = desc_base_type (type);
1829
d2e4a39e
AS
1830 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1831 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1832 else
1833 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1834}
1835
1836/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1837 Ith bound (numbering from 1). Otherwise, NULL. */
1838
d2e4a39e
AS
1839static struct type *
1840desc_index_type (struct type *type, int i)
14f9c5c9
AS
1841{
1842 type = desc_base_type (type);
1843
1844 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1845 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1846 else
14f9c5c9
AS
1847 return NULL;
1848}
1849
4c4b4cd2
PH
1850/* The number of index positions in the array-bounds type TYPE.
1851 Return 0 if TYPE is NULL. */
1852
14f9c5c9 1853static int
d2e4a39e 1854desc_arity (struct type *type)
14f9c5c9
AS
1855{
1856 type = desc_base_type (type);
1857
1858 if (type != NULL)
1859 return TYPE_NFIELDS (type) / 2;
1860 return 0;
1861}
1862
4c4b4cd2
PH
1863/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1864 an array descriptor type (representing an unconstrained array
1865 type). */
1866
76a01679
JB
1867static int
1868ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1869{
1870 if (type == NULL)
1871 return 0;
61ee279c 1872 type = ada_check_typedef (type);
4c4b4cd2 1873 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1874 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1875}
1876
52ce6436 1877/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1878 * to one. */
52ce6436 1879
2c0b251b 1880static int
52ce6436
PH
1881ada_is_array_type (struct type *type)
1882{
1883 while (type != NULL
1884 && (TYPE_CODE (type) == TYPE_CODE_PTR
1885 || TYPE_CODE (type) == TYPE_CODE_REF))
1886 type = TYPE_TARGET_TYPE (type);
1887 return ada_is_direct_array_type (type);
1888}
1889
4c4b4cd2 1890/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1891
14f9c5c9 1892int
4c4b4cd2 1893ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1894{
1895 if (type == NULL)
1896 return 0;
61ee279c 1897 type = ada_check_typedef (type);
14f9c5c9 1898 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2 1899 || (TYPE_CODE (type) == TYPE_CODE_PTR
b0dd7688
JB
1900 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1901 == TYPE_CODE_ARRAY));
14f9c5c9
AS
1902}
1903
4c4b4cd2
PH
1904/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1905
14f9c5c9 1906int
4c4b4cd2 1907ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1908{
556bdfd4 1909 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1910
1911 if (type == NULL)
1912 return 0;
61ee279c 1913 type = ada_check_typedef (type);
556bdfd4
UW
1914 return (data_type != NULL
1915 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1916 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1917}
1918
1919/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1920 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1921 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1922 is still needed. */
1923
14f9c5c9 1924int
ebf56fd3 1925ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1926{
d2e4a39e 1927 return
14f9c5c9
AS
1928 type != NULL
1929 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1930 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1931 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1932 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1933}
1934
1935
4c4b4cd2 1936/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1937 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1938 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1939 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1940 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1941 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1942 a descriptor. */
d2e4a39e
AS
1943struct type *
1944ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1945{
ad82864c
JB
1946 if (ada_is_constrained_packed_array_type (value_type (arr)))
1947 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1948
df407dfe
AC
1949 if (!ada_is_array_descriptor_type (value_type (arr)))
1950 return value_type (arr);
d2e4a39e
AS
1951
1952 if (!bounds)
ad82864c
JB
1953 {
1954 struct type *array_type =
1955 ada_check_typedef (desc_data_target_type (value_type (arr)));
1956
1957 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1958 TYPE_FIELD_BITSIZE (array_type, 0) =
1959 decode_packed_array_bitsize (value_type (arr));
1960
1961 return array_type;
1962 }
14f9c5c9
AS
1963 else
1964 {
d2e4a39e 1965 struct type *elt_type;
14f9c5c9 1966 int arity;
d2e4a39e 1967 struct value *descriptor;
14f9c5c9 1968
df407dfe
AC
1969 elt_type = ada_array_element_type (value_type (arr), -1);
1970 arity = ada_array_arity (value_type (arr));
14f9c5c9 1971
d2e4a39e 1972 if (elt_type == NULL || arity == 0)
df407dfe 1973 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1974
1975 descriptor = desc_bounds (arr);
d2e4a39e 1976 if (value_as_long (descriptor) == 0)
4c4b4cd2 1977 return NULL;
d2e4a39e 1978 while (arity > 0)
4c4b4cd2 1979 {
e9bb382b
UW
1980 struct type *range_type = alloc_type_copy (value_type (arr));
1981 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1982 struct value *low = desc_one_bound (descriptor, arity, 0);
1983 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1984
5b4ee69b 1985 arity -= 1;
0c9c3474
SA
1986 create_static_range_type (range_type, value_type (low),
1987 longest_to_int (value_as_long (low)),
1988 longest_to_int (value_as_long (high)));
4c4b4cd2 1989 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1990
1991 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1992 {
1993 /* We need to store the element packed bitsize, as well as
1994 recompute the array size, because it was previously
1995 computed based on the unpacked element size. */
1996 LONGEST lo = value_as_long (low);
1997 LONGEST hi = value_as_long (high);
1998
1999 TYPE_FIELD_BITSIZE (elt_type, 0) =
2000 decode_packed_array_bitsize (value_type (arr));
2001 /* If the array has no element, then the size is already
2002 zero, and does not need to be recomputed. */
2003 if (lo < hi)
2004 {
2005 int array_bitsize =
2006 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
2007
2008 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
2009 }
2010 }
4c4b4cd2 2011 }
14f9c5c9
AS
2012
2013 return lookup_pointer_type (elt_type);
2014 }
2015}
2016
2017/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
2018 Otherwise, returns either a standard GDB array with bounds set
2019 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
2020 GDB array. Returns NULL if ARR is a null fat pointer. */
2021
d2e4a39e
AS
2022struct value *
2023ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 2024{
df407dfe 2025 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2026 {
d2e4a39e 2027 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 2028
14f9c5c9 2029 if (arrType == NULL)
4c4b4cd2 2030 return NULL;
14f9c5c9
AS
2031 return value_cast (arrType, value_copy (desc_data (arr)));
2032 }
ad82864c
JB
2033 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2034 return decode_constrained_packed_array (arr);
14f9c5c9
AS
2035 else
2036 return arr;
2037}
2038
2039/* If ARR does not represent an array, returns ARR unchanged.
2040 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
2041 be ARR itself if it already is in the proper form). */
2042
720d1a40 2043struct value *
d2e4a39e 2044ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 2045{
df407dfe 2046 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2047 {
d2e4a39e 2048 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 2049
14f9c5c9 2050 if (arrVal == NULL)
323e0a4a 2051 error (_("Bounds unavailable for null array pointer."));
529cad9c 2052 check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
2053 return value_ind (arrVal);
2054 }
ad82864c
JB
2055 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2056 return decode_constrained_packed_array (arr);
d2e4a39e 2057 else
14f9c5c9
AS
2058 return arr;
2059}
2060
2061/* If TYPE represents a GNAT array type, return it translated to an
2062 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
2063 packing). For other types, is the identity. */
2064
d2e4a39e
AS
2065struct type *
2066ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 2067{
ad82864c
JB
2068 if (ada_is_constrained_packed_array_type (type))
2069 return decode_constrained_packed_array_type (type);
17280b9f
UW
2070
2071 if (ada_is_array_descriptor_type (type))
556bdfd4 2072 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
2073
2074 return type;
14f9c5c9
AS
2075}
2076
4c4b4cd2
PH
2077/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
2078
ad82864c
JB
2079static int
2080ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
2081{
2082 if (type == NULL)
2083 return 0;
4c4b4cd2 2084 type = desc_base_type (type);
61ee279c 2085 type = ada_check_typedef (type);
d2e4a39e 2086 return
14f9c5c9
AS
2087 ada_type_name (type) != NULL
2088 && strstr (ada_type_name (type), "___XP") != NULL;
2089}
2090
ad82864c
JB
2091/* Non-zero iff TYPE represents a standard GNAT constrained
2092 packed-array type. */
2093
2094int
2095ada_is_constrained_packed_array_type (struct type *type)
2096{
2097 return ada_is_packed_array_type (type)
2098 && !ada_is_array_descriptor_type (type);
2099}
2100
2101/* Non-zero iff TYPE represents an array descriptor for a
2102 unconstrained packed-array type. */
2103
2104static int
2105ada_is_unconstrained_packed_array_type (struct type *type)
2106{
2107 return ada_is_packed_array_type (type)
2108 && ada_is_array_descriptor_type (type);
2109}
2110
2111/* Given that TYPE encodes a packed array type (constrained or unconstrained),
2112 return the size of its elements in bits. */
2113
2114static long
2115decode_packed_array_bitsize (struct type *type)
2116{
0d5cff50
DE
2117 const char *raw_name;
2118 const char *tail;
ad82864c
JB
2119 long bits;
2120
720d1a40
JB
2121 /* Access to arrays implemented as fat pointers are encoded as a typedef
2122 of the fat pointer type. We need the name of the fat pointer type
2123 to do the decoding, so strip the typedef layer. */
2124 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2125 type = ada_typedef_target_type (type);
2126
2127 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2128 if (!raw_name)
2129 raw_name = ada_type_name (desc_base_type (type));
2130
2131 if (!raw_name)
2132 return 0;
2133
2134 tail = strstr (raw_name, "___XP");
720d1a40 2135 gdb_assert (tail != NULL);
ad82864c
JB
2136
2137 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2138 {
2139 lim_warning
2140 (_("could not understand bit size information on packed array"));
2141 return 0;
2142 }
2143
2144 return bits;
2145}
2146
14f9c5c9
AS
2147/* Given that TYPE is a standard GDB array type with all bounds filled
2148 in, and that the element size of its ultimate scalar constituents
2149 (that is, either its elements, or, if it is an array of arrays, its
2150 elements' elements, etc.) is *ELT_BITS, return an identical type,
2151 but with the bit sizes of its elements (and those of any
2152 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2
PH
2153 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2154 in bits. */
2155
d2e4a39e 2156static struct type *
ad82864c 2157constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2158{
d2e4a39e
AS
2159 struct type *new_elt_type;
2160 struct type *new_type;
99b1c762
JB
2161 struct type *index_type_desc;
2162 struct type *index_type;
14f9c5c9
AS
2163 LONGEST low_bound, high_bound;
2164
61ee279c 2165 type = ada_check_typedef (type);
14f9c5c9
AS
2166 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2167 return type;
2168
99b1c762
JB
2169 index_type_desc = ada_find_parallel_type (type, "___XA");
2170 if (index_type_desc)
2171 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2172 NULL);
2173 else
2174 index_type = TYPE_INDEX_TYPE (type);
2175
e9bb382b 2176 new_type = alloc_type_copy (type);
ad82864c
JB
2177 new_elt_type =
2178 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2179 elt_bits);
99b1c762 2180 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9
AS
2181 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2182 TYPE_NAME (new_type) = ada_type_name (type);
2183
99b1c762 2184 if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
14f9c5c9
AS
2185 low_bound = high_bound = 0;
2186 if (high_bound < low_bound)
2187 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2188 else
14f9c5c9
AS
2189 {
2190 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2191 TYPE_LENGTH (new_type) =
4c4b4cd2 2192 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2193 }
2194
876cecd0 2195 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2196 return new_type;
2197}
2198
ad82864c
JB
2199/* The array type encoded by TYPE, where
2200 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2201
d2e4a39e 2202static struct type *
ad82864c 2203decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2204{
0d5cff50 2205 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2206 char *name;
0d5cff50 2207 const char *tail;
d2e4a39e 2208 struct type *shadow_type;
14f9c5c9 2209 long bits;
14f9c5c9 2210
727e3d2e
JB
2211 if (!raw_name)
2212 raw_name = ada_type_name (desc_base_type (type));
2213
2214 if (!raw_name)
2215 return NULL;
2216
2217 name = (char *) alloca (strlen (raw_name) + 1);
2218 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2219 type = desc_base_type (type);
2220
14f9c5c9
AS
2221 memcpy (name, raw_name, tail - raw_name);
2222 name[tail - raw_name] = '\000';
2223
b4ba55a1
JB
2224 shadow_type = ada_find_parallel_type_with_name (type, name);
2225
2226 if (shadow_type == NULL)
14f9c5c9 2227 {
323e0a4a 2228 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2229 return NULL;
2230 }
cb249c71 2231 CHECK_TYPEDEF (shadow_type);
14f9c5c9
AS
2232
2233 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2234 {
0963b4bd
MS
2235 lim_warning (_("could not understand bounds "
2236 "information on packed array"));
14f9c5c9
AS
2237 return NULL;
2238 }
d2e4a39e 2239
ad82864c
JB
2240 bits = decode_packed_array_bitsize (type);
2241 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2242}
2243
ad82864c
JB
2244/* Given that ARR is a struct value *indicating a GNAT constrained packed
2245 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2246 standard GDB array type except that the BITSIZEs of the array
2247 target types are set to the number of bits in each element, and the
4c4b4cd2 2248 type length is set appropriately. */
14f9c5c9 2249
d2e4a39e 2250static struct value *
ad82864c 2251decode_constrained_packed_array (struct value *arr)
14f9c5c9 2252{
4c4b4cd2 2253 struct type *type;
14f9c5c9 2254
11aa919a
PMR
2255 /* If our value is a pointer, then dereference it. Likewise if
2256 the value is a reference. Make sure that this operation does not
2257 cause the target type to be fixed, as this would indirectly cause
2258 this array to be decoded. The rest of the routine assumes that
2259 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2260 and "value_ind" routines to perform the dereferencing, as opposed
2261 to using "ada_coerce_ref" or "ada_value_ind". */
2262 arr = coerce_ref (arr);
828292f2 2263 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
284614f0 2264 arr = value_ind (arr);
4c4b4cd2 2265
ad82864c 2266 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2267 if (type == NULL)
2268 {
323e0a4a 2269 error (_("can't unpack array"));
14f9c5c9
AS
2270 return NULL;
2271 }
61ee279c 2272
50810684 2273 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2274 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2275 {
2276 /* This is a (right-justified) modular type representing a packed
2277 array with no wrapper. In order to interpret the value through
2278 the (left-justified) packed array type we just built, we must
2279 first left-justify it. */
2280 int bit_size, bit_pos;
2281 ULONGEST mod;
2282
df407dfe 2283 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2284 bit_size = 0;
2285 while (mod > 0)
2286 {
2287 bit_size += 1;
2288 mod >>= 1;
2289 }
df407dfe 2290 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2291 arr = ada_value_primitive_packed_val (arr, NULL,
2292 bit_pos / HOST_CHAR_BIT,
2293 bit_pos % HOST_CHAR_BIT,
2294 bit_size,
2295 type);
2296 }
2297
4c4b4cd2 2298 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2299}
2300
2301
2302/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2303 given in IND. ARR must be a simple array. */
14f9c5c9 2304
d2e4a39e
AS
2305static struct value *
2306value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2307{
2308 int i;
2309 int bits, elt_off, bit_off;
2310 long elt_total_bit_offset;
d2e4a39e
AS
2311 struct type *elt_type;
2312 struct value *v;
14f9c5c9
AS
2313
2314 bits = 0;
2315 elt_total_bit_offset = 0;
df407dfe 2316 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2317 for (i = 0; i < arity; i += 1)
14f9c5c9 2318 {
d2e4a39e 2319 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2320 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2321 error
0963b4bd
MS
2322 (_("attempt to do packed indexing of "
2323 "something other than a packed array"));
14f9c5c9 2324 else
4c4b4cd2
PH
2325 {
2326 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2327 LONGEST lowerbound, upperbound;
2328 LONGEST idx;
2329
2330 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2331 {
323e0a4a 2332 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2333 lowerbound = upperbound = 0;
2334 }
2335
3cb382c9 2336 idx = pos_atr (ind[i]);
4c4b4cd2 2337 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2338 lim_warning (_("packed array index %ld out of bounds"),
2339 (long) idx);
4c4b4cd2
PH
2340 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2341 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2342 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2343 }
14f9c5c9
AS
2344 }
2345 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2346 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2347
2348 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2349 bits, elt_type);
14f9c5c9
AS
2350 return v;
2351}
2352
4c4b4cd2 2353/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2354
2355static int
d2e4a39e 2356has_negatives (struct type *type)
14f9c5c9 2357{
d2e4a39e
AS
2358 switch (TYPE_CODE (type))
2359 {
2360 default:
2361 return 0;
2362 case TYPE_CODE_INT:
2363 return !TYPE_UNSIGNED (type);
2364 case TYPE_CODE_RANGE:
2365 return TYPE_LOW_BOUND (type) < 0;
2366 }
14f9c5c9 2367}
d2e4a39e 2368
14f9c5c9
AS
2369
2370/* Create a new value of type TYPE from the contents of OBJ starting
2371 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2372 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
0963b4bd 2373 assigning through the result will set the field fetched from.
4c4b4cd2
PH
2374 VALADDR is ignored unless OBJ is NULL, in which case,
2375 VALADDR+OFFSET must address the start of storage containing the
2376 packed value. The value returned in this case is never an lval.
2377 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
14f9c5c9 2378
d2e4a39e 2379struct value *
fc1a4b47 2380ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
a2bd3dcd 2381 long offset, int bit_offset, int bit_size,
4c4b4cd2 2382 struct type *type)
14f9c5c9 2383{
d2e4a39e 2384 struct value *v;
4c4b4cd2
PH
2385 int src, /* Index into the source area */
2386 targ, /* Index into the target area */
2387 srcBitsLeft, /* Number of source bits left to move */
2388 nsrc, ntarg, /* Number of source and target bytes */
2389 unusedLS, /* Number of bits in next significant
2390 byte of source that are unused */
2391 accumSize; /* Number of meaningful bits in accum */
2392 unsigned char *bytes; /* First byte containing data to unpack */
d2e4a39e 2393 unsigned char *unpacked;
4c4b4cd2 2394 unsigned long accum; /* Staging area for bits being transferred */
14f9c5c9
AS
2395 unsigned char sign;
2396 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
4c4b4cd2
PH
2397 /* Transmit bytes from least to most significant; delta is the direction
2398 the indices move. */
50810684 2399 int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
14f9c5c9 2400
61ee279c 2401 type = ada_check_typedef (type);
14f9c5c9
AS
2402
2403 if (obj == NULL)
2404 {
2405 v = allocate_value (type);
d2e4a39e 2406 bytes = (unsigned char *) (valaddr + offset);
14f9c5c9 2407 }
9214ee5f 2408 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
14f9c5c9 2409 {
53ba8333 2410 v = value_at (type, value_address (obj));
9f1f738a 2411 type = value_type (v);
d2e4a39e 2412 bytes = (unsigned char *) alloca (len);
53ba8333 2413 read_memory (value_address (v) + offset, bytes, len);
14f9c5c9 2414 }
d2e4a39e 2415 else
14f9c5c9
AS
2416 {
2417 v = allocate_value (type);
0fd88904 2418 bytes = (unsigned char *) value_contents (obj) + offset;
14f9c5c9 2419 }
d2e4a39e
AS
2420
2421 if (obj != NULL)
14f9c5c9 2422 {
53ba8333 2423 long new_offset = offset;
5b4ee69b 2424
74bcbdf3 2425 set_value_component_location (v, obj);
9bbda503
AC
2426 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2427 set_value_bitsize (v, bit_size);
df407dfe 2428 if (value_bitpos (v) >= HOST_CHAR_BIT)
4c4b4cd2 2429 {
53ba8333 2430 ++new_offset;
9bbda503 2431 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
4c4b4cd2 2432 }
53ba8333
JB
2433 set_value_offset (v, new_offset);
2434
2435 /* Also set the parent value. This is needed when trying to
2436 assign a new value (in inferior memory). */
2437 set_value_parent (v, obj);
14f9c5c9
AS
2438 }
2439 else
9bbda503 2440 set_value_bitsize (v, bit_size);
0fd88904 2441 unpacked = (unsigned char *) value_contents (v);
14f9c5c9
AS
2442
2443 srcBitsLeft = bit_size;
2444 nsrc = len;
2445 ntarg = TYPE_LENGTH (type);
2446 sign = 0;
2447 if (bit_size == 0)
2448 {
2449 memset (unpacked, 0, TYPE_LENGTH (type));
2450 return v;
2451 }
50810684 2452 else if (gdbarch_bits_big_endian (get_type_arch (type)))
14f9c5c9 2453 {
d2e4a39e 2454 src = len - 1;
1265e4aa
JB
2455 if (has_negatives (type)
2456 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2457 sign = ~0;
d2e4a39e
AS
2458
2459 unusedLS =
4c4b4cd2
PH
2460 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2461 % HOST_CHAR_BIT;
14f9c5c9
AS
2462
2463 switch (TYPE_CODE (type))
4c4b4cd2
PH
2464 {
2465 case TYPE_CODE_ARRAY:
2466 case TYPE_CODE_UNION:
2467 case TYPE_CODE_STRUCT:
2468 /* Non-scalar values must be aligned at a byte boundary... */
2469 accumSize =
2470 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2471 /* ... And are placed at the beginning (most-significant) bytes
2472 of the target. */
529cad9c 2473 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
0056e4d5 2474 ntarg = targ + 1;
4c4b4cd2
PH
2475 break;
2476 default:
2477 accumSize = 0;
2478 targ = TYPE_LENGTH (type) - 1;
2479 break;
2480 }
14f9c5c9 2481 }
d2e4a39e 2482 else
14f9c5c9
AS
2483 {
2484 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2485
2486 src = targ = 0;
2487 unusedLS = bit_offset;
2488 accumSize = 0;
2489
d2e4a39e 2490 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2491 sign = ~0;
14f9c5c9 2492 }
d2e4a39e 2493
14f9c5c9
AS
2494 accum = 0;
2495 while (nsrc > 0)
2496 {
2497 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2498 part of the value. */
d2e4a39e 2499 unsigned int unusedMSMask =
4c4b4cd2
PH
2500 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2501 1;
2502 /* Sign-extend bits for this byte. */
14f9c5c9 2503 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2504
d2e4a39e 2505 accum |=
4c4b4cd2 2506 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2507 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2508 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2
PH
2509 {
2510 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2511 accumSize -= HOST_CHAR_BIT;
2512 accum >>= HOST_CHAR_BIT;
2513 ntarg -= 1;
2514 targ += delta;
2515 }
14f9c5c9
AS
2516 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2517 unusedLS = 0;
2518 nsrc -= 1;
2519 src += delta;
2520 }
2521 while (ntarg > 0)
2522 {
2523 accum |= sign << accumSize;
2524 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2525 accumSize -= HOST_CHAR_BIT;
2526 accum >>= HOST_CHAR_BIT;
2527 ntarg -= 1;
2528 targ += delta;
2529 }
2530
2531 return v;
2532}
d2e4a39e 2533
14f9c5c9
AS
2534/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2535 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2536 not overlap. */
14f9c5c9 2537static void
fc1a4b47 2538move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2539 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2540{
2541 unsigned int accum, mask;
2542 int accum_bits, chunk_size;
2543
2544 target += targ_offset / HOST_CHAR_BIT;
2545 targ_offset %= HOST_CHAR_BIT;
2546 source += src_offset / HOST_CHAR_BIT;
2547 src_offset %= HOST_CHAR_BIT;
50810684 2548 if (bits_big_endian_p)
14f9c5c9
AS
2549 {
2550 accum = (unsigned char) *source;
2551 source += 1;
2552 accum_bits = HOST_CHAR_BIT - src_offset;
2553
d2e4a39e 2554 while (n > 0)
4c4b4cd2
PH
2555 {
2556 int unused_right;
5b4ee69b 2557
4c4b4cd2
PH
2558 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2559 accum_bits += HOST_CHAR_BIT;
2560 source += 1;
2561 chunk_size = HOST_CHAR_BIT - targ_offset;
2562 if (chunk_size > n)
2563 chunk_size = n;
2564 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2565 mask = ((1 << chunk_size) - 1) << unused_right;
2566 *target =
2567 (*target & ~mask)
2568 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2569 n -= chunk_size;
2570 accum_bits -= chunk_size;
2571 target += 1;
2572 targ_offset = 0;
2573 }
14f9c5c9
AS
2574 }
2575 else
2576 {
2577 accum = (unsigned char) *source >> src_offset;
2578 source += 1;
2579 accum_bits = HOST_CHAR_BIT - src_offset;
2580
d2e4a39e 2581 while (n > 0)
4c4b4cd2
PH
2582 {
2583 accum = accum + ((unsigned char) *source << accum_bits);
2584 accum_bits += HOST_CHAR_BIT;
2585 source += 1;
2586 chunk_size = HOST_CHAR_BIT - targ_offset;
2587 if (chunk_size > n)
2588 chunk_size = n;
2589 mask = ((1 << chunk_size) - 1) << targ_offset;
2590 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2591 n -= chunk_size;
2592 accum_bits -= chunk_size;
2593 accum >>= chunk_size;
2594 target += 1;
2595 targ_offset = 0;
2596 }
14f9c5c9
AS
2597 }
2598}
2599
14f9c5c9
AS
2600/* Store the contents of FROMVAL into the location of TOVAL.
2601 Return a new value with the location of TOVAL and contents of
2602 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2603 floating-point or non-scalar types. */
14f9c5c9 2604
d2e4a39e
AS
2605static struct value *
2606ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2607{
df407dfe
AC
2608 struct type *type = value_type (toval);
2609 int bits = value_bitsize (toval);
14f9c5c9 2610
52ce6436
PH
2611 toval = ada_coerce_ref (toval);
2612 fromval = ada_coerce_ref (fromval);
2613
2614 if (ada_is_direct_array_type (value_type (toval)))
2615 toval = ada_coerce_to_simple_array (toval);
2616 if (ada_is_direct_array_type (value_type (fromval)))
2617 fromval = ada_coerce_to_simple_array (fromval);
2618
88e3b34b 2619 if (!deprecated_value_modifiable (toval))
323e0a4a 2620 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2621
d2e4a39e 2622 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2623 && bits > 0
d2e4a39e 2624 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2625 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2626 {
df407dfe
AC
2627 int len = (value_bitpos (toval)
2628 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2629 int from_size;
948f8e3d 2630 gdb_byte *buffer = alloca (len);
d2e4a39e 2631 struct value *val;
42ae5230 2632 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2633
2634 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2635 fromval = value_cast (type, fromval);
14f9c5c9 2636
52ce6436 2637 read_memory (to_addr, buffer, len);
aced2898
PH
2638 from_size = value_bitsize (fromval);
2639 if (from_size == 0)
2640 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2641 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2642 move_bits (buffer, value_bitpos (toval),
50810684 2643 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2644 else
50810684
UW
2645 move_bits (buffer, value_bitpos (toval),
2646 value_contents (fromval), 0, bits, 0);
972daa01 2647 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2648
14f9c5c9 2649 val = value_copy (toval);
0fd88904 2650 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2651 TYPE_LENGTH (type));
04624583 2652 deprecated_set_value_type (val, type);
d2e4a39e 2653
14f9c5c9
AS
2654 return val;
2655 }
2656
2657 return value_assign (toval, fromval);
2658}
2659
2660
52ce6436
PH
2661/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2662 * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2663 * CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2664 * COMPONENT, and not the inferior's memory. The current contents
2665 * of COMPONENT are ignored. */
2666static void
2667value_assign_to_component (struct value *container, struct value *component,
2668 struct value *val)
2669{
2670 LONGEST offset_in_container =
42ae5230 2671 (LONGEST) (value_address (component) - value_address (container));
52ce6436
PH
2672 int bit_offset_in_container =
2673 value_bitpos (component) - value_bitpos (container);
2674 int bits;
2675
2676 val = value_cast (value_type (component), val);
2677
2678 if (value_bitsize (component) == 0)
2679 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2680 else
2681 bits = value_bitsize (component);
2682
50810684 2683 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
52ce6436
PH
2684 move_bits (value_contents_writeable (container) + offset_in_container,
2685 value_bitpos (container) + bit_offset_in_container,
2686 value_contents (val),
2687 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
50810684 2688 bits, 1);
52ce6436
PH
2689 else
2690 move_bits (value_contents_writeable (container) + offset_in_container,
2691 value_bitpos (container) + bit_offset_in_container,
50810684 2692 value_contents (val), 0, bits, 0);
52ce6436
PH
2693}
2694
4c4b4cd2
PH
2695/* The value of the element of array ARR at the ARITY indices given in IND.
2696 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2697 thereto. */
2698
d2e4a39e
AS
2699struct value *
2700ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2701{
2702 int k;
d2e4a39e
AS
2703 struct value *elt;
2704 struct type *elt_type;
14f9c5c9
AS
2705
2706 elt = ada_coerce_to_simple_array (arr);
2707
df407dfe 2708 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2709 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2710 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2711 return value_subscript_packed (elt, arity, ind);
2712
2713 for (k = 0; k < arity; k += 1)
2714 {
2715 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2716 error (_("too many subscripts (%d expected)"), k);
2497b498 2717 elt = value_subscript (elt, pos_atr (ind[k]));
14f9c5c9
AS
2718 }
2719 return elt;
2720}
2721
2722/* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2723 value of the element of *ARR at the ARITY indices given in
4c4b4cd2 2724 IND. Does not read the entire array into memory. */
14f9c5c9 2725
2c0b251b 2726static struct value *
d2e4a39e 2727ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
4c4b4cd2 2728 struct value **ind)
14f9c5c9
AS
2729{
2730 int k;
2731
2732 for (k = 0; k < arity; k += 1)
2733 {
2734 LONGEST lwb, upb;
14f9c5c9
AS
2735
2736 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2737 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2738 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2739 value_copy (arr));
14f9c5c9 2740 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2497b498 2741 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2742 type = TYPE_TARGET_TYPE (type);
2743 }
2744
2745 return value_ind (arr);
2746}
2747
0b5d8877 2748/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
f5938064
JG
2749 actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2750 elements starting at index LOW. The lower bound of this array is LOW, as
0963b4bd 2751 per Ada rules. */
0b5d8877 2752static struct value *
f5938064
JG
2753ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2754 int low, int high)
0b5d8877 2755{
b0dd7688 2756 struct type *type0 = ada_check_typedef (type);
6c038f32 2757 CORE_ADDR base = value_as_address (array_ptr)
b0dd7688
JB
2758 + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2759 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
0c9c3474
SA
2760 struct type *index_type
2761 = create_static_range_type (NULL,
2762 TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
2763 low, high);
6c038f32 2764 struct type *slice_type =
b0dd7688 2765 create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
5b4ee69b 2766
f5938064 2767 return value_at_lazy (slice_type, base);
0b5d8877
PH
2768}
2769
2770
2771static struct value *
2772ada_value_slice (struct value *array, int low, int high)
2773{
b0dd7688 2774 struct type *type = ada_check_typedef (value_type (array));
0c9c3474
SA
2775 struct type *index_type
2776 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
6c038f32 2777 struct type *slice_type =
0b5d8877 2778 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
5b4ee69b 2779
6c038f32 2780 return value_cast (slice_type, value_slice (array, low, high - low + 1));
0b5d8877
PH
2781}
2782
14f9c5c9
AS
2783/* If type is a record type in the form of a standard GNAT array
2784 descriptor, returns the number of dimensions for type. If arr is a
2785 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2786 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2787
2788int
d2e4a39e 2789ada_array_arity (struct type *type)
14f9c5c9
AS
2790{
2791 int arity;
2792
2793 if (type == NULL)
2794 return 0;
2795
2796 type = desc_base_type (type);
2797
2798 arity = 0;
d2e4a39e 2799 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2800 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2801 else
2802 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2803 {
4c4b4cd2 2804 arity += 1;
61ee279c 2805 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2806 }
d2e4a39e 2807
14f9c5c9
AS
2808 return arity;
2809}
2810
2811/* If TYPE is a record type in the form of a standard GNAT array
2812 descriptor or a simple array type, returns the element type for
2813 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2814 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2815
d2e4a39e
AS
2816struct type *
2817ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2818{
2819 type = desc_base_type (type);
2820
d2e4a39e 2821 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2822 {
2823 int k;
d2e4a39e 2824 struct type *p_array_type;
14f9c5c9 2825
556bdfd4 2826 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2827
2828 k = ada_array_arity (type);
2829 if (k == 0)
4c4b4cd2 2830 return NULL;
d2e4a39e 2831
4c4b4cd2 2832 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2833 if (nindices >= 0 && k > nindices)
4c4b4cd2 2834 k = nindices;
d2e4a39e 2835 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2836 {
61ee279c 2837 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2838 k -= 1;
2839 }
14f9c5c9
AS
2840 return p_array_type;
2841 }
2842 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2843 {
2844 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2845 {
2846 type = TYPE_TARGET_TYPE (type);
2847 nindices -= 1;
2848 }
14f9c5c9
AS
2849 return type;
2850 }
2851
2852 return NULL;
2853}
2854
4c4b4cd2 2855/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2856 Does not examine memory. Throws an error if N is invalid or TYPE
2857 is not an array type. NAME is the name of the Ada attribute being
2858 evaluated ('range, 'first, 'last, or 'length); it is used in building
2859 the error message. */
14f9c5c9 2860
1eea4ebd
UW
2861static struct type *
2862ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2863{
4c4b4cd2
PH
2864 struct type *result_type;
2865
14f9c5c9
AS
2866 type = desc_base_type (type);
2867
1eea4ebd
UW
2868 if (n < 0 || n > ada_array_arity (type))
2869 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2870
4c4b4cd2 2871 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2872 {
2873 int i;
2874
2875 for (i = 1; i < n; i += 1)
4c4b4cd2 2876 type = TYPE_TARGET_TYPE (type);
262452ec 2877 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
2878 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2879 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 2880 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
2881 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2882 result_type = NULL;
14f9c5c9 2883 }
d2e4a39e 2884 else
1eea4ebd
UW
2885 {
2886 result_type = desc_index_type (desc_bounds_type (type), n);
2887 if (result_type == NULL)
2888 error (_("attempt to take bound of something that is not an array"));
2889 }
2890
2891 return result_type;
14f9c5c9
AS
2892}
2893
2894/* Given that arr is an array type, returns the lower bound of the
2895 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2896 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2897 array-descriptor type. It works for other arrays with bounds supplied
2898 by run-time quantities other than discriminants. */
14f9c5c9 2899
abb68b3e 2900static LONGEST
fb5e3d5c 2901ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2902{
8a48ac95 2903 struct type *type, *index_type_desc, *index_type;
1ce677a4 2904 int i;
262452ec
JK
2905
2906 gdb_assert (which == 0 || which == 1);
14f9c5c9 2907
ad82864c
JB
2908 if (ada_is_constrained_packed_array_type (arr_type))
2909 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2910
4c4b4cd2 2911 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2912 return (LONGEST) - which;
14f9c5c9
AS
2913
2914 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2915 type = TYPE_TARGET_TYPE (arr_type);
2916 else
2917 type = arr_type;
2918
2919 index_type_desc = ada_find_parallel_type (type, "___XA");
28c85d6c 2920 ada_fixup_array_indexes_type (index_type_desc);
262452ec 2921 if (index_type_desc != NULL)
28c85d6c
JB
2922 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2923 NULL);
262452ec 2924 else
8a48ac95
JB
2925 {
2926 struct type *elt_type = check_typedef (type);
2927
2928 for (i = 1; i < n; i++)
2929 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2930
2931 index_type = TYPE_INDEX_TYPE (elt_type);
2932 }
262452ec 2933
43bbcdc2
PH
2934 return
2935 (LONGEST) (which == 0
2936 ? ada_discrete_type_low_bound (index_type)
2937 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2938}
2939
2940/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
2941 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2942 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 2943 supplied by run-time quantities other than discriminants. */
14f9c5c9 2944
1eea4ebd 2945static LONGEST
4dc81987 2946ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 2947{
df407dfe 2948 struct type *arr_type = value_type (arr);
14f9c5c9 2949
ad82864c
JB
2950 if (ada_is_constrained_packed_array_type (arr_type))
2951 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 2952 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 2953 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 2954 else
1eea4ebd 2955 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
2956}
2957
2958/* Given that arr is an array value, returns the length of the
2959 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
2960 supplied by run-time quantities other than discriminants.
2961 Does not work for arrays indexed by enumeration types with representation
2962 clauses at the moment. */
14f9c5c9 2963
1eea4ebd 2964static LONGEST
d2e4a39e 2965ada_array_length (struct value *arr, int n)
14f9c5c9 2966{
df407dfe 2967 struct type *arr_type = ada_check_typedef (value_type (arr));
14f9c5c9 2968
ad82864c
JB
2969 if (ada_is_constrained_packed_array_type (arr_type))
2970 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 2971
4c4b4cd2 2972 if (ada_is_simple_array_type (arr_type))
1eea4ebd
UW
2973 return (ada_array_bound_from_type (arr_type, n, 1)
2974 - ada_array_bound_from_type (arr_type, n, 0) + 1);
14f9c5c9 2975 else
1eea4ebd
UW
2976 return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2977 - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
4c4b4cd2
PH
2978}
2979
2980/* An empty array whose type is that of ARR_TYPE (an array type),
2981 with bounds LOW to LOW-1. */
2982
2983static struct value *
2984empty_array (struct type *arr_type, int low)
2985{
b0dd7688 2986 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
2987 struct type *index_type
2988 = create_static_range_type
2989 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low, low - 1);
b0dd7688 2990 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 2991
0b5d8877 2992 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 2993}
14f9c5c9 2994\f
d2e4a39e 2995
4c4b4cd2 2996 /* Name resolution */
14f9c5c9 2997
4c4b4cd2
PH
2998/* The "decoded" name for the user-definable Ada operator corresponding
2999 to OP. */
14f9c5c9 3000
d2e4a39e 3001static const char *
4c4b4cd2 3002ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3003{
3004 int i;
3005
4c4b4cd2 3006 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3007 {
3008 if (ada_opname_table[i].op == op)
4c4b4cd2 3009 return ada_opname_table[i].decoded;
14f9c5c9 3010 }
323e0a4a 3011 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3012}
3013
3014
4c4b4cd2
PH
3015/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3016 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3017 undefined namespace) and converts operators that are
3018 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
3019 non-null, it provides a preferred result type [at the moment, only
3020 type void has any effect---causing procedures to be preferred over
3021 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 3022 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3023
4c4b4cd2
PH
3024static void
3025resolve (struct expression **expp, int void_context_p)
14f9c5c9 3026{
30b15541
UW
3027 struct type *context_type = NULL;
3028 int pc = 0;
3029
3030 if (void_context_p)
3031 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
3032
3033 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
3034}
3035
4c4b4cd2
PH
3036/* Resolve the operator of the subexpression beginning at
3037 position *POS of *EXPP. "Resolving" consists of replacing
3038 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3039 with their resolutions, replacing built-in operators with
3040 function calls to user-defined operators, where appropriate, and,
3041 when DEPROCEDURE_P is non-zero, converting function-valued variables
3042 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3043 are as in ada_resolve, above. */
14f9c5c9 3044
d2e4a39e 3045static struct value *
4c4b4cd2 3046resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 3047 struct type *context_type)
14f9c5c9
AS
3048{
3049 int pc = *pos;
3050 int i;
4c4b4cd2 3051 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 3052 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
3053 struct value **argvec; /* Vector of operand types (alloca'ed). */
3054 int nargs; /* Number of operands. */
52ce6436 3055 int oplen;
14f9c5c9
AS
3056
3057 argvec = NULL;
3058 nargs = 0;
3059 exp = *expp;
3060
52ce6436
PH
3061 /* Pass one: resolve operands, saving their types and updating *pos,
3062 if needed. */
14f9c5c9
AS
3063 switch (op)
3064 {
4c4b4cd2
PH
3065 case OP_FUNCALL:
3066 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
3067 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3068 *pos += 7;
4c4b4cd2
PH
3069 else
3070 {
3071 *pos += 3;
3072 resolve_subexp (expp, pos, 0, NULL);
3073 }
3074 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
3075 break;
3076
14f9c5c9 3077 case UNOP_ADDR:
4c4b4cd2
PH
3078 *pos += 1;
3079 resolve_subexp (expp, pos, 0, NULL);
3080 break;
3081
52ce6436
PH
3082 case UNOP_QUAL:
3083 *pos += 3;
17466c1a 3084 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
3085 break;
3086
52ce6436 3087 case OP_ATR_MODULUS:
4c4b4cd2
PH
3088 case OP_ATR_SIZE:
3089 case OP_ATR_TAG:
4c4b4cd2
PH
3090 case OP_ATR_FIRST:
3091 case OP_ATR_LAST:
3092 case OP_ATR_LENGTH:
3093 case OP_ATR_POS:
3094 case OP_ATR_VAL:
4c4b4cd2
PH
3095 case OP_ATR_MIN:
3096 case OP_ATR_MAX:
52ce6436
PH
3097 case TERNOP_IN_RANGE:
3098 case BINOP_IN_BOUNDS:
3099 case UNOP_IN_RANGE:
3100 case OP_AGGREGATE:
3101 case OP_OTHERS:
3102 case OP_CHOICES:
3103 case OP_POSITIONAL:
3104 case OP_DISCRETE_RANGE:
3105 case OP_NAME:
3106 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3107 *pos += oplen;
14f9c5c9
AS
3108 break;
3109
3110 case BINOP_ASSIGN:
3111 {
4c4b4cd2
PH
3112 struct value *arg1;
3113
3114 *pos += 1;
3115 arg1 = resolve_subexp (expp, pos, 0, NULL);
3116 if (arg1 == NULL)
3117 resolve_subexp (expp, pos, 1, NULL);
3118 else
df407dfe 3119 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 3120 break;
14f9c5c9
AS
3121 }
3122
4c4b4cd2 3123 case UNOP_CAST:
4c4b4cd2
PH
3124 *pos += 3;
3125 nargs = 1;
3126 break;
14f9c5c9 3127
4c4b4cd2
PH
3128 case BINOP_ADD:
3129 case BINOP_SUB:
3130 case BINOP_MUL:
3131 case BINOP_DIV:
3132 case BINOP_REM:
3133 case BINOP_MOD:
3134 case BINOP_EXP:
3135 case BINOP_CONCAT:
3136 case BINOP_LOGICAL_AND:
3137 case BINOP_LOGICAL_OR:
3138 case BINOP_BITWISE_AND:
3139 case BINOP_BITWISE_IOR:
3140 case BINOP_BITWISE_XOR:
14f9c5c9 3141
4c4b4cd2
PH
3142 case BINOP_EQUAL:
3143 case BINOP_NOTEQUAL:
3144 case BINOP_LESS:
3145 case BINOP_GTR:
3146 case BINOP_LEQ:
3147 case BINOP_GEQ:
14f9c5c9 3148
4c4b4cd2
PH
3149 case BINOP_REPEAT:
3150 case BINOP_SUBSCRIPT:
3151 case BINOP_COMMA:
40c8aaa9
JB
3152 *pos += 1;
3153 nargs = 2;
3154 break;
14f9c5c9 3155
4c4b4cd2
PH
3156 case UNOP_NEG:
3157 case UNOP_PLUS:
3158 case UNOP_LOGICAL_NOT:
3159 case UNOP_ABS:
3160 case UNOP_IND:
3161 *pos += 1;
3162 nargs = 1;
3163 break;
14f9c5c9 3164
4c4b4cd2
PH
3165 case OP_LONG:
3166 case OP_DOUBLE:
3167 case OP_VAR_VALUE:
3168 *pos += 4;
3169 break;
14f9c5c9 3170
4c4b4cd2
PH
3171 case OP_TYPE:
3172 case OP_BOOL:
3173 case OP_LAST:
4c4b4cd2
PH
3174 case OP_INTERNALVAR:
3175 *pos += 3;
3176 break;
14f9c5c9 3177
4c4b4cd2
PH
3178 case UNOP_MEMVAL:
3179 *pos += 3;
3180 nargs = 1;
3181 break;
3182
67f3407f
DJ
3183 case OP_REGISTER:
3184 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3185 break;
3186
4c4b4cd2
PH
3187 case STRUCTOP_STRUCT:
3188 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3189 nargs = 1;
3190 break;
3191
4c4b4cd2 3192 case TERNOP_SLICE:
4c4b4cd2
PH
3193 *pos += 1;
3194 nargs = 3;
3195 break;
3196
52ce6436 3197 case OP_STRING:
14f9c5c9 3198 break;
4c4b4cd2
PH
3199
3200 default:
323e0a4a 3201 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3202 }
3203
76a01679 3204 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
4c4b4cd2
PH
3205 for (i = 0; i < nargs; i += 1)
3206 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3207 argvec[i] = NULL;
3208 exp = *expp;
3209
3210 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3211 switch (op)
3212 {
3213 default:
3214 break;
3215
14f9c5c9 3216 case OP_VAR_VALUE:
4c4b4cd2 3217 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
3218 {
3219 struct ada_symbol_info *candidates;
3220 int n_candidates;
3221
3222 n_candidates =
3223 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3224 (exp->elts[pc + 2].symbol),
3225 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3226 &candidates);
76a01679
JB
3227
3228 if (n_candidates > 1)
3229 {
3230 /* Types tend to get re-introduced locally, so if there
3231 are any local symbols that are not types, first filter
3232 out all types. */
3233 int j;
3234 for (j = 0; j < n_candidates; j += 1)
3235 switch (SYMBOL_CLASS (candidates[j].sym))
3236 {
3237 case LOC_REGISTER:
3238 case LOC_ARG:
3239 case LOC_REF_ARG:
76a01679
JB
3240 case LOC_REGPARM_ADDR:
3241 case LOC_LOCAL:
76a01679 3242 case LOC_COMPUTED:
76a01679
JB
3243 goto FoundNonType;
3244 default:
3245 break;
3246 }
3247 FoundNonType:
3248 if (j < n_candidates)
3249 {
3250 j = 0;
3251 while (j < n_candidates)
3252 {
3253 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3254 {
3255 candidates[j] = candidates[n_candidates - 1];
3256 n_candidates -= 1;
3257 }
3258 else
3259 j += 1;
3260 }
3261 }
3262 }
3263
3264 if (n_candidates == 0)
323e0a4a 3265 error (_("No definition found for %s"),
76a01679
JB
3266 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3267 else if (n_candidates == 1)
3268 i = 0;
3269 else if (deprocedure_p
3270 && !is_nonfunction (candidates, n_candidates))
3271 {
06d5cf63
JB
3272 i = ada_resolve_function
3273 (candidates, n_candidates, NULL, 0,
3274 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3275 context_type);
76a01679 3276 if (i < 0)
323e0a4a 3277 error (_("Could not find a match for %s"),
76a01679
JB
3278 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3279 }
3280 else
3281 {
323e0a4a 3282 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3283 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3284 user_select_syms (candidates, n_candidates, 1);
3285 i = 0;
3286 }
3287
3288 exp->elts[pc + 1].block = candidates[i].block;
3289 exp->elts[pc + 2].symbol = candidates[i].sym;
1265e4aa
JB
3290 if (innermost_block == NULL
3291 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3292 innermost_block = candidates[i].block;
3293 }
3294
3295 if (deprocedure_p
3296 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3297 == TYPE_CODE_FUNC))
3298 {
3299 replace_operator_with_call (expp, pc, 0, 0,
3300 exp->elts[pc + 2].symbol,
3301 exp->elts[pc + 1].block);
3302 exp = *expp;
3303 }
14f9c5c9
AS
3304 break;
3305
3306 case OP_FUNCALL:
3307 {
4c4b4cd2 3308 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3309 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2
PH
3310 {
3311 struct ada_symbol_info *candidates;
3312 int n_candidates;
3313
3314 n_candidates =
76a01679
JB
3315 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3316 (exp->elts[pc + 5].symbol),
3317 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3318 &candidates);
4c4b4cd2
PH
3319 if (n_candidates == 1)
3320 i = 0;
3321 else
3322 {
06d5cf63
JB
3323 i = ada_resolve_function
3324 (candidates, n_candidates,
3325 argvec, nargs,
3326 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3327 context_type);
4c4b4cd2 3328 if (i < 0)
323e0a4a 3329 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3330 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3331 }
3332
3333 exp->elts[pc + 4].block = candidates[i].block;
3334 exp->elts[pc + 5].symbol = candidates[i].sym;
1265e4aa
JB
3335 if (innermost_block == NULL
3336 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3337 innermost_block = candidates[i].block;
3338 }
14f9c5c9
AS
3339 }
3340 break;
3341 case BINOP_ADD:
3342 case BINOP_SUB:
3343 case BINOP_MUL:
3344 case BINOP_DIV:
3345 case BINOP_REM:
3346 case BINOP_MOD:
3347 case BINOP_CONCAT:
3348 case BINOP_BITWISE_AND:
3349 case BINOP_BITWISE_IOR:
3350 case BINOP_BITWISE_XOR:
3351 case BINOP_EQUAL:
3352 case BINOP_NOTEQUAL:
3353 case BINOP_LESS:
3354 case BINOP_GTR:
3355 case BINOP_LEQ:
3356 case BINOP_GEQ:
3357 case BINOP_EXP:
3358 case UNOP_NEG:
3359 case UNOP_PLUS:
3360 case UNOP_LOGICAL_NOT:
3361 case UNOP_ABS:
3362 if (possible_user_operator_p (op, argvec))
4c4b4cd2
PH
3363 {
3364 struct ada_symbol_info *candidates;
3365 int n_candidates;
3366
3367 n_candidates =
3368 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3369 (struct block *) NULL, VAR_DOMAIN,
4eeaa230 3370 &candidates);
4c4b4cd2 3371 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3372 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3373 if (i < 0)
3374 break;
3375
76a01679
JB
3376 replace_operator_with_call (expp, pc, nargs, 1,
3377 candidates[i].sym, candidates[i].block);
4c4b4cd2
PH
3378 exp = *expp;
3379 }
14f9c5c9 3380 break;
4c4b4cd2
PH
3381
3382 case OP_TYPE:
b3dbf008 3383 case OP_REGISTER:
4c4b4cd2 3384 return NULL;
14f9c5c9
AS
3385 }
3386
3387 *pos = pc;
3388 return evaluate_subexp_type (exp, pos);
3389}
3390
3391/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3392 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3393 a non-pointer. */
14f9c5c9 3394/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3395 liberal. */
14f9c5c9
AS
3396
3397static int
4dc81987 3398ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3399{
61ee279c
PH
3400 ftype = ada_check_typedef (ftype);
3401 atype = ada_check_typedef (atype);
14f9c5c9
AS
3402
3403 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3404 ftype = TYPE_TARGET_TYPE (ftype);
3405 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3406 atype = TYPE_TARGET_TYPE (atype);
3407
d2e4a39e 3408 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3409 {
3410 default:
5b3d5b7d 3411 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3412 case TYPE_CODE_PTR:
3413 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3414 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3415 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3416 else
1265e4aa
JB
3417 return (may_deref
3418 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3419 case TYPE_CODE_INT:
3420 case TYPE_CODE_ENUM:
3421 case TYPE_CODE_RANGE:
3422 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3423 {
3424 case TYPE_CODE_INT:
3425 case TYPE_CODE_ENUM:
3426 case TYPE_CODE_RANGE:
3427 return 1;
3428 default:
3429 return 0;
3430 }
14f9c5c9
AS
3431
3432 case TYPE_CODE_ARRAY:
d2e4a39e 3433 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3434 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3435
3436 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3437 if (ada_is_array_descriptor_type (ftype))
3438 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3439 || ada_is_array_descriptor_type (atype));
14f9c5c9 3440 else
4c4b4cd2
PH
3441 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3442 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3443
3444 case TYPE_CODE_UNION:
3445 case TYPE_CODE_FLT:
3446 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3447 }
3448}
3449
3450/* Return non-zero if the formals of FUNC "sufficiently match" the
3451 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3452 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3453 argument function. */
14f9c5c9
AS
3454
3455static int
d2e4a39e 3456ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3457{
3458 int i;
d2e4a39e 3459 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3460
1265e4aa
JB
3461 if (SYMBOL_CLASS (func) == LOC_CONST
3462 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3463 return (n_actuals == 0);
3464 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3465 return 0;
3466
3467 if (TYPE_NFIELDS (func_type) != n_actuals)
3468 return 0;
3469
3470 for (i = 0; i < n_actuals; i += 1)
3471 {
4c4b4cd2 3472 if (actuals[i] == NULL)
76a01679
JB
3473 return 0;
3474 else
3475 {
5b4ee69b
MS
3476 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3477 i));
df407dfe 3478 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3479
76a01679
JB
3480 if (!ada_type_match (ftype, atype, 1))
3481 return 0;
3482 }
14f9c5c9
AS
3483 }
3484 return 1;
3485}
3486
3487/* False iff function type FUNC_TYPE definitely does not produce a value
3488 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3489 FUNC_TYPE is not a valid function type with a non-null return type
3490 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3491
3492static int
d2e4a39e 3493return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3494{
d2e4a39e 3495 struct type *return_type;
14f9c5c9
AS
3496
3497 if (func_type == NULL)
3498 return 1;
3499
4c4b4cd2 3500 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3501 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3502 else
18af8284 3503 return_type = get_base_type (func_type);
14f9c5c9
AS
3504 if (return_type == NULL)
3505 return 1;
3506
18af8284 3507 context_type = get_base_type (context_type);
14f9c5c9
AS
3508
3509 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3510 return context_type == NULL || return_type == context_type;
3511 else if (context_type == NULL)
3512 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3513 else
3514 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3515}
3516
3517
4c4b4cd2 3518/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3519 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3520 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3521 that returns that type, then eliminate matches that don't. If
3522 CONTEXT_TYPE is void and there is at least one match that does not
3523 return void, eliminate all matches that do.
3524
14f9c5c9
AS
3525 Asks the user if there is more than one match remaining. Returns -1
3526 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3527 solely for messages. May re-arrange and modify SYMS in
3528 the process; the index returned is for the modified vector. */
14f9c5c9 3529
4c4b4cd2
PH
3530static int
3531ada_resolve_function (struct ada_symbol_info syms[],
3532 int nsyms, struct value **args, int nargs,
3533 const char *name, struct type *context_type)
14f9c5c9 3534{
30b15541 3535 int fallback;
14f9c5c9 3536 int k;
4c4b4cd2 3537 int m; /* Number of hits */
14f9c5c9 3538
d2e4a39e 3539 m = 0;
30b15541
UW
3540 /* In the first pass of the loop, we only accept functions matching
3541 context_type. If none are found, we add a second pass of the loop
3542 where every function is accepted. */
3543 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3544 {
3545 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3546 {
61ee279c 3547 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
4c4b4cd2
PH
3548
3549 if (ada_args_match (syms[k].sym, args, nargs)
30b15541 3550 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3551 {
3552 syms[m] = syms[k];
3553 m += 1;
3554 }
3555 }
14f9c5c9
AS
3556 }
3557
3558 if (m == 0)
3559 return -1;
3560 else if (m > 1)
3561 {
323e0a4a 3562 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3563 user_select_syms (syms, m, 1);
14f9c5c9
AS
3564 return 0;
3565 }
3566 return 0;
3567}
3568
4c4b4cd2
PH
3569/* Returns true (non-zero) iff decoded name N0 should appear before N1
3570 in a listing of choices during disambiguation (see sort_choices, below).
3571 The idea is that overloadings of a subprogram name from the
3572 same package should sort in their source order. We settle for ordering
3573 such symbols by their trailing number (__N or $N). */
3574
14f9c5c9 3575static int
0d5cff50 3576encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3577{
3578 if (N1 == NULL)
3579 return 0;
3580 else if (N0 == NULL)
3581 return 1;
3582 else
3583 {
3584 int k0, k1;
5b4ee69b 3585
d2e4a39e 3586 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3587 ;
d2e4a39e 3588 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3589 ;
d2e4a39e 3590 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3591 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3592 {
3593 int n0, n1;
5b4ee69b 3594
4c4b4cd2
PH
3595 n0 = k0;
3596 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3597 n0 -= 1;
3598 n1 = k1;
3599 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3600 n1 -= 1;
3601 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3602 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3603 }
14f9c5c9
AS
3604 return (strcmp (N0, N1) < 0);
3605 }
3606}
d2e4a39e 3607
4c4b4cd2
PH
3608/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3609 encoded names. */
3610
d2e4a39e 3611static void
4c4b4cd2 3612sort_choices (struct ada_symbol_info syms[], int nsyms)
14f9c5c9 3613{
4c4b4cd2 3614 int i;
5b4ee69b 3615
d2e4a39e 3616 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3617 {
4c4b4cd2 3618 struct ada_symbol_info sym = syms[i];
14f9c5c9
AS
3619 int j;
3620
d2e4a39e 3621 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2
PH
3622 {
3623 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3624 SYMBOL_LINKAGE_NAME (sym.sym)))
3625 break;
3626 syms[j + 1] = syms[j];
3627 }
d2e4a39e 3628 syms[j + 1] = sym;
14f9c5c9
AS
3629 }
3630}
3631
4c4b4cd2
PH
3632/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3633 by asking the user (if necessary), returning the number selected,
3634 and setting the first elements of SYMS items. Error if no symbols
3635 selected. */
14f9c5c9
AS
3636
3637/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3638 to be re-integrated one of these days. */
14f9c5c9
AS
3639
3640int
4c4b4cd2 3641user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
14f9c5c9
AS
3642{
3643 int i;
d2e4a39e 3644 int *chosen = (int *) alloca (sizeof (int) * nsyms);
14f9c5c9
AS
3645 int n_chosen;
3646 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3647 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3648
3649 if (max_results < 1)
323e0a4a 3650 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3651 if (nsyms <= 1)
3652 return nsyms;
3653
717d2f5a
JB
3654 if (select_mode == multiple_symbols_cancel)
3655 error (_("\
3656canceled because the command is ambiguous\n\
3657See set/show multiple-symbol."));
3658
3659 /* If select_mode is "all", then return all possible symbols.
3660 Only do that if more than one symbol can be selected, of course.
3661 Otherwise, display the menu as usual. */
3662 if (select_mode == multiple_symbols_all && max_results > 1)
3663 return nsyms;
3664
323e0a4a 3665 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3666 if (max_results > 1)
323e0a4a 3667 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3668
4c4b4cd2 3669 sort_choices (syms, nsyms);
14f9c5c9
AS
3670
3671 for (i = 0; i < nsyms; i += 1)
3672 {
4c4b4cd2
PH
3673 if (syms[i].sym == NULL)
3674 continue;
3675
3676 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3677 {
76a01679
JB
3678 struct symtab_and_line sal =
3679 find_function_start_sal (syms[i].sym, 1);
5b4ee69b 3680
323e0a4a
AC
3681 if (sal.symtab == NULL)
3682 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3683 i + first_choice,
3684 SYMBOL_PRINT_NAME (syms[i].sym),
3685 sal.line);
3686 else
3687 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3688 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3689 symtab_to_filename_for_display (sal.symtab),
3690 sal.line);
4c4b4cd2
PH
3691 continue;
3692 }
d2e4a39e 3693 else
4c4b4cd2
PH
3694 {
3695 int is_enumeral =
3696 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3697 && SYMBOL_TYPE (syms[i].sym) != NULL
3698 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
210bbc17 3699 struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
4c4b4cd2
PH
3700
3701 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
323e0a4a 3702 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2
PH
3703 i + first_choice,
3704 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3705 symtab_to_filename_for_display (symtab),
3706 SYMBOL_LINE (syms[i].sym));
76a01679
JB
3707 else if (is_enumeral
3708 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
4c4b4cd2 3709 {
a3f17187 3710 printf_unfiltered (("[%d] "), i + first_choice);
76a01679 3711 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
79d43c61 3712 gdb_stdout, -1, 0, &type_print_raw_options);
323e0a4a 3713 printf_unfiltered (_("'(%s) (enumeral)\n"),
4c4b4cd2
PH
3714 SYMBOL_PRINT_NAME (syms[i].sym));
3715 }
3716 else if (symtab != NULL)
3717 printf_unfiltered (is_enumeral
323e0a4a
AC
3718 ? _("[%d] %s in %s (enumeral)\n")
3719 : _("[%d] %s at %s:?\n"),
4c4b4cd2
PH
3720 i + first_choice,
3721 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821 3722 symtab_to_filename_for_display (symtab));
4c4b4cd2
PH
3723 else
3724 printf_unfiltered (is_enumeral
323e0a4a
AC
3725 ? _("[%d] %s (enumeral)\n")
3726 : _("[%d] %s at ?\n"),
4c4b4cd2
PH
3727 i + first_choice,
3728 SYMBOL_PRINT_NAME (syms[i].sym));
3729 }
14f9c5c9 3730 }
d2e4a39e 3731
14f9c5c9 3732 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3733 "overload-choice");
14f9c5c9
AS
3734
3735 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3736 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3737
3738 return n_chosen;
3739}
3740
3741/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3742 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3743 order in CHOICES[0 .. N-1], and return N.
3744
3745 The user types choices as a sequence of numbers on one line
3746 separated by blanks, encoding them as follows:
3747
4c4b4cd2 3748 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3749 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3750 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3751
4c4b4cd2 3752 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3753
3754 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3755 prompts (for use with the -f switch). */
14f9c5c9
AS
3756
3757int
d2e4a39e 3758get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3759 int is_all_choice, char *annotation_suffix)
14f9c5c9 3760{
d2e4a39e 3761 char *args;
0bcd0149 3762 char *prompt;
14f9c5c9
AS
3763 int n_chosen;
3764 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3765
14f9c5c9
AS
3766 prompt = getenv ("PS2");
3767 if (prompt == NULL)
0bcd0149 3768 prompt = "> ";
14f9c5c9 3769
0bcd0149 3770 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3771
14f9c5c9 3772 if (args == NULL)
323e0a4a 3773 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3774
3775 n_chosen = 0;
76a01679 3776
4c4b4cd2
PH
3777 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3778 order, as given in args. Choices are validated. */
14f9c5c9
AS
3779 while (1)
3780 {
d2e4a39e 3781 char *args2;
14f9c5c9
AS
3782 int choice, j;
3783
0fcd72ba 3784 args = skip_spaces (args);
14f9c5c9 3785 if (*args == '\0' && n_chosen == 0)
323e0a4a 3786 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3787 else if (*args == '\0')
4c4b4cd2 3788 break;
14f9c5c9
AS
3789
3790 choice = strtol (args, &args2, 10);
d2e4a39e 3791 if (args == args2 || choice < 0
4c4b4cd2 3792 || choice > n_choices + first_choice - 1)
323e0a4a 3793 error (_("Argument must be choice number"));
14f9c5c9
AS
3794 args = args2;
3795
d2e4a39e 3796 if (choice == 0)
323e0a4a 3797 error (_("cancelled"));
14f9c5c9
AS
3798
3799 if (choice < first_choice)
4c4b4cd2
PH
3800 {
3801 n_chosen = n_choices;
3802 for (j = 0; j < n_choices; j += 1)
3803 choices[j] = j;
3804 break;
3805 }
14f9c5c9
AS
3806 choice -= first_choice;
3807
d2e4a39e 3808 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3809 {
3810 }
14f9c5c9
AS
3811
3812 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3813 {
3814 int k;
5b4ee69b 3815
4c4b4cd2
PH
3816 for (k = n_chosen - 1; k > j; k -= 1)
3817 choices[k + 1] = choices[k];
3818 choices[j + 1] = choice;
3819 n_chosen += 1;
3820 }
14f9c5c9
AS
3821 }
3822
3823 if (n_chosen > max_results)
323e0a4a 3824 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3825
14f9c5c9
AS
3826 return n_chosen;
3827}
3828
4c4b4cd2
PH
3829/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3830 on the function identified by SYM and BLOCK, and taking NARGS
3831 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3832
3833static void
d2e4a39e 3834replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2 3835 int oplen, struct symbol *sym,
270140bd 3836 const struct block *block)
14f9c5c9
AS
3837{
3838 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 3839 symbol, -oplen for operator being replaced). */
d2e4a39e 3840 struct expression *newexp = (struct expression *)
8c1a34e7 3841 xzalloc (sizeof (struct expression)
4c4b4cd2 3842 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 3843 struct expression *exp = *expp;
14f9c5c9
AS
3844
3845 newexp->nelts = exp->nelts + 7 - oplen;
3846 newexp->language_defn = exp->language_defn;
3489610d 3847 newexp->gdbarch = exp->gdbarch;
14f9c5c9 3848 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 3849 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 3850 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
3851
3852 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3853 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3854
3855 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3856 newexp->elts[pc + 4].block = block;
3857 newexp->elts[pc + 5].symbol = sym;
3858
3859 *expp = newexp;
aacb1f0a 3860 xfree (exp);
d2e4a39e 3861}
14f9c5c9
AS
3862
3863/* Type-class predicates */
3864
4c4b4cd2
PH
3865/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3866 or FLOAT). */
14f9c5c9
AS
3867
3868static int
d2e4a39e 3869numeric_type_p (struct type *type)
14f9c5c9
AS
3870{
3871 if (type == NULL)
3872 return 0;
d2e4a39e
AS
3873 else
3874 {
3875 switch (TYPE_CODE (type))
4c4b4cd2
PH
3876 {
3877 case TYPE_CODE_INT:
3878 case TYPE_CODE_FLT:
3879 return 1;
3880 case TYPE_CODE_RANGE:
3881 return (type == TYPE_TARGET_TYPE (type)
3882 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3883 default:
3884 return 0;
3885 }
d2e4a39e 3886 }
14f9c5c9
AS
3887}
3888
4c4b4cd2 3889/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
3890
3891static int
d2e4a39e 3892integer_type_p (struct type *type)
14f9c5c9
AS
3893{
3894 if (type == NULL)
3895 return 0;
d2e4a39e
AS
3896 else
3897 {
3898 switch (TYPE_CODE (type))
4c4b4cd2
PH
3899 {
3900 case TYPE_CODE_INT:
3901 return 1;
3902 case TYPE_CODE_RANGE:
3903 return (type == TYPE_TARGET_TYPE (type)
3904 || integer_type_p (TYPE_TARGET_TYPE (type)));
3905 default:
3906 return 0;
3907 }
d2e4a39e 3908 }
14f9c5c9
AS
3909}
3910
4c4b4cd2 3911/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
3912
3913static int
d2e4a39e 3914scalar_type_p (struct type *type)
14f9c5c9
AS
3915{
3916 if (type == NULL)
3917 return 0;
d2e4a39e
AS
3918 else
3919 {
3920 switch (TYPE_CODE (type))
4c4b4cd2
PH
3921 {
3922 case TYPE_CODE_INT:
3923 case TYPE_CODE_RANGE:
3924 case TYPE_CODE_ENUM:
3925 case TYPE_CODE_FLT:
3926 return 1;
3927 default:
3928 return 0;
3929 }
d2e4a39e 3930 }
14f9c5c9
AS
3931}
3932
4c4b4cd2 3933/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
3934
3935static int
d2e4a39e 3936discrete_type_p (struct type *type)
14f9c5c9
AS
3937{
3938 if (type == NULL)
3939 return 0;
d2e4a39e
AS
3940 else
3941 {
3942 switch (TYPE_CODE (type))
4c4b4cd2
PH
3943 {
3944 case TYPE_CODE_INT:
3945 case TYPE_CODE_RANGE:
3946 case TYPE_CODE_ENUM:
872f0337 3947 case TYPE_CODE_BOOL:
4c4b4cd2
PH
3948 return 1;
3949 default:
3950 return 0;
3951 }
d2e4a39e 3952 }
14f9c5c9
AS
3953}
3954
4c4b4cd2
PH
3955/* Returns non-zero if OP with operands in the vector ARGS could be
3956 a user-defined function. Errs on the side of pre-defined operators
3957 (i.e., result 0). */
14f9c5c9
AS
3958
3959static int
d2e4a39e 3960possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 3961{
76a01679 3962 struct type *type0 =
df407dfe 3963 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 3964 struct type *type1 =
df407dfe 3965 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 3966
4c4b4cd2
PH
3967 if (type0 == NULL)
3968 return 0;
3969
14f9c5c9
AS
3970 switch (op)
3971 {
3972 default:
3973 return 0;
3974
3975 case BINOP_ADD:
3976 case BINOP_SUB:
3977 case BINOP_MUL:
3978 case BINOP_DIV:
d2e4a39e 3979 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
3980
3981 case BINOP_REM:
3982 case BINOP_MOD:
3983 case BINOP_BITWISE_AND:
3984 case BINOP_BITWISE_IOR:
3985 case BINOP_BITWISE_XOR:
d2e4a39e 3986 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
3987
3988 case BINOP_EQUAL:
3989 case BINOP_NOTEQUAL:
3990 case BINOP_LESS:
3991 case BINOP_GTR:
3992 case BINOP_LEQ:
3993 case BINOP_GEQ:
d2e4a39e 3994 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
3995
3996 case BINOP_CONCAT:
ee90b9ab 3997 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
3998
3999 case BINOP_EXP:
d2e4a39e 4000 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4001
4002 case UNOP_NEG:
4003 case UNOP_PLUS:
4004 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4005 case UNOP_ABS:
4006 return (!numeric_type_p (type0));
14f9c5c9
AS
4007
4008 }
4009}
4010\f
4c4b4cd2 4011 /* Renaming */
14f9c5c9 4012
aeb5907d
JB
4013/* NOTES:
4014
4015 1. In the following, we assume that a renaming type's name may
4016 have an ___XD suffix. It would be nice if this went away at some
4017 point.
4018 2. We handle both the (old) purely type-based representation of
4019 renamings and the (new) variable-based encoding. At some point,
4020 it is devoutly to be hoped that the former goes away
4021 (FIXME: hilfinger-2007-07-09).
4022 3. Subprogram renamings are not implemented, although the XRS
4023 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4024
4025/* If SYM encodes a renaming,
4026
4027 <renaming> renames <renamed entity>,
4028
4029 sets *LEN to the length of the renamed entity's name,
4030 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4031 the string describing the subcomponent selected from the renamed
0963b4bd 4032 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4033 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4034 are undefined). Otherwise, returns a value indicating the category
4035 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4036 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4037 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4038 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4039 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4040 may be NULL, in which case they are not assigned.
4041
4042 [Currently, however, GCC does not generate subprogram renamings.] */
4043
4044enum ada_renaming_category
4045ada_parse_renaming (struct symbol *sym,
4046 const char **renamed_entity, int *len,
4047 const char **renaming_expr)
4048{
4049 enum ada_renaming_category kind;
4050 const char *info;
4051 const char *suffix;
4052
4053 if (sym == NULL)
4054 return ADA_NOT_RENAMING;
4055 switch (SYMBOL_CLASS (sym))
14f9c5c9 4056 {
aeb5907d
JB
4057 default:
4058 return ADA_NOT_RENAMING;
4059 case LOC_TYPEDEF:
4060 return parse_old_style_renaming (SYMBOL_TYPE (sym),
4061 renamed_entity, len, renaming_expr);
4062 case LOC_LOCAL:
4063 case LOC_STATIC:
4064 case LOC_COMPUTED:
4065 case LOC_OPTIMIZED_OUT:
4066 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
4067 if (info == NULL)
4068 return ADA_NOT_RENAMING;
4069 switch (info[5])
4070 {
4071 case '_':
4072 kind = ADA_OBJECT_RENAMING;
4073 info += 6;
4074 break;
4075 case 'E':
4076 kind = ADA_EXCEPTION_RENAMING;
4077 info += 7;
4078 break;
4079 case 'P':
4080 kind = ADA_PACKAGE_RENAMING;
4081 info += 7;
4082 break;
4083 case 'S':
4084 kind = ADA_SUBPROGRAM_RENAMING;
4085 info += 7;
4086 break;
4087 default:
4088 return ADA_NOT_RENAMING;
4089 }
14f9c5c9 4090 }
4c4b4cd2 4091
aeb5907d
JB
4092 if (renamed_entity != NULL)
4093 *renamed_entity = info;
4094 suffix = strstr (info, "___XE");
4095 if (suffix == NULL || suffix == info)
4096 return ADA_NOT_RENAMING;
4097 if (len != NULL)
4098 *len = strlen (info) - strlen (suffix);
4099 suffix += 5;
4100 if (renaming_expr != NULL)
4101 *renaming_expr = suffix;
4102 return kind;
4103}
4104
4105/* Assuming TYPE encodes a renaming according to the old encoding in
4106 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
4107 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
4108 ADA_NOT_RENAMING otherwise. */
4109static enum ada_renaming_category
4110parse_old_style_renaming (struct type *type,
4111 const char **renamed_entity, int *len,
4112 const char **renaming_expr)
4113{
4114 enum ada_renaming_category kind;
4115 const char *name;
4116 const char *info;
4117 const char *suffix;
14f9c5c9 4118
aeb5907d
JB
4119 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4120 || TYPE_NFIELDS (type) != 1)
4121 return ADA_NOT_RENAMING;
14f9c5c9 4122
aeb5907d
JB
4123 name = type_name_no_tag (type);
4124 if (name == NULL)
4125 return ADA_NOT_RENAMING;
4126
4127 name = strstr (name, "___XR");
4128 if (name == NULL)
4129 return ADA_NOT_RENAMING;
4130 switch (name[5])
4131 {
4132 case '\0':
4133 case '_':
4134 kind = ADA_OBJECT_RENAMING;
4135 break;
4136 case 'E':
4137 kind = ADA_EXCEPTION_RENAMING;
4138 break;
4139 case 'P':
4140 kind = ADA_PACKAGE_RENAMING;
4141 break;
4142 case 'S':
4143 kind = ADA_SUBPROGRAM_RENAMING;
4144 break;
4145 default:
4146 return ADA_NOT_RENAMING;
4147 }
14f9c5c9 4148
aeb5907d
JB
4149 info = TYPE_FIELD_NAME (type, 0);
4150 if (info == NULL)
4151 return ADA_NOT_RENAMING;
4152 if (renamed_entity != NULL)
4153 *renamed_entity = info;
4154 suffix = strstr (info, "___XE");
4155 if (renaming_expr != NULL)
4156 *renaming_expr = suffix + 5;
4157 if (suffix == NULL || suffix == info)
4158 return ADA_NOT_RENAMING;
4159 if (len != NULL)
4160 *len = suffix - info;
4161 return kind;
a5ee536b
JB
4162}
4163
4164/* Compute the value of the given RENAMING_SYM, which is expected to
4165 be a symbol encoding a renaming expression. BLOCK is the block
4166 used to evaluate the renaming. */
52ce6436 4167
a5ee536b
JB
4168static struct value *
4169ada_read_renaming_var_value (struct symbol *renaming_sym,
4170 struct block *block)
4171{
bbc13ae3 4172 const char *sym_name;
a5ee536b
JB
4173 struct expression *expr;
4174 struct value *value;
4175 struct cleanup *old_chain = NULL;
4176
bbc13ae3 4177 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
1bb9788d 4178 expr = parse_exp_1 (&sym_name, 0, block, 0);
bbc13ae3 4179 old_chain = make_cleanup (free_current_contents, &expr);
a5ee536b
JB
4180 value = evaluate_expression (expr);
4181
4182 do_cleanups (old_chain);
4183 return value;
4184}
14f9c5c9 4185\f
d2e4a39e 4186
4c4b4cd2 4187 /* Evaluation: Function Calls */
14f9c5c9 4188
4c4b4cd2 4189/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4190 lvalues, and otherwise has the side-effect of allocating memory
4191 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4192
d2e4a39e 4193static struct value *
40bc484c 4194ensure_lval (struct value *val)
14f9c5c9 4195{
40bc484c
JB
4196 if (VALUE_LVAL (val) == not_lval
4197 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4198 {
df407dfe 4199 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4200 const CORE_ADDR addr =
4201 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4202
40bc484c 4203 set_value_address (val, addr);
a84a8a0d 4204 VALUE_LVAL (val) = lval_memory;
40bc484c 4205 write_memory (addr, value_contents (val), len);
c3e5cd34 4206 }
14f9c5c9
AS
4207
4208 return val;
4209}
4210
4211/* Return the value ACTUAL, converted to be an appropriate value for a
4212 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4213 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4214 values not residing in memory, updating it as needed. */
14f9c5c9 4215
a93c0eb6 4216struct value *
40bc484c 4217ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4218{
df407dfe 4219 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4220 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4221 struct type *formal_target =
4222 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4223 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4224 struct type *actual_target =
4225 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4226 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4227
4c4b4cd2 4228 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4229 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4230 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4231 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4232 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4233 {
a84a8a0d 4234 struct value *result;
5b4ee69b 4235
14f9c5c9 4236 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4237 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4238 result = desc_data (actual);
14f9c5c9 4239 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4240 {
4241 if (VALUE_LVAL (actual) != lval_memory)
4242 {
4243 struct value *val;
5b4ee69b 4244
df407dfe 4245 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4246 val = allocate_value (actual_type);
990a07ab 4247 memcpy ((char *) value_contents_raw (val),
0fd88904 4248 (char *) value_contents (actual),
4c4b4cd2 4249 TYPE_LENGTH (actual_type));
40bc484c 4250 actual = ensure_lval (val);
4c4b4cd2 4251 }
a84a8a0d 4252 result = value_addr (actual);
4c4b4cd2 4253 }
a84a8a0d
JB
4254 else
4255 return actual;
b1af9e97 4256 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4257 }
4258 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4259 return ada_value_ind (actual);
4260
4261 return actual;
4262}
4263
438c98a1
JB
4264/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4265 type TYPE. This is usually an inefficient no-op except on some targets
4266 (such as AVR) where the representation of a pointer and an address
4267 differs. */
4268
4269static CORE_ADDR
4270value_pointer (struct value *value, struct type *type)
4271{
4272 struct gdbarch *gdbarch = get_type_arch (type);
4273 unsigned len = TYPE_LENGTH (type);
4274 gdb_byte *buf = alloca (len);
4275 CORE_ADDR addr;
4276
4277 addr = value_address (value);
4278 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4279 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4280 return addr;
4281}
4282
14f9c5c9 4283
4c4b4cd2
PH
4284/* Push a descriptor of type TYPE for array value ARR on the stack at
4285 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4286 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4287 to-descriptor type rather than a descriptor type), a struct value *
4288 representing a pointer to this descriptor. */
14f9c5c9 4289
d2e4a39e 4290static struct value *
40bc484c 4291make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4292{
d2e4a39e
AS
4293 struct type *bounds_type = desc_bounds_type (type);
4294 struct type *desc_type = desc_base_type (type);
4295 struct value *descriptor = allocate_value (desc_type);
4296 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4297 int i;
d2e4a39e 4298
0963b4bd
MS
4299 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4300 i > 0; i -= 1)
14f9c5c9 4301 {
19f220c3
JK
4302 modify_field (value_type (bounds), value_contents_writeable (bounds),
4303 ada_array_bound (arr, i, 0),
4304 desc_bound_bitpos (bounds_type, i, 0),
4305 desc_bound_bitsize (bounds_type, i, 0));
4306 modify_field (value_type (bounds), value_contents_writeable (bounds),
4307 ada_array_bound (arr, i, 1),
4308 desc_bound_bitpos (bounds_type, i, 1),
4309 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4310 }
d2e4a39e 4311
40bc484c 4312 bounds = ensure_lval (bounds);
d2e4a39e 4313
19f220c3
JK
4314 modify_field (value_type (descriptor),
4315 value_contents_writeable (descriptor),
4316 value_pointer (ensure_lval (arr),
4317 TYPE_FIELD_TYPE (desc_type, 0)),
4318 fat_pntr_data_bitpos (desc_type),
4319 fat_pntr_data_bitsize (desc_type));
4320
4321 modify_field (value_type (descriptor),
4322 value_contents_writeable (descriptor),
4323 value_pointer (bounds,
4324 TYPE_FIELD_TYPE (desc_type, 1)),
4325 fat_pntr_bounds_bitpos (desc_type),
4326 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4327
40bc484c 4328 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4329
4330 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4331 return value_addr (descriptor);
4332 else
4333 return descriptor;
4334}
14f9c5c9 4335\f
3d9434b5
JB
4336 /* Symbol Cache Module */
4337
3d9434b5 4338/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4339 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4340 on the type of entity being printed, the cache can make it as much
4341 as an order of magnitude faster than without it.
4342
4343 The descriptive type DWARF extension has significantly reduced
4344 the need for this cache, at least when DWARF is being used. However,
4345 even in this case, some expensive name-based symbol searches are still
4346 sometimes necessary - to find an XVZ variable, mostly. */
4347
ee01b665 4348/* Initialize the contents of SYM_CACHE. */
3d9434b5 4349
ee01b665
JB
4350static void
4351ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4352{
4353 obstack_init (&sym_cache->cache_space);
4354 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4355}
3d9434b5 4356
ee01b665
JB
4357/* Free the memory used by SYM_CACHE. */
4358
4359static void
4360ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4361{
ee01b665
JB
4362 obstack_free (&sym_cache->cache_space, NULL);
4363 xfree (sym_cache);
4364}
3d9434b5 4365
ee01b665
JB
4366/* Return the symbol cache associated to the given program space PSPACE.
4367 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4368
ee01b665
JB
4369static struct ada_symbol_cache *
4370ada_get_symbol_cache (struct program_space *pspace)
4371{
4372 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
4373 struct ada_symbol_cache *sym_cache = pspace_data->sym_cache;
4374
4375 if (sym_cache == NULL)
4376 {
4377 sym_cache = XCNEW (struct ada_symbol_cache);
4378 ada_init_symbol_cache (sym_cache);
4379 }
4380
4381 return sym_cache;
4382}
3d9434b5
JB
4383
4384/* Clear all entries from the symbol cache. */
4385
4386static void
4387ada_clear_symbol_cache (void)
4388{
ee01b665
JB
4389 struct ada_symbol_cache *sym_cache
4390 = ada_get_symbol_cache (current_program_space);
4391
4392 obstack_free (&sym_cache->cache_space, NULL);
4393 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4394}
4395
4396/* Search our cache for an entry matching NAME and NAMESPACE.
4397 Return it if found, or NULL otherwise. */
4398
4399static struct cache_entry **
4400find_entry (const char *name, domain_enum namespace)
4401{
ee01b665
JB
4402 struct ada_symbol_cache *sym_cache
4403 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4404 int h = msymbol_hash (name) % HASH_SIZE;
4405 struct cache_entry **e;
4406
ee01b665 4407 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5
JB
4408 {
4409 if (namespace == (*e)->namespace && strcmp (name, (*e)->name) == 0)
4410 return e;
4411 }
4412 return NULL;
4413}
4414
4415/* Search the symbol cache for an entry matching NAME and NAMESPACE.
4416 Return 1 if found, 0 otherwise.
4417
4418 If an entry was found and SYM is not NULL, set *SYM to the entry's
4419 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4420
96d887e8
PH
4421static int
4422lookup_cached_symbol (const char *name, domain_enum namespace,
f0c5f9b2 4423 struct symbol **sym, const struct block **block)
96d887e8 4424{
3d9434b5
JB
4425 struct cache_entry **e = find_entry (name, namespace);
4426
4427 if (e == NULL)
4428 return 0;
4429 if (sym != NULL)
4430 *sym = (*e)->sym;
4431 if (block != NULL)
4432 *block = (*e)->block;
4433 return 1;
96d887e8
PH
4434}
4435
3d9434b5
JB
4436/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
4437 in domain NAMESPACE, save this result in our symbol cache. */
4438
96d887e8
PH
4439static void
4440cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
270140bd 4441 const struct block *block)
96d887e8 4442{
ee01b665
JB
4443 struct ada_symbol_cache *sym_cache
4444 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4445 int h;
4446 char *copy;
4447 struct cache_entry *e;
4448
4449 /* If the symbol is a local symbol, then do not cache it, as a search
4450 for that symbol depends on the context. To determine whether
4451 the symbol is local or not, we check the block where we found it
4452 against the global and static blocks of its associated symtab. */
4453 if (sym
4454 && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), GLOBAL_BLOCK) != block
4455 && BLOCKVECTOR_BLOCK (BLOCKVECTOR (sym->symtab), STATIC_BLOCK) != block)
4456 return;
4457
4458 h = msymbol_hash (name) % HASH_SIZE;
ee01b665
JB
4459 e = (struct cache_entry *) obstack_alloc (&sym_cache->cache_space,
4460 sizeof (*e));
4461 e->next = sym_cache->root[h];
4462 sym_cache->root[h] = e;
4463 e->name = copy = obstack_alloc (&sym_cache->cache_space, strlen (name) + 1);
3d9434b5
JB
4464 strcpy (copy, name);
4465 e->sym = sym;
4466 e->namespace = namespace;
4467 e->block = block;
96d887e8 4468}
4c4b4cd2
PH
4469\f
4470 /* Symbol Lookup */
4471
c0431670
JB
4472/* Return nonzero if wild matching should be used when searching for
4473 all symbols matching LOOKUP_NAME.
4474
4475 LOOKUP_NAME is expected to be a symbol name after transformation
4476 for Ada lookups (see ada_name_for_lookup). */
4477
4478static int
4479should_use_wild_match (const char *lookup_name)
4480{
4481 return (strstr (lookup_name, "__") == NULL);
4482}
4483
4c4b4cd2
PH
4484/* Return the result of a standard (literal, C-like) lookup of NAME in
4485 given DOMAIN, visible from lexical block BLOCK. */
4486
4487static struct symbol *
4488standard_lookup (const char *name, const struct block *block,
4489 domain_enum domain)
4490{
acbd605d
MGD
4491 /* Initialize it just to avoid a GCC false warning. */
4492 struct symbol *sym = NULL;
4c4b4cd2 4493
2570f2b7 4494 if (lookup_cached_symbol (name, domain, &sym, NULL))
4c4b4cd2 4495 return sym;
2570f2b7
UW
4496 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4497 cache_symbol (name, domain, sym, block_found);
4c4b4cd2
PH
4498 return sym;
4499}
4500
4501
4502/* Non-zero iff there is at least one non-function/non-enumeral symbol
4503 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4504 since they contend in overloading in the same way. */
4505static int
4506is_nonfunction (struct ada_symbol_info syms[], int n)
4507{
4508 int i;
4509
4510 for (i = 0; i < n; i += 1)
4511 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4512 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4513 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
14f9c5c9
AS
4514 return 1;
4515
4516 return 0;
4517}
4518
4519/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4520 struct types. Otherwise, they may not. */
14f9c5c9
AS
4521
4522static int
d2e4a39e 4523equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4524{
d2e4a39e 4525 if (type0 == type1)
14f9c5c9 4526 return 1;
d2e4a39e 4527 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4528 || TYPE_CODE (type0) != TYPE_CODE (type1))
4529 return 0;
d2e4a39e 4530 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4531 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4532 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4533 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4534 return 1;
d2e4a39e 4535
14f9c5c9
AS
4536 return 0;
4537}
4538
4539/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4540 no more defined than that of SYM1. */
14f9c5c9
AS
4541
4542static int
d2e4a39e 4543lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4544{
4545 if (sym0 == sym1)
4546 return 1;
176620f1 4547 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4548 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4549 return 0;
4550
d2e4a39e 4551 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4552 {
4553 case LOC_UNDEF:
4554 return 1;
4555 case LOC_TYPEDEF:
4556 {
4c4b4cd2
PH
4557 struct type *type0 = SYMBOL_TYPE (sym0);
4558 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4559 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4560 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4561 int len0 = strlen (name0);
5b4ee69b 4562
4c4b4cd2
PH
4563 return
4564 TYPE_CODE (type0) == TYPE_CODE (type1)
4565 && (equiv_types (type0, type1)
4566 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4567 && strncmp (name1 + len0, "___XV", 5) == 0));
14f9c5c9
AS
4568 }
4569 case LOC_CONST:
4570 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4571 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4572 default:
4573 return 0;
14f9c5c9
AS
4574 }
4575}
4576
4c4b4cd2
PH
4577/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4578 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4579
4580static void
76a01679
JB
4581add_defn_to_vec (struct obstack *obstackp,
4582 struct symbol *sym,
f0c5f9b2 4583 const struct block *block)
14f9c5c9
AS
4584{
4585 int i;
4c4b4cd2 4586 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4587
529cad9c
PH
4588 /* Do not try to complete stub types, as the debugger is probably
4589 already scanning all symbols matching a certain name at the
4590 time when this function is called. Trying to replace the stub
4591 type by its associated full type will cause us to restart a scan
4592 which may lead to an infinite recursion. Instead, the client
4593 collecting the matching symbols will end up collecting several
4594 matches, with at least one of them complete. It can then filter
4595 out the stub ones if needed. */
4596
4c4b4cd2
PH
4597 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4598 {
4599 if (lesseq_defined_than (sym, prevDefns[i].sym))
4600 return;
4601 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4602 {
4603 prevDefns[i].sym = sym;
4604 prevDefns[i].block = block;
4c4b4cd2 4605 return;
76a01679 4606 }
4c4b4cd2
PH
4607 }
4608
4609 {
4610 struct ada_symbol_info info;
4611
4612 info.sym = sym;
4613 info.block = block;
4c4b4cd2
PH
4614 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4615 }
4616}
4617
4618/* Number of ada_symbol_info structures currently collected in
4619 current vector in *OBSTACKP. */
4620
76a01679
JB
4621static int
4622num_defns_collected (struct obstack *obstackp)
4c4b4cd2
PH
4623{
4624 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4625}
4626
4627/* Vector of ada_symbol_info structures currently collected in current
4628 vector in *OBSTACKP. If FINISH, close off the vector and return
4629 its final address. */
4630
76a01679 4631static struct ada_symbol_info *
4c4b4cd2
PH
4632defns_collected (struct obstack *obstackp, int finish)
4633{
4634 if (finish)
4635 return obstack_finish (obstackp);
4636 else
4637 return (struct ada_symbol_info *) obstack_base (obstackp);
4638}
4639
7c7b6655
TT
4640/* Return a bound minimal symbol matching NAME according to Ada
4641 decoding rules. Returns an invalid symbol if there is no such
4642 minimal symbol. Names prefixed with "standard__" are handled
4643 specially: "standard__" is first stripped off, and only static and
4644 global symbols are searched. */
4c4b4cd2 4645
7c7b6655 4646struct bound_minimal_symbol
96d887e8 4647ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4648{
7c7b6655 4649 struct bound_minimal_symbol result;
4c4b4cd2 4650 struct objfile *objfile;
96d887e8 4651 struct minimal_symbol *msymbol;
dc4024cd 4652 const int wild_match_p = should_use_wild_match (name);
4c4b4cd2 4653
7c7b6655
TT
4654 memset (&result, 0, sizeof (result));
4655
c0431670
JB
4656 /* Special case: If the user specifies a symbol name inside package
4657 Standard, do a non-wild matching of the symbol name without
4658 the "standard__" prefix. This was primarily introduced in order
4659 to allow the user to specifically access the standard exceptions
4660 using, for instance, Standard.Constraint_Error when Constraint_Error
4661 is ambiguous (due to the user defining its own Constraint_Error
4662 entity inside its program). */
96d887e8 4663 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
c0431670 4664 name += sizeof ("standard__") - 1;
4c4b4cd2 4665
96d887e8
PH
4666 ALL_MSYMBOLS (objfile, msymbol)
4667 {
efd66ac6 4668 if (match_name (MSYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
96d887e8 4669 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
7c7b6655
TT
4670 {
4671 result.minsym = msymbol;
4672 result.objfile = objfile;
4673 break;
4674 }
96d887e8 4675 }
4c4b4cd2 4676
7c7b6655 4677 return result;
96d887e8 4678}
4c4b4cd2 4679
96d887e8
PH
4680/* For all subprograms that statically enclose the subprogram of the
4681 selected frame, add symbols matching identifier NAME in DOMAIN
4682 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4683 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4684 with a wildcard prefix. */
4c4b4cd2 4685
96d887e8
PH
4686static void
4687add_symbols_from_enclosing_procs (struct obstack *obstackp,
76a01679 4688 const char *name, domain_enum namespace,
48b78332 4689 int wild_match_p)
96d887e8 4690{
96d887e8 4691}
14f9c5c9 4692
96d887e8
PH
4693/* True if TYPE is definitely an artificial type supplied to a symbol
4694 for which no debugging information was given in the symbol file. */
14f9c5c9 4695
96d887e8
PH
4696static int
4697is_nondebugging_type (struct type *type)
4698{
0d5cff50 4699 const char *name = ada_type_name (type);
5b4ee69b 4700
96d887e8
PH
4701 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4702}
4c4b4cd2 4703
8f17729f
JB
4704/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4705 that are deemed "identical" for practical purposes.
4706
4707 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4708 types and that their number of enumerals is identical (in other
4709 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4710
4711static int
4712ada_identical_enum_types_p (struct type *type1, struct type *type2)
4713{
4714 int i;
4715
4716 /* The heuristic we use here is fairly conservative. We consider
4717 that 2 enumerate types are identical if they have the same
4718 number of enumerals and that all enumerals have the same
4719 underlying value and name. */
4720
4721 /* All enums in the type should have an identical underlying value. */
4722 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 4723 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4724 return 0;
4725
4726 /* All enumerals should also have the same name (modulo any numerical
4727 suffix). */
4728 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4729 {
0d5cff50
DE
4730 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4731 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4732 int len_1 = strlen (name_1);
4733 int len_2 = strlen (name_2);
4734
4735 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4736 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4737 if (len_1 != len_2
4738 || strncmp (TYPE_FIELD_NAME (type1, i),
4739 TYPE_FIELD_NAME (type2, i),
4740 len_1) != 0)
4741 return 0;
4742 }
4743
4744 return 1;
4745}
4746
4747/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4748 that are deemed "identical" for practical purposes. Sometimes,
4749 enumerals are not strictly identical, but their types are so similar
4750 that they can be considered identical.
4751
4752 For instance, consider the following code:
4753
4754 type Color is (Black, Red, Green, Blue, White);
4755 type RGB_Color is new Color range Red .. Blue;
4756
4757 Type RGB_Color is a subrange of an implicit type which is a copy
4758 of type Color. If we call that implicit type RGB_ColorB ("B" is
4759 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4760 As a result, when an expression references any of the enumeral
4761 by name (Eg. "print green"), the expression is technically
4762 ambiguous and the user should be asked to disambiguate. But
4763 doing so would only hinder the user, since it wouldn't matter
4764 what choice he makes, the outcome would always be the same.
4765 So, for practical purposes, we consider them as the same. */
4766
4767static int
4768symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4769{
4770 int i;
4771
4772 /* Before performing a thorough comparison check of each type,
4773 we perform a series of inexpensive checks. We expect that these
4774 checks will quickly fail in the vast majority of cases, and thus
4775 help prevent the unnecessary use of a more expensive comparison.
4776 Said comparison also expects us to make some of these checks
4777 (see ada_identical_enum_types_p). */
4778
4779 /* Quick check: All symbols should have an enum type. */
4780 for (i = 0; i < nsyms; i++)
4781 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4782 return 0;
4783
4784 /* Quick check: They should all have the same value. */
4785 for (i = 1; i < nsyms; i++)
4786 if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4787 return 0;
4788
4789 /* Quick check: They should all have the same number of enumerals. */
4790 for (i = 1; i < nsyms; i++)
4791 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4792 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4793 return 0;
4794
4795 /* All the sanity checks passed, so we might have a set of
4796 identical enumeration types. Perform a more complete
4797 comparison of the type of each symbol. */
4798 for (i = 1; i < nsyms; i++)
4799 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4800 SYMBOL_TYPE (syms[0].sym)))
4801 return 0;
4802
4803 return 1;
4804}
4805
96d887e8
PH
4806/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4807 duplicate other symbols in the list (The only case I know of where
4808 this happens is when object files containing stabs-in-ecoff are
4809 linked with files containing ordinary ecoff debugging symbols (or no
4810 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4811 Returns the number of items in the modified list. */
4c4b4cd2 4812
96d887e8
PH
4813static int
4814remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4815{
4816 int i, j;
4c4b4cd2 4817
8f17729f
JB
4818 /* We should never be called with less than 2 symbols, as there
4819 cannot be any extra symbol in that case. But it's easy to
4820 handle, since we have nothing to do in that case. */
4821 if (nsyms < 2)
4822 return nsyms;
4823
96d887e8
PH
4824 i = 0;
4825 while (i < nsyms)
4826 {
a35ddb44 4827 int remove_p = 0;
339c13b6
JB
4828
4829 /* If two symbols have the same name and one of them is a stub type,
4830 the get rid of the stub. */
4831
4832 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4833 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4834 {
4835 for (j = 0; j < nsyms; j++)
4836 {
4837 if (j != i
4838 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4839 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4840 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4841 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
a35ddb44 4842 remove_p = 1;
339c13b6
JB
4843 }
4844 }
4845
4846 /* Two symbols with the same name, same class and same address
4847 should be identical. */
4848
4849 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
96d887e8
PH
4850 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4851 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4852 {
4853 for (j = 0; j < nsyms; j += 1)
4854 {
4855 if (i != j
4856 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4857 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
76a01679 4858 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
96d887e8
PH
4859 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4860 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4861 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
a35ddb44 4862 remove_p = 1;
4c4b4cd2 4863 }
4c4b4cd2 4864 }
339c13b6 4865
a35ddb44 4866 if (remove_p)
339c13b6
JB
4867 {
4868 for (j = i + 1; j < nsyms; j += 1)
4869 syms[j - 1] = syms[j];
4870 nsyms -= 1;
4871 }
4872
96d887e8 4873 i += 1;
14f9c5c9 4874 }
8f17729f
JB
4875
4876 /* If all the remaining symbols are identical enumerals, then
4877 just keep the first one and discard the rest.
4878
4879 Unlike what we did previously, we do not discard any entry
4880 unless they are ALL identical. This is because the symbol
4881 comparison is not a strict comparison, but rather a practical
4882 comparison. If all symbols are considered identical, then
4883 we can just go ahead and use the first one and discard the rest.
4884 But if we cannot reduce the list to a single element, we have
4885 to ask the user to disambiguate anyways. And if we have to
4886 present a multiple-choice menu, it's less confusing if the list
4887 isn't missing some choices that were identical and yet distinct. */
4888 if (symbols_are_identical_enums (syms, nsyms))
4889 nsyms = 1;
4890
96d887e8 4891 return nsyms;
14f9c5c9
AS
4892}
4893
96d887e8
PH
4894/* Given a type that corresponds to a renaming entity, use the type name
4895 to extract the scope (package name or function name, fully qualified,
4896 and following the GNAT encoding convention) where this renaming has been
4897 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 4898
96d887e8
PH
4899static char *
4900xget_renaming_scope (struct type *renaming_type)
14f9c5c9 4901{
96d887e8 4902 /* The renaming types adhere to the following convention:
0963b4bd 4903 <scope>__<rename>___<XR extension>.
96d887e8
PH
4904 So, to extract the scope, we search for the "___XR" extension,
4905 and then backtrack until we find the first "__". */
76a01679 4906
96d887e8
PH
4907 const char *name = type_name_no_tag (renaming_type);
4908 char *suffix = strstr (name, "___XR");
4909 char *last;
4910 int scope_len;
4911 char *scope;
14f9c5c9 4912
96d887e8
PH
4913 /* Now, backtrack a bit until we find the first "__". Start looking
4914 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 4915
96d887e8
PH
4916 for (last = suffix - 3; last > name; last--)
4917 if (last[0] == '_' && last[1] == '_')
4918 break;
76a01679 4919
96d887e8 4920 /* Make a copy of scope and return it. */
14f9c5c9 4921
96d887e8
PH
4922 scope_len = last - name;
4923 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 4924
96d887e8
PH
4925 strncpy (scope, name, scope_len);
4926 scope[scope_len] = '\0';
4c4b4cd2 4927
96d887e8 4928 return scope;
4c4b4cd2
PH
4929}
4930
96d887e8 4931/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 4932
96d887e8
PH
4933static int
4934is_package_name (const char *name)
4c4b4cd2 4935{
96d887e8
PH
4936 /* Here, We take advantage of the fact that no symbols are generated
4937 for packages, while symbols are generated for each function.
4938 So the condition for NAME represent a package becomes equivalent
4939 to NAME not existing in our list of symbols. There is only one
4940 small complication with library-level functions (see below). */
4c4b4cd2 4941
96d887e8 4942 char *fun_name;
76a01679 4943
96d887e8
PH
4944 /* If it is a function that has not been defined at library level,
4945 then we should be able to look it up in the symbols. */
4946 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4947 return 0;
14f9c5c9 4948
96d887e8
PH
4949 /* Library-level function names start with "_ada_". See if function
4950 "_ada_" followed by NAME can be found. */
14f9c5c9 4951
96d887e8 4952 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 4953 functions names cannot contain "__" in them. */
96d887e8
PH
4954 if (strstr (name, "__") != NULL)
4955 return 0;
4c4b4cd2 4956
b435e160 4957 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 4958
96d887e8
PH
4959 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4960}
14f9c5c9 4961
96d887e8 4962/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 4963 not visible from FUNCTION_NAME. */
14f9c5c9 4964
96d887e8 4965static int
0d5cff50 4966old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 4967{
aeb5907d 4968 char *scope;
1509e573 4969 struct cleanup *old_chain;
aeb5907d
JB
4970
4971 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4972 return 0;
4973
4974 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
1509e573 4975 old_chain = make_cleanup (xfree, scope);
14f9c5c9 4976
96d887e8
PH
4977 /* If the rename has been defined in a package, then it is visible. */
4978 if (is_package_name (scope))
1509e573
JB
4979 {
4980 do_cleanups (old_chain);
4981 return 0;
4982 }
14f9c5c9 4983
96d887e8
PH
4984 /* Check that the rename is in the current function scope by checking
4985 that its name starts with SCOPE. */
76a01679 4986
96d887e8
PH
4987 /* If the function name starts with "_ada_", it means that it is
4988 a library-level function. Strip this prefix before doing the
4989 comparison, as the encoding for the renaming does not contain
4990 this prefix. */
4991 if (strncmp (function_name, "_ada_", 5) == 0)
4992 function_name += 5;
f26caa11 4993
1509e573
JB
4994 {
4995 int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
4996
4997 do_cleanups (old_chain);
4998 return is_invisible;
4999 }
f26caa11
PH
5000}
5001
aeb5907d
JB
5002/* Remove entries from SYMS that corresponds to a renaming entity that
5003 is not visible from the function associated with CURRENT_BLOCK or
5004 that is superfluous due to the presence of more specific renaming
5005 information. Places surviving symbols in the initial entries of
5006 SYMS and returns the number of surviving symbols.
96d887e8
PH
5007
5008 Rationale:
aeb5907d
JB
5009 First, in cases where an object renaming is implemented as a
5010 reference variable, GNAT may produce both the actual reference
5011 variable and the renaming encoding. In this case, we discard the
5012 latter.
5013
5014 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5015 entity. Unfortunately, STABS currently does not support the definition
5016 of types that are local to a given lexical block, so all renamings types
5017 are emitted at library level. As a consequence, if an application
5018 contains two renaming entities using the same name, and a user tries to
5019 print the value of one of these entities, the result of the ada symbol
5020 lookup will also contain the wrong renaming type.
f26caa11 5021
96d887e8
PH
5022 This function partially covers for this limitation by attempting to
5023 remove from the SYMS list renaming symbols that should be visible
5024 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5025 method with the current information available. The implementation
5026 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5027
5028 - When the user tries to print a rename in a function while there
5029 is another rename entity defined in a package: Normally, the
5030 rename in the function has precedence over the rename in the
5031 package, so the latter should be removed from the list. This is
5032 currently not the case.
5033
5034 - This function will incorrectly remove valid renames if
5035 the CURRENT_BLOCK corresponds to a function which symbol name
5036 has been changed by an "Export" pragma. As a consequence,
5037 the user will be unable to print such rename entities. */
4c4b4cd2 5038
14f9c5c9 5039static int
aeb5907d
JB
5040remove_irrelevant_renamings (struct ada_symbol_info *syms,
5041 int nsyms, const struct block *current_block)
4c4b4cd2
PH
5042{
5043 struct symbol *current_function;
0d5cff50 5044 const char *current_function_name;
4c4b4cd2 5045 int i;
aeb5907d
JB
5046 int is_new_style_renaming;
5047
5048 /* If there is both a renaming foo___XR... encoded as a variable and
5049 a simple variable foo in the same block, discard the latter.
0963b4bd 5050 First, zero out such symbols, then compress. */
aeb5907d
JB
5051 is_new_style_renaming = 0;
5052 for (i = 0; i < nsyms; i += 1)
5053 {
5054 struct symbol *sym = syms[i].sym;
270140bd 5055 const struct block *block = syms[i].block;
aeb5907d
JB
5056 const char *name;
5057 const char *suffix;
5058
5059 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5060 continue;
5061 name = SYMBOL_LINKAGE_NAME (sym);
5062 suffix = strstr (name, "___XR");
5063
5064 if (suffix != NULL)
5065 {
5066 int name_len = suffix - name;
5067 int j;
5b4ee69b 5068
aeb5907d
JB
5069 is_new_style_renaming = 1;
5070 for (j = 0; j < nsyms; j += 1)
5071 if (i != j && syms[j].sym != NULL
5072 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
5073 name_len) == 0
5074 && block == syms[j].block)
5075 syms[j].sym = NULL;
5076 }
5077 }
5078 if (is_new_style_renaming)
5079 {
5080 int j, k;
5081
5082 for (j = k = 0; j < nsyms; j += 1)
5083 if (syms[j].sym != NULL)
5084 {
5085 syms[k] = syms[j];
5086 k += 1;
5087 }
5088 return k;
5089 }
4c4b4cd2
PH
5090
5091 /* Extract the function name associated to CURRENT_BLOCK.
5092 Abort if unable to do so. */
76a01679 5093
4c4b4cd2
PH
5094 if (current_block == NULL)
5095 return nsyms;
76a01679 5096
7f0df278 5097 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
5098 if (current_function == NULL)
5099 return nsyms;
5100
5101 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
5102 if (current_function_name == NULL)
5103 return nsyms;
5104
5105 /* Check each of the symbols, and remove it from the list if it is
5106 a type corresponding to a renaming that is out of the scope of
5107 the current block. */
5108
5109 i = 0;
5110 while (i < nsyms)
5111 {
aeb5907d
JB
5112 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
5113 == ADA_OBJECT_RENAMING
5114 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4c4b4cd2
PH
5115 {
5116 int j;
5b4ee69b 5117
aeb5907d 5118 for (j = i + 1; j < nsyms; j += 1)
76a01679 5119 syms[j - 1] = syms[j];
4c4b4cd2
PH
5120 nsyms -= 1;
5121 }
5122 else
5123 i += 1;
5124 }
5125
5126 return nsyms;
5127}
5128
339c13b6
JB
5129/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5130 whose name and domain match NAME and DOMAIN respectively.
5131 If no match was found, then extend the search to "enclosing"
5132 routines (in other words, if we're inside a nested function,
5133 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5134 If WILD_MATCH_P is nonzero, perform the naming matching in
5135 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5136
5137 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5138
5139static void
5140ada_add_local_symbols (struct obstack *obstackp, const char *name,
f0c5f9b2 5141 const struct block *block, domain_enum domain,
d0a8ab18 5142 int wild_match_p)
339c13b6
JB
5143{
5144 int block_depth = 0;
5145
5146 while (block != NULL)
5147 {
5148 block_depth += 1;
d0a8ab18
JB
5149 ada_add_block_symbols (obstackp, block, name, domain, NULL,
5150 wild_match_p);
339c13b6
JB
5151
5152 /* If we found a non-function match, assume that's the one. */
5153 if (is_nonfunction (defns_collected (obstackp, 0),
5154 num_defns_collected (obstackp)))
5155 return;
5156
5157 block = BLOCK_SUPERBLOCK (block);
5158 }
5159
5160 /* If no luck so far, try to find NAME as a local symbol in some lexically
5161 enclosing subprogram. */
5162 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
d0a8ab18 5163 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
339c13b6
JB
5164}
5165
ccefe4c4 5166/* An object of this type is used as the user_data argument when
40658b94 5167 calling the map_matching_symbols method. */
ccefe4c4 5168
40658b94 5169struct match_data
ccefe4c4 5170{
40658b94 5171 struct objfile *objfile;
ccefe4c4 5172 struct obstack *obstackp;
40658b94
PH
5173 struct symbol *arg_sym;
5174 int found_sym;
ccefe4c4
TT
5175};
5176
40658b94
PH
5177/* A callback for add_matching_symbols that adds SYM, found in BLOCK,
5178 to a list of symbols. DATA0 is a pointer to a struct match_data *
5179 containing the obstack that collects the symbol list, the file that SYM
5180 must come from, a flag indicating whether a non-argument symbol has
5181 been found in the current block, and the last argument symbol
5182 passed in SYM within the current block (if any). When SYM is null,
5183 marking the end of a block, the argument symbol is added if no
5184 other has been found. */
ccefe4c4 5185
40658b94
PH
5186static int
5187aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 5188{
40658b94
PH
5189 struct match_data *data = (struct match_data *) data0;
5190
5191 if (sym == NULL)
5192 {
5193 if (!data->found_sym && data->arg_sym != NULL)
5194 add_defn_to_vec (data->obstackp,
5195 fixup_symbol_section (data->arg_sym, data->objfile),
5196 block);
5197 data->found_sym = 0;
5198 data->arg_sym = NULL;
5199 }
5200 else
5201 {
5202 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5203 return 0;
5204 else if (SYMBOL_IS_ARGUMENT (sym))
5205 data->arg_sym = sym;
5206 else
5207 {
5208 data->found_sym = 1;
5209 add_defn_to_vec (data->obstackp,
5210 fixup_symbol_section (sym, data->objfile),
5211 block);
5212 }
5213 }
5214 return 0;
5215}
5216
db230ce3
JB
5217/* Implements compare_names, but only applying the comparision using
5218 the given CASING. */
5b4ee69b 5219
40658b94 5220static int
db230ce3
JB
5221compare_names_with_case (const char *string1, const char *string2,
5222 enum case_sensitivity casing)
40658b94
PH
5223{
5224 while (*string1 != '\0' && *string2 != '\0')
5225 {
db230ce3
JB
5226 char c1, c2;
5227
40658b94
PH
5228 if (isspace (*string1) || isspace (*string2))
5229 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5230
5231 if (casing == case_sensitive_off)
5232 {
5233 c1 = tolower (*string1);
5234 c2 = tolower (*string2);
5235 }
5236 else
5237 {
5238 c1 = *string1;
5239 c2 = *string2;
5240 }
5241 if (c1 != c2)
40658b94 5242 break;
db230ce3 5243
40658b94
PH
5244 string1 += 1;
5245 string2 += 1;
5246 }
db230ce3 5247
40658b94
PH
5248 switch (*string1)
5249 {
5250 case '(':
5251 return strcmp_iw_ordered (string1, string2);
5252 case '_':
5253 if (*string2 == '\0')
5254 {
052874e8 5255 if (is_name_suffix (string1))
40658b94
PH
5256 return 0;
5257 else
1a1d5513 5258 return 1;
40658b94 5259 }
dbb8534f 5260 /* FALLTHROUGH */
40658b94
PH
5261 default:
5262 if (*string2 == '(')
5263 return strcmp_iw_ordered (string1, string2);
5264 else
db230ce3
JB
5265 {
5266 if (casing == case_sensitive_off)
5267 return tolower (*string1) - tolower (*string2);
5268 else
5269 return *string1 - *string2;
5270 }
40658b94 5271 }
ccefe4c4
TT
5272}
5273
db230ce3
JB
5274/* Compare STRING1 to STRING2, with results as for strcmp.
5275 Compatible with strcmp_iw_ordered in that...
5276
5277 strcmp_iw_ordered (STRING1, STRING2) <= 0
5278
5279 ... implies...
5280
5281 compare_names (STRING1, STRING2) <= 0
5282
5283 (they may differ as to what symbols compare equal). */
5284
5285static int
5286compare_names (const char *string1, const char *string2)
5287{
5288 int result;
5289
5290 /* Similar to what strcmp_iw_ordered does, we need to perform
5291 a case-insensitive comparison first, and only resort to
5292 a second, case-sensitive, comparison if the first one was
5293 not sufficient to differentiate the two strings. */
5294
5295 result = compare_names_with_case (string1, string2, case_sensitive_off);
5296 if (result == 0)
5297 result = compare_names_with_case (string1, string2, case_sensitive_on);
5298
5299 return result;
5300}
5301
339c13b6
JB
5302/* Add to OBSTACKP all non-local symbols whose name and domain match
5303 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
5304 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
5305
5306static void
40658b94
PH
5307add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5308 domain_enum domain, int global,
5309 int is_wild_match)
339c13b6
JB
5310{
5311 struct objfile *objfile;
40658b94 5312 struct match_data data;
339c13b6 5313
6475f2fe 5314 memset (&data, 0, sizeof data);
ccefe4c4 5315 data.obstackp = obstackp;
339c13b6 5316
ccefe4c4 5317 ALL_OBJFILES (objfile)
40658b94
PH
5318 {
5319 data.objfile = objfile;
5320
5321 if (is_wild_match)
4186eb54
KS
5322 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5323 aux_add_nonlocal_symbols, &data,
5324 wild_match, NULL);
40658b94 5325 else
4186eb54
KS
5326 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
5327 aux_add_nonlocal_symbols, &data,
5328 full_match, compare_names);
40658b94
PH
5329 }
5330
5331 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5332 {
5333 ALL_OBJFILES (objfile)
5334 {
5335 char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5336 strcpy (name1, "_ada_");
5337 strcpy (name1 + sizeof ("_ada_") - 1, name);
5338 data.objfile = objfile;
ade7ed9e
DE
5339 objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5340 global,
0963b4bd
MS
5341 aux_add_nonlocal_symbols,
5342 &data,
40658b94
PH
5343 full_match, compare_names);
5344 }
5345 }
339c13b6
JB
5346}
5347
4eeaa230
DE
5348/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5349 non-zero, enclosing scope and in global scopes, returning the number of
5350 matches.
9f88c959 5351 Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4c4b4cd2 5352 indicating the symbols found and the blocks and symbol tables (if
4eeaa230
DE
5353 any) in which they were found. This vector is transient---good only to
5354 the next call of ada_lookup_symbol_list.
5355
5356 When full_search is non-zero, any non-function/non-enumeral
4c4b4cd2
PH
5357 symbol match within the nest of blocks whose innermost member is BLOCK0,
5358 is the one match returned (no other matches in that or
d9680e73 5359 enclosing blocks is returned). If there are any matches in or
4eeaa230
DE
5360 surrounding BLOCK0, then these alone are returned.
5361
9f88c959 5362 Names prefixed with "standard__" are handled specially: "standard__"
4c4b4cd2 5363 is first stripped off, and only static and global symbols are searched. */
14f9c5c9 5364
4eeaa230
DE
5365static int
5366ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5367 domain_enum namespace,
5368 struct ada_symbol_info **results,
5369 int full_search)
14f9c5c9
AS
5370{
5371 struct symbol *sym;
f0c5f9b2 5372 const struct block *block;
4c4b4cd2 5373 const char *name;
82ccd55e 5374 const int wild_match_p = should_use_wild_match (name0);
14f9c5c9 5375 int cacheIfUnique;
4c4b4cd2 5376 int ndefns;
14f9c5c9 5377
4c4b4cd2
PH
5378 obstack_free (&symbol_list_obstack, NULL);
5379 obstack_init (&symbol_list_obstack);
14f9c5c9 5380
14f9c5c9
AS
5381 cacheIfUnique = 0;
5382
5383 /* Search specified block and its superiors. */
5384
4c4b4cd2 5385 name = name0;
f0c5f9b2 5386 block = block0;
339c13b6
JB
5387
5388 /* Special case: If the user specifies a symbol name inside package
5389 Standard, do a non-wild matching of the symbol name without
5390 the "standard__" prefix. This was primarily introduced in order
5391 to allow the user to specifically access the standard exceptions
5392 using, for instance, Standard.Constraint_Error when Constraint_Error
5393 is ambiguous (due to the user defining its own Constraint_Error
5394 entity inside its program). */
4c4b4cd2
PH
5395 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5396 {
4c4b4cd2
PH
5397 block = NULL;
5398 name = name0 + sizeof ("standard__") - 1;
5399 }
5400
339c13b6 5401 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5402
4eeaa230
DE
5403 if (block != NULL)
5404 {
5405 if (full_search)
5406 {
5407 ada_add_local_symbols (&symbol_list_obstack, name, block,
5408 namespace, wild_match_p);
5409 }
5410 else
5411 {
5412 /* In the !full_search case we're are being called by
5413 ada_iterate_over_symbols, and we don't want to search
5414 superblocks. */
5415 ada_add_block_symbols (&symbol_list_obstack, block, name,
5416 namespace, NULL, wild_match_p);
5417 }
5418 if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5419 goto done;
5420 }
d2e4a39e 5421
339c13b6
JB
5422 /* No non-global symbols found. Check our cache to see if we have
5423 already performed this search before. If we have, then return
5424 the same result. */
5425
14f9c5c9 5426 cacheIfUnique = 1;
2570f2b7 5427 if (lookup_cached_symbol (name0, namespace, &sym, &block))
4c4b4cd2
PH
5428 {
5429 if (sym != NULL)
2570f2b7 5430 add_defn_to_vec (&symbol_list_obstack, sym, block);
4c4b4cd2
PH
5431 goto done;
5432 }
14f9c5c9 5433
339c13b6
JB
5434 /* Search symbols from all global blocks. */
5435
40658b94 5436 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
82ccd55e 5437 wild_match_p);
d2e4a39e 5438
4c4b4cd2 5439 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5440 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5441
4c4b4cd2 5442 if (num_defns_collected (&symbol_list_obstack) == 0)
40658b94 5443 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
82ccd55e 5444 wild_match_p);
14f9c5c9 5445
4c4b4cd2
PH
5446done:
5447 ndefns = num_defns_collected (&symbol_list_obstack);
5448 *results = defns_collected (&symbol_list_obstack, 1);
5449
5450 ndefns = remove_extra_symbols (*results, ndefns);
5451
2ad01556 5452 if (ndefns == 0 && full_search)
2570f2b7 5453 cache_symbol (name0, namespace, NULL, NULL);
14f9c5c9 5454
2ad01556 5455 if (ndefns == 1 && full_search && cacheIfUnique)
2570f2b7 5456 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
14f9c5c9 5457
aeb5907d 5458 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
14f9c5c9 5459
14f9c5c9
AS
5460 return ndefns;
5461}
5462
4eeaa230
DE
5463/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5464 in global scopes, returning the number of matches, and setting *RESULTS
5465 to a vector of (SYM,BLOCK) tuples.
5466 See ada_lookup_symbol_list_worker for further details. */
5467
5468int
5469ada_lookup_symbol_list (const char *name0, const struct block *block0,
5470 domain_enum domain, struct ada_symbol_info **results)
5471{
5472 return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5473}
5474
5475/* Implementation of the la_iterate_over_symbols method. */
5476
5477static void
5478ada_iterate_over_symbols (const struct block *block,
5479 const char *name, domain_enum domain,
5480 symbol_found_callback_ftype *callback,
5481 void *data)
5482{
5483 int ndefs, i;
5484 struct ada_symbol_info *results;
5485
5486 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5487 for (i = 0; i < ndefs; ++i)
5488 {
5489 if (! (*callback) (results[i].sym, data))
5490 break;
5491 }
5492}
5493
f8eba3c6
TT
5494/* If NAME is the name of an entity, return a string that should
5495 be used to look that entity up in Ada units. This string should
5496 be deallocated after use using xfree.
5497
5498 NAME can have any form that the "break" or "print" commands might
5499 recognize. In other words, it does not have to be the "natural"
5500 name, or the "encoded" name. */
5501
5502char *
5503ada_name_for_lookup (const char *name)
5504{
5505 char *canon;
5506 int nlen = strlen (name);
5507
5508 if (name[0] == '<' && name[nlen - 1] == '>')
5509 {
5510 canon = xmalloc (nlen - 1);
5511 memcpy (canon, name + 1, nlen - 2);
5512 canon[nlen - 2] = '\0';
5513 }
5514 else
5515 canon = xstrdup (ada_encode (ada_fold_name (name)));
5516 return canon;
5517}
5518
4e5c77fe
JB
5519/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5520 to 1, but choosing the first symbol found if there are multiple
5521 choices.
5522
5e2336be
JB
5523 The result is stored in *INFO, which must be non-NULL.
5524 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5525
5526void
5527ada_lookup_encoded_symbol (const char *name, const struct block *block,
5528 domain_enum namespace,
5e2336be 5529 struct ada_symbol_info *info)
14f9c5c9 5530{
4c4b4cd2 5531 struct ada_symbol_info *candidates;
14f9c5c9
AS
5532 int n_candidates;
5533
5e2336be
JB
5534 gdb_assert (info != NULL);
5535 memset (info, 0, sizeof (struct ada_symbol_info));
4e5c77fe 5536
4eeaa230 5537 n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
14f9c5c9 5538 if (n_candidates == 0)
4e5c77fe 5539 return;
4c4b4cd2 5540
5e2336be
JB
5541 *info = candidates[0];
5542 info->sym = fixup_symbol_section (info->sym, NULL);
4e5c77fe 5543}
aeb5907d
JB
5544
5545/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5546 scope and in global scopes, or NULL if none. NAME is folded and
5547 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5548 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5549 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5550
aeb5907d
JB
5551struct symbol *
5552ada_lookup_symbol (const char *name, const struct block *block0,
21b556f4 5553 domain_enum namespace, int *is_a_field_of_this)
aeb5907d 5554{
5e2336be 5555 struct ada_symbol_info info;
4e5c77fe 5556
aeb5907d
JB
5557 if (is_a_field_of_this != NULL)
5558 *is_a_field_of_this = 0;
5559
4e5c77fe 5560 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5e2336be
JB
5561 block0, namespace, &info);
5562 return info.sym;
4c4b4cd2 5563}
14f9c5c9 5564
4c4b4cd2
PH
5565static struct symbol *
5566ada_lookup_symbol_nonlocal (const char *name,
76a01679 5567 const struct block *block,
21b556f4 5568 const domain_enum domain)
4c4b4cd2 5569{
94af9270 5570 return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
14f9c5c9
AS
5571}
5572
5573
4c4b4cd2
PH
5574/* True iff STR is a possible encoded suffix of a normal Ada name
5575 that is to be ignored for matching purposes. Suffixes of parallel
5576 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5577 are given by any of the regular expressions:
4c4b4cd2 5578
babe1480
JB
5579 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5580 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5581 TKB [subprogram suffix for task bodies]
babe1480 5582 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5583 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5584
5585 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5586 match is performed. This sequence is used to differentiate homonyms,
5587 is an optional part of a valid name suffix. */
4c4b4cd2 5588
14f9c5c9 5589static int
d2e4a39e 5590is_name_suffix (const char *str)
14f9c5c9
AS
5591{
5592 int k;
4c4b4cd2
PH
5593 const char *matching;
5594 const int len = strlen (str);
5595
babe1480
JB
5596 /* Skip optional leading __[0-9]+. */
5597
4c4b4cd2
PH
5598 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5599 {
babe1480
JB
5600 str += 3;
5601 while (isdigit (str[0]))
5602 str += 1;
4c4b4cd2 5603 }
babe1480
JB
5604
5605 /* [.$][0-9]+ */
4c4b4cd2 5606
babe1480 5607 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5608 {
babe1480 5609 matching = str + 1;
4c4b4cd2
PH
5610 while (isdigit (matching[0]))
5611 matching += 1;
5612 if (matching[0] == '\0')
5613 return 1;
5614 }
5615
5616 /* ___[0-9]+ */
babe1480 5617
4c4b4cd2
PH
5618 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5619 {
5620 matching = str + 3;
5621 while (isdigit (matching[0]))
5622 matching += 1;
5623 if (matching[0] == '\0')
5624 return 1;
5625 }
5626
9ac7f98e
JB
5627 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5628
5629 if (strcmp (str, "TKB") == 0)
5630 return 1;
5631
529cad9c
PH
5632#if 0
5633 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5634 with a N at the end. Unfortunately, the compiler uses the same
5635 convention for other internal types it creates. So treating
529cad9c 5636 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5637 some regressions. For instance, consider the case of an enumerated
5638 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5639 name ends with N.
5640 Having a single character like this as a suffix carrying some
0963b4bd 5641 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5642 to be something like "_N" instead. In the meantime, do not do
5643 the following check. */
5644 /* Protected Object Subprograms */
5645 if (len == 1 && str [0] == 'N')
5646 return 1;
5647#endif
5648
5649 /* _E[0-9]+[bs]$ */
5650 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5651 {
5652 matching = str + 3;
5653 while (isdigit (matching[0]))
5654 matching += 1;
5655 if ((matching[0] == 'b' || matching[0] == 's')
5656 && matching [1] == '\0')
5657 return 1;
5658 }
5659
4c4b4cd2
PH
5660 /* ??? We should not modify STR directly, as we are doing below. This
5661 is fine in this case, but may become problematic later if we find
5662 that this alternative did not work, and want to try matching
5663 another one from the begining of STR. Since we modified it, we
5664 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5665 if (str[0] == 'X')
5666 {
5667 str += 1;
d2e4a39e 5668 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
5669 {
5670 if (str[0] != 'n' && str[0] != 'b')
5671 return 0;
5672 str += 1;
5673 }
14f9c5c9 5674 }
babe1480 5675
14f9c5c9
AS
5676 if (str[0] == '\000')
5677 return 1;
babe1480 5678
d2e4a39e 5679 if (str[0] == '_')
14f9c5c9
AS
5680 {
5681 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 5682 return 0;
d2e4a39e 5683 if (str[2] == '_')
4c4b4cd2 5684 {
61ee279c
PH
5685 if (strcmp (str + 3, "JM") == 0)
5686 return 1;
5687 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5688 the LJM suffix in favor of the JM one. But we will
5689 still accept LJM as a valid suffix for a reasonable
5690 amount of time, just to allow ourselves to debug programs
5691 compiled using an older version of GNAT. */
4c4b4cd2
PH
5692 if (strcmp (str + 3, "LJM") == 0)
5693 return 1;
5694 if (str[3] != 'X')
5695 return 0;
1265e4aa
JB
5696 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5697 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
5698 return 1;
5699 if (str[4] == 'R' && str[5] != 'T')
5700 return 1;
5701 return 0;
5702 }
5703 if (!isdigit (str[2]))
5704 return 0;
5705 for (k = 3; str[k] != '\0'; k += 1)
5706 if (!isdigit (str[k]) && str[k] != '_')
5707 return 0;
14f9c5c9
AS
5708 return 1;
5709 }
4c4b4cd2 5710 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5711 {
4c4b4cd2
PH
5712 for (k = 2; str[k] != '\0'; k += 1)
5713 if (!isdigit (str[k]) && str[k] != '_')
5714 return 0;
14f9c5c9
AS
5715 return 1;
5716 }
5717 return 0;
5718}
d2e4a39e 5719
aeb5907d
JB
5720/* Return non-zero if the string starting at NAME and ending before
5721 NAME_END contains no capital letters. */
529cad9c
PH
5722
5723static int
5724is_valid_name_for_wild_match (const char *name0)
5725{
5726 const char *decoded_name = ada_decode (name0);
5727 int i;
5728
5823c3ef
JB
5729 /* If the decoded name starts with an angle bracket, it means that
5730 NAME0 does not follow the GNAT encoding format. It should then
5731 not be allowed as a possible wild match. */
5732 if (decoded_name[0] == '<')
5733 return 0;
5734
529cad9c
PH
5735 for (i=0; decoded_name[i] != '\0'; i++)
5736 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5737 return 0;
5738
5739 return 1;
5740}
5741
73589123
PH
5742/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5743 that could start a simple name. Assumes that *NAMEP points into
5744 the string beginning at NAME0. */
4c4b4cd2 5745
14f9c5c9 5746static int
73589123 5747advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 5748{
73589123 5749 const char *name = *namep;
5b4ee69b 5750
5823c3ef 5751 while (1)
14f9c5c9 5752 {
aa27d0b3 5753 int t0, t1;
73589123
PH
5754
5755 t0 = *name;
5756 if (t0 == '_')
5757 {
5758 t1 = name[1];
5759 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5760 {
5761 name += 1;
5762 if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5763 break;
5764 else
5765 name += 1;
5766 }
aa27d0b3
JB
5767 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5768 || name[2] == target0))
73589123
PH
5769 {
5770 name += 2;
5771 break;
5772 }
5773 else
5774 return 0;
5775 }
5776 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5777 name += 1;
5778 else
5823c3ef 5779 return 0;
73589123
PH
5780 }
5781
5782 *namep = name;
5783 return 1;
5784}
5785
5786/* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
5787 informational suffixes of NAME (i.e., for which is_name_suffix is
5788 true). Assumes that PATN is a lower-cased Ada simple name. */
5789
5790static int
5791wild_match (const char *name, const char *patn)
5792{
22e048c9 5793 const char *p;
73589123
PH
5794 const char *name0 = name;
5795
5796 while (1)
5797 {
5798 const char *match = name;
5799
5800 if (*name == *patn)
5801 {
5802 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5803 if (*p != *name)
5804 break;
5805 if (*p == '\0' && is_name_suffix (name))
5806 return match != name0 && !is_valid_name_for_wild_match (name0);
5807
5808 if (name[-1] == '_')
5809 name -= 1;
5810 }
5811 if (!advance_wild_match (&name, name0, *patn))
5812 return 1;
96d887e8 5813 }
96d887e8
PH
5814}
5815
40658b94
PH
5816/* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5817 informational suffix. */
5818
c4d840bd
PH
5819static int
5820full_match (const char *sym_name, const char *search_name)
5821{
40658b94 5822 return !match_name (sym_name, search_name, 0);
c4d840bd
PH
5823}
5824
5825
96d887e8
PH
5826/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5827 vector *defn_symbols, updating the list of symbols in OBSTACKP
0963b4bd 5828 (if necessary). If WILD, treat as NAME with a wildcard prefix.
4eeaa230 5829 OBJFILE is the section containing BLOCK. */
96d887e8
PH
5830
5831static void
5832ada_add_block_symbols (struct obstack *obstackp,
f0c5f9b2 5833 const struct block *block, const char *name,
96d887e8 5834 domain_enum domain, struct objfile *objfile,
2570f2b7 5835 int wild)
96d887e8 5836{
8157b174 5837 struct block_iterator iter;
96d887e8
PH
5838 int name_len = strlen (name);
5839 /* A matching argument symbol, if any. */
5840 struct symbol *arg_sym;
5841 /* Set true when we find a matching non-argument symbol. */
5842 int found_sym;
5843 struct symbol *sym;
5844
5845 arg_sym = NULL;
5846 found_sym = 0;
5847 if (wild)
5848 {
8157b174
TT
5849 for (sym = block_iter_match_first (block, name, wild_match, &iter);
5850 sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
76a01679 5851 {
4186eb54
KS
5852 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5853 SYMBOL_DOMAIN (sym), domain)
73589123 5854 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
76a01679 5855 {
2a2d4dc3
AS
5856 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5857 continue;
5858 else if (SYMBOL_IS_ARGUMENT (sym))
5859 arg_sym = sym;
5860 else
5861 {
76a01679
JB
5862 found_sym = 1;
5863 add_defn_to_vec (obstackp,
5864 fixup_symbol_section (sym, objfile),
2570f2b7 5865 block);
76a01679
JB
5866 }
5867 }
5868 }
96d887e8
PH
5869 }
5870 else
5871 {
8157b174
TT
5872 for (sym = block_iter_match_first (block, name, full_match, &iter);
5873 sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
76a01679 5874 {
4186eb54
KS
5875 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5876 SYMBOL_DOMAIN (sym), domain))
76a01679 5877 {
c4d840bd
PH
5878 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5879 {
5880 if (SYMBOL_IS_ARGUMENT (sym))
5881 arg_sym = sym;
5882 else
2a2d4dc3 5883 {
c4d840bd
PH
5884 found_sym = 1;
5885 add_defn_to_vec (obstackp,
5886 fixup_symbol_section (sym, objfile),
5887 block);
2a2d4dc3 5888 }
c4d840bd 5889 }
76a01679
JB
5890 }
5891 }
96d887e8
PH
5892 }
5893
5894 if (!found_sym && arg_sym != NULL)
5895 {
76a01679
JB
5896 add_defn_to_vec (obstackp,
5897 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5898 block);
96d887e8
PH
5899 }
5900
5901 if (!wild)
5902 {
5903 arg_sym = NULL;
5904 found_sym = 0;
5905
5906 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5907 {
4186eb54
KS
5908 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5909 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
5910 {
5911 int cmp;
5912
5913 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5914 if (cmp == 0)
5915 {
5916 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5917 if (cmp == 0)
5918 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5919 name_len);
5920 }
5921
5922 if (cmp == 0
5923 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5924 {
2a2d4dc3
AS
5925 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5926 {
5927 if (SYMBOL_IS_ARGUMENT (sym))
5928 arg_sym = sym;
5929 else
5930 {
5931 found_sym = 1;
5932 add_defn_to_vec (obstackp,
5933 fixup_symbol_section (sym, objfile),
5934 block);
5935 }
5936 }
76a01679
JB
5937 }
5938 }
76a01679 5939 }
96d887e8
PH
5940
5941 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5942 They aren't parameters, right? */
5943 if (!found_sym && arg_sym != NULL)
5944 {
5945 add_defn_to_vec (obstackp,
76a01679 5946 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5947 block);
96d887e8
PH
5948 }
5949 }
5950}
5951\f
41d27058
JB
5952
5953 /* Symbol Completion */
5954
5955/* If SYM_NAME is a completion candidate for TEXT, return this symbol
5956 name in a form that's appropriate for the completion. The result
5957 does not need to be deallocated, but is only good until the next call.
5958
5959 TEXT_LEN is equal to the length of TEXT.
e701b3c0 5960 Perform a wild match if WILD_MATCH_P is set.
6ea35997 5961 ENCODED_P should be set if TEXT represents the start of a symbol name
41d27058
JB
5962 in its encoded form. */
5963
5964static const char *
5965symbol_completion_match (const char *sym_name,
5966 const char *text, int text_len,
6ea35997 5967 int wild_match_p, int encoded_p)
41d27058 5968{
41d27058
JB
5969 const int verbatim_match = (text[0] == '<');
5970 int match = 0;
5971
5972 if (verbatim_match)
5973 {
5974 /* Strip the leading angle bracket. */
5975 text = text + 1;
5976 text_len--;
5977 }
5978
5979 /* First, test against the fully qualified name of the symbol. */
5980
5981 if (strncmp (sym_name, text, text_len) == 0)
5982 match = 1;
5983
6ea35997 5984 if (match && !encoded_p)
41d27058
JB
5985 {
5986 /* One needed check before declaring a positive match is to verify
5987 that iff we are doing a verbatim match, the decoded version
5988 of the symbol name starts with '<'. Otherwise, this symbol name
5989 is not a suitable completion. */
5990 const char *sym_name_copy = sym_name;
5991 int has_angle_bracket;
5992
5993 sym_name = ada_decode (sym_name);
5994 has_angle_bracket = (sym_name[0] == '<');
5995 match = (has_angle_bracket == verbatim_match);
5996 sym_name = sym_name_copy;
5997 }
5998
5999 if (match && !verbatim_match)
6000 {
6001 /* When doing non-verbatim match, another check that needs to
6002 be done is to verify that the potentially matching symbol name
6003 does not include capital letters, because the ada-mode would
6004 not be able to understand these symbol names without the
6005 angle bracket notation. */
6006 const char *tmp;
6007
6008 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6009 if (*tmp != '\0')
6010 match = 0;
6011 }
6012
6013 /* Second: Try wild matching... */
6014
e701b3c0 6015 if (!match && wild_match_p)
41d27058
JB
6016 {
6017 /* Since we are doing wild matching, this means that TEXT
6018 may represent an unqualified symbol name. We therefore must
6019 also compare TEXT against the unqualified name of the symbol. */
6020 sym_name = ada_unqualified_name (ada_decode (sym_name));
6021
6022 if (strncmp (sym_name, text, text_len) == 0)
6023 match = 1;
6024 }
6025
6026 /* Finally: If we found a mach, prepare the result to return. */
6027
6028 if (!match)
6029 return NULL;
6030
6031 if (verbatim_match)
6032 sym_name = add_angle_brackets (sym_name);
6033
6ea35997 6034 if (!encoded_p)
41d27058
JB
6035 sym_name = ada_decode (sym_name);
6036
6037 return sym_name;
6038}
6039
6040/* A companion function to ada_make_symbol_completion_list().
6041 Check if SYM_NAME represents a symbol which name would be suitable
6042 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
6043 it is appended at the end of the given string vector SV.
6044
6045 ORIG_TEXT is the string original string from the user command
6046 that needs to be completed. WORD is the entire command on which
6047 completion should be performed. These two parameters are used to
6048 determine which part of the symbol name should be added to the
6049 completion vector.
c0af1706 6050 if WILD_MATCH_P is set, then wild matching is performed.
cb8e9b97 6051 ENCODED_P should be set if TEXT represents a symbol name in its
41d27058
JB
6052 encoded formed (in which case the completion should also be
6053 encoded). */
6054
6055static void
d6565258 6056symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
6057 const char *sym_name,
6058 const char *text, int text_len,
6059 const char *orig_text, const char *word,
cb8e9b97 6060 int wild_match_p, int encoded_p)
41d27058
JB
6061{
6062 const char *match = symbol_completion_match (sym_name, text, text_len,
cb8e9b97 6063 wild_match_p, encoded_p);
41d27058
JB
6064 char *completion;
6065
6066 if (match == NULL)
6067 return;
6068
6069 /* We found a match, so add the appropriate completion to the given
6070 string vector. */
6071
6072 if (word == orig_text)
6073 {
6074 completion = xmalloc (strlen (match) + 5);
6075 strcpy (completion, match);
6076 }
6077 else if (word > orig_text)
6078 {
6079 /* Return some portion of sym_name. */
6080 completion = xmalloc (strlen (match) + 5);
6081 strcpy (completion, match + (word - orig_text));
6082 }
6083 else
6084 {
6085 /* Return some of ORIG_TEXT plus sym_name. */
6086 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
6087 strncpy (completion, word, orig_text - word);
6088 completion[orig_text - word] = '\0';
6089 strcat (completion, match);
6090 }
6091
d6565258 6092 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
6093}
6094
ccefe4c4 6095/* An object of this type is passed as the user_data argument to the
bb4142cf 6096 expand_symtabs_matching method. */
ccefe4c4
TT
6097struct add_partial_datum
6098{
6099 VEC(char_ptr) **completions;
6f937416 6100 const char *text;
ccefe4c4 6101 int text_len;
6f937416
PA
6102 const char *text0;
6103 const char *word;
ccefe4c4
TT
6104 int wild_match;
6105 int encoded;
6106};
6107
bb4142cf
DE
6108/* A callback for expand_symtabs_matching. */
6109
7b08b9eb 6110static int
bb4142cf 6111ada_complete_symbol_matcher (const char *name, void *user_data)
ccefe4c4
TT
6112{
6113 struct add_partial_datum *data = user_data;
7b08b9eb
JK
6114
6115 return symbol_completion_match (name, data->text, data->text_len,
6116 data->wild_match, data->encoded) != NULL;
ccefe4c4
TT
6117}
6118
49c4e619
TT
6119/* Return a list of possible symbol names completing TEXT0. WORD is
6120 the entire command on which completion is made. */
41d27058 6121
49c4e619 6122static VEC (char_ptr) *
6f937416
PA
6123ada_make_symbol_completion_list (const char *text0, const char *word,
6124 enum type_code code)
41d27058
JB
6125{
6126 char *text;
6127 int text_len;
b1ed564a
JB
6128 int wild_match_p;
6129 int encoded_p;
2ba95b9b 6130 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058
JB
6131 struct symbol *sym;
6132 struct symtab *s;
41d27058
JB
6133 struct minimal_symbol *msymbol;
6134 struct objfile *objfile;
6135 struct block *b, *surrounding_static_block = 0;
6136 int i;
8157b174 6137 struct block_iterator iter;
b8fea896 6138 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
41d27058 6139
2f68a895
TT
6140 gdb_assert (code == TYPE_CODE_UNDEF);
6141
41d27058
JB
6142 if (text0[0] == '<')
6143 {
6144 text = xstrdup (text0);
6145 make_cleanup (xfree, text);
6146 text_len = strlen (text);
b1ed564a
JB
6147 wild_match_p = 0;
6148 encoded_p = 1;
41d27058
JB
6149 }
6150 else
6151 {
6152 text = xstrdup (ada_encode (text0));
6153 make_cleanup (xfree, text);
6154 text_len = strlen (text);
6155 for (i = 0; i < text_len; i++)
6156 text[i] = tolower (text[i]);
6157
b1ed564a 6158 encoded_p = (strstr (text0, "__") != NULL);
41d27058
JB
6159 /* If the name contains a ".", then the user is entering a fully
6160 qualified entity name, and the match must not be done in wild
6161 mode. Similarly, if the user wants to complete what looks like
6162 an encoded name, the match must not be done in wild mode. */
b1ed564a 6163 wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
41d27058
JB
6164 }
6165
6166 /* First, look at the partial symtab symbols. */
41d27058 6167 {
ccefe4c4
TT
6168 struct add_partial_datum data;
6169
6170 data.completions = &completions;
6171 data.text = text;
6172 data.text_len = text_len;
6173 data.text0 = text0;
6174 data.word = word;
b1ed564a
JB
6175 data.wild_match = wild_match_p;
6176 data.encoded = encoded_p;
bb4142cf
DE
6177 expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
6178 &data);
41d27058
JB
6179 }
6180
6181 /* At this point scan through the misc symbol vectors and add each
6182 symbol you find to the list. Eventually we want to ignore
6183 anything that isn't a text symbol (everything else will be
6184 handled by the psymtab code above). */
6185
6186 ALL_MSYMBOLS (objfile, msymbol)
6187 {
6188 QUIT;
efd66ac6 6189 symbol_completion_add (&completions, MSYMBOL_LINKAGE_NAME (msymbol),
b1ed564a
JB
6190 text, text_len, text0, word, wild_match_p,
6191 encoded_p);
41d27058
JB
6192 }
6193
6194 /* Search upwards from currently selected frame (so that we can
6195 complete on local vars. */
6196
6197 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6198 {
6199 if (!BLOCK_SUPERBLOCK (b))
6200 surrounding_static_block = b; /* For elmin of dups */
6201
6202 ALL_BLOCK_SYMBOLS (b, iter, sym)
6203 {
d6565258 6204 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6205 text, text_len, text0, word,
b1ed564a 6206 wild_match_p, encoded_p);
41d27058
JB
6207 }
6208 }
6209
6210 /* Go through the symtabs and check the externs and statics for
6211 symbols which match. */
6212
6213 ALL_SYMTABS (objfile, s)
6214 {
6215 QUIT;
6216 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
6217 ALL_BLOCK_SYMBOLS (b, iter, sym)
6218 {
d6565258 6219 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6220 text, text_len, text0, word,
b1ed564a 6221 wild_match_p, encoded_p);
41d27058
JB
6222 }
6223 }
6224
6225 ALL_SYMTABS (objfile, s)
6226 {
6227 QUIT;
6228 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6229 /* Don't do this block twice. */
6230 if (b == surrounding_static_block)
6231 continue;
6232 ALL_BLOCK_SYMBOLS (b, iter, sym)
6233 {
d6565258 6234 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6235 text, text_len, text0, word,
b1ed564a 6236 wild_match_p, encoded_p);
41d27058
JB
6237 }
6238 }
6239
b8fea896 6240 do_cleanups (old_chain);
49c4e619 6241 return completions;
41d27058
JB
6242}
6243
963a6417 6244 /* Field Access */
96d887e8 6245
73fb9985
JB
6246/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6247 for tagged types. */
6248
6249static int
6250ada_is_dispatch_table_ptr_type (struct type *type)
6251{
0d5cff50 6252 const char *name;
73fb9985
JB
6253
6254 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6255 return 0;
6256
6257 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6258 if (name == NULL)
6259 return 0;
6260
6261 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6262}
6263
ac4a2da4
JG
6264/* Return non-zero if TYPE is an interface tag. */
6265
6266static int
6267ada_is_interface_tag (struct type *type)
6268{
6269 const char *name = TYPE_NAME (type);
6270
6271 if (name == NULL)
6272 return 0;
6273
6274 return (strcmp (name, "ada__tags__interface_tag") == 0);
6275}
6276
963a6417
PH
6277/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6278 to be invisible to users. */
96d887e8 6279
963a6417
PH
6280int
6281ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6282{
963a6417
PH
6283 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6284 return 1;
ffde82bf 6285
73fb9985
JB
6286 /* Check the name of that field. */
6287 {
6288 const char *name = TYPE_FIELD_NAME (type, field_num);
6289
6290 /* Anonymous field names should not be printed.
6291 brobecker/2007-02-20: I don't think this can actually happen
6292 but we don't want to print the value of annonymous fields anyway. */
6293 if (name == NULL)
6294 return 1;
6295
ffde82bf
JB
6296 /* Normally, fields whose name start with an underscore ("_")
6297 are fields that have been internally generated by the compiler,
6298 and thus should not be printed. The "_parent" field is special,
6299 however: This is a field internally generated by the compiler
6300 for tagged types, and it contains the components inherited from
6301 the parent type. This field should not be printed as is, but
6302 should not be ignored either. */
73fb9985
JB
6303 if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6304 return 1;
6305 }
6306
ac4a2da4
JG
6307 /* If this is the dispatch table of a tagged type or an interface tag,
6308 then ignore. */
73fb9985 6309 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6310 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6311 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6312 return 1;
6313
6314 /* Not a special field, so it should not be ignored. */
6315 return 0;
963a6417 6316}
96d887e8 6317
963a6417 6318/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6319 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6320
963a6417
PH
6321int
6322ada_is_tagged_type (struct type *type, int refok)
6323{
6324 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6325}
96d887e8 6326
963a6417 6327/* True iff TYPE represents the type of X'Tag */
96d887e8 6328
963a6417
PH
6329int
6330ada_is_tag_type (struct type *type)
6331{
6332 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6333 return 0;
6334 else
96d887e8 6335 {
963a6417 6336 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6337
963a6417
PH
6338 return (name != NULL
6339 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6340 }
96d887e8
PH
6341}
6342
963a6417 6343/* The type of the tag on VAL. */
76a01679 6344
963a6417
PH
6345struct type *
6346ada_tag_type (struct value *val)
96d887e8 6347{
df407dfe 6348 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 6349}
96d887e8 6350
b50d69b5
JG
6351/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6352 retired at Ada 05). */
6353
6354static int
6355is_ada95_tag (struct value *tag)
6356{
6357 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6358}
6359
963a6417 6360/* The value of the tag on VAL. */
96d887e8 6361
963a6417
PH
6362struct value *
6363ada_value_tag (struct value *val)
6364{
03ee6b2e 6365 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6366}
6367
963a6417
PH
6368/* The value of the tag on the object of type TYPE whose contents are
6369 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6370 ADDRESS. */
96d887e8 6371
963a6417 6372static struct value *
10a2c479 6373value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6374 const gdb_byte *valaddr,
963a6417 6375 CORE_ADDR address)
96d887e8 6376{
b5385fc0 6377 int tag_byte_offset;
963a6417 6378 struct type *tag_type;
5b4ee69b 6379
963a6417 6380 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6381 NULL, NULL, NULL))
96d887e8 6382 {
fc1a4b47 6383 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6384 ? NULL
6385 : valaddr + tag_byte_offset);
963a6417 6386 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6387
963a6417 6388 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6389 }
963a6417
PH
6390 return NULL;
6391}
96d887e8 6392
963a6417
PH
6393static struct type *
6394type_from_tag (struct value *tag)
6395{
6396 const char *type_name = ada_tag_name (tag);
5b4ee69b 6397
963a6417
PH
6398 if (type_name != NULL)
6399 return ada_find_any_type (ada_encode (type_name));
6400 return NULL;
6401}
96d887e8 6402
b50d69b5
JG
6403/* Given a value OBJ of a tagged type, return a value of this
6404 type at the base address of the object. The base address, as
6405 defined in Ada.Tags, it is the address of the primary tag of
6406 the object, and therefore where the field values of its full
6407 view can be fetched. */
6408
6409struct value *
6410ada_tag_value_at_base_address (struct value *obj)
6411{
6412 volatile struct gdb_exception e;
6413 struct value *val;
6414 LONGEST offset_to_top = 0;
6415 struct type *ptr_type, *obj_type;
6416 struct value *tag;
6417 CORE_ADDR base_address;
6418
6419 obj_type = value_type (obj);
6420
6421 /* It is the responsability of the caller to deref pointers. */
6422
6423 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6424 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6425 return obj;
6426
6427 tag = ada_value_tag (obj);
6428 if (!tag)
6429 return obj;
6430
6431 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6432
6433 if (is_ada95_tag (tag))
6434 return obj;
6435
6436 ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6437 ptr_type = lookup_pointer_type (ptr_type);
6438 val = value_cast (ptr_type, tag);
6439 if (!val)
6440 return obj;
6441
6442 /* It is perfectly possible that an exception be raised while
6443 trying to determine the base address, just like for the tag;
6444 see ada_tag_name for more details. We do not print the error
6445 message for the same reason. */
6446
6447 TRY_CATCH (e, RETURN_MASK_ERROR)
6448 {
6449 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6450 }
6451
6452 if (e.reason < 0)
6453 return obj;
6454
6455 /* If offset is null, nothing to do. */
6456
6457 if (offset_to_top == 0)
6458 return obj;
6459
6460 /* -1 is a special case in Ada.Tags; however, what should be done
6461 is not quite clear from the documentation. So do nothing for
6462 now. */
6463
6464 if (offset_to_top == -1)
6465 return obj;
6466
6467 base_address = value_address (obj) - offset_to_top;
6468 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6469
6470 /* Make sure that we have a proper tag at the new address.
6471 Otherwise, offset_to_top is bogus (which can happen when
6472 the object is not initialized yet). */
6473
6474 if (!tag)
6475 return obj;
6476
6477 obj_type = type_from_tag (tag);
6478
6479 if (!obj_type)
6480 return obj;
6481
6482 return value_from_contents_and_address (obj_type, NULL, base_address);
6483}
6484
1b611343
JB
6485/* Return the "ada__tags__type_specific_data" type. */
6486
6487static struct type *
6488ada_get_tsd_type (struct inferior *inf)
963a6417 6489{
1b611343 6490 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6491
1b611343
JB
6492 if (data->tsd_type == 0)
6493 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6494 return data->tsd_type;
6495}
529cad9c 6496
1b611343
JB
6497/* Return the TSD (type-specific data) associated to the given TAG.
6498 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6499
1b611343 6500 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6501
1b611343
JB
6502static struct value *
6503ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6504{
4c4b4cd2 6505 struct value *val;
1b611343 6506 struct type *type;
5b4ee69b 6507
1b611343
JB
6508 /* First option: The TSD is simply stored as a field of our TAG.
6509 Only older versions of GNAT would use this format, but we have
6510 to test it first, because there are no visible markers for
6511 the current approach except the absence of that field. */
529cad9c 6512
1b611343
JB
6513 val = ada_value_struct_elt (tag, "tsd", 1);
6514 if (val)
6515 return val;
e802dbe0 6516
1b611343
JB
6517 /* Try the second representation for the dispatch table (in which
6518 there is no explicit 'tsd' field in the referent of the tag pointer,
6519 and instead the tsd pointer is stored just before the dispatch
6520 table. */
e802dbe0 6521
1b611343
JB
6522 type = ada_get_tsd_type (current_inferior());
6523 if (type == NULL)
6524 return NULL;
6525 type = lookup_pointer_type (lookup_pointer_type (type));
6526 val = value_cast (type, tag);
6527 if (val == NULL)
6528 return NULL;
6529 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6530}
6531
1b611343
JB
6532/* Given the TSD of a tag (type-specific data), return a string
6533 containing the name of the associated type.
6534
6535 The returned value is good until the next call. May return NULL
6536 if we are unable to determine the tag name. */
6537
6538static char *
6539ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6540{
529cad9c
PH
6541 static char name[1024];
6542 char *p;
1b611343 6543 struct value *val;
529cad9c 6544
1b611343 6545 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6546 if (val == NULL)
1b611343 6547 return NULL;
4c4b4cd2
PH
6548 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6549 for (p = name; *p != '\0'; p += 1)
6550 if (isalpha (*p))
6551 *p = tolower (*p);
1b611343 6552 return name;
4c4b4cd2
PH
6553}
6554
6555/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6556 a C string.
6557
6558 Return NULL if the TAG is not an Ada tag, or if we were unable to
6559 determine the name of that tag. The result is good until the next
6560 call. */
4c4b4cd2
PH
6561
6562const char *
6563ada_tag_name (struct value *tag)
6564{
1b611343
JB
6565 volatile struct gdb_exception e;
6566 char *name = NULL;
5b4ee69b 6567
df407dfe 6568 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6569 return NULL;
1b611343
JB
6570
6571 /* It is perfectly possible that an exception be raised while trying
6572 to determine the TAG's name, even under normal circumstances:
6573 The associated variable may be uninitialized or corrupted, for
6574 instance. We do not let any exception propagate past this point.
6575 instead we return NULL.
6576
6577 We also do not print the error message either (which often is very
6578 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6579 the caller print a more meaningful message if necessary. */
6580 TRY_CATCH (e, RETURN_MASK_ERROR)
6581 {
6582 struct value *tsd = ada_get_tsd_from_tag (tag);
6583
6584 if (tsd != NULL)
6585 name = ada_tag_name_from_tsd (tsd);
6586 }
6587
6588 return name;
4c4b4cd2
PH
6589}
6590
6591/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6592
d2e4a39e 6593struct type *
ebf56fd3 6594ada_parent_type (struct type *type)
14f9c5c9
AS
6595{
6596 int i;
6597
61ee279c 6598 type = ada_check_typedef (type);
14f9c5c9
AS
6599
6600 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6601 return NULL;
6602
6603 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6604 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6605 {
6606 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6607
6608 /* If the _parent field is a pointer, then dereference it. */
6609 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6610 parent_type = TYPE_TARGET_TYPE (parent_type);
6611 /* If there is a parallel XVS type, get the actual base type. */
6612 parent_type = ada_get_base_type (parent_type);
6613
6614 return ada_check_typedef (parent_type);
6615 }
14f9c5c9
AS
6616
6617 return NULL;
6618}
6619
4c4b4cd2
PH
6620/* True iff field number FIELD_NUM of structure type TYPE contains the
6621 parent-type (inherited) fields of a derived type. Assumes TYPE is
6622 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6623
6624int
ebf56fd3 6625ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6626{
61ee279c 6627 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6628
4c4b4cd2
PH
6629 return (name != NULL
6630 && (strncmp (name, "PARENT", 6) == 0
6631 || strncmp (name, "_parent", 7) == 0));
14f9c5c9
AS
6632}
6633
4c4b4cd2 6634/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6635 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6636 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6637 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6638 structures. */
14f9c5c9
AS
6639
6640int
ebf56fd3 6641ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6642{
d2e4a39e 6643 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6644
d2e4a39e 6645 return (name != NULL
4c4b4cd2
PH
6646 && (strncmp (name, "PARENT", 6) == 0
6647 || strcmp (name, "REP") == 0
6648 || strncmp (name, "_parent", 7) == 0
6649 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6650}
6651
4c4b4cd2
PH
6652/* True iff field number FIELD_NUM of structure or union type TYPE
6653 is a variant wrapper. Assumes TYPE is a structure type with at least
6654 FIELD_NUM+1 fields. */
14f9c5c9
AS
6655
6656int
ebf56fd3 6657ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6658{
d2e4a39e 6659 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6660
14f9c5c9 6661 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 6662 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
6663 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6664 == TYPE_CODE_UNION)));
14f9c5c9
AS
6665}
6666
6667/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6668 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6669 returns the type of the controlling discriminant for the variant.
6670 May return NULL if the type could not be found. */
14f9c5c9 6671
d2e4a39e 6672struct type *
ebf56fd3 6673ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6674{
d2e4a39e 6675 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6676
7c964f07 6677 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
6678}
6679
4c4b4cd2 6680/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6681 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6682 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
6683
6684int
ebf56fd3 6685ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6686{
d2e4a39e 6687 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6688
14f9c5c9
AS
6689 return (name != NULL && name[0] == 'O');
6690}
6691
6692/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6693 returns the name of the discriminant controlling the variant.
6694 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6695
d2e4a39e 6696char *
ebf56fd3 6697ada_variant_discrim_name (struct type *type0)
14f9c5c9 6698{
d2e4a39e 6699 static char *result = NULL;
14f9c5c9 6700 static size_t result_len = 0;
d2e4a39e
AS
6701 struct type *type;
6702 const char *name;
6703 const char *discrim_end;
6704 const char *discrim_start;
14f9c5c9
AS
6705
6706 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6707 type = TYPE_TARGET_TYPE (type0);
6708 else
6709 type = type0;
6710
6711 name = ada_type_name (type);
6712
6713 if (name == NULL || name[0] == '\000')
6714 return "";
6715
6716 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6717 discrim_end -= 1)
6718 {
4c4b4cd2
PH
6719 if (strncmp (discrim_end, "___XVN", 6) == 0)
6720 break;
14f9c5c9
AS
6721 }
6722 if (discrim_end == name)
6723 return "";
6724
d2e4a39e 6725 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6726 discrim_start -= 1)
6727 {
d2e4a39e 6728 if (discrim_start == name + 1)
4c4b4cd2 6729 return "";
76a01679 6730 if ((discrim_start > name + 3
4c4b4cd2
PH
6731 && strncmp (discrim_start - 3, "___", 3) == 0)
6732 || discrim_start[-1] == '.')
6733 break;
14f9c5c9
AS
6734 }
6735
6736 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6737 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 6738 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
6739 return result;
6740}
6741
4c4b4cd2
PH
6742/* Scan STR for a subtype-encoded number, beginning at position K.
6743 Put the position of the character just past the number scanned in
6744 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6745 Return 1 if there was a valid number at the given position, and 0
6746 otherwise. A "subtype-encoded" number consists of the absolute value
6747 in decimal, followed by the letter 'm' to indicate a negative number.
6748 Assumes 0m does not occur. */
14f9c5c9
AS
6749
6750int
d2e4a39e 6751ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6752{
6753 ULONGEST RU;
6754
d2e4a39e 6755 if (!isdigit (str[k]))
14f9c5c9
AS
6756 return 0;
6757
4c4b4cd2 6758 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6759 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6760 LONGEST. */
14f9c5c9
AS
6761 RU = 0;
6762 while (isdigit (str[k]))
6763 {
d2e4a39e 6764 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6765 k += 1;
6766 }
6767
d2e4a39e 6768 if (str[k] == 'm')
14f9c5c9
AS
6769 {
6770 if (R != NULL)
4c4b4cd2 6771 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6772 k += 1;
6773 }
6774 else if (R != NULL)
6775 *R = (LONGEST) RU;
6776
4c4b4cd2 6777 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6778 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6779 number representable as a LONGEST (although either would probably work
6780 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6781 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6782
6783 if (new_k != NULL)
6784 *new_k = k;
6785 return 1;
6786}
6787
4c4b4cd2
PH
6788/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6789 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6790 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6791
d2e4a39e 6792int
ebf56fd3 6793ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6794{
d2e4a39e 6795 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6796 int p;
6797
6798 p = 0;
6799 while (1)
6800 {
d2e4a39e 6801 switch (name[p])
4c4b4cd2
PH
6802 {
6803 case '\0':
6804 return 0;
6805 case 'S':
6806 {
6807 LONGEST W;
5b4ee69b 6808
4c4b4cd2
PH
6809 if (!ada_scan_number (name, p + 1, &W, &p))
6810 return 0;
6811 if (val == W)
6812 return 1;
6813 break;
6814 }
6815 case 'R':
6816 {
6817 LONGEST L, U;
5b4ee69b 6818
4c4b4cd2
PH
6819 if (!ada_scan_number (name, p + 1, &L, &p)
6820 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6821 return 0;
6822 if (val >= L && val <= U)
6823 return 1;
6824 break;
6825 }
6826 case 'O':
6827 return 1;
6828 default:
6829 return 0;
6830 }
6831 }
6832}
6833
0963b4bd 6834/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6835
6836/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6837 ARG_TYPE, extract and return the value of one of its (non-static)
6838 fields. FIELDNO says which field. Differs from value_primitive_field
6839 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6840
4c4b4cd2 6841static struct value *
d2e4a39e 6842ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 6843 struct type *arg_type)
14f9c5c9 6844{
14f9c5c9
AS
6845 struct type *type;
6846
61ee279c 6847 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
6848 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6849
4c4b4cd2 6850 /* Handle packed fields. */
14f9c5c9
AS
6851
6852 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6853 {
6854 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6855 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6856
0fd88904 6857 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
6858 offset + bit_pos / 8,
6859 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6860 }
6861 else
6862 return value_primitive_field (arg1, offset, fieldno, arg_type);
6863}
6864
52ce6436
PH
6865/* Find field with name NAME in object of type TYPE. If found,
6866 set the following for each argument that is non-null:
6867 - *FIELD_TYPE_P to the field's type;
6868 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6869 an object of that type;
6870 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6871 - *BIT_SIZE_P to its size in bits if the field is packed, and
6872 0 otherwise;
6873 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6874 fields up to but not including the desired field, or by the total
6875 number of fields if not found. A NULL value of NAME never
6876 matches; the function just counts visible fields in this case.
6877
0963b4bd 6878 Returns 1 if found, 0 otherwise. */
52ce6436 6879
4c4b4cd2 6880static int
0d5cff50 6881find_struct_field (const char *name, struct type *type, int offset,
76a01679 6882 struct type **field_type_p,
52ce6436
PH
6883 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6884 int *index_p)
4c4b4cd2
PH
6885{
6886 int i;
6887
61ee279c 6888 type = ada_check_typedef (type);
76a01679 6889
52ce6436
PH
6890 if (field_type_p != NULL)
6891 *field_type_p = NULL;
6892 if (byte_offset_p != NULL)
d5d6fca5 6893 *byte_offset_p = 0;
52ce6436
PH
6894 if (bit_offset_p != NULL)
6895 *bit_offset_p = 0;
6896 if (bit_size_p != NULL)
6897 *bit_size_p = 0;
6898
6899 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
6900 {
6901 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6902 int fld_offset = offset + bit_pos / 8;
0d5cff50 6903 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6904
4c4b4cd2
PH
6905 if (t_field_name == NULL)
6906 continue;
6907
52ce6436 6908 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
6909 {
6910 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6911
52ce6436
PH
6912 if (field_type_p != NULL)
6913 *field_type_p = TYPE_FIELD_TYPE (type, i);
6914 if (byte_offset_p != NULL)
6915 *byte_offset_p = fld_offset;
6916 if (bit_offset_p != NULL)
6917 *bit_offset_p = bit_pos % 8;
6918 if (bit_size_p != NULL)
6919 *bit_size_p = bit_size;
76a01679
JB
6920 return 1;
6921 }
4c4b4cd2
PH
6922 else if (ada_is_wrapper_field (type, i))
6923 {
52ce6436
PH
6924 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6925 field_type_p, byte_offset_p, bit_offset_p,
6926 bit_size_p, index_p))
76a01679
JB
6927 return 1;
6928 }
4c4b4cd2
PH
6929 else if (ada_is_variant_part (type, i))
6930 {
52ce6436
PH
6931 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6932 fixed type?? */
4c4b4cd2 6933 int j;
52ce6436
PH
6934 struct type *field_type
6935 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 6936
52ce6436 6937 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 6938 {
76a01679
JB
6939 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6940 fld_offset
6941 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6942 field_type_p, byte_offset_p,
52ce6436 6943 bit_offset_p, bit_size_p, index_p))
76a01679 6944 return 1;
4c4b4cd2
PH
6945 }
6946 }
52ce6436
PH
6947 else if (index_p != NULL)
6948 *index_p += 1;
4c4b4cd2
PH
6949 }
6950 return 0;
6951}
6952
0963b4bd 6953/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 6954
52ce6436
PH
6955static int
6956num_visible_fields (struct type *type)
6957{
6958 int n;
5b4ee69b 6959
52ce6436
PH
6960 n = 0;
6961 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6962 return n;
6963}
14f9c5c9 6964
4c4b4cd2 6965/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
6966 and search in it assuming it has (class) type TYPE.
6967 If found, return value, else return NULL.
6968
4c4b4cd2 6969 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 6970
4c4b4cd2 6971static struct value *
d2e4a39e 6972ada_search_struct_field (char *name, struct value *arg, int offset,
4c4b4cd2 6973 struct type *type)
14f9c5c9
AS
6974{
6975 int i;
14f9c5c9 6976
5b4ee69b 6977 type = ada_check_typedef (type);
52ce6436 6978 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 6979 {
0d5cff50 6980 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
6981
6982 if (t_field_name == NULL)
4c4b4cd2 6983 continue;
14f9c5c9
AS
6984
6985 else if (field_name_match (t_field_name, name))
4c4b4cd2 6986 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
6987
6988 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 6989 {
0963b4bd 6990 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
6991 ada_search_struct_field (name, arg,
6992 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6993 TYPE_FIELD_TYPE (type, i));
5b4ee69b 6994
4c4b4cd2
PH
6995 if (v != NULL)
6996 return v;
6997 }
14f9c5c9
AS
6998
6999 else if (ada_is_variant_part (type, i))
4c4b4cd2 7000 {
0963b4bd 7001 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7002 int j;
5b4ee69b
MS
7003 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7004 i));
4c4b4cd2
PH
7005 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7006
52ce6436 7007 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 7008 {
0963b4bd
MS
7009 struct value *v = ada_search_struct_field /* Force line
7010 break. */
06d5cf63
JB
7011 (name, arg,
7012 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7013 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7014
4c4b4cd2
PH
7015 if (v != NULL)
7016 return v;
7017 }
7018 }
14f9c5c9
AS
7019 }
7020 return NULL;
7021}
d2e4a39e 7022
52ce6436
PH
7023static struct value *ada_index_struct_field_1 (int *, struct value *,
7024 int, struct type *);
7025
7026
7027/* Return field #INDEX in ARG, where the index is that returned by
7028 * find_struct_field through its INDEX_P argument. Adjust the address
7029 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7030 * If found, return value, else return NULL. */
52ce6436
PH
7031
7032static struct value *
7033ada_index_struct_field (int index, struct value *arg, int offset,
7034 struct type *type)
7035{
7036 return ada_index_struct_field_1 (&index, arg, offset, type);
7037}
7038
7039
7040/* Auxiliary function for ada_index_struct_field. Like
7041 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7042 * *INDEX_P. */
52ce6436
PH
7043
7044static struct value *
7045ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7046 struct type *type)
7047{
7048 int i;
7049 type = ada_check_typedef (type);
7050
7051 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7052 {
7053 if (TYPE_FIELD_NAME (type, i) == NULL)
7054 continue;
7055 else if (ada_is_wrapper_field (type, i))
7056 {
0963b4bd 7057 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7058 ada_index_struct_field_1 (index_p, arg,
7059 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7060 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7061
52ce6436
PH
7062 if (v != NULL)
7063 return v;
7064 }
7065
7066 else if (ada_is_variant_part (type, i))
7067 {
7068 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7069 find_struct_field. */
52ce6436
PH
7070 error (_("Cannot assign this kind of variant record"));
7071 }
7072 else if (*index_p == 0)
7073 return ada_value_primitive_field (arg, offset, i, type);
7074 else
7075 *index_p -= 1;
7076 }
7077 return NULL;
7078}
7079
4c4b4cd2
PH
7080/* Given ARG, a value of type (pointer or reference to a)*
7081 structure/union, extract the component named NAME from the ultimate
7082 target structure/union and return it as a value with its
f5938064 7083 appropriate type.
14f9c5c9 7084
4c4b4cd2
PH
7085 The routine searches for NAME among all members of the structure itself
7086 and (recursively) among all members of any wrapper members
14f9c5c9
AS
7087 (e.g., '_parent').
7088
03ee6b2e
PH
7089 If NO_ERR, then simply return NULL in case of error, rather than
7090 calling error. */
14f9c5c9 7091
d2e4a39e 7092struct value *
03ee6b2e 7093ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 7094{
4c4b4cd2 7095 struct type *t, *t1;
d2e4a39e 7096 struct value *v;
14f9c5c9 7097
4c4b4cd2 7098 v = NULL;
df407dfe 7099 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
7100 if (TYPE_CODE (t) == TYPE_CODE_REF)
7101 {
7102 t1 = TYPE_TARGET_TYPE (t);
7103 if (t1 == NULL)
03ee6b2e 7104 goto BadValue;
61ee279c 7105 t1 = ada_check_typedef (t1);
4c4b4cd2 7106 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 7107 {
994b9211 7108 arg = coerce_ref (arg);
76a01679
JB
7109 t = t1;
7110 }
4c4b4cd2 7111 }
14f9c5c9 7112
4c4b4cd2
PH
7113 while (TYPE_CODE (t) == TYPE_CODE_PTR)
7114 {
7115 t1 = TYPE_TARGET_TYPE (t);
7116 if (t1 == NULL)
03ee6b2e 7117 goto BadValue;
61ee279c 7118 t1 = ada_check_typedef (t1);
4c4b4cd2 7119 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
7120 {
7121 arg = value_ind (arg);
7122 t = t1;
7123 }
4c4b4cd2 7124 else
76a01679 7125 break;
4c4b4cd2 7126 }
14f9c5c9 7127
4c4b4cd2 7128 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 7129 goto BadValue;
14f9c5c9 7130
4c4b4cd2
PH
7131 if (t1 == t)
7132 v = ada_search_struct_field (name, arg, 0, t);
7133 else
7134 {
7135 int bit_offset, bit_size, byte_offset;
7136 struct type *field_type;
7137 CORE_ADDR address;
7138
76a01679 7139 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 7140 address = value_address (ada_value_ind (arg));
4c4b4cd2 7141 else
b50d69b5 7142 address = value_address (ada_coerce_ref (arg));
14f9c5c9 7143
1ed6ede0 7144 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
7145 if (find_struct_field (name, t1, 0,
7146 &field_type, &byte_offset, &bit_offset,
52ce6436 7147 &bit_size, NULL))
76a01679
JB
7148 {
7149 if (bit_size != 0)
7150 {
714e53ab
PH
7151 if (TYPE_CODE (t) == TYPE_CODE_REF)
7152 arg = ada_coerce_ref (arg);
7153 else
7154 arg = ada_value_ind (arg);
76a01679
JB
7155 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
7156 bit_offset, bit_size,
7157 field_type);
7158 }
7159 else
f5938064 7160 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
7161 }
7162 }
7163
03ee6b2e
PH
7164 if (v != NULL || no_err)
7165 return v;
7166 else
323e0a4a 7167 error (_("There is no member named %s."), name);
14f9c5c9 7168
03ee6b2e
PH
7169 BadValue:
7170 if (no_err)
7171 return NULL;
7172 else
0963b4bd
MS
7173 error (_("Attempt to extract a component of "
7174 "a value that is not a record."));
14f9c5c9
AS
7175}
7176
7177/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7178 If DISPP is non-null, add its byte displacement from the beginning of a
7179 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7180 work for packed fields).
7181
7182 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7183 followed by "___".
14f9c5c9 7184
0963b4bd 7185 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7186 be a (pointer or reference)+ to a struct or union, and the
7187 ultimate target type will be searched.
14f9c5c9
AS
7188
7189 Looks recursively into variant clauses and parent types.
7190
4c4b4cd2
PH
7191 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7192 TYPE is not a type of the right kind. */
14f9c5c9 7193
4c4b4cd2 7194static struct type *
76a01679
JB
7195ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
7196 int noerr, int *dispp)
14f9c5c9
AS
7197{
7198 int i;
7199
7200 if (name == NULL)
7201 goto BadName;
7202
76a01679 7203 if (refok && type != NULL)
4c4b4cd2
PH
7204 while (1)
7205 {
61ee279c 7206 type = ada_check_typedef (type);
76a01679
JB
7207 if (TYPE_CODE (type) != TYPE_CODE_PTR
7208 && TYPE_CODE (type) != TYPE_CODE_REF)
7209 break;
7210 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7211 }
14f9c5c9 7212
76a01679 7213 if (type == NULL
1265e4aa
JB
7214 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
7215 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 7216 {
4c4b4cd2 7217 if (noerr)
76a01679 7218 return NULL;
4c4b4cd2 7219 else
76a01679
JB
7220 {
7221 target_terminal_ours ();
7222 gdb_flush (gdb_stdout);
323e0a4a
AC
7223 if (type == NULL)
7224 error (_("Type (null) is not a structure or union type"));
7225 else
7226 {
7227 /* XXX: type_sprint */
7228 fprintf_unfiltered (gdb_stderr, _("Type "));
7229 type_print (type, "", gdb_stderr, -1);
7230 error (_(" is not a structure or union type"));
7231 }
76a01679 7232 }
14f9c5c9
AS
7233 }
7234
7235 type = to_static_fixed_type (type);
7236
7237 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7238 {
0d5cff50 7239 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7240 struct type *t;
7241 int disp;
d2e4a39e 7242
14f9c5c9 7243 if (t_field_name == NULL)
4c4b4cd2 7244 continue;
14f9c5c9
AS
7245
7246 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
7247 {
7248 if (dispp != NULL)
7249 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
61ee279c 7250 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7251 }
14f9c5c9
AS
7252
7253 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
7254 {
7255 disp = 0;
7256 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7257 0, 1, &disp);
7258 if (t != NULL)
7259 {
7260 if (dispp != NULL)
7261 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7262 return t;
7263 }
7264 }
14f9c5c9
AS
7265
7266 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7267 {
7268 int j;
5b4ee69b
MS
7269 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7270 i));
4c4b4cd2
PH
7271
7272 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7273 {
b1f33ddd
JB
7274 /* FIXME pnh 2008/01/26: We check for a field that is
7275 NOT wrapped in a struct, since the compiler sometimes
7276 generates these for unchecked variant types. Revisit
0963b4bd 7277 if the compiler changes this practice. */
0d5cff50 7278 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 7279 disp = 0;
b1f33ddd
JB
7280 if (v_field_name != NULL
7281 && field_name_match (v_field_name, name))
7282 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7283 else
0963b4bd
MS
7284 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7285 j),
b1f33ddd
JB
7286 name, 0, 1, &disp);
7287
4c4b4cd2
PH
7288 if (t != NULL)
7289 {
7290 if (dispp != NULL)
7291 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7292 return t;
7293 }
7294 }
7295 }
14f9c5c9
AS
7296
7297 }
7298
7299BadName:
d2e4a39e 7300 if (!noerr)
14f9c5c9
AS
7301 {
7302 target_terminal_ours ();
7303 gdb_flush (gdb_stdout);
323e0a4a
AC
7304 if (name == NULL)
7305 {
7306 /* XXX: type_sprint */
7307 fprintf_unfiltered (gdb_stderr, _("Type "));
7308 type_print (type, "", gdb_stderr, -1);
7309 error (_(" has no component named <null>"));
7310 }
7311 else
7312 {
7313 /* XXX: type_sprint */
7314 fprintf_unfiltered (gdb_stderr, _("Type "));
7315 type_print (type, "", gdb_stderr, -1);
7316 error (_(" has no component named %s"), name);
7317 }
14f9c5c9
AS
7318 }
7319
7320 return NULL;
7321}
7322
b1f33ddd
JB
7323/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7324 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7325 represents an unchecked union (that is, the variant part of a
0963b4bd 7326 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7327
7328static int
7329is_unchecked_variant (struct type *var_type, struct type *outer_type)
7330{
7331 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7332
b1f33ddd
JB
7333 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7334 == NULL);
7335}
7336
7337
14f9c5c9
AS
7338/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7339 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7340 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7341 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7342
d2e4a39e 7343int
ebf56fd3 7344ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7345 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7346{
7347 int others_clause;
7348 int i;
d2e4a39e 7349 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7350 struct value *outer;
7351 struct value *discrim;
14f9c5c9
AS
7352 LONGEST discrim_val;
7353
012370f6
TT
7354 /* Using plain value_from_contents_and_address here causes problems
7355 because we will end up trying to resolve a type that is currently
7356 being constructed. */
7357 outer = value_from_contents_and_address_unresolved (outer_type,
7358 outer_valaddr, 0);
0c281816
JB
7359 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7360 if (discrim == NULL)
14f9c5c9 7361 return -1;
0c281816 7362 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7363
7364 others_clause = -1;
7365 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7366 {
7367 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7368 others_clause = i;
14f9c5c9 7369 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7370 return i;
14f9c5c9
AS
7371 }
7372
7373 return others_clause;
7374}
d2e4a39e 7375\f
14f9c5c9
AS
7376
7377
4c4b4cd2 7378 /* Dynamic-Sized Records */
14f9c5c9
AS
7379
7380/* Strategy: The type ostensibly attached to a value with dynamic size
7381 (i.e., a size that is not statically recorded in the debugging
7382 data) does not accurately reflect the size or layout of the value.
7383 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7384 conventional types that are constructed on the fly. */
14f9c5c9
AS
7385
7386/* There is a subtle and tricky problem here. In general, we cannot
7387 determine the size of dynamic records without its data. However,
7388 the 'struct value' data structure, which GDB uses to represent
7389 quantities in the inferior process (the target), requires the size
7390 of the type at the time of its allocation in order to reserve space
7391 for GDB's internal copy of the data. That's why the
7392 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7393 rather than struct value*s.
14f9c5c9
AS
7394
7395 However, GDB's internal history variables ($1, $2, etc.) are
7396 struct value*s containing internal copies of the data that are not, in
7397 general, the same as the data at their corresponding addresses in
7398 the target. Fortunately, the types we give to these values are all
7399 conventional, fixed-size types (as per the strategy described
7400 above), so that we don't usually have to perform the
7401 'to_fixed_xxx_type' conversions to look at their values.
7402 Unfortunately, there is one exception: if one of the internal
7403 history variables is an array whose elements are unconstrained
7404 records, then we will need to create distinct fixed types for each
7405 element selected. */
7406
7407/* The upshot of all of this is that many routines take a (type, host
7408 address, target address) triple as arguments to represent a value.
7409 The host address, if non-null, is supposed to contain an internal
7410 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7411 target at the target address. */
14f9c5c9
AS
7412
7413/* Assuming that VAL0 represents a pointer value, the result of
7414 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7415 dynamic-sized types. */
14f9c5c9 7416
d2e4a39e
AS
7417struct value *
7418ada_value_ind (struct value *val0)
14f9c5c9 7419{
c48db5ca 7420 struct value *val = value_ind (val0);
5b4ee69b 7421
b50d69b5
JG
7422 if (ada_is_tagged_type (value_type (val), 0))
7423 val = ada_tag_value_at_base_address (val);
7424
4c4b4cd2 7425 return ada_to_fixed_value (val);
14f9c5c9
AS
7426}
7427
7428/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7429 qualifiers on VAL0. */
7430
d2e4a39e
AS
7431static struct value *
7432ada_coerce_ref (struct value *val0)
7433{
df407dfe 7434 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7435 {
7436 struct value *val = val0;
5b4ee69b 7437
994b9211 7438 val = coerce_ref (val);
b50d69b5
JG
7439
7440 if (ada_is_tagged_type (value_type (val), 0))
7441 val = ada_tag_value_at_base_address (val);
7442
4c4b4cd2 7443 return ada_to_fixed_value (val);
d2e4a39e
AS
7444 }
7445 else
14f9c5c9
AS
7446 return val0;
7447}
7448
7449/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7450 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7451
7452static unsigned int
ebf56fd3 7453align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7454{
7455 return (off + alignment - 1) & ~(alignment - 1);
7456}
7457
4c4b4cd2 7458/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7459
7460static unsigned int
ebf56fd3 7461field_alignment (struct type *type, int f)
14f9c5c9 7462{
d2e4a39e 7463 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7464 int len;
14f9c5c9
AS
7465 int align_offset;
7466
64a1bf19
JB
7467 /* The field name should never be null, unless the debugging information
7468 is somehow malformed. In this case, we assume the field does not
7469 require any alignment. */
7470 if (name == NULL)
7471 return 1;
7472
7473 len = strlen (name);
7474
4c4b4cd2
PH
7475 if (!isdigit (name[len - 1]))
7476 return 1;
14f9c5c9 7477
d2e4a39e 7478 if (isdigit (name[len - 2]))
14f9c5c9
AS
7479 align_offset = len - 2;
7480 else
7481 align_offset = len - 1;
7482
4c4b4cd2 7483 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
14f9c5c9
AS
7484 return TARGET_CHAR_BIT;
7485
4c4b4cd2
PH
7486 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7487}
7488
852dff6c 7489/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7490
852dff6c
JB
7491static struct symbol *
7492ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7493{
7494 struct symbol *sym;
7495
7496 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7497 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7498 return sym;
7499
4186eb54
KS
7500 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7501 return sym;
14f9c5c9
AS
7502}
7503
dddfab26
UW
7504/* Find a type named NAME. Ignores ambiguity. This routine will look
7505 solely for types defined by debug info, it will not search the GDB
7506 primitive types. */
4c4b4cd2 7507
852dff6c 7508static struct type *
ebf56fd3 7509ada_find_any_type (const char *name)
14f9c5c9 7510{
852dff6c 7511 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7512
14f9c5c9 7513 if (sym != NULL)
dddfab26 7514 return SYMBOL_TYPE (sym);
14f9c5c9 7515
dddfab26 7516 return NULL;
14f9c5c9
AS
7517}
7518
739593e0
JB
7519/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7520 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7521 symbol, in which case it is returned. Otherwise, this looks for
7522 symbols whose name is that of NAME_SYM suffixed with "___XR".
7523 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
7524
7525struct symbol *
270140bd 7526ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 7527{
739593e0 7528 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
7529 struct symbol *sym;
7530
739593e0
JB
7531 if (strstr (name, "___XR") != NULL)
7532 return name_sym;
7533
aeb5907d
JB
7534 sym = find_old_style_renaming_symbol (name, block);
7535
7536 if (sym != NULL)
7537 return sym;
7538
0963b4bd 7539 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 7540 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
7541 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7542 return sym;
7543 else
7544 return NULL;
7545}
7546
7547static struct symbol *
270140bd 7548find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 7549{
7f0df278 7550 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
7551 char *rename;
7552
7553 if (function_sym != NULL)
7554 {
7555 /* If the symbol is defined inside a function, NAME is not fully
7556 qualified. This means we need to prepend the function name
7557 as well as adding the ``___XR'' suffix to build the name of
7558 the associated renaming symbol. */
0d5cff50 7559 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
7560 /* Function names sometimes contain suffixes used
7561 for instance to qualify nested subprograms. When building
7562 the XR type name, we need to make sure that this suffix is
7563 not included. So do not include any suffix in the function
7564 name length below. */
69fadcdf 7565 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
7566 const int rename_len = function_name_len + 2 /* "__" */
7567 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 7568
529cad9c 7569 /* Strip the suffix if necessary. */
69fadcdf
JB
7570 ada_remove_trailing_digits (function_name, &function_name_len);
7571 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7572 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 7573
4c4b4cd2
PH
7574 /* Library-level functions are a special case, as GNAT adds
7575 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 7576 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
7577 have this prefix, so we need to skip this prefix if present. */
7578 if (function_name_len > 5 /* "_ada_" */
7579 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
7580 {
7581 function_name += 5;
7582 function_name_len -= 5;
7583 }
4c4b4cd2
PH
7584
7585 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
7586 strncpy (rename, function_name, function_name_len);
7587 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7588 "__%s___XR", name);
4c4b4cd2
PH
7589 }
7590 else
7591 {
7592 const int rename_len = strlen (name) + 6;
5b4ee69b 7593
4c4b4cd2 7594 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 7595 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
7596 }
7597
852dff6c 7598 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
7599}
7600
14f9c5c9 7601/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7602 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7603 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7604 otherwise return 0. */
7605
14f9c5c9 7606int
d2e4a39e 7607ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7608{
7609 if (type1 == NULL)
7610 return 1;
7611 else if (type0 == NULL)
7612 return 0;
7613 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7614 return 1;
7615 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7616 return 0;
4c4b4cd2
PH
7617 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7618 return 1;
ad82864c 7619 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7620 return 1;
4c4b4cd2
PH
7621 else if (ada_is_array_descriptor_type (type0)
7622 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7623 return 1;
aeb5907d
JB
7624 else
7625 {
7626 const char *type0_name = type_name_no_tag (type0);
7627 const char *type1_name = type_name_no_tag (type1);
7628
7629 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7630 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7631 return 1;
7632 }
14f9c5c9
AS
7633 return 0;
7634}
7635
7636/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
7637 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7638
0d5cff50 7639const char *
d2e4a39e 7640ada_type_name (struct type *type)
14f9c5c9 7641{
d2e4a39e 7642 if (type == NULL)
14f9c5c9
AS
7643 return NULL;
7644 else if (TYPE_NAME (type) != NULL)
7645 return TYPE_NAME (type);
7646 else
7647 return TYPE_TAG_NAME (type);
7648}
7649
b4ba55a1
JB
7650/* Search the list of "descriptive" types associated to TYPE for a type
7651 whose name is NAME. */
7652
7653static struct type *
7654find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7655{
7656 struct type *result;
7657
c6044dd1
JB
7658 if (ada_ignore_descriptive_types_p)
7659 return NULL;
7660
b4ba55a1
JB
7661 /* If there no descriptive-type info, then there is no parallel type
7662 to be found. */
7663 if (!HAVE_GNAT_AUX_INFO (type))
7664 return NULL;
7665
7666 result = TYPE_DESCRIPTIVE_TYPE (type);
7667 while (result != NULL)
7668 {
0d5cff50 7669 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7670
7671 if (result_name == NULL)
7672 {
7673 warning (_("unexpected null name on descriptive type"));
7674 return NULL;
7675 }
7676
7677 /* If the names match, stop. */
7678 if (strcmp (result_name, name) == 0)
7679 break;
7680
7681 /* Otherwise, look at the next item on the list, if any. */
7682 if (HAVE_GNAT_AUX_INFO (result))
7683 result = TYPE_DESCRIPTIVE_TYPE (result);
7684 else
7685 result = NULL;
7686 }
7687
7688 /* If we didn't find a match, see whether this is a packed array. With
7689 older compilers, the descriptive type information is either absent or
7690 irrelevant when it comes to packed arrays so the above lookup fails.
7691 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7692 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7693 return ada_find_any_type (name);
7694
7695 return result;
7696}
7697
7698/* Find a parallel type to TYPE with the specified NAME, using the
7699 descriptive type taken from the debugging information, if available,
7700 and otherwise using the (slower) name-based method. */
7701
7702static struct type *
7703ada_find_parallel_type_with_name (struct type *type, const char *name)
7704{
7705 struct type *result = NULL;
7706
7707 if (HAVE_GNAT_AUX_INFO (type))
7708 result = find_parallel_type_by_descriptive_type (type, name);
7709 else
7710 result = ada_find_any_type (name);
7711
7712 return result;
7713}
7714
7715/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7716 SUFFIX to the name of TYPE. */
14f9c5c9 7717
d2e4a39e 7718struct type *
ebf56fd3 7719ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7720{
0d5cff50
DE
7721 char *name;
7722 const char *typename = ada_type_name (type);
14f9c5c9 7723 int len;
d2e4a39e 7724
14f9c5c9
AS
7725 if (typename == NULL)
7726 return NULL;
7727
7728 len = strlen (typename);
7729
b4ba55a1 7730 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9
AS
7731
7732 strcpy (name, typename);
7733 strcpy (name + len, suffix);
7734
b4ba55a1 7735 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7736}
7737
14f9c5c9 7738/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7739 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7740
d2e4a39e
AS
7741static struct type *
7742dynamic_template_type (struct type *type)
14f9c5c9 7743{
61ee279c 7744 type = ada_check_typedef (type);
14f9c5c9
AS
7745
7746 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 7747 || ada_type_name (type) == NULL)
14f9c5c9 7748 return NULL;
d2e4a39e 7749 else
14f9c5c9
AS
7750 {
7751 int len = strlen (ada_type_name (type));
5b4ee69b 7752
4c4b4cd2
PH
7753 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7754 return type;
14f9c5c9 7755 else
4c4b4cd2 7756 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7757 }
7758}
7759
7760/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7761 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7762
d2e4a39e
AS
7763static int
7764is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7765{
7766 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7767
d2e4a39e 7768 return name != NULL
14f9c5c9
AS
7769 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7770 && strstr (name, "___XVL") != NULL;
7771}
7772
4c4b4cd2
PH
7773/* The index of the variant field of TYPE, or -1 if TYPE does not
7774 represent a variant record type. */
14f9c5c9 7775
d2e4a39e 7776static int
4c4b4cd2 7777variant_field_index (struct type *type)
14f9c5c9
AS
7778{
7779 int f;
7780
4c4b4cd2
PH
7781 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7782 return -1;
7783
7784 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7785 {
7786 if (ada_is_variant_part (type, f))
7787 return f;
7788 }
7789 return -1;
14f9c5c9
AS
7790}
7791
4c4b4cd2
PH
7792/* A record type with no fields. */
7793
d2e4a39e 7794static struct type *
e9bb382b 7795empty_record (struct type *template)
14f9c5c9 7796{
e9bb382b 7797 struct type *type = alloc_type_copy (template);
5b4ee69b 7798
14f9c5c9
AS
7799 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7800 TYPE_NFIELDS (type) = 0;
7801 TYPE_FIELDS (type) = NULL;
b1f33ddd 7802 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
7803 TYPE_NAME (type) = "<empty>";
7804 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
7805 TYPE_LENGTH (type) = 0;
7806 return type;
7807}
7808
7809/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7810 the value of type TYPE at VALADDR or ADDRESS (see comments at
7811 the beginning of this section) VAL according to GNAT conventions.
7812 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7813 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7814 an outer-level type (i.e., as opposed to a branch of a variant.) A
7815 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7816 of the variant.
14f9c5c9 7817
4c4b4cd2
PH
7818 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7819 length are not statically known are discarded. As a consequence,
7820 VALADDR, ADDRESS and DVAL0 are ignored.
7821
7822 NOTE: Limitations: For now, we assume that dynamic fields and
7823 variants occupy whole numbers of bytes. However, they need not be
7824 byte-aligned. */
7825
7826struct type *
10a2c479 7827ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7828 const gdb_byte *valaddr,
4c4b4cd2
PH
7829 CORE_ADDR address, struct value *dval0,
7830 int keep_dynamic_fields)
14f9c5c9 7831{
d2e4a39e
AS
7832 struct value *mark = value_mark ();
7833 struct value *dval;
7834 struct type *rtype;
14f9c5c9 7835 int nfields, bit_len;
4c4b4cd2 7836 int variant_field;
14f9c5c9 7837 long off;
d94e4f4f 7838 int fld_bit_len;
14f9c5c9
AS
7839 int f;
7840
4c4b4cd2
PH
7841 /* Compute the number of fields in this record type that are going
7842 to be processed: unless keep_dynamic_fields, this includes only
7843 fields whose position and length are static will be processed. */
7844 if (keep_dynamic_fields)
7845 nfields = TYPE_NFIELDS (type);
7846 else
7847 {
7848 nfields = 0;
76a01679 7849 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
7850 && !ada_is_variant_part (type, nfields)
7851 && !is_dynamic_field (type, nfields))
7852 nfields++;
7853 }
7854
e9bb382b 7855 rtype = alloc_type_copy (type);
14f9c5c9
AS
7856 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7857 INIT_CPLUS_SPECIFIC (rtype);
7858 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 7859 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
7860 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7861 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7862 TYPE_NAME (rtype) = ada_type_name (type);
7863 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7864 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 7865
d2e4a39e
AS
7866 off = 0;
7867 bit_len = 0;
4c4b4cd2
PH
7868 variant_field = -1;
7869
14f9c5c9
AS
7870 for (f = 0; f < nfields; f += 1)
7871 {
6c038f32
PH
7872 off = align_value (off, field_alignment (type, f))
7873 + TYPE_FIELD_BITPOS (type, f);
945b3a32 7874 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 7875 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7876
d2e4a39e 7877 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
7878 {
7879 variant_field = f;
d94e4f4f 7880 fld_bit_len = 0;
4c4b4cd2 7881 }
14f9c5c9 7882 else if (is_dynamic_field (type, f))
4c4b4cd2 7883 {
284614f0
JB
7884 const gdb_byte *field_valaddr = valaddr;
7885 CORE_ADDR field_address = address;
7886 struct type *field_type =
7887 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7888
4c4b4cd2 7889 if (dval0 == NULL)
b5304971
JG
7890 {
7891 /* rtype's length is computed based on the run-time
7892 value of discriminants. If the discriminants are not
7893 initialized, the type size may be completely bogus and
0963b4bd 7894 GDB may fail to allocate a value for it. So check the
b5304971
JG
7895 size first before creating the value. */
7896 check_size (rtype);
012370f6
TT
7897 /* Using plain value_from_contents_and_address here
7898 causes problems because we will end up trying to
7899 resolve a type that is currently being
7900 constructed. */
7901 dval = value_from_contents_and_address_unresolved (rtype,
7902 valaddr,
7903 address);
9f1f738a 7904 rtype = value_type (dval);
b5304971 7905 }
4c4b4cd2
PH
7906 else
7907 dval = dval0;
7908
284614f0
JB
7909 /* If the type referenced by this field is an aligner type, we need
7910 to unwrap that aligner type, because its size might not be set.
7911 Keeping the aligner type would cause us to compute the wrong
7912 size for this field, impacting the offset of the all the fields
7913 that follow this one. */
7914 if (ada_is_aligner_type (field_type))
7915 {
7916 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7917
7918 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7919 field_address = cond_offset_target (field_address, field_offset);
7920 field_type = ada_aligned_type (field_type);
7921 }
7922
7923 field_valaddr = cond_offset_host (field_valaddr,
7924 off / TARGET_CHAR_BIT);
7925 field_address = cond_offset_target (field_address,
7926 off / TARGET_CHAR_BIT);
7927
7928 /* Get the fixed type of the field. Note that, in this case,
7929 we do not want to get the real type out of the tag: if
7930 the current field is the parent part of a tagged record,
7931 we will get the tag of the object. Clearly wrong: the real
7932 type of the parent is not the real type of the child. We
7933 would end up in an infinite loop. */
7934 field_type = ada_get_base_type (field_type);
7935 field_type = ada_to_fixed_type (field_type, field_valaddr,
7936 field_address, dval, 0);
27f2a97b
JB
7937 /* If the field size is already larger than the maximum
7938 object size, then the record itself will necessarily
7939 be larger than the maximum object size. We need to make
7940 this check now, because the size might be so ridiculously
7941 large (due to an uninitialized variable in the inferior)
7942 that it would cause an overflow when adding it to the
7943 record size. */
7944 check_size (field_type);
284614f0
JB
7945
7946 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 7947 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
7948 /* The multiplication can potentially overflow. But because
7949 the field length has been size-checked just above, and
7950 assuming that the maximum size is a reasonable value,
7951 an overflow should not happen in practice. So rather than
7952 adding overflow recovery code to this already complex code,
7953 we just assume that it's not going to happen. */
d94e4f4f 7954 fld_bit_len =
4c4b4cd2
PH
7955 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7956 }
14f9c5c9 7957 else
4c4b4cd2 7958 {
5ded5331
JB
7959 /* Note: If this field's type is a typedef, it is important
7960 to preserve the typedef layer.
7961
7962 Otherwise, we might be transforming a typedef to a fat
7963 pointer (encoding a pointer to an unconstrained array),
7964 into a basic fat pointer (encoding an unconstrained
7965 array). As both types are implemented using the same
7966 structure, the typedef is the only clue which allows us
7967 to distinguish between the two options. Stripping it
7968 would prevent us from printing this field appropriately. */
7969 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
7970 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7971 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 7972 fld_bit_len =
4c4b4cd2
PH
7973 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7974 else
5ded5331
JB
7975 {
7976 struct type *field_type = TYPE_FIELD_TYPE (type, f);
7977
7978 /* We need to be careful of typedefs when computing
7979 the length of our field. If this is a typedef,
7980 get the length of the target type, not the length
7981 of the typedef. */
7982 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7983 field_type = ada_typedef_target_type (field_type);
7984
7985 fld_bit_len =
7986 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7987 }
4c4b4cd2 7988 }
14f9c5c9 7989 if (off + fld_bit_len > bit_len)
4c4b4cd2 7990 bit_len = off + fld_bit_len;
d94e4f4f 7991 off += fld_bit_len;
4c4b4cd2
PH
7992 TYPE_LENGTH (rtype) =
7993 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7994 }
4c4b4cd2
PH
7995
7996 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7997 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7998 the record. This can happen in the presence of representation
7999 clauses. */
8000 if (variant_field >= 0)
8001 {
8002 struct type *branch_type;
8003
8004 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8005
8006 if (dval0 == NULL)
9f1f738a 8007 {
012370f6
TT
8008 /* Using plain value_from_contents_and_address here causes
8009 problems because we will end up trying to resolve a type
8010 that is currently being constructed. */
8011 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8012 address);
9f1f738a
SA
8013 rtype = value_type (dval);
8014 }
4c4b4cd2
PH
8015 else
8016 dval = dval0;
8017
8018 branch_type =
8019 to_fixed_variant_branch_type
8020 (TYPE_FIELD_TYPE (type, variant_field),
8021 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8022 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8023 if (branch_type == NULL)
8024 {
8025 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
8026 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
8027 TYPE_NFIELDS (rtype) -= 1;
8028 }
8029 else
8030 {
8031 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8032 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8033 fld_bit_len =
8034 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8035 TARGET_CHAR_BIT;
8036 if (off + fld_bit_len > bit_len)
8037 bit_len = off + fld_bit_len;
8038 TYPE_LENGTH (rtype) =
8039 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
8040 }
8041 }
8042
714e53ab
PH
8043 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8044 should contain the alignment of that record, which should be a strictly
8045 positive value. If null or negative, then something is wrong, most
8046 probably in the debug info. In that case, we don't round up the size
0963b4bd 8047 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8048 the current RTYPE length might be good enough for our purposes. */
8049 if (TYPE_LENGTH (type) <= 0)
8050 {
323e0a4a
AC
8051 if (TYPE_NAME (rtype))
8052 warning (_("Invalid type size for `%s' detected: %d."),
8053 TYPE_NAME (rtype), TYPE_LENGTH (type));
8054 else
8055 warning (_("Invalid type size for <unnamed> detected: %d."),
8056 TYPE_LENGTH (type));
714e53ab
PH
8057 }
8058 else
8059 {
8060 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
8061 TYPE_LENGTH (type));
8062 }
14f9c5c9
AS
8063
8064 value_free_to_mark (mark);
d2e4a39e 8065 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8066 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8067 return rtype;
8068}
8069
4c4b4cd2
PH
8070/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8071 of 1. */
14f9c5c9 8072
d2e4a39e 8073static struct type *
fc1a4b47 8074template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8075 CORE_ADDR address, struct value *dval0)
8076{
8077 return ada_template_to_fixed_record_type_1 (type, valaddr,
8078 address, dval0, 1);
8079}
8080
8081/* An ordinary record type in which ___XVL-convention fields and
8082 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8083 static approximations, containing all possible fields. Uses
8084 no runtime values. Useless for use in values, but that's OK,
8085 since the results are used only for type determinations. Works on both
8086 structs and unions. Representation note: to save space, we memorize
8087 the result of this function in the TYPE_TARGET_TYPE of the
8088 template type. */
8089
8090static struct type *
8091template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8092{
8093 struct type *type;
8094 int nfields;
8095 int f;
8096
4c4b4cd2
PH
8097 if (TYPE_TARGET_TYPE (type0) != NULL)
8098 return TYPE_TARGET_TYPE (type0);
8099
8100 nfields = TYPE_NFIELDS (type0);
8101 type = type0;
14f9c5c9
AS
8102
8103 for (f = 0; f < nfields; f += 1)
8104 {
61ee279c 8105 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
4c4b4cd2 8106 struct type *new_type;
14f9c5c9 8107
4c4b4cd2
PH
8108 if (is_dynamic_field (type0, f))
8109 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
14f9c5c9 8110 else
f192137b 8111 new_type = static_unwrap_type (field_type);
4c4b4cd2
PH
8112 if (type == type0 && new_type != field_type)
8113 {
e9bb382b 8114 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
4c4b4cd2
PH
8115 TYPE_CODE (type) = TYPE_CODE (type0);
8116 INIT_CPLUS_SPECIFIC (type);
8117 TYPE_NFIELDS (type) = nfields;
8118 TYPE_FIELDS (type) = (struct field *)
8119 TYPE_ALLOC (type, nfields * sizeof (struct field));
8120 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
8121 sizeof (struct field) * nfields);
8122 TYPE_NAME (type) = ada_type_name (type0);
8123 TYPE_TAG_NAME (type) = NULL;
876cecd0 8124 TYPE_FIXED_INSTANCE (type) = 1;
4c4b4cd2
PH
8125 TYPE_LENGTH (type) = 0;
8126 }
8127 TYPE_FIELD_TYPE (type, f) = new_type;
8128 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
14f9c5c9 8129 }
14f9c5c9
AS
8130 return type;
8131}
8132
4c4b4cd2 8133/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8134 whose address in memory is ADDRESS, returns a revision of TYPE,
8135 which should be a non-dynamic-sized record, in which the variant
8136 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8137 for discriminant values in DVAL0, which can be NULL if the record
8138 contains the necessary discriminant values. */
8139
d2e4a39e 8140static struct type *
fc1a4b47 8141to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8142 CORE_ADDR address, struct value *dval0)
14f9c5c9 8143{
d2e4a39e 8144 struct value *mark = value_mark ();
4c4b4cd2 8145 struct value *dval;
d2e4a39e 8146 struct type *rtype;
14f9c5c9
AS
8147 struct type *branch_type;
8148 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 8149 int variant_field = variant_field_index (type);
14f9c5c9 8150
4c4b4cd2 8151 if (variant_field == -1)
14f9c5c9
AS
8152 return type;
8153
4c4b4cd2 8154 if (dval0 == NULL)
9f1f738a
SA
8155 {
8156 dval = value_from_contents_and_address (type, valaddr, address);
8157 type = value_type (dval);
8158 }
4c4b4cd2
PH
8159 else
8160 dval = dval0;
8161
e9bb382b 8162 rtype = alloc_type_copy (type);
14f9c5c9 8163 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
8164 INIT_CPLUS_SPECIFIC (rtype);
8165 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
8166 TYPE_FIELDS (rtype) =
8167 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
8168 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 8169 sizeof (struct field) * nfields);
14f9c5c9
AS
8170 TYPE_NAME (rtype) = ada_type_name (type);
8171 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 8172 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8173 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8174
4c4b4cd2
PH
8175 branch_type = to_fixed_variant_branch_type
8176 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8177 cond_offset_host (valaddr,
4c4b4cd2
PH
8178 TYPE_FIELD_BITPOS (type, variant_field)
8179 / TARGET_CHAR_BIT),
d2e4a39e 8180 cond_offset_target (address,
4c4b4cd2
PH
8181 TYPE_FIELD_BITPOS (type, variant_field)
8182 / TARGET_CHAR_BIT), dval);
d2e4a39e 8183 if (branch_type == NULL)
14f9c5c9 8184 {
4c4b4cd2 8185 int f;
5b4ee69b 8186
4c4b4cd2
PH
8187 for (f = variant_field + 1; f < nfields; f += 1)
8188 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 8189 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
8190 }
8191 else
8192 {
4c4b4cd2
PH
8193 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8194 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8195 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8196 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8197 }
4c4b4cd2 8198 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8199
4c4b4cd2 8200 value_free_to_mark (mark);
14f9c5c9
AS
8201 return rtype;
8202}
8203
8204/* An ordinary record type (with fixed-length fields) that describes
8205 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8206 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8207 should be in DVAL, a record value; it may be NULL if the object
8208 at ADDR itself contains any necessary discriminant values.
8209 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8210 values from the record are needed. Except in the case that DVAL,
8211 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8212 unchecked) is replaced by a particular branch of the variant.
8213
8214 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8215 is questionable and may be removed. It can arise during the
8216 processing of an unconstrained-array-of-record type where all the
8217 variant branches have exactly the same size. This is because in
8218 such cases, the compiler does not bother to use the XVS convention
8219 when encoding the record. I am currently dubious of this
8220 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8221
d2e4a39e 8222static struct type *
fc1a4b47 8223to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8224 CORE_ADDR address, struct value *dval)
14f9c5c9 8225{
d2e4a39e 8226 struct type *templ_type;
14f9c5c9 8227
876cecd0 8228 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8229 return type0;
8230
d2e4a39e 8231 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8232
8233 if (templ_type != NULL)
8234 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8235 else if (variant_field_index (type0) >= 0)
8236 {
8237 if (dval == NULL && valaddr == NULL && address == 0)
8238 return type0;
8239 return to_record_with_fixed_variant_part (type0, valaddr, address,
8240 dval);
8241 }
14f9c5c9
AS
8242 else
8243 {
876cecd0 8244 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8245 return type0;
8246 }
8247
8248}
8249
8250/* An ordinary record type (with fixed-length fields) that describes
8251 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8252 union type. Any necessary discriminants' values should be in DVAL,
8253 a record value. That is, this routine selects the appropriate
8254 branch of the union at ADDR according to the discriminant value
b1f33ddd 8255 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8256 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8257
d2e4a39e 8258static struct type *
fc1a4b47 8259to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8260 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8261{
8262 int which;
d2e4a39e
AS
8263 struct type *templ_type;
8264 struct type *var_type;
14f9c5c9
AS
8265
8266 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8267 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8268 else
14f9c5c9
AS
8269 var_type = var_type0;
8270
8271 templ_type = ada_find_parallel_type (var_type, "___XVU");
8272
8273 if (templ_type != NULL)
8274 var_type = templ_type;
8275
b1f33ddd
JB
8276 if (is_unchecked_variant (var_type, value_type (dval)))
8277 return var_type0;
d2e4a39e
AS
8278 which =
8279 ada_which_variant_applies (var_type,
0fd88904 8280 value_type (dval), value_contents (dval));
14f9c5c9
AS
8281
8282 if (which < 0)
e9bb382b 8283 return empty_record (var_type);
14f9c5c9 8284 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8285 return to_fixed_record_type
d2e4a39e
AS
8286 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8287 valaddr, address, dval);
4c4b4cd2 8288 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8289 return
8290 to_fixed_record_type
8291 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8292 else
8293 return TYPE_FIELD_TYPE (var_type, which);
8294}
8295
8296/* Assuming that TYPE0 is an array type describing the type of a value
8297 at ADDR, and that DVAL describes a record containing any
8298 discriminants used in TYPE0, returns a type for the value that
8299 contains no dynamic components (that is, no components whose sizes
8300 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8301 true, gives an error message if the resulting type's size is over
4c4b4cd2 8302 varsize_limit. */
14f9c5c9 8303
d2e4a39e
AS
8304static struct type *
8305to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8306 int ignore_too_big)
14f9c5c9 8307{
d2e4a39e
AS
8308 struct type *index_type_desc;
8309 struct type *result;
ad82864c 8310 int constrained_packed_array_p;
14f9c5c9 8311
b0dd7688 8312 type0 = ada_check_typedef (type0);
284614f0 8313 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8314 return type0;
14f9c5c9 8315
ad82864c
JB
8316 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8317 if (constrained_packed_array_p)
8318 type0 = decode_constrained_packed_array_type (type0);
284614f0 8319
14f9c5c9 8320 index_type_desc = ada_find_parallel_type (type0, "___XA");
28c85d6c 8321 ada_fixup_array_indexes_type (index_type_desc);
14f9c5c9
AS
8322 if (index_type_desc == NULL)
8323 {
61ee279c 8324 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8325
14f9c5c9 8326 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8327 depend on the contents of the array in properly constructed
8328 debugging data. */
529cad9c
PH
8329 /* Create a fixed version of the array element type.
8330 We're not providing the address of an element here,
e1d5a0d2 8331 and thus the actual object value cannot be inspected to do
529cad9c
PH
8332 the conversion. This should not be a problem, since arrays of
8333 unconstrained objects are not allowed. In particular, all
8334 the elements of an array of a tagged type should all be of
8335 the same type specified in the debugging info. No need to
8336 consult the object tag. */
1ed6ede0 8337 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8338
284614f0
JB
8339 /* Make sure we always create a new array type when dealing with
8340 packed array types, since we're going to fix-up the array
8341 type length and element bitsize a little further down. */
ad82864c 8342 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8343 result = type0;
14f9c5c9 8344 else
e9bb382b 8345 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8346 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8347 }
8348 else
8349 {
8350 int i;
8351 struct type *elt_type0;
8352
8353 elt_type0 = type0;
8354 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8355 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8356
8357 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8358 depend on the contents of the array in properly constructed
8359 debugging data. */
529cad9c
PH
8360 /* Create a fixed version of the array element type.
8361 We're not providing the address of an element here,
e1d5a0d2 8362 and thus the actual object value cannot be inspected to do
529cad9c
PH
8363 the conversion. This should not be a problem, since arrays of
8364 unconstrained objects are not allowed. In particular, all
8365 the elements of an array of a tagged type should all be of
8366 the same type specified in the debugging info. No need to
8367 consult the object tag. */
1ed6ede0
JB
8368 result =
8369 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8370
8371 elt_type0 = type0;
14f9c5c9 8372 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8373 {
8374 struct type *range_type =
28c85d6c 8375 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8376
e9bb382b 8377 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8378 result, range_type);
1ce677a4 8379 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8380 }
d2e4a39e 8381 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8382 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8383 }
8384
2e6fda7d
JB
8385 /* We want to preserve the type name. This can be useful when
8386 trying to get the type name of a value that has already been
8387 printed (for instance, if the user did "print VAR; whatis $". */
8388 TYPE_NAME (result) = TYPE_NAME (type0);
8389
ad82864c 8390 if (constrained_packed_array_p)
284614f0
JB
8391 {
8392 /* So far, the resulting type has been created as if the original
8393 type was a regular (non-packed) array type. As a result, the
8394 bitsize of the array elements needs to be set again, and the array
8395 length needs to be recomputed based on that bitsize. */
8396 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8397 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8398
8399 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8400 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8401 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8402 TYPE_LENGTH (result)++;
8403 }
8404
876cecd0 8405 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 8406 return result;
d2e4a39e 8407}
14f9c5c9
AS
8408
8409
8410/* A standard type (containing no dynamically sized components)
8411 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8412 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8413 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8414 ADDRESS or in VALADDR contains these discriminants.
8415
1ed6ede0
JB
8416 If CHECK_TAG is not null, in the case of tagged types, this function
8417 attempts to locate the object's tag and use it to compute the actual
8418 type. However, when ADDRESS is null, we cannot use it to determine the
8419 location of the tag, and therefore compute the tagged type's actual type.
8420 So we return the tagged type without consulting the tag. */
529cad9c 8421
f192137b
JB
8422static struct type *
8423ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 8424 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8425{
61ee279c 8426 type = ada_check_typedef (type);
d2e4a39e
AS
8427 switch (TYPE_CODE (type))
8428 {
8429 default:
14f9c5c9 8430 return type;
d2e4a39e 8431 case TYPE_CODE_STRUCT:
4c4b4cd2 8432 {
76a01679 8433 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
8434 struct type *fixed_record_type =
8435 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 8436
529cad9c
PH
8437 /* If STATIC_TYPE is a tagged type and we know the object's address,
8438 then we can determine its tag, and compute the object's actual
0963b4bd 8439 type from there. Note that we have to use the fixed record
1ed6ede0
JB
8440 type (the parent part of the record may have dynamic fields
8441 and the way the location of _tag is expressed may depend on
8442 them). */
529cad9c 8443
1ed6ede0 8444 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 8445 {
b50d69b5
JG
8446 struct value *tag =
8447 value_tag_from_contents_and_address
8448 (fixed_record_type,
8449 valaddr,
8450 address);
8451 struct type *real_type = type_from_tag (tag);
8452 struct value *obj =
8453 value_from_contents_and_address (fixed_record_type,
8454 valaddr,
8455 address);
9f1f738a 8456 fixed_record_type = value_type (obj);
76a01679 8457 if (real_type != NULL)
b50d69b5
JG
8458 return to_fixed_record_type
8459 (real_type, NULL,
8460 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 8461 }
4af88198
JB
8462
8463 /* Check to see if there is a parallel ___XVZ variable.
8464 If there is, then it provides the actual size of our type. */
8465 else if (ada_type_name (fixed_record_type) != NULL)
8466 {
0d5cff50 8467 const char *name = ada_type_name (fixed_record_type);
4af88198
JB
8468 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8469 int xvz_found = 0;
8470 LONGEST size;
8471
88c15c34 8472 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
8473 size = get_int_var_value (xvz_name, &xvz_found);
8474 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8475 {
8476 fixed_record_type = copy_type (fixed_record_type);
8477 TYPE_LENGTH (fixed_record_type) = size;
8478
8479 /* The FIXED_RECORD_TYPE may have be a stub. We have
8480 observed this when the debugging info is STABS, and
8481 apparently it is something that is hard to fix.
8482
8483 In practice, we don't need the actual type definition
8484 at all, because the presence of the XVZ variable allows us
8485 to assume that there must be a XVS type as well, which we
8486 should be able to use later, when we need the actual type
8487 definition.
8488
8489 In the meantime, pretend that the "fixed" type we are
8490 returning is NOT a stub, because this can cause trouble
8491 when using this type to create new types targeting it.
8492 Indeed, the associated creation routines often check
8493 whether the target type is a stub and will try to replace
0963b4bd 8494 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
8495 might cause the new type to have the wrong size too.
8496 Consider the case of an array, for instance, where the size
8497 of the array is computed from the number of elements in
8498 our array multiplied by the size of its element. */
8499 TYPE_STUB (fixed_record_type) = 0;
8500 }
8501 }
1ed6ede0 8502 return fixed_record_type;
4c4b4cd2 8503 }
d2e4a39e 8504 case TYPE_CODE_ARRAY:
4c4b4cd2 8505 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8506 case TYPE_CODE_UNION:
8507 if (dval == NULL)
4c4b4cd2 8508 return type;
d2e4a39e 8509 else
4c4b4cd2 8510 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8511 }
14f9c5c9
AS
8512}
8513
f192137b
JB
8514/* The same as ada_to_fixed_type_1, except that it preserves the type
8515 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8516
8517 The typedef layer needs be preserved in order to differentiate between
8518 arrays and array pointers when both types are implemented using the same
8519 fat pointer. In the array pointer case, the pointer is encoded as
8520 a typedef of the pointer type. For instance, considering:
8521
8522 type String_Access is access String;
8523 S1 : String_Access := null;
8524
8525 To the debugger, S1 is defined as a typedef of type String. But
8526 to the user, it is a pointer. So if the user tries to print S1,
8527 we should not dereference the array, but print the array address
8528 instead.
8529
8530 If we didn't preserve the typedef layer, we would lose the fact that
8531 the type is to be presented as a pointer (needs de-reference before
8532 being printed). And we would also use the source-level type name. */
f192137b
JB
8533
8534struct type *
8535ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8536 CORE_ADDR address, struct value *dval, int check_tag)
8537
8538{
8539 struct type *fixed_type =
8540 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8541
96dbd2c1
JB
8542 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8543 then preserve the typedef layer.
8544
8545 Implementation note: We can only check the main-type portion of
8546 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8547 from TYPE now returns a type that has the same instance flags
8548 as TYPE. For instance, if TYPE is a "typedef const", and its
8549 target type is a "struct", then the typedef elimination will return
8550 a "const" version of the target type. See check_typedef for more
8551 details about how the typedef layer elimination is done.
8552
8553 brobecker/2010-11-19: It seems to me that the only case where it is
8554 useful to preserve the typedef layer is when dealing with fat pointers.
8555 Perhaps, we could add a check for that and preserve the typedef layer
8556 only in that situation. But this seems unecessary so far, probably
8557 because we call check_typedef/ada_check_typedef pretty much everywhere.
8558 */
f192137b 8559 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 8560 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8561 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8562 return type;
8563
8564 return fixed_type;
8565}
8566
14f9c5c9 8567/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8568 TYPE0, but based on no runtime data. */
14f9c5c9 8569
d2e4a39e
AS
8570static struct type *
8571to_static_fixed_type (struct type *type0)
14f9c5c9 8572{
d2e4a39e 8573 struct type *type;
14f9c5c9
AS
8574
8575 if (type0 == NULL)
8576 return NULL;
8577
876cecd0 8578 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8579 return type0;
8580
61ee279c 8581 type0 = ada_check_typedef (type0);
d2e4a39e 8582
14f9c5c9
AS
8583 switch (TYPE_CODE (type0))
8584 {
8585 default:
8586 return type0;
8587 case TYPE_CODE_STRUCT:
8588 type = dynamic_template_type (type0);
d2e4a39e 8589 if (type != NULL)
4c4b4cd2
PH
8590 return template_to_static_fixed_type (type);
8591 else
8592 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8593 case TYPE_CODE_UNION:
8594 type = ada_find_parallel_type (type0, "___XVU");
8595 if (type != NULL)
4c4b4cd2
PH
8596 return template_to_static_fixed_type (type);
8597 else
8598 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8599 }
8600}
8601
4c4b4cd2
PH
8602/* A static approximation of TYPE with all type wrappers removed. */
8603
d2e4a39e
AS
8604static struct type *
8605static_unwrap_type (struct type *type)
14f9c5c9
AS
8606{
8607 if (ada_is_aligner_type (type))
8608 {
61ee279c 8609 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 8610 if (ada_type_name (type1) == NULL)
4c4b4cd2 8611 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
8612
8613 return static_unwrap_type (type1);
8614 }
d2e4a39e 8615 else
14f9c5c9 8616 {
d2e4a39e 8617 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8618
d2e4a39e 8619 if (raw_real_type == type)
4c4b4cd2 8620 return type;
14f9c5c9 8621 else
4c4b4cd2 8622 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8623 }
8624}
8625
8626/* In some cases, incomplete and private types require
4c4b4cd2 8627 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8628 type Foo;
8629 type FooP is access Foo;
8630 V: FooP;
8631 type Foo is array ...;
4c4b4cd2 8632 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8633 cross-references to such types, we instead substitute for FooP a
8634 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8635 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8636
8637/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8638 exists, otherwise TYPE. */
8639
d2e4a39e 8640struct type *
61ee279c 8641ada_check_typedef (struct type *type)
14f9c5c9 8642{
727e3d2e
JB
8643 if (type == NULL)
8644 return NULL;
8645
720d1a40
JB
8646 /* If our type is a typedef type of a fat pointer, then we're done.
8647 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8648 what allows us to distinguish between fat pointers that represent
8649 array types, and fat pointers that represent array access types
8650 (in both cases, the compiler implements them as fat pointers). */
8651 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8652 && is_thick_pntr (ada_typedef_target_type (type)))
8653 return type;
8654
14f9c5c9
AS
8655 CHECK_TYPEDEF (type);
8656 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 8657 || !TYPE_STUB (type)
14f9c5c9
AS
8658 || TYPE_TAG_NAME (type) == NULL)
8659 return type;
d2e4a39e 8660 else
14f9c5c9 8661 {
0d5cff50 8662 const char *name = TYPE_TAG_NAME (type);
d2e4a39e 8663 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8664
05e522ef
JB
8665 if (type1 == NULL)
8666 return type;
8667
8668 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8669 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8670 types, only for the typedef-to-array types). If that's the case,
8671 strip the typedef layer. */
8672 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8673 type1 = ada_check_typedef (type1);
8674
8675 return type1;
14f9c5c9
AS
8676 }
8677}
8678
8679/* A value representing the data at VALADDR/ADDRESS as described by
8680 type TYPE0, but with a standard (static-sized) type that correctly
8681 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8682 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8683 creation of struct values]. */
14f9c5c9 8684
4c4b4cd2
PH
8685static struct value *
8686ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8687 struct value *val0)
14f9c5c9 8688{
1ed6ede0 8689 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8690
14f9c5c9
AS
8691 if (type == type0 && val0 != NULL)
8692 return val0;
d2e4a39e 8693 else
4c4b4cd2
PH
8694 return value_from_contents_and_address (type, 0, address);
8695}
8696
8697/* A value representing VAL, but with a standard (static-sized) type
8698 that correctly describes it. Does not necessarily create a new
8699 value. */
8700
0c3acc09 8701struct value *
4c4b4cd2
PH
8702ada_to_fixed_value (struct value *val)
8703{
c48db5ca
JB
8704 val = unwrap_value (val);
8705 val = ada_to_fixed_value_create (value_type (val),
8706 value_address (val),
8707 val);
8708 return val;
14f9c5c9 8709}
d2e4a39e 8710\f
14f9c5c9 8711
14f9c5c9
AS
8712/* Attributes */
8713
4c4b4cd2
PH
8714/* Table mapping attribute numbers to names.
8715 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8716
d2e4a39e 8717static const char *attribute_names[] = {
14f9c5c9
AS
8718 "<?>",
8719
d2e4a39e 8720 "first",
14f9c5c9
AS
8721 "last",
8722 "length",
8723 "image",
14f9c5c9
AS
8724 "max",
8725 "min",
4c4b4cd2
PH
8726 "modulus",
8727 "pos",
8728 "size",
8729 "tag",
14f9c5c9 8730 "val",
14f9c5c9
AS
8731 0
8732};
8733
d2e4a39e 8734const char *
4c4b4cd2 8735ada_attribute_name (enum exp_opcode n)
14f9c5c9 8736{
4c4b4cd2
PH
8737 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8738 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8739 else
8740 return attribute_names[0];
8741}
8742
4c4b4cd2 8743/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8744
4c4b4cd2
PH
8745static LONGEST
8746pos_atr (struct value *arg)
14f9c5c9 8747{
24209737
PH
8748 struct value *val = coerce_ref (arg);
8749 struct type *type = value_type (val);
14f9c5c9 8750
d2e4a39e 8751 if (!discrete_type_p (type))
323e0a4a 8752 error (_("'POS only defined on discrete types"));
14f9c5c9
AS
8753
8754 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8755 {
8756 int i;
24209737 8757 LONGEST v = value_as_long (val);
14f9c5c9 8758
d2e4a39e 8759 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2 8760 {
14e75d8e 8761 if (v == TYPE_FIELD_ENUMVAL (type, i))
4c4b4cd2
PH
8762 return i;
8763 }
323e0a4a 8764 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9
AS
8765 }
8766 else
24209737 8767 return value_as_long (val);
4c4b4cd2
PH
8768}
8769
8770static struct value *
3cb382c9 8771value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8772{
3cb382c9 8773 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8774}
8775
4c4b4cd2 8776/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8777
d2e4a39e
AS
8778static struct value *
8779value_val_atr (struct type *type, struct value *arg)
14f9c5c9 8780{
d2e4a39e 8781 if (!discrete_type_p (type))
323e0a4a 8782 error (_("'VAL only defined on discrete types"));
df407dfe 8783 if (!integer_type_p (value_type (arg)))
323e0a4a 8784 error (_("'VAL requires integral argument"));
14f9c5c9
AS
8785
8786 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8787 {
8788 long pos = value_as_long (arg);
5b4ee69b 8789
14f9c5c9 8790 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 8791 error (_("argument to 'VAL out of range"));
14e75d8e 8792 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
8793 }
8794 else
8795 return value_from_longest (type, value_as_long (arg));
8796}
14f9c5c9 8797\f
d2e4a39e 8798
4c4b4cd2 8799 /* Evaluation */
14f9c5c9 8800
4c4b4cd2
PH
8801/* True if TYPE appears to be an Ada character type.
8802 [At the moment, this is true only for Character and Wide_Character;
8803 It is a heuristic test that could stand improvement]. */
14f9c5c9 8804
d2e4a39e
AS
8805int
8806ada_is_character_type (struct type *type)
14f9c5c9 8807{
7b9f71f2
JB
8808 const char *name;
8809
8810 /* If the type code says it's a character, then assume it really is,
8811 and don't check any further. */
8812 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8813 return 1;
8814
8815 /* Otherwise, assume it's a character type iff it is a discrete type
8816 with a known character type name. */
8817 name = ada_type_name (type);
8818 return (name != NULL
8819 && (TYPE_CODE (type) == TYPE_CODE_INT
8820 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8821 && (strcmp (name, "character") == 0
8822 || strcmp (name, "wide_character") == 0
5a517ebd 8823 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 8824 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8825}
8826
4c4b4cd2 8827/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
8828
8829int
ebf56fd3 8830ada_is_string_type (struct type *type)
14f9c5c9 8831{
61ee279c 8832 type = ada_check_typedef (type);
d2e4a39e 8833 if (type != NULL
14f9c5c9 8834 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
8835 && (ada_is_simple_array_type (type)
8836 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8837 && ada_array_arity (type) == 1)
8838 {
8839 struct type *elttype = ada_array_element_type (type, 1);
8840
8841 return ada_is_character_type (elttype);
8842 }
d2e4a39e 8843 else
14f9c5c9
AS
8844 return 0;
8845}
8846
5bf03f13
JB
8847/* The compiler sometimes provides a parallel XVS type for a given
8848 PAD type. Normally, it is safe to follow the PAD type directly,
8849 but older versions of the compiler have a bug that causes the offset
8850 of its "F" field to be wrong. Following that field in that case
8851 would lead to incorrect results, but this can be worked around
8852 by ignoring the PAD type and using the associated XVS type instead.
8853
8854 Set to True if the debugger should trust the contents of PAD types.
8855 Otherwise, ignore the PAD type if there is a parallel XVS type. */
8856static int trust_pad_over_xvs = 1;
14f9c5c9
AS
8857
8858/* True if TYPE is a struct type introduced by the compiler to force the
8859 alignment of a value. Such types have a single field with a
4c4b4cd2 8860 distinctive name. */
14f9c5c9
AS
8861
8862int
ebf56fd3 8863ada_is_aligner_type (struct type *type)
14f9c5c9 8864{
61ee279c 8865 type = ada_check_typedef (type);
714e53ab 8866
5bf03f13 8867 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
8868 return 0;
8869
14f9c5c9 8870 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
8871 && TYPE_NFIELDS (type) == 1
8872 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
8873}
8874
8875/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 8876 the parallel type. */
14f9c5c9 8877
d2e4a39e
AS
8878struct type *
8879ada_get_base_type (struct type *raw_type)
14f9c5c9 8880{
d2e4a39e
AS
8881 struct type *real_type_namer;
8882 struct type *raw_real_type;
14f9c5c9
AS
8883
8884 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8885 return raw_type;
8886
284614f0
JB
8887 if (ada_is_aligner_type (raw_type))
8888 /* The encoding specifies that we should always use the aligner type.
8889 So, even if this aligner type has an associated XVS type, we should
8890 simply ignore it.
8891
8892 According to the compiler gurus, an XVS type parallel to an aligner
8893 type may exist because of a stabs limitation. In stabs, aligner
8894 types are empty because the field has a variable-sized type, and
8895 thus cannot actually be used as an aligner type. As a result,
8896 we need the associated parallel XVS type to decode the type.
8897 Since the policy in the compiler is to not change the internal
8898 representation based on the debugging info format, we sometimes
8899 end up having a redundant XVS type parallel to the aligner type. */
8900 return raw_type;
8901
14f9c5c9 8902 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 8903 if (real_type_namer == NULL
14f9c5c9
AS
8904 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8905 || TYPE_NFIELDS (real_type_namer) != 1)
8906 return raw_type;
8907
f80d3ff2
JB
8908 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8909 {
8910 /* This is an older encoding form where the base type needs to be
8911 looked up by name. We prefer the newer enconding because it is
8912 more efficient. */
8913 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8914 if (raw_real_type == NULL)
8915 return raw_type;
8916 else
8917 return raw_real_type;
8918 }
8919
8920 /* The field in our XVS type is a reference to the base type. */
8921 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 8922}
14f9c5c9 8923
4c4b4cd2 8924/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 8925
d2e4a39e
AS
8926struct type *
8927ada_aligned_type (struct type *type)
14f9c5c9
AS
8928{
8929 if (ada_is_aligner_type (type))
8930 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8931 else
8932 return ada_get_base_type (type);
8933}
8934
8935
8936/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 8937 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 8938
fc1a4b47
AC
8939const gdb_byte *
8940ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 8941{
d2e4a39e 8942 if (ada_is_aligner_type (type))
14f9c5c9 8943 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
8944 valaddr +
8945 TYPE_FIELD_BITPOS (type,
8946 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
8947 else
8948 return valaddr;
8949}
8950
4c4b4cd2
PH
8951
8952
14f9c5c9 8953/* The printed representation of an enumeration literal with encoded
4c4b4cd2 8954 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
8955const char *
8956ada_enum_name (const char *name)
14f9c5c9 8957{
4c4b4cd2
PH
8958 static char *result;
8959 static size_t result_len = 0;
d2e4a39e 8960 char *tmp;
14f9c5c9 8961
4c4b4cd2
PH
8962 /* First, unqualify the enumeration name:
8963 1. Search for the last '.' character. If we find one, then skip
177b42fe 8964 all the preceding characters, the unqualified name starts
76a01679 8965 right after that dot.
4c4b4cd2 8966 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
8967 translates dots into "__". Search forward for double underscores,
8968 but stop searching when we hit an overloading suffix, which is
8969 of the form "__" followed by digits. */
4c4b4cd2 8970
c3e5cd34
PH
8971 tmp = strrchr (name, '.');
8972 if (tmp != NULL)
4c4b4cd2
PH
8973 name = tmp + 1;
8974 else
14f9c5c9 8975 {
4c4b4cd2
PH
8976 while ((tmp = strstr (name, "__")) != NULL)
8977 {
8978 if (isdigit (tmp[2]))
8979 break;
8980 else
8981 name = tmp + 2;
8982 }
14f9c5c9
AS
8983 }
8984
8985 if (name[0] == 'Q')
8986 {
14f9c5c9 8987 int v;
5b4ee69b 8988
14f9c5c9 8989 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
8990 {
8991 if (sscanf (name + 2, "%x", &v) != 1)
8992 return name;
8993 }
14f9c5c9 8994 else
4c4b4cd2 8995 return name;
14f9c5c9 8996
4c4b4cd2 8997 GROW_VECT (result, result_len, 16);
14f9c5c9 8998 if (isascii (v) && isprint (v))
88c15c34 8999 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9000 else if (name[1] == 'U')
88c15c34 9001 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9002 else
88c15c34 9003 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9004
9005 return result;
9006 }
d2e4a39e 9007 else
4c4b4cd2 9008 {
c3e5cd34
PH
9009 tmp = strstr (name, "__");
9010 if (tmp == NULL)
9011 tmp = strstr (name, "$");
9012 if (tmp != NULL)
4c4b4cd2
PH
9013 {
9014 GROW_VECT (result, result_len, tmp - name + 1);
9015 strncpy (result, name, tmp - name);
9016 result[tmp - name] = '\0';
9017 return result;
9018 }
9019
9020 return name;
9021 }
14f9c5c9
AS
9022}
9023
14f9c5c9
AS
9024/* Evaluate the subexpression of EXP starting at *POS as for
9025 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9026 expression. */
14f9c5c9 9027
d2e4a39e
AS
9028static struct value *
9029evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9030{
4b27a620 9031 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9032}
9033
9034/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9035 value it wraps. */
14f9c5c9 9036
d2e4a39e
AS
9037static struct value *
9038unwrap_value (struct value *val)
14f9c5c9 9039{
df407dfe 9040 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9041
14f9c5c9
AS
9042 if (ada_is_aligner_type (type))
9043 {
de4d072f 9044 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9045 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9046
14f9c5c9 9047 if (ada_type_name (val_type) == NULL)
4c4b4cd2 9048 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
9049
9050 return unwrap_value (v);
9051 }
d2e4a39e 9052 else
14f9c5c9 9053 {
d2e4a39e 9054 struct type *raw_real_type =
61ee279c 9055 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9056
5bf03f13
JB
9057 /* If there is no parallel XVS or XVE type, then the value is
9058 already unwrapped. Return it without further modification. */
9059 if ((type == raw_real_type)
9060 && ada_find_parallel_type (type, "___XVE") == NULL)
9061 return val;
14f9c5c9 9062
d2e4a39e 9063 return
4c4b4cd2
PH
9064 coerce_unspec_val_to_type
9065 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9066 value_address (val),
1ed6ede0 9067 NULL, 1));
14f9c5c9
AS
9068 }
9069}
d2e4a39e
AS
9070
9071static struct value *
9072cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
9073{
9074 LONGEST val;
9075
df407dfe 9076 if (type == value_type (arg))
14f9c5c9 9077 return arg;
df407dfe 9078 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 9079 val = ada_float_to_fixed (type,
df407dfe 9080 ada_fixed_to_float (value_type (arg),
4c4b4cd2 9081 value_as_long (arg)));
d2e4a39e 9082 else
14f9c5c9 9083 {
a53b7a21 9084 DOUBLEST argd = value_as_double (arg);
5b4ee69b 9085
14f9c5c9
AS
9086 val = ada_float_to_fixed (type, argd);
9087 }
9088
9089 return value_from_longest (type, val);
9090}
9091
d2e4a39e 9092static struct value *
a53b7a21 9093cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9094{
df407dfe 9095 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 9096 value_as_long (arg));
5b4ee69b 9097
a53b7a21 9098 return value_from_double (type, val);
14f9c5c9
AS
9099}
9100
d99dcf51
JB
9101/* Given two array types T1 and T2, return nonzero iff both arrays
9102 contain the same number of elements. */
9103
9104static int
9105ada_same_array_size_p (struct type *t1, struct type *t2)
9106{
9107 LONGEST lo1, hi1, lo2, hi2;
9108
9109 /* Get the array bounds in order to verify that the size of
9110 the two arrays match. */
9111 if (!get_array_bounds (t1, &lo1, &hi1)
9112 || !get_array_bounds (t2, &lo2, &hi2))
9113 error (_("unable to determine array bounds"));
9114
9115 /* To make things easier for size comparison, normalize a bit
9116 the case of empty arrays by making sure that the difference
9117 between upper bound and lower bound is always -1. */
9118 if (lo1 > hi1)
9119 hi1 = lo1 - 1;
9120 if (lo2 > hi2)
9121 hi2 = lo2 - 1;
9122
9123 return (hi1 - lo1 == hi2 - lo2);
9124}
9125
9126/* Assuming that VAL is an array of integrals, and TYPE represents
9127 an array with the same number of elements, but with wider integral
9128 elements, return an array "casted" to TYPE. In practice, this
9129 means that the returned array is built by casting each element
9130 of the original array into TYPE's (wider) element type. */
9131
9132static struct value *
9133ada_promote_array_of_integrals (struct type *type, struct value *val)
9134{
9135 struct type *elt_type = TYPE_TARGET_TYPE (type);
9136 LONGEST lo, hi;
9137 struct value *res;
9138 LONGEST i;
9139
9140 /* Verify that both val and type are arrays of scalars, and
9141 that the size of val's elements is smaller than the size
9142 of type's element. */
9143 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
9144 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
9145 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
9146 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9147 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9148 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9149
9150 if (!get_array_bounds (type, &lo, &hi))
9151 error (_("unable to determine array bounds"));
9152
9153 res = allocate_value (type);
9154
9155 /* Promote each array element. */
9156 for (i = 0; i < hi - lo + 1; i++)
9157 {
9158 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9159
9160 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9161 value_contents_all (elt), TYPE_LENGTH (elt_type));
9162 }
9163
9164 return res;
9165}
9166
4c4b4cd2
PH
9167/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9168 return the converted value. */
9169
d2e4a39e
AS
9170static struct value *
9171coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9172{
df407dfe 9173 struct type *type2 = value_type (val);
5b4ee69b 9174
14f9c5c9
AS
9175 if (type == type2)
9176 return val;
9177
61ee279c
PH
9178 type2 = ada_check_typedef (type2);
9179 type = ada_check_typedef (type);
14f9c5c9 9180
d2e4a39e
AS
9181 if (TYPE_CODE (type2) == TYPE_CODE_PTR
9182 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
9183 {
9184 val = ada_value_ind (val);
df407dfe 9185 type2 = value_type (val);
14f9c5c9
AS
9186 }
9187
d2e4a39e 9188 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
9189 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
9190 {
d99dcf51
JB
9191 if (!ada_same_array_size_p (type, type2))
9192 error (_("cannot assign arrays of different length"));
9193
9194 if (is_integral_type (TYPE_TARGET_TYPE (type))
9195 && is_integral_type (TYPE_TARGET_TYPE (type2))
9196 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9197 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9198 {
9199 /* Allow implicit promotion of the array elements to
9200 a wider type. */
9201 return ada_promote_array_of_integrals (type, val);
9202 }
9203
9204 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9205 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9206 error (_("Incompatible types in assignment"));
04624583 9207 deprecated_set_value_type (val, type);
14f9c5c9 9208 }
d2e4a39e 9209 return val;
14f9c5c9
AS
9210}
9211
4c4b4cd2
PH
9212static struct value *
9213ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9214{
9215 struct value *val;
9216 struct type *type1, *type2;
9217 LONGEST v, v1, v2;
9218
994b9211
AC
9219 arg1 = coerce_ref (arg1);
9220 arg2 = coerce_ref (arg2);
18af8284
JB
9221 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9222 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9223
76a01679
JB
9224 if (TYPE_CODE (type1) != TYPE_CODE_INT
9225 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
9226 return value_binop (arg1, arg2, op);
9227
76a01679 9228 switch (op)
4c4b4cd2
PH
9229 {
9230 case BINOP_MOD:
9231 case BINOP_DIV:
9232 case BINOP_REM:
9233 break;
9234 default:
9235 return value_binop (arg1, arg2, op);
9236 }
9237
9238 v2 = value_as_long (arg2);
9239 if (v2 == 0)
323e0a4a 9240 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9241
9242 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9243 return value_binop (arg1, arg2, op);
9244
9245 v1 = value_as_long (arg1);
9246 switch (op)
9247 {
9248 case BINOP_DIV:
9249 v = v1 / v2;
76a01679
JB
9250 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9251 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9252 break;
9253 case BINOP_REM:
9254 v = v1 % v2;
76a01679
JB
9255 if (v * v1 < 0)
9256 v -= v2;
4c4b4cd2
PH
9257 break;
9258 default:
9259 /* Should not reach this point. */
9260 v = 0;
9261 }
9262
9263 val = allocate_value (type1);
990a07ab 9264 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9265 TYPE_LENGTH (value_type (val)),
9266 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9267 return val;
9268}
9269
9270static int
9271ada_value_equal (struct value *arg1, struct value *arg2)
9272{
df407dfe
AC
9273 if (ada_is_direct_array_type (value_type (arg1))
9274 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9275 {
f58b38bf
JB
9276 /* Automatically dereference any array reference before
9277 we attempt to perform the comparison. */
9278 arg1 = ada_coerce_ref (arg1);
9279 arg2 = ada_coerce_ref (arg2);
9280
4c4b4cd2
PH
9281 arg1 = ada_coerce_to_simple_array (arg1);
9282 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
9283 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9284 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 9285 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9286 /* FIXME: The following works only for types whose
76a01679
JB
9287 representations use all bits (no padding or undefined bits)
9288 and do not have user-defined equality. */
9289 return
df407dfe 9290 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 9291 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 9292 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
9293 }
9294 return value_equal (arg1, arg2);
9295}
9296
52ce6436
PH
9297/* Total number of component associations in the aggregate starting at
9298 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9299 OP_AGGREGATE. */
52ce6436
PH
9300
9301static int
9302num_component_specs (struct expression *exp, int pc)
9303{
9304 int n, m, i;
5b4ee69b 9305
52ce6436
PH
9306 m = exp->elts[pc + 1].longconst;
9307 pc += 3;
9308 n = 0;
9309 for (i = 0; i < m; i += 1)
9310 {
9311 switch (exp->elts[pc].opcode)
9312 {
9313 default:
9314 n += 1;
9315 break;
9316 case OP_CHOICES:
9317 n += exp->elts[pc + 1].longconst;
9318 break;
9319 }
9320 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9321 }
9322 return n;
9323}
9324
9325/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9326 component of LHS (a simple array or a record), updating *POS past
9327 the expression, assuming that LHS is contained in CONTAINER. Does
9328 not modify the inferior's memory, nor does it modify LHS (unless
9329 LHS == CONTAINER). */
9330
9331static void
9332assign_component (struct value *container, struct value *lhs, LONGEST index,
9333 struct expression *exp, int *pos)
9334{
9335 struct value *mark = value_mark ();
9336 struct value *elt;
5b4ee69b 9337
52ce6436
PH
9338 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9339 {
22601c15
UW
9340 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9341 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9342
52ce6436
PH
9343 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9344 }
9345 else
9346 {
9347 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9348 elt = ada_to_fixed_value (elt);
52ce6436
PH
9349 }
9350
9351 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9352 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9353 else
9354 value_assign_to_component (container, elt,
9355 ada_evaluate_subexp (NULL, exp, pos,
9356 EVAL_NORMAL));
9357
9358 value_free_to_mark (mark);
9359}
9360
9361/* Assuming that LHS represents an lvalue having a record or array
9362 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9363 of that aggregate's value to LHS, advancing *POS past the
9364 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9365 lvalue containing LHS (possibly LHS itself). Does not modify
9366 the inferior's memory, nor does it modify the contents of
0963b4bd 9367 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9368
9369static struct value *
9370assign_aggregate (struct value *container,
9371 struct value *lhs, struct expression *exp,
9372 int *pos, enum noside noside)
9373{
9374 struct type *lhs_type;
9375 int n = exp->elts[*pos+1].longconst;
9376 LONGEST low_index, high_index;
9377 int num_specs;
9378 LONGEST *indices;
9379 int max_indices, num_indices;
52ce6436 9380 int i;
52ce6436
PH
9381
9382 *pos += 3;
9383 if (noside != EVAL_NORMAL)
9384 {
52ce6436
PH
9385 for (i = 0; i < n; i += 1)
9386 ada_evaluate_subexp (NULL, exp, pos, noside);
9387 return container;
9388 }
9389
9390 container = ada_coerce_ref (container);
9391 if (ada_is_direct_array_type (value_type (container)))
9392 container = ada_coerce_to_simple_array (container);
9393 lhs = ada_coerce_ref (lhs);
9394 if (!deprecated_value_modifiable (lhs))
9395 error (_("Left operand of assignment is not a modifiable lvalue."));
9396
9397 lhs_type = value_type (lhs);
9398 if (ada_is_direct_array_type (lhs_type))
9399 {
9400 lhs = ada_coerce_to_simple_array (lhs);
9401 lhs_type = value_type (lhs);
9402 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9403 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
9404 }
9405 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9406 {
9407 low_index = 0;
9408 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9409 }
9410 else
9411 error (_("Left-hand side must be array or record."));
9412
9413 num_specs = num_component_specs (exp, *pos - 3);
9414 max_indices = 4 * num_specs + 4;
9415 indices = alloca (max_indices * sizeof (indices[0]));
9416 indices[0] = indices[1] = low_index - 1;
9417 indices[2] = indices[3] = high_index + 1;
9418 num_indices = 4;
9419
9420 for (i = 0; i < n; i += 1)
9421 {
9422 switch (exp->elts[*pos].opcode)
9423 {
1fbf5ada
JB
9424 case OP_CHOICES:
9425 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9426 &num_indices, max_indices,
9427 low_index, high_index);
9428 break;
9429 case OP_POSITIONAL:
9430 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
9431 &num_indices, max_indices,
9432 low_index, high_index);
1fbf5ada
JB
9433 break;
9434 case OP_OTHERS:
9435 if (i != n-1)
9436 error (_("Misplaced 'others' clause"));
9437 aggregate_assign_others (container, lhs, exp, pos, indices,
9438 num_indices, low_index, high_index);
9439 break;
9440 default:
9441 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9442 }
9443 }
9444
9445 return container;
9446}
9447
9448/* Assign into the component of LHS indexed by the OP_POSITIONAL
9449 construct at *POS, updating *POS past the construct, given that
9450 the positions are relative to lower bound LOW, where HIGH is the
9451 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9452 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 9453 assign_aggregate. */
52ce6436
PH
9454static void
9455aggregate_assign_positional (struct value *container,
9456 struct value *lhs, struct expression *exp,
9457 int *pos, LONGEST *indices, int *num_indices,
9458 int max_indices, LONGEST low, LONGEST high)
9459{
9460 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9461
9462 if (ind - 1 == high)
e1d5a0d2 9463 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9464 if (ind <= high)
9465 {
9466 add_component_interval (ind, ind, indices, num_indices, max_indices);
9467 *pos += 3;
9468 assign_component (container, lhs, ind, exp, pos);
9469 }
9470 else
9471 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9472}
9473
9474/* Assign into the components of LHS indexed by the OP_CHOICES
9475 construct at *POS, updating *POS past the construct, given that
9476 the allowable indices are LOW..HIGH. Record the indices assigned
9477 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 9478 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9479static void
9480aggregate_assign_from_choices (struct value *container,
9481 struct value *lhs, struct expression *exp,
9482 int *pos, LONGEST *indices, int *num_indices,
9483 int max_indices, LONGEST low, LONGEST high)
9484{
9485 int j;
9486 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9487 int choice_pos, expr_pc;
9488 int is_array = ada_is_direct_array_type (value_type (lhs));
9489
9490 choice_pos = *pos += 3;
9491
9492 for (j = 0; j < n_choices; j += 1)
9493 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9494 expr_pc = *pos;
9495 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9496
9497 for (j = 0; j < n_choices; j += 1)
9498 {
9499 LONGEST lower, upper;
9500 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9501
52ce6436
PH
9502 if (op == OP_DISCRETE_RANGE)
9503 {
9504 choice_pos += 1;
9505 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9506 EVAL_NORMAL));
9507 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9508 EVAL_NORMAL));
9509 }
9510 else if (is_array)
9511 {
9512 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9513 EVAL_NORMAL));
9514 upper = lower;
9515 }
9516 else
9517 {
9518 int ind;
0d5cff50 9519 const char *name;
5b4ee69b 9520
52ce6436
PH
9521 switch (op)
9522 {
9523 case OP_NAME:
9524 name = &exp->elts[choice_pos + 2].string;
9525 break;
9526 case OP_VAR_VALUE:
9527 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9528 break;
9529 default:
9530 error (_("Invalid record component association."));
9531 }
9532 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9533 ind = 0;
9534 if (! find_struct_field (name, value_type (lhs), 0,
9535 NULL, NULL, NULL, NULL, &ind))
9536 error (_("Unknown component name: %s."), name);
9537 lower = upper = ind;
9538 }
9539
9540 if (lower <= upper && (lower < low || upper > high))
9541 error (_("Index in component association out of bounds."));
9542
9543 add_component_interval (lower, upper, indices, num_indices,
9544 max_indices);
9545 while (lower <= upper)
9546 {
9547 int pos1;
5b4ee69b 9548
52ce6436
PH
9549 pos1 = expr_pc;
9550 assign_component (container, lhs, lower, exp, &pos1);
9551 lower += 1;
9552 }
9553 }
9554}
9555
9556/* Assign the value of the expression in the OP_OTHERS construct in
9557 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9558 have not been previously assigned. The index intervals already assigned
9559 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 9560 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9561static void
9562aggregate_assign_others (struct value *container,
9563 struct value *lhs, struct expression *exp,
9564 int *pos, LONGEST *indices, int num_indices,
9565 LONGEST low, LONGEST high)
9566{
9567 int i;
5ce64950 9568 int expr_pc = *pos + 1;
52ce6436
PH
9569
9570 for (i = 0; i < num_indices - 2; i += 2)
9571 {
9572 LONGEST ind;
5b4ee69b 9573
52ce6436
PH
9574 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9575 {
5ce64950 9576 int localpos;
5b4ee69b 9577
5ce64950
MS
9578 localpos = expr_pc;
9579 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9580 }
9581 }
9582 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9583}
9584
9585/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9586 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9587 modifying *SIZE as needed. It is an error if *SIZE exceeds
9588 MAX_SIZE. The resulting intervals do not overlap. */
9589static void
9590add_component_interval (LONGEST low, LONGEST high,
9591 LONGEST* indices, int *size, int max_size)
9592{
9593 int i, j;
5b4ee69b 9594
52ce6436
PH
9595 for (i = 0; i < *size; i += 2) {
9596 if (high >= indices[i] && low <= indices[i + 1])
9597 {
9598 int kh;
5b4ee69b 9599
52ce6436
PH
9600 for (kh = i + 2; kh < *size; kh += 2)
9601 if (high < indices[kh])
9602 break;
9603 if (low < indices[i])
9604 indices[i] = low;
9605 indices[i + 1] = indices[kh - 1];
9606 if (high > indices[i + 1])
9607 indices[i + 1] = high;
9608 memcpy (indices + i + 2, indices + kh, *size - kh);
9609 *size -= kh - i - 2;
9610 return;
9611 }
9612 else if (high < indices[i])
9613 break;
9614 }
9615
9616 if (*size == max_size)
9617 error (_("Internal error: miscounted aggregate components."));
9618 *size += 2;
9619 for (j = *size-1; j >= i+2; j -= 1)
9620 indices[j] = indices[j - 2];
9621 indices[i] = low;
9622 indices[i + 1] = high;
9623}
9624
6e48bd2c
JB
9625/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9626 is different. */
9627
9628static struct value *
9629ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9630{
9631 if (type == ada_check_typedef (value_type (arg2)))
9632 return arg2;
9633
9634 if (ada_is_fixed_point_type (type))
9635 return (cast_to_fixed (type, arg2));
9636
9637 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 9638 return cast_from_fixed (type, arg2);
6e48bd2c
JB
9639
9640 return value_cast (type, arg2);
9641}
9642
284614f0
JB
9643/* Evaluating Ada expressions, and printing their result.
9644 ------------------------------------------------------
9645
21649b50
JB
9646 1. Introduction:
9647 ----------------
9648
284614f0
JB
9649 We usually evaluate an Ada expression in order to print its value.
9650 We also evaluate an expression in order to print its type, which
9651 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9652 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9653 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9654 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9655 similar.
9656
9657 Evaluating expressions is a little more complicated for Ada entities
9658 than it is for entities in languages such as C. The main reason for
9659 this is that Ada provides types whose definition might be dynamic.
9660 One example of such types is variant records. Or another example
9661 would be an array whose bounds can only be known at run time.
9662
9663 The following description is a general guide as to what should be
9664 done (and what should NOT be done) in order to evaluate an expression
9665 involving such types, and when. This does not cover how the semantic
9666 information is encoded by GNAT as this is covered separatly. For the
9667 document used as the reference for the GNAT encoding, see exp_dbug.ads
9668 in the GNAT sources.
9669
9670 Ideally, we should embed each part of this description next to its
9671 associated code. Unfortunately, the amount of code is so vast right
9672 now that it's hard to see whether the code handling a particular
9673 situation might be duplicated or not. One day, when the code is
9674 cleaned up, this guide might become redundant with the comments
9675 inserted in the code, and we might want to remove it.
9676
21649b50
JB
9677 2. ``Fixing'' an Entity, the Simple Case:
9678 -----------------------------------------
9679
284614f0
JB
9680 When evaluating Ada expressions, the tricky issue is that they may
9681 reference entities whose type contents and size are not statically
9682 known. Consider for instance a variant record:
9683
9684 type Rec (Empty : Boolean := True) is record
9685 case Empty is
9686 when True => null;
9687 when False => Value : Integer;
9688 end case;
9689 end record;
9690 Yes : Rec := (Empty => False, Value => 1);
9691 No : Rec := (empty => True);
9692
9693 The size and contents of that record depends on the value of the
9694 descriminant (Rec.Empty). At this point, neither the debugging
9695 information nor the associated type structure in GDB are able to
9696 express such dynamic types. So what the debugger does is to create
9697 "fixed" versions of the type that applies to the specific object.
9698 We also informally refer to this opperation as "fixing" an object,
9699 which means creating its associated fixed type.
9700
9701 Example: when printing the value of variable "Yes" above, its fixed
9702 type would look like this:
9703
9704 type Rec is record
9705 Empty : Boolean;
9706 Value : Integer;
9707 end record;
9708
9709 On the other hand, if we printed the value of "No", its fixed type
9710 would become:
9711
9712 type Rec is record
9713 Empty : Boolean;
9714 end record;
9715
9716 Things become a little more complicated when trying to fix an entity
9717 with a dynamic type that directly contains another dynamic type,
9718 such as an array of variant records, for instance. There are
9719 two possible cases: Arrays, and records.
9720
21649b50
JB
9721 3. ``Fixing'' Arrays:
9722 ---------------------
9723
9724 The type structure in GDB describes an array in terms of its bounds,
9725 and the type of its elements. By design, all elements in the array
9726 have the same type and we cannot represent an array of variant elements
9727 using the current type structure in GDB. When fixing an array,
9728 we cannot fix the array element, as we would potentially need one
9729 fixed type per element of the array. As a result, the best we can do
9730 when fixing an array is to produce an array whose bounds and size
9731 are correct (allowing us to read it from memory), but without having
9732 touched its element type. Fixing each element will be done later,
9733 when (if) necessary.
9734
9735 Arrays are a little simpler to handle than records, because the same
9736 amount of memory is allocated for each element of the array, even if
1b536f04 9737 the amount of space actually used by each element differs from element
21649b50 9738 to element. Consider for instance the following array of type Rec:
284614f0
JB
9739
9740 type Rec_Array is array (1 .. 2) of Rec;
9741
1b536f04
JB
9742 The actual amount of memory occupied by each element might be different
9743 from element to element, depending on the value of their discriminant.
21649b50 9744 But the amount of space reserved for each element in the array remains
1b536f04 9745 fixed regardless. So we simply need to compute that size using
21649b50
JB
9746 the debugging information available, from which we can then determine
9747 the array size (we multiply the number of elements of the array by
9748 the size of each element).
9749
9750 The simplest case is when we have an array of a constrained element
9751 type. For instance, consider the following type declarations:
9752
9753 type Bounded_String (Max_Size : Integer) is
9754 Length : Integer;
9755 Buffer : String (1 .. Max_Size);
9756 end record;
9757 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9758
9759 In this case, the compiler describes the array as an array of
9760 variable-size elements (identified by its XVS suffix) for which
9761 the size can be read in the parallel XVZ variable.
9762
9763 In the case of an array of an unconstrained element type, the compiler
9764 wraps the array element inside a private PAD type. This type should not
9765 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9766 that we also use the adjective "aligner" in our code to designate
9767 these wrapper types.
9768
1b536f04 9769 In some cases, the size allocated for each element is statically
21649b50
JB
9770 known. In that case, the PAD type already has the correct size,
9771 and the array element should remain unfixed.
9772
9773 But there are cases when this size is not statically known.
9774 For instance, assuming that "Five" is an integer variable:
284614f0
JB
9775
9776 type Dynamic is array (1 .. Five) of Integer;
9777 type Wrapper (Has_Length : Boolean := False) is record
9778 Data : Dynamic;
9779 case Has_Length is
9780 when True => Length : Integer;
9781 when False => null;
9782 end case;
9783 end record;
9784 type Wrapper_Array is array (1 .. 2) of Wrapper;
9785
9786 Hello : Wrapper_Array := (others => (Has_Length => True,
9787 Data => (others => 17),
9788 Length => 1));
9789
9790
9791 The debugging info would describe variable Hello as being an
9792 array of a PAD type. The size of that PAD type is not statically
9793 known, but can be determined using a parallel XVZ variable.
9794 In that case, a copy of the PAD type with the correct size should
9795 be used for the fixed array.
9796
21649b50
JB
9797 3. ``Fixing'' record type objects:
9798 ----------------------------------
9799
9800 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9801 record types. In this case, in order to compute the associated
9802 fixed type, we need to determine the size and offset of each of
9803 its components. This, in turn, requires us to compute the fixed
9804 type of each of these components.
9805
9806 Consider for instance the example:
9807
9808 type Bounded_String (Max_Size : Natural) is record
9809 Str : String (1 .. Max_Size);
9810 Length : Natural;
9811 end record;
9812 My_String : Bounded_String (Max_Size => 10);
9813
9814 In that case, the position of field "Length" depends on the size
9815 of field Str, which itself depends on the value of the Max_Size
21649b50 9816 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9817 we need to fix the type of field Str. Therefore, fixing a variant
9818 record requires us to fix each of its components.
9819
9820 However, if a component does not have a dynamic size, the component
9821 should not be fixed. In particular, fields that use a PAD type
9822 should not fixed. Here is an example where this might happen
9823 (assuming type Rec above):
9824
9825 type Container (Big : Boolean) is record
9826 First : Rec;
9827 After : Integer;
9828 case Big is
9829 when True => Another : Integer;
9830 when False => null;
9831 end case;
9832 end record;
9833 My_Container : Container := (Big => False,
9834 First => (Empty => True),
9835 After => 42);
9836
9837 In that example, the compiler creates a PAD type for component First,
9838 whose size is constant, and then positions the component After just
9839 right after it. The offset of component After is therefore constant
9840 in this case.
9841
9842 The debugger computes the position of each field based on an algorithm
9843 that uses, among other things, the actual position and size of the field
21649b50
JB
9844 preceding it. Let's now imagine that the user is trying to print
9845 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9846 end up computing the offset of field After based on the size of the
9847 fixed version of field First. And since in our example First has
9848 only one actual field, the size of the fixed type is actually smaller
9849 than the amount of space allocated to that field, and thus we would
9850 compute the wrong offset of field After.
9851
21649b50
JB
9852 To make things more complicated, we need to watch out for dynamic
9853 components of variant records (identified by the ___XVL suffix in
9854 the component name). Even if the target type is a PAD type, the size
9855 of that type might not be statically known. So the PAD type needs
9856 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9857 we might end up with the wrong size for our component. This can be
9858 observed with the following type declarations:
284614f0
JB
9859
9860 type Octal is new Integer range 0 .. 7;
9861 type Octal_Array is array (Positive range <>) of Octal;
9862 pragma Pack (Octal_Array);
9863
9864 type Octal_Buffer (Size : Positive) is record
9865 Buffer : Octal_Array (1 .. Size);
9866 Length : Integer;
9867 end record;
9868
9869 In that case, Buffer is a PAD type whose size is unset and needs
9870 to be computed by fixing the unwrapped type.
9871
21649b50
JB
9872 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9873 ----------------------------------------------------------
9874
9875 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
9876 thus far, be actually fixed?
9877
9878 The answer is: Only when referencing that element. For instance
9879 when selecting one component of a record, this specific component
9880 should be fixed at that point in time. Or when printing the value
9881 of a record, each component should be fixed before its value gets
9882 printed. Similarly for arrays, the element of the array should be
9883 fixed when printing each element of the array, or when extracting
9884 one element out of that array. On the other hand, fixing should
9885 not be performed on the elements when taking a slice of an array!
9886
9887 Note that one of the side-effects of miscomputing the offset and
9888 size of each field is that we end up also miscomputing the size
9889 of the containing type. This can have adverse results when computing
9890 the value of an entity. GDB fetches the value of an entity based
9891 on the size of its type, and thus a wrong size causes GDB to fetch
9892 the wrong amount of memory. In the case where the computed size is
9893 too small, GDB fetches too little data to print the value of our
9894 entiry. Results in this case as unpredicatble, as we usually read
9895 past the buffer containing the data =:-o. */
9896
9897/* Implement the evaluate_exp routine in the exp_descriptor structure
9898 for the Ada language. */
9899
52ce6436 9900static struct value *
ebf56fd3 9901ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 9902 int *pos, enum noside noside)
14f9c5c9
AS
9903{
9904 enum exp_opcode op;
b5385fc0 9905 int tem;
14f9c5c9 9906 int pc;
5ec18f2b 9907 int preeval_pos;
14f9c5c9
AS
9908 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9909 struct type *type;
52ce6436 9910 int nargs, oplen;
d2e4a39e 9911 struct value **argvec;
14f9c5c9 9912
d2e4a39e
AS
9913 pc = *pos;
9914 *pos += 1;
14f9c5c9
AS
9915 op = exp->elts[pc].opcode;
9916
d2e4a39e 9917 switch (op)
14f9c5c9
AS
9918 {
9919 default:
9920 *pos -= 1;
6e48bd2c 9921 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
9922
9923 if (noside == EVAL_NORMAL)
9924 arg1 = unwrap_value (arg1);
6e48bd2c
JB
9925
9926 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9927 then we need to perform the conversion manually, because
9928 evaluate_subexp_standard doesn't do it. This conversion is
9929 necessary in Ada because the different kinds of float/fixed
9930 types in Ada have different representations.
9931
9932 Similarly, we need to perform the conversion from OP_LONG
9933 ourselves. */
9934 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9935 arg1 = ada_value_cast (expect_type, arg1, noside);
9936
9937 return arg1;
4c4b4cd2
PH
9938
9939 case OP_STRING:
9940 {
76a01679 9941 struct value *result;
5b4ee69b 9942
76a01679
JB
9943 *pos -= 1;
9944 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9945 /* The result type will have code OP_STRING, bashed there from
9946 OP_ARRAY. Bash it back. */
df407dfe
AC
9947 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9948 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 9949 return result;
4c4b4cd2 9950 }
14f9c5c9
AS
9951
9952 case UNOP_CAST:
9953 (*pos) += 2;
9954 type = exp->elts[pc + 1].type;
9955 arg1 = evaluate_subexp (type, exp, pos, noside);
9956 if (noside == EVAL_SKIP)
4c4b4cd2 9957 goto nosideret;
6e48bd2c 9958 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
9959 return arg1;
9960
4c4b4cd2
PH
9961 case UNOP_QUAL:
9962 (*pos) += 2;
9963 type = exp->elts[pc + 1].type;
9964 return ada_evaluate_subexp (type, exp, pos, noside);
9965
14f9c5c9
AS
9966 case BINOP_ASSIGN:
9967 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
9968 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9969 {
9970 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9971 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9972 return arg1;
9973 return ada_value_assign (arg1, arg1);
9974 }
003f3813
JB
9975 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9976 except if the lhs of our assignment is a convenience variable.
9977 In the case of assigning to a convenience variable, the lhs
9978 should be exactly the result of the evaluation of the rhs. */
9979 type = value_type (arg1);
9980 if (VALUE_LVAL (arg1) == lval_internalvar)
9981 type = NULL;
9982 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 9983 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 9984 return arg1;
df407dfe
AC
9985 if (ada_is_fixed_point_type (value_type (arg1)))
9986 arg2 = cast_to_fixed (value_type (arg1), arg2);
9987 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 9988 error
323e0a4a 9989 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 9990 else
df407dfe 9991 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 9992 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
9993
9994 case BINOP_ADD:
9995 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9996 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9997 if (noside == EVAL_SKIP)
4c4b4cd2 9998 goto nosideret;
2ac8a782
JB
9999 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10000 return (value_from_longest
10001 (value_type (arg1),
10002 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
10003 if ((ada_is_fixed_point_type (value_type (arg1))
10004 || ada_is_fixed_point_type (value_type (arg2)))
10005 && value_type (arg1) != value_type (arg2))
323e0a4a 10006 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10007 /* Do the addition, and cast the result to the type of the first
10008 argument. We cannot cast the result to a reference type, so if
10009 ARG1 is a reference type, find its underlying type. */
10010 type = value_type (arg1);
10011 while (TYPE_CODE (type) == TYPE_CODE_REF)
10012 type = TYPE_TARGET_TYPE (type);
f44316fa 10013 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10014 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10015
10016 case BINOP_SUB:
10017 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10018 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10019 if (noside == EVAL_SKIP)
4c4b4cd2 10020 goto nosideret;
2ac8a782
JB
10021 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
10022 return (value_from_longest
10023 (value_type (arg1),
10024 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
10025 if ((ada_is_fixed_point_type (value_type (arg1))
10026 || ada_is_fixed_point_type (value_type (arg2)))
10027 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10028 error (_("Operands of fixed-point subtraction "
10029 "must have the same type"));
b7789565
JB
10030 /* Do the substraction, and cast the result to the type of the first
10031 argument. We cannot cast the result to a reference type, so if
10032 ARG1 is a reference type, find its underlying type. */
10033 type = value_type (arg1);
10034 while (TYPE_CODE (type) == TYPE_CODE_REF)
10035 type = TYPE_TARGET_TYPE (type);
f44316fa 10036 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10037 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10038
10039 case BINOP_MUL:
10040 case BINOP_DIV:
e1578042
JB
10041 case BINOP_REM:
10042 case BINOP_MOD:
14f9c5c9
AS
10043 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10044 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10045 if (noside == EVAL_SKIP)
4c4b4cd2 10046 goto nosideret;
e1578042 10047 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10048 {
10049 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10050 return value_zero (value_type (arg1), not_lval);
10051 }
14f9c5c9 10052 else
4c4b4cd2 10053 {
a53b7a21 10054 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 10055 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 10056 arg1 = cast_from_fixed (type, arg1);
df407dfe 10057 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 10058 arg2 = cast_from_fixed (type, arg2);
f44316fa 10059 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10060 return ada_value_binop (arg1, arg2, op);
10061 }
10062
4c4b4cd2
PH
10063 case BINOP_EQUAL:
10064 case BINOP_NOTEQUAL:
14f9c5c9 10065 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10066 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10067 if (noside == EVAL_SKIP)
76a01679 10068 goto nosideret;
4c4b4cd2 10069 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10070 tem = 0;
4c4b4cd2 10071 else
f44316fa
UW
10072 {
10073 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10074 tem = ada_value_equal (arg1, arg2);
10075 }
4c4b4cd2 10076 if (op == BINOP_NOTEQUAL)
76a01679 10077 tem = !tem;
fbb06eb1
UW
10078 type = language_bool_type (exp->language_defn, exp->gdbarch);
10079 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10080
10081 case UNOP_NEG:
10082 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10083 if (noside == EVAL_SKIP)
10084 goto nosideret;
df407dfe
AC
10085 else if (ada_is_fixed_point_type (value_type (arg1)))
10086 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10087 else
f44316fa
UW
10088 {
10089 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10090 return value_neg (arg1);
10091 }
4c4b4cd2 10092
2330c6c6
JB
10093 case BINOP_LOGICAL_AND:
10094 case BINOP_LOGICAL_OR:
10095 case UNOP_LOGICAL_NOT:
000d5124
JB
10096 {
10097 struct value *val;
10098
10099 *pos -= 1;
10100 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10101 type = language_bool_type (exp->language_defn, exp->gdbarch);
10102 return value_cast (type, val);
000d5124 10103 }
2330c6c6
JB
10104
10105 case BINOP_BITWISE_AND:
10106 case BINOP_BITWISE_IOR:
10107 case BINOP_BITWISE_XOR:
000d5124
JB
10108 {
10109 struct value *val;
10110
10111 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10112 *pos = pc;
10113 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10114
10115 return value_cast (value_type (arg1), val);
10116 }
2330c6c6 10117
14f9c5c9
AS
10118 case OP_VAR_VALUE:
10119 *pos -= 1;
6799def4 10120
14f9c5c9 10121 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10122 {
10123 *pos += 4;
10124 goto nosideret;
10125 }
10126 else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10127 /* Only encountered when an unresolved symbol occurs in a
10128 context other than a function call, in which case, it is
52ce6436 10129 invalid. */
323e0a4a 10130 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 10131 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
14f9c5c9 10132 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10133 {
0c1f74cf 10134 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10135 /* Check to see if this is a tagged type. We also need to handle
10136 the case where the type is a reference to a tagged type, but
10137 we have to be careful to exclude pointers to tagged types.
10138 The latter should be shown as usual (as a pointer), whereas
10139 a reference should mostly be transparent to the user. */
10140 if (ada_is_tagged_type (type, 0)
023db19c 10141 || (TYPE_CODE (type) == TYPE_CODE_REF
31dbc1c5 10142 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0c1f74cf
JB
10143 {
10144 /* Tagged types are a little special in the fact that the real
10145 type is dynamic and can only be determined by inspecting the
10146 object's tag. This means that we need to get the object's
10147 value first (EVAL_NORMAL) and then extract the actual object
10148 type from its tag.
10149
10150 Note that we cannot skip the final step where we extract
10151 the object type from its tag, because the EVAL_NORMAL phase
10152 results in dynamic components being resolved into fixed ones.
10153 This can cause problems when trying to print the type
10154 description of tagged types whose parent has a dynamic size:
10155 We use the type name of the "_parent" component in order
10156 to print the name of the ancestor type in the type description.
10157 If that component had a dynamic size, the resolution into
10158 a fixed type would result in the loss of that type name,
10159 thus preventing us from printing the name of the ancestor
10160 type in the type description. */
10161 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
b50d69b5
JG
10162
10163 if (TYPE_CODE (type) != TYPE_CODE_REF)
10164 {
10165 struct type *actual_type;
10166
10167 actual_type = type_from_tag (ada_value_tag (arg1));
10168 if (actual_type == NULL)
10169 /* If, for some reason, we were unable to determine
10170 the actual type from the tag, then use the static
10171 approximation that we just computed as a fallback.
10172 This can happen if the debugging information is
10173 incomplete, for instance. */
10174 actual_type = type;
10175 return value_zero (actual_type, not_lval);
10176 }
10177 else
10178 {
10179 /* In the case of a ref, ada_coerce_ref takes care
10180 of determining the actual type. But the evaluation
10181 should return a ref as it should be valid to ask
10182 for its address; so rebuild a ref after coerce. */
10183 arg1 = ada_coerce_ref (arg1);
10184 return value_ref (arg1);
10185 }
0c1f74cf
JB
10186 }
10187
4c4b4cd2 10188 *pos += 4;
52865325 10189 return value_zero (to_static_fixed_type (type), not_lval);
4c4b4cd2 10190 }
d2e4a39e 10191 else
4c4b4cd2 10192 {
284614f0 10193 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
4c4b4cd2
PH
10194 return ada_to_fixed_value (arg1);
10195 }
10196
10197 case OP_FUNCALL:
10198 (*pos) += 2;
10199
10200 /* Allocate arg vector, including space for the function to be
10201 called in argvec[0] and a terminating NULL. */
10202 nargs = longest_to_int (exp->elts[pc + 1].longconst);
10203 argvec =
10204 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
10205
10206 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10207 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10208 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
10209 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
10210 else
10211 {
10212 for (tem = 0; tem <= nargs; tem += 1)
10213 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10214 argvec[tem] = 0;
10215
10216 if (noside == EVAL_SKIP)
10217 goto nosideret;
10218 }
10219
ad82864c
JB
10220 if (ada_is_constrained_packed_array_type
10221 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10222 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
10223 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
10224 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10225 /* This is a packed array that has already been fixed, and
10226 therefore already coerced to a simple array. Nothing further
10227 to do. */
10228 ;
df407dfe
AC
10229 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
10230 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
76a01679 10231 && VALUE_LVAL (argvec[0]) == lval_memory))
4c4b4cd2
PH
10232 argvec[0] = value_addr (argvec[0]);
10233
df407dfe 10234 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10235
10236 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10237 them. So, if this is an array typedef (encoding use for array
10238 access types encoded as fat pointers), strip it now. */
720d1a40
JB
10239 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
10240 type = ada_typedef_target_type (type);
10241
4c4b4cd2
PH
10242 if (TYPE_CODE (type) == TYPE_CODE_PTR)
10243 {
61ee279c 10244 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
10245 {
10246 case TYPE_CODE_FUNC:
61ee279c 10247 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10248 break;
10249 case TYPE_CODE_ARRAY:
10250 break;
10251 case TYPE_CODE_STRUCT:
10252 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10253 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10254 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10255 break;
10256 default:
323e0a4a 10257 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10258 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10259 break;
10260 }
10261 }
10262
10263 switch (TYPE_CODE (type))
10264 {
10265 case TYPE_CODE_FUNC:
10266 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972
PH
10267 {
10268 struct type *rtype = TYPE_TARGET_TYPE (type);
10269
10270 if (TYPE_GNU_IFUNC (type))
10271 return allocate_value (TYPE_TARGET_TYPE (rtype));
10272 return allocate_value (rtype);
10273 }
4c4b4cd2 10274 return call_function_by_hand (argvec[0], nargs, argvec + 1);
c8ea1972
PH
10275 case TYPE_CODE_INTERNAL_FUNCTION:
10276 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10277 /* We don't know anything about what the internal
10278 function might return, but we have to return
10279 something. */
10280 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10281 not_lval);
10282 else
10283 return call_internal_function (exp->gdbarch, exp->language_defn,
10284 argvec[0], nargs, argvec + 1);
10285
4c4b4cd2
PH
10286 case TYPE_CODE_STRUCT:
10287 {
10288 int arity;
10289
4c4b4cd2
PH
10290 arity = ada_array_arity (type);
10291 type = ada_array_element_type (type, nargs);
10292 if (type == NULL)
323e0a4a 10293 error (_("cannot subscript or call a record"));
4c4b4cd2 10294 if (arity != nargs)
323e0a4a 10295 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 10296 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 10297 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10298 return
10299 unwrap_value (ada_value_subscript
10300 (argvec[0], nargs, argvec + 1));
10301 }
10302 case TYPE_CODE_ARRAY:
10303 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10304 {
10305 type = ada_array_element_type (type, nargs);
10306 if (type == NULL)
323e0a4a 10307 error (_("element type of array unknown"));
4c4b4cd2 10308 else
0a07e705 10309 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10310 }
10311 return
10312 unwrap_value (ada_value_subscript
10313 (ada_coerce_to_simple_array (argvec[0]),
10314 nargs, argvec + 1));
10315 case TYPE_CODE_PTR: /* Pointer to array */
10316 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10317 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10318 {
10319 type = ada_array_element_type (type, nargs);
10320 if (type == NULL)
323e0a4a 10321 error (_("element type of array unknown"));
4c4b4cd2 10322 else
0a07e705 10323 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10324 }
10325 return
10326 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
10327 nargs, argvec + 1));
10328
10329 default:
e1d5a0d2
PH
10330 error (_("Attempt to index or call something other than an "
10331 "array or function"));
4c4b4cd2
PH
10332 }
10333
10334 case TERNOP_SLICE:
10335 {
10336 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10337 struct value *low_bound_val =
10338 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
10339 struct value *high_bound_val =
10340 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10341 LONGEST low_bound;
10342 LONGEST high_bound;
5b4ee69b 10343
994b9211
AC
10344 low_bound_val = coerce_ref (low_bound_val);
10345 high_bound_val = coerce_ref (high_bound_val);
714e53ab
PH
10346 low_bound = pos_atr (low_bound_val);
10347 high_bound = pos_atr (high_bound_val);
963a6417 10348
4c4b4cd2
PH
10349 if (noside == EVAL_SKIP)
10350 goto nosideret;
10351
4c4b4cd2
PH
10352 /* If this is a reference to an aligner type, then remove all
10353 the aligners. */
df407dfe
AC
10354 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10355 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10356 TYPE_TARGET_TYPE (value_type (array)) =
10357 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 10358
ad82864c 10359 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 10360 error (_("cannot slice a packed array"));
4c4b4cd2
PH
10361
10362 /* If this is a reference to an array or an array lvalue,
10363 convert to a pointer. */
df407dfe
AC
10364 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10365 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
10366 && VALUE_LVAL (array) == lval_memory))
10367 array = value_addr (array);
10368
1265e4aa 10369 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 10370 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 10371 (value_type (array))))
0b5d8877 10372 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
10373
10374 array = ada_coerce_to_simple_array_ptr (array);
10375
714e53ab
PH
10376 /* If we have more than one level of pointer indirection,
10377 dereference the value until we get only one level. */
df407dfe
AC
10378 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10379 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
10380 == TYPE_CODE_PTR))
10381 array = value_ind (array);
10382
10383 /* Make sure we really do have an array type before going further,
10384 to avoid a SEGV when trying to get the index type or the target
10385 type later down the road if the debug info generated by
10386 the compiler is incorrect or incomplete. */
df407dfe 10387 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 10388 error (_("cannot take slice of non-array"));
714e53ab 10389
828292f2
JB
10390 if (TYPE_CODE (ada_check_typedef (value_type (array)))
10391 == TYPE_CODE_PTR)
4c4b4cd2 10392 {
828292f2
JB
10393 struct type *type0 = ada_check_typedef (value_type (array));
10394
0b5d8877 10395 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 10396 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
10397 else
10398 {
10399 struct type *arr_type0 =
828292f2 10400 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 10401
f5938064
JG
10402 return ada_value_slice_from_ptr (array, arr_type0,
10403 longest_to_int (low_bound),
10404 longest_to_int (high_bound));
4c4b4cd2
PH
10405 }
10406 }
10407 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10408 return array;
10409 else if (high_bound < low_bound)
df407dfe 10410 return empty_array (value_type (array), low_bound);
4c4b4cd2 10411 else
529cad9c
PH
10412 return ada_value_slice (array, longest_to_int (low_bound),
10413 longest_to_int (high_bound));
4c4b4cd2 10414 }
14f9c5c9 10415
4c4b4cd2
PH
10416 case UNOP_IN_RANGE:
10417 (*pos) += 2;
10418 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 10419 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 10420
14f9c5c9 10421 if (noside == EVAL_SKIP)
4c4b4cd2 10422 goto nosideret;
14f9c5c9 10423
4c4b4cd2
PH
10424 switch (TYPE_CODE (type))
10425 {
10426 default:
e1d5a0d2
PH
10427 lim_warning (_("Membership test incompletely implemented; "
10428 "always returns true"));
fbb06eb1
UW
10429 type = language_bool_type (exp->language_defn, exp->gdbarch);
10430 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
10431
10432 case TYPE_CODE_RANGE:
030b4912
UW
10433 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10434 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
10435 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10436 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
10437 type = language_bool_type (exp->language_defn, exp->gdbarch);
10438 return
10439 value_from_longest (type,
4c4b4cd2
PH
10440 (value_less (arg1, arg3)
10441 || value_equal (arg1, arg3))
10442 && (value_less (arg2, arg1)
10443 || value_equal (arg2, arg1)));
10444 }
10445
10446 case BINOP_IN_BOUNDS:
14f9c5c9 10447 (*pos) += 2;
4c4b4cd2
PH
10448 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10449 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10450
4c4b4cd2
PH
10451 if (noside == EVAL_SKIP)
10452 goto nosideret;
14f9c5c9 10453
4c4b4cd2 10454 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
10455 {
10456 type = language_bool_type (exp->language_defn, exp->gdbarch);
10457 return value_zero (type, not_lval);
10458 }
14f9c5c9 10459
4c4b4cd2 10460 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10461
1eea4ebd
UW
10462 type = ada_index_type (value_type (arg2), tem, "range");
10463 if (!type)
10464 type = value_type (arg1);
14f9c5c9 10465
1eea4ebd
UW
10466 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10467 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 10468
f44316fa
UW
10469 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10470 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10471 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10472 return
fbb06eb1 10473 value_from_longest (type,
4c4b4cd2
PH
10474 (value_less (arg1, arg3)
10475 || value_equal (arg1, arg3))
10476 && (value_less (arg2, arg1)
10477 || value_equal (arg2, arg1)));
10478
10479 case TERNOP_IN_RANGE:
10480 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10481 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10482 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10483
10484 if (noside == EVAL_SKIP)
10485 goto nosideret;
10486
f44316fa
UW
10487 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10488 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10489 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10490 return
fbb06eb1 10491 value_from_longest (type,
4c4b4cd2
PH
10492 (value_less (arg1, arg3)
10493 || value_equal (arg1, arg3))
10494 && (value_less (arg2, arg1)
10495 || value_equal (arg2, arg1)));
10496
10497 case OP_ATR_FIRST:
10498 case OP_ATR_LAST:
10499 case OP_ATR_LENGTH:
10500 {
76a01679 10501 struct type *type_arg;
5b4ee69b 10502
76a01679
JB
10503 if (exp->elts[*pos].opcode == OP_TYPE)
10504 {
10505 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10506 arg1 = NULL;
5bc23cb3 10507 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
10508 }
10509 else
10510 {
10511 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10512 type_arg = NULL;
10513 }
10514
10515 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 10516 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
10517 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10518 *pos += 4;
10519
10520 if (noside == EVAL_SKIP)
10521 goto nosideret;
10522
10523 if (type_arg == NULL)
10524 {
10525 arg1 = ada_coerce_ref (arg1);
10526
ad82864c 10527 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
10528 arg1 = ada_coerce_to_simple_array (arg1);
10529
aa4fb036 10530 if (op == OP_ATR_LENGTH)
1eea4ebd 10531 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10532 else
10533 {
10534 type = ada_index_type (value_type (arg1), tem,
10535 ada_attribute_name (op));
10536 if (type == NULL)
10537 type = builtin_type (exp->gdbarch)->builtin_int;
10538 }
76a01679
JB
10539
10540 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 10541 return allocate_value (type);
76a01679
JB
10542
10543 switch (op)
10544 {
10545 default: /* Should never happen. */
323e0a4a 10546 error (_("unexpected attribute encountered"));
76a01679 10547 case OP_ATR_FIRST:
1eea4ebd
UW
10548 return value_from_longest
10549 (type, ada_array_bound (arg1, tem, 0));
76a01679 10550 case OP_ATR_LAST:
1eea4ebd
UW
10551 return value_from_longest
10552 (type, ada_array_bound (arg1, tem, 1));
76a01679 10553 case OP_ATR_LENGTH:
1eea4ebd
UW
10554 return value_from_longest
10555 (type, ada_array_length (arg1, tem));
76a01679
JB
10556 }
10557 }
10558 else if (discrete_type_p (type_arg))
10559 {
10560 struct type *range_type;
0d5cff50 10561 const char *name = ada_type_name (type_arg);
5b4ee69b 10562
76a01679
JB
10563 range_type = NULL;
10564 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 10565 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
10566 if (range_type == NULL)
10567 range_type = type_arg;
10568 switch (op)
10569 {
10570 default:
323e0a4a 10571 error (_("unexpected attribute encountered"));
76a01679 10572 case OP_ATR_FIRST:
690cc4eb 10573 return value_from_longest
43bbcdc2 10574 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 10575 case OP_ATR_LAST:
690cc4eb 10576 return value_from_longest
43bbcdc2 10577 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 10578 case OP_ATR_LENGTH:
323e0a4a 10579 error (_("the 'length attribute applies only to array types"));
76a01679
JB
10580 }
10581 }
10582 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 10583 error (_("unimplemented type attribute"));
76a01679
JB
10584 else
10585 {
10586 LONGEST low, high;
10587
ad82864c
JB
10588 if (ada_is_constrained_packed_array_type (type_arg))
10589 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 10590
aa4fb036 10591 if (op == OP_ATR_LENGTH)
1eea4ebd 10592 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
10593 else
10594 {
10595 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10596 if (type == NULL)
10597 type = builtin_type (exp->gdbarch)->builtin_int;
10598 }
1eea4ebd 10599
76a01679
JB
10600 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10601 return allocate_value (type);
10602
10603 switch (op)
10604 {
10605 default:
323e0a4a 10606 error (_("unexpected attribute encountered"));
76a01679 10607 case OP_ATR_FIRST:
1eea4ebd 10608 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
10609 return value_from_longest (type, low);
10610 case OP_ATR_LAST:
1eea4ebd 10611 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10612 return value_from_longest (type, high);
10613 case OP_ATR_LENGTH:
1eea4ebd
UW
10614 low = ada_array_bound_from_type (type_arg, tem, 0);
10615 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10616 return value_from_longest (type, high - low + 1);
10617 }
10618 }
14f9c5c9
AS
10619 }
10620
4c4b4cd2
PH
10621 case OP_ATR_TAG:
10622 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10623 if (noside == EVAL_SKIP)
76a01679 10624 goto nosideret;
4c4b4cd2
PH
10625
10626 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10627 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
10628
10629 return ada_value_tag (arg1);
10630
10631 case OP_ATR_MIN:
10632 case OP_ATR_MAX:
10633 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10634 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10635 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10636 if (noside == EVAL_SKIP)
76a01679 10637 goto nosideret;
d2e4a39e 10638 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10639 return value_zero (value_type (arg1), not_lval);
14f9c5c9 10640 else
f44316fa
UW
10641 {
10642 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10643 return value_binop (arg1, arg2,
10644 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10645 }
14f9c5c9 10646
4c4b4cd2
PH
10647 case OP_ATR_MODULUS:
10648 {
31dedfee 10649 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10650
5b4ee69b 10651 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
10652 if (noside == EVAL_SKIP)
10653 goto nosideret;
4c4b4cd2 10654
76a01679 10655 if (!ada_is_modular_type (type_arg))
323e0a4a 10656 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10657
76a01679
JB
10658 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10659 ada_modulus (type_arg));
4c4b4cd2
PH
10660 }
10661
10662
10663 case OP_ATR_POS:
10664 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10665 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10666 if (noside == EVAL_SKIP)
76a01679 10667 goto nosideret;
3cb382c9
UW
10668 type = builtin_type (exp->gdbarch)->builtin_int;
10669 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10670 return value_zero (type, not_lval);
14f9c5c9 10671 else
3cb382c9 10672 return value_pos_atr (type, arg1);
14f9c5c9 10673
4c4b4cd2
PH
10674 case OP_ATR_SIZE:
10675 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
10676 type = value_type (arg1);
10677
10678 /* If the argument is a reference, then dereference its type, since
10679 the user is really asking for the size of the actual object,
10680 not the size of the pointer. */
10681 if (TYPE_CODE (type) == TYPE_CODE_REF)
10682 type = TYPE_TARGET_TYPE (type);
10683
4c4b4cd2 10684 if (noside == EVAL_SKIP)
76a01679 10685 goto nosideret;
4c4b4cd2 10686 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 10687 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 10688 else
22601c15 10689 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 10690 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
10691
10692 case OP_ATR_VAL:
10693 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 10694 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 10695 type = exp->elts[pc + 2].type;
14f9c5c9 10696 if (noside == EVAL_SKIP)
76a01679 10697 goto nosideret;
4c4b4cd2 10698 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10699 return value_zero (type, not_lval);
4c4b4cd2 10700 else
76a01679 10701 return value_val_atr (type, arg1);
4c4b4cd2
PH
10702
10703 case BINOP_EXP:
10704 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10705 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10706 if (noside == EVAL_SKIP)
10707 goto nosideret;
10708 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10709 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 10710 else
f44316fa
UW
10711 {
10712 /* For integer exponentiation operations,
10713 only promote the first argument. */
10714 if (is_integral_type (value_type (arg2)))
10715 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10716 else
10717 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10718
10719 return value_binop (arg1, arg2, op);
10720 }
4c4b4cd2
PH
10721
10722 case UNOP_PLUS:
10723 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10724 if (noside == EVAL_SKIP)
10725 goto nosideret;
10726 else
10727 return arg1;
10728
10729 case UNOP_ABS:
10730 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10731 if (noside == EVAL_SKIP)
10732 goto nosideret;
f44316fa 10733 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 10734 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 10735 return value_neg (arg1);
14f9c5c9 10736 else
4c4b4cd2 10737 return arg1;
14f9c5c9
AS
10738
10739 case UNOP_IND:
5ec18f2b 10740 preeval_pos = *pos;
6b0d7253 10741 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10742 if (noside == EVAL_SKIP)
4c4b4cd2 10743 goto nosideret;
df407dfe 10744 type = ada_check_typedef (value_type (arg1));
14f9c5c9 10745 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
10746 {
10747 if (ada_is_array_descriptor_type (type))
10748 /* GDB allows dereferencing GNAT array descriptors. */
10749 {
10750 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 10751
4c4b4cd2 10752 if (arrType == NULL)
323e0a4a 10753 error (_("Attempt to dereference null array pointer."));
00a4c844 10754 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
10755 }
10756 else if (TYPE_CODE (type) == TYPE_CODE_PTR
10757 || TYPE_CODE (type) == TYPE_CODE_REF
10758 /* In C you can dereference an array to get the 1st elt. */
10759 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab 10760 {
5ec18f2b
JG
10761 /* As mentioned in the OP_VAR_VALUE case, tagged types can
10762 only be determined by inspecting the object's tag.
10763 This means that we need to evaluate completely the
10764 expression in order to get its type. */
10765
023db19c
JB
10766 if ((TYPE_CODE (type) == TYPE_CODE_REF
10767 || TYPE_CODE (type) == TYPE_CODE_PTR)
5ec18f2b
JG
10768 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10769 {
10770 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10771 EVAL_NORMAL);
10772 type = value_type (ada_value_ind (arg1));
10773 }
10774 else
10775 {
10776 type = to_static_fixed_type
10777 (ada_aligned_type
10778 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10779 }
10780 check_size (type);
714e53ab
PH
10781 return value_zero (type, lval_memory);
10782 }
4c4b4cd2 10783 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
10784 {
10785 /* GDB allows dereferencing an int. */
10786 if (expect_type == NULL)
10787 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10788 lval_memory);
10789 else
10790 {
10791 expect_type =
10792 to_static_fixed_type (ada_aligned_type (expect_type));
10793 return value_zero (expect_type, lval_memory);
10794 }
10795 }
4c4b4cd2 10796 else
323e0a4a 10797 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 10798 }
0963b4bd 10799 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 10800 type = ada_check_typedef (value_type (arg1));
d2e4a39e 10801
96967637
JB
10802 if (TYPE_CODE (type) == TYPE_CODE_INT)
10803 /* GDB allows dereferencing an int. If we were given
10804 the expect_type, then use that as the target type.
10805 Otherwise, assume that the target type is an int. */
10806 {
10807 if (expect_type != NULL)
10808 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10809 arg1));
10810 else
10811 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10812 (CORE_ADDR) value_as_address (arg1));
10813 }
6b0d7253 10814
4c4b4cd2
PH
10815 if (ada_is_array_descriptor_type (type))
10816 /* GDB allows dereferencing GNAT array descriptors. */
10817 return ada_coerce_to_simple_array (arg1);
14f9c5c9 10818 else
4c4b4cd2 10819 return ada_value_ind (arg1);
14f9c5c9
AS
10820
10821 case STRUCTOP_STRUCT:
10822 tem = longest_to_int (exp->elts[pc + 1].longconst);
10823 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 10824 preeval_pos = *pos;
14f9c5c9
AS
10825 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10826 if (noside == EVAL_SKIP)
4c4b4cd2 10827 goto nosideret;
14f9c5c9 10828 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10829 {
df407dfe 10830 struct type *type1 = value_type (arg1);
5b4ee69b 10831
76a01679
JB
10832 if (ada_is_tagged_type (type1, 1))
10833 {
10834 type = ada_lookup_struct_elt_type (type1,
10835 &exp->elts[pc + 2].string,
10836 1, 1, NULL);
5ec18f2b
JG
10837
10838 /* If the field is not found, check if it exists in the
10839 extension of this object's type. This means that we
10840 need to evaluate completely the expression. */
10841
76a01679 10842 if (type == NULL)
5ec18f2b
JG
10843 {
10844 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
10845 EVAL_NORMAL);
10846 arg1 = ada_value_struct_elt (arg1,
10847 &exp->elts[pc + 2].string,
10848 0);
10849 arg1 = unwrap_value (arg1);
10850 type = value_type (ada_to_fixed_value (arg1));
10851 }
76a01679
JB
10852 }
10853 else
10854 type =
10855 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10856 0, NULL);
10857
10858 return value_zero (ada_aligned_type (type), lval_memory);
10859 }
14f9c5c9 10860 else
284614f0
JB
10861 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10862 arg1 = unwrap_value (arg1);
10863 return ada_to_fixed_value (arg1);
10864
14f9c5c9 10865 case OP_TYPE:
4c4b4cd2
PH
10866 /* The value is not supposed to be used. This is here to make it
10867 easier to accommodate expressions that contain types. */
14f9c5c9
AS
10868 (*pos) += 2;
10869 if (noside == EVAL_SKIP)
4c4b4cd2 10870 goto nosideret;
14f9c5c9 10871 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 10872 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 10873 else
323e0a4a 10874 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
10875
10876 case OP_AGGREGATE:
10877 case OP_CHOICES:
10878 case OP_OTHERS:
10879 case OP_DISCRETE_RANGE:
10880 case OP_POSITIONAL:
10881 case OP_NAME:
10882 if (noside == EVAL_NORMAL)
10883 switch (op)
10884 {
10885 case OP_NAME:
10886 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 10887 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
10888 case OP_AGGREGATE:
10889 error (_("Aggregates only allowed on the right of an assignment"));
10890 default:
0963b4bd
MS
10891 internal_error (__FILE__, __LINE__,
10892 _("aggregate apparently mangled"));
52ce6436
PH
10893 }
10894
10895 ada_forward_operator_length (exp, pc, &oplen, &nargs);
10896 *pos += oplen - 1;
10897 for (tem = 0; tem < nargs; tem += 1)
10898 ada_evaluate_subexp (NULL, exp, pos, noside);
10899 goto nosideret;
14f9c5c9
AS
10900 }
10901
10902nosideret:
22601c15 10903 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 10904}
14f9c5c9 10905\f
d2e4a39e 10906
4c4b4cd2 10907 /* Fixed point */
14f9c5c9
AS
10908
10909/* If TYPE encodes an Ada fixed-point type, return the suffix of the
10910 type name that encodes the 'small and 'delta information.
4c4b4cd2 10911 Otherwise, return NULL. */
14f9c5c9 10912
d2e4a39e 10913static const char *
ebf56fd3 10914fixed_type_info (struct type *type)
14f9c5c9 10915{
d2e4a39e 10916 const char *name = ada_type_name (type);
14f9c5c9
AS
10917 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10918
d2e4a39e
AS
10919 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10920 {
14f9c5c9 10921 const char *tail = strstr (name, "___XF_");
5b4ee69b 10922
14f9c5c9 10923 if (tail == NULL)
4c4b4cd2 10924 return NULL;
d2e4a39e 10925 else
4c4b4cd2 10926 return tail + 5;
14f9c5c9
AS
10927 }
10928 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10929 return fixed_type_info (TYPE_TARGET_TYPE (type));
10930 else
10931 return NULL;
10932}
10933
4c4b4cd2 10934/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
10935
10936int
ebf56fd3 10937ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
10938{
10939 return fixed_type_info (type) != NULL;
10940}
10941
4c4b4cd2
PH
10942/* Return non-zero iff TYPE represents a System.Address type. */
10943
10944int
10945ada_is_system_address_type (struct type *type)
10946{
10947 return (TYPE_NAME (type)
10948 && strcmp (TYPE_NAME (type), "system__address") == 0);
10949}
10950
14f9c5c9
AS
10951/* Assuming that TYPE is the representation of an Ada fixed-point
10952 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 10953 delta cannot be determined. */
14f9c5c9
AS
10954
10955DOUBLEST
ebf56fd3 10956ada_delta (struct type *type)
14f9c5c9
AS
10957{
10958 const char *encoding = fixed_type_info (type);
facc390f 10959 DOUBLEST num, den;
14f9c5c9 10960
facc390f
JB
10961 /* Strictly speaking, num and den are encoded as integer. However,
10962 they may not fit into a long, and they will have to be converted
10963 to DOUBLEST anyway. So scan them as DOUBLEST. */
10964 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10965 &num, &den) < 2)
14f9c5c9 10966 return -1.0;
d2e4a39e 10967 else
facc390f 10968 return num / den;
14f9c5c9
AS
10969}
10970
10971/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 10972 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
10973
10974static DOUBLEST
ebf56fd3 10975scaling_factor (struct type *type)
14f9c5c9
AS
10976{
10977 const char *encoding = fixed_type_info (type);
facc390f 10978 DOUBLEST num0, den0, num1, den1;
14f9c5c9 10979 int n;
d2e4a39e 10980
facc390f
JB
10981 /* Strictly speaking, num's and den's are encoded as integer. However,
10982 they may not fit into a long, and they will have to be converted
10983 to DOUBLEST anyway. So scan them as DOUBLEST. */
10984 n = sscanf (encoding,
10985 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
10986 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10987 &num0, &den0, &num1, &den1);
14f9c5c9
AS
10988
10989 if (n < 2)
10990 return 1.0;
10991 else if (n == 4)
facc390f 10992 return num1 / den1;
d2e4a39e 10993 else
facc390f 10994 return num0 / den0;
14f9c5c9
AS
10995}
10996
10997
10998/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 10999 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
11000
11001DOUBLEST
ebf56fd3 11002ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 11003{
d2e4a39e 11004 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
11005}
11006
4c4b4cd2
PH
11007/* The representation of a fixed-point value of type TYPE
11008 corresponding to the value X. */
14f9c5c9
AS
11009
11010LONGEST
ebf56fd3 11011ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
11012{
11013 return (LONGEST) (x / scaling_factor (type) + 0.5);
11014}
11015
14f9c5c9 11016\f
d2e4a39e 11017
4c4b4cd2 11018 /* Range types */
14f9c5c9
AS
11019
11020/* Scan STR beginning at position K for a discriminant name, and
11021 return the value of that discriminant field of DVAL in *PX. If
11022 PNEW_K is not null, put the position of the character beyond the
11023 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11024 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11025
11026static int
07d8f827 11027scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
76a01679 11028 int *pnew_k)
14f9c5c9
AS
11029{
11030 static char *bound_buffer = NULL;
11031 static size_t bound_buffer_len = 0;
11032 char *bound;
11033 char *pend;
d2e4a39e 11034 struct value *bound_val;
14f9c5c9
AS
11035
11036 if (dval == NULL || str == NULL || str[k] == '\0')
11037 return 0;
11038
d2e4a39e 11039 pend = strstr (str + k, "__");
14f9c5c9
AS
11040 if (pend == NULL)
11041 {
d2e4a39e 11042 bound = str + k;
14f9c5c9
AS
11043 k += strlen (bound);
11044 }
d2e4a39e 11045 else
14f9c5c9 11046 {
d2e4a39e 11047 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
14f9c5c9 11048 bound = bound_buffer;
d2e4a39e
AS
11049 strncpy (bound_buffer, str + k, pend - (str + k));
11050 bound[pend - (str + k)] = '\0';
11051 k = pend - str;
14f9c5c9 11052 }
d2e4a39e 11053
df407dfe 11054 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11055 if (bound_val == NULL)
11056 return 0;
11057
11058 *px = value_as_long (bound_val);
11059 if (pnew_k != NULL)
11060 *pnew_k = k;
11061 return 1;
11062}
11063
11064/* Value of variable named NAME in the current environment. If
11065 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11066 otherwise causes an error with message ERR_MSG. */
11067
d2e4a39e
AS
11068static struct value *
11069get_var_value (char *name, char *err_msg)
14f9c5c9 11070{
4c4b4cd2 11071 struct ada_symbol_info *syms;
14f9c5c9
AS
11072 int nsyms;
11073
4c4b4cd2 11074 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
4eeaa230 11075 &syms);
14f9c5c9
AS
11076
11077 if (nsyms != 1)
11078 {
11079 if (err_msg == NULL)
4c4b4cd2 11080 return 0;
14f9c5c9 11081 else
8a3fe4f8 11082 error (("%s"), err_msg);
14f9c5c9
AS
11083 }
11084
4c4b4cd2 11085 return value_of_variable (syms[0].sym, syms[0].block);
14f9c5c9 11086}
d2e4a39e 11087
14f9c5c9 11088/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
11089 no such variable found, returns 0, and sets *FLAG to 0. If
11090 successful, sets *FLAG to 1. */
11091
14f9c5c9 11092LONGEST
4c4b4cd2 11093get_int_var_value (char *name, int *flag)
14f9c5c9 11094{
4c4b4cd2 11095 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11096
14f9c5c9
AS
11097 if (var_val == 0)
11098 {
11099 if (flag != NULL)
4c4b4cd2 11100 *flag = 0;
14f9c5c9
AS
11101 return 0;
11102 }
11103 else
11104 {
11105 if (flag != NULL)
4c4b4cd2 11106 *flag = 1;
14f9c5c9
AS
11107 return value_as_long (var_val);
11108 }
11109}
d2e4a39e 11110
14f9c5c9
AS
11111
11112/* Return a range type whose base type is that of the range type named
11113 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11114 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11115 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11116 corresponding range type from debug information; fall back to using it
11117 if symbol lookup fails. If a new type must be created, allocate it
11118 like ORIG_TYPE was. The bounds information, in general, is encoded
11119 in NAME, the base type given in the named range type. */
14f9c5c9 11120
d2e4a39e 11121static struct type *
28c85d6c 11122to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11123{
0d5cff50 11124 const char *name;
14f9c5c9 11125 struct type *base_type;
d2e4a39e 11126 char *subtype_info;
14f9c5c9 11127
28c85d6c
JB
11128 gdb_assert (raw_type != NULL);
11129 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 11130
1ce677a4 11131 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
11132 base_type = TYPE_TARGET_TYPE (raw_type);
11133 else
11134 base_type = raw_type;
11135
28c85d6c 11136 name = TYPE_NAME (raw_type);
14f9c5c9
AS
11137 subtype_info = strstr (name, "___XD");
11138 if (subtype_info == NULL)
690cc4eb 11139 {
43bbcdc2
PH
11140 LONGEST L = ada_discrete_type_low_bound (raw_type);
11141 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11142
690cc4eb
PH
11143 if (L < INT_MIN || U > INT_MAX)
11144 return raw_type;
11145 else
0c9c3474
SA
11146 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11147 L, U);
690cc4eb 11148 }
14f9c5c9
AS
11149 else
11150 {
11151 static char *name_buf = NULL;
11152 static size_t name_len = 0;
11153 int prefix_len = subtype_info - name;
11154 LONGEST L, U;
11155 struct type *type;
11156 char *bounds_str;
11157 int n;
11158
11159 GROW_VECT (name_buf, name_len, prefix_len + 5);
11160 strncpy (name_buf, name, prefix_len);
11161 name_buf[prefix_len] = '\0';
11162
11163 subtype_info += 5;
11164 bounds_str = strchr (subtype_info, '_');
11165 n = 1;
11166
d2e4a39e 11167 if (*subtype_info == 'L')
4c4b4cd2
PH
11168 {
11169 if (!ada_scan_number (bounds_str, n, &L, &n)
11170 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11171 return raw_type;
11172 if (bounds_str[n] == '_')
11173 n += 2;
0963b4bd 11174 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11175 n += 1;
11176 subtype_info += 1;
11177 }
d2e4a39e 11178 else
4c4b4cd2
PH
11179 {
11180 int ok;
5b4ee69b 11181
4c4b4cd2
PH
11182 strcpy (name_buf + prefix_len, "___L");
11183 L = get_int_var_value (name_buf, &ok);
11184 if (!ok)
11185 {
323e0a4a 11186 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11187 L = 1;
11188 }
11189 }
14f9c5c9 11190
d2e4a39e 11191 if (*subtype_info == 'U')
4c4b4cd2
PH
11192 {
11193 if (!ada_scan_number (bounds_str, n, &U, &n)
11194 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11195 return raw_type;
11196 }
d2e4a39e 11197 else
4c4b4cd2
PH
11198 {
11199 int ok;
5b4ee69b 11200
4c4b4cd2
PH
11201 strcpy (name_buf + prefix_len, "___U");
11202 U = get_int_var_value (name_buf, &ok);
11203 if (!ok)
11204 {
323e0a4a 11205 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11206 U = L;
11207 }
11208 }
14f9c5c9 11209
0c9c3474
SA
11210 type = create_static_range_type (alloc_type_copy (raw_type),
11211 base_type, L, U);
d2e4a39e 11212 TYPE_NAME (type) = name;
14f9c5c9
AS
11213 return type;
11214 }
11215}
11216
4c4b4cd2
PH
11217/* True iff NAME is the name of a range type. */
11218
14f9c5c9 11219int
d2e4a39e 11220ada_is_range_type_name (const char *name)
14f9c5c9
AS
11221{
11222 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11223}
14f9c5c9 11224\f
d2e4a39e 11225
4c4b4cd2
PH
11226 /* Modular types */
11227
11228/* True iff TYPE is an Ada modular type. */
14f9c5c9 11229
14f9c5c9 11230int
d2e4a39e 11231ada_is_modular_type (struct type *type)
14f9c5c9 11232{
18af8284 11233 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
11234
11235 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 11236 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 11237 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11238}
11239
4c4b4cd2
PH
11240/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11241
61ee279c 11242ULONGEST
0056e4d5 11243ada_modulus (struct type *type)
14f9c5c9 11244{
43bbcdc2 11245 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11246}
d2e4a39e 11247\f
f7f9143b
JB
11248
11249/* Ada exception catchpoint support:
11250 ---------------------------------
11251
11252 We support 3 kinds of exception catchpoints:
11253 . catchpoints on Ada exceptions
11254 . catchpoints on unhandled Ada exceptions
11255 . catchpoints on failed assertions
11256
11257 Exceptions raised during failed assertions, or unhandled exceptions
11258 could perfectly be caught with the general catchpoint on Ada exceptions.
11259 However, we can easily differentiate these two special cases, and having
11260 the option to distinguish these two cases from the rest can be useful
11261 to zero-in on certain situations.
11262
11263 Exception catchpoints are a specialized form of breakpoint,
11264 since they rely on inserting breakpoints inside known routines
11265 of the GNAT runtime. The implementation therefore uses a standard
11266 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11267 of breakpoint_ops.
11268
0259addd
JB
11269 Support in the runtime for exception catchpoints have been changed
11270 a few times already, and these changes affect the implementation
11271 of these catchpoints. In order to be able to support several
11272 variants of the runtime, we use a sniffer that will determine
28010a5d 11273 the runtime variant used by the program being debugged. */
f7f9143b 11274
82eacd52
JB
11275/* Ada's standard exceptions.
11276
11277 The Ada 83 standard also defined Numeric_Error. But there so many
11278 situations where it was unclear from the Ada 83 Reference Manual
11279 (RM) whether Constraint_Error or Numeric_Error should be raised,
11280 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11281 Interpretation saying that anytime the RM says that Numeric_Error
11282 should be raised, the implementation may raise Constraint_Error.
11283 Ada 95 went one step further and pretty much removed Numeric_Error
11284 from the list of standard exceptions (it made it a renaming of
11285 Constraint_Error, to help preserve compatibility when compiling
11286 an Ada83 compiler). As such, we do not include Numeric_Error from
11287 this list of standard exceptions. */
3d0b0fa3
JB
11288
11289static char *standard_exc[] = {
11290 "constraint_error",
11291 "program_error",
11292 "storage_error",
11293 "tasking_error"
11294};
11295
0259addd
JB
11296typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11297
11298/* A structure that describes how to support exception catchpoints
11299 for a given executable. */
11300
11301struct exception_support_info
11302{
11303 /* The name of the symbol to break on in order to insert
11304 a catchpoint on exceptions. */
11305 const char *catch_exception_sym;
11306
11307 /* The name of the symbol to break on in order to insert
11308 a catchpoint on unhandled exceptions. */
11309 const char *catch_exception_unhandled_sym;
11310
11311 /* The name of the symbol to break on in order to insert
11312 a catchpoint on failed assertions. */
11313 const char *catch_assert_sym;
11314
11315 /* Assuming that the inferior just triggered an unhandled exception
11316 catchpoint, this function is responsible for returning the address
11317 in inferior memory where the name of that exception is stored.
11318 Return zero if the address could not be computed. */
11319 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11320};
11321
11322static CORE_ADDR ada_unhandled_exception_name_addr (void);
11323static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11324
11325/* The following exception support info structure describes how to
11326 implement exception catchpoints with the latest version of the
11327 Ada runtime (as of 2007-03-06). */
11328
11329static const struct exception_support_info default_exception_support_info =
11330{
11331 "__gnat_debug_raise_exception", /* catch_exception_sym */
11332 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11333 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11334 ada_unhandled_exception_name_addr
11335};
11336
11337/* The following exception support info structure describes how to
11338 implement exception catchpoints with a slightly older version
11339 of the Ada runtime. */
11340
11341static const struct exception_support_info exception_support_info_fallback =
11342{
11343 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11344 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11345 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11346 ada_unhandled_exception_name_addr_from_raise
11347};
11348
f17011e0
JB
11349/* Return nonzero if we can detect the exception support routines
11350 described in EINFO.
11351
11352 This function errors out if an abnormal situation is detected
11353 (for instance, if we find the exception support routines, but
11354 that support is found to be incomplete). */
11355
11356static int
11357ada_has_this_exception_support (const struct exception_support_info *einfo)
11358{
11359 struct symbol *sym;
11360
11361 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11362 that should be compiled with debugging information. As a result, we
11363 expect to find that symbol in the symtabs. */
11364
11365 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11366 if (sym == NULL)
a6af7abe
JB
11367 {
11368 /* Perhaps we did not find our symbol because the Ada runtime was
11369 compiled without debugging info, or simply stripped of it.
11370 It happens on some GNU/Linux distributions for instance, where
11371 users have to install a separate debug package in order to get
11372 the runtime's debugging info. In that situation, let the user
11373 know why we cannot insert an Ada exception catchpoint.
11374
11375 Note: Just for the purpose of inserting our Ada exception
11376 catchpoint, we could rely purely on the associated minimal symbol.
11377 But we would be operating in degraded mode anyway, since we are
11378 still lacking the debugging info needed later on to extract
11379 the name of the exception being raised (this name is printed in
11380 the catchpoint message, and is also used when trying to catch
11381 a specific exception). We do not handle this case for now. */
3b7344d5 11382 struct bound_minimal_symbol msym
1c8e84b0
JB
11383 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11384
3b7344d5 11385 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11386 error (_("Your Ada runtime appears to be missing some debugging "
11387 "information.\nCannot insert Ada exception catchpoint "
11388 "in this configuration."));
11389
11390 return 0;
11391 }
f17011e0
JB
11392
11393 /* Make sure that the symbol we found corresponds to a function. */
11394
11395 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11396 error (_("Symbol \"%s\" is not a function (class = %d)"),
11397 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11398
11399 return 1;
11400}
11401
0259addd
JB
11402/* Inspect the Ada runtime and determine which exception info structure
11403 should be used to provide support for exception catchpoints.
11404
3eecfa55
JB
11405 This function will always set the per-inferior exception_info,
11406 or raise an error. */
0259addd
JB
11407
11408static void
11409ada_exception_support_info_sniffer (void)
11410{
3eecfa55 11411 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11412
11413 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11414 if (data->exception_info != NULL)
0259addd
JB
11415 return;
11416
11417 /* Check the latest (default) exception support info. */
f17011e0 11418 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11419 {
3eecfa55 11420 data->exception_info = &default_exception_support_info;
0259addd
JB
11421 return;
11422 }
11423
11424 /* Try our fallback exception suport info. */
f17011e0 11425 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11426 {
3eecfa55 11427 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11428 return;
11429 }
11430
11431 /* Sometimes, it is normal for us to not be able to find the routine
11432 we are looking for. This happens when the program is linked with
11433 the shared version of the GNAT runtime, and the program has not been
11434 started yet. Inform the user of these two possible causes if
11435 applicable. */
11436
ccefe4c4 11437 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11438 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11439
11440 /* If the symbol does not exist, then check that the program is
11441 already started, to make sure that shared libraries have been
11442 loaded. If it is not started, this may mean that the symbol is
11443 in a shared library. */
11444
11445 if (ptid_get_pid (inferior_ptid) == 0)
11446 error (_("Unable to insert catchpoint. Try to start the program first."));
11447
11448 /* At this point, we know that we are debugging an Ada program and
11449 that the inferior has been started, but we still are not able to
0963b4bd 11450 find the run-time symbols. That can mean that we are in
0259addd
JB
11451 configurable run time mode, or that a-except as been optimized
11452 out by the linker... In any case, at this point it is not worth
11453 supporting this feature. */
11454
7dda8cff 11455 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11456}
11457
f7f9143b
JB
11458/* True iff FRAME is very likely to be that of a function that is
11459 part of the runtime system. This is all very heuristic, but is
11460 intended to be used as advice as to what frames are uninteresting
11461 to most users. */
11462
11463static int
11464is_known_support_routine (struct frame_info *frame)
11465{
4ed6b5be 11466 struct symtab_and_line sal;
55b87a52 11467 char *func_name;
692465f1 11468 enum language func_lang;
f7f9143b 11469 int i;
f35a17b5 11470 const char *fullname;
f7f9143b 11471
4ed6b5be
JB
11472 /* If this code does not have any debugging information (no symtab),
11473 This cannot be any user code. */
f7f9143b 11474
4ed6b5be 11475 find_frame_sal (frame, &sal);
f7f9143b
JB
11476 if (sal.symtab == NULL)
11477 return 1;
11478
4ed6b5be
JB
11479 /* If there is a symtab, but the associated source file cannot be
11480 located, then assume this is not user code: Selecting a frame
11481 for which we cannot display the code would not be very helpful
11482 for the user. This should also take care of case such as VxWorks
11483 where the kernel has some debugging info provided for a few units. */
f7f9143b 11484
f35a17b5
JK
11485 fullname = symtab_to_fullname (sal.symtab);
11486 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11487 return 1;
11488
4ed6b5be
JB
11489 /* Check the unit filename againt the Ada runtime file naming.
11490 We also check the name of the objfile against the name of some
11491 known system libraries that sometimes come with debugging info
11492 too. */
11493
f7f9143b
JB
11494 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11495 {
11496 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11497 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 11498 return 1;
4ed6b5be 11499 if (sal.symtab->objfile != NULL
4262abfb 11500 && re_exec (objfile_name (sal.symtab->objfile)))
4ed6b5be 11501 return 1;
f7f9143b
JB
11502 }
11503
4ed6b5be 11504 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11505
e9e07ba6 11506 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
11507 if (func_name == NULL)
11508 return 1;
11509
11510 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11511 {
11512 re_comp (known_auxiliary_function_name_patterns[i]);
11513 if (re_exec (func_name))
55b87a52
KS
11514 {
11515 xfree (func_name);
11516 return 1;
11517 }
f7f9143b
JB
11518 }
11519
55b87a52 11520 xfree (func_name);
f7f9143b
JB
11521 return 0;
11522}
11523
11524/* Find the first frame that contains debugging information and that is not
11525 part of the Ada run-time, starting from FI and moving upward. */
11526
0ef643c8 11527void
f7f9143b
JB
11528ada_find_printable_frame (struct frame_info *fi)
11529{
11530 for (; fi != NULL; fi = get_prev_frame (fi))
11531 {
11532 if (!is_known_support_routine (fi))
11533 {
11534 select_frame (fi);
11535 break;
11536 }
11537 }
11538
11539}
11540
11541/* Assuming that the inferior just triggered an unhandled exception
11542 catchpoint, return the address in inferior memory where the name
11543 of the exception is stored.
11544
11545 Return zero if the address could not be computed. */
11546
11547static CORE_ADDR
11548ada_unhandled_exception_name_addr (void)
0259addd
JB
11549{
11550 return parse_and_eval_address ("e.full_name");
11551}
11552
11553/* Same as ada_unhandled_exception_name_addr, except that this function
11554 should be used when the inferior uses an older version of the runtime,
11555 where the exception name needs to be extracted from a specific frame
11556 several frames up in the callstack. */
11557
11558static CORE_ADDR
11559ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11560{
11561 int frame_level;
11562 struct frame_info *fi;
3eecfa55 11563 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
55b87a52 11564 struct cleanup *old_chain;
f7f9143b
JB
11565
11566 /* To determine the name of this exception, we need to select
11567 the frame corresponding to RAISE_SYM_NAME. This frame is
11568 at least 3 levels up, so we simply skip the first 3 frames
11569 without checking the name of their associated function. */
11570 fi = get_current_frame ();
11571 for (frame_level = 0; frame_level < 3; frame_level += 1)
11572 if (fi != NULL)
11573 fi = get_prev_frame (fi);
11574
55b87a52 11575 old_chain = make_cleanup (null_cleanup, NULL);
f7f9143b
JB
11576 while (fi != NULL)
11577 {
55b87a52 11578 char *func_name;
692465f1
JB
11579 enum language func_lang;
11580
e9e07ba6 11581 find_frame_funname (fi, &func_name, &func_lang, NULL);
55b87a52
KS
11582 if (func_name != NULL)
11583 {
11584 make_cleanup (xfree, func_name);
11585
11586 if (strcmp (func_name,
11587 data->exception_info->catch_exception_sym) == 0)
11588 break; /* We found the frame we were looking for... */
11589 fi = get_prev_frame (fi);
11590 }
f7f9143b 11591 }
55b87a52 11592 do_cleanups (old_chain);
f7f9143b
JB
11593
11594 if (fi == NULL)
11595 return 0;
11596
11597 select_frame (fi);
11598 return parse_and_eval_address ("id.full_name");
11599}
11600
11601/* Assuming the inferior just triggered an Ada exception catchpoint
11602 (of any type), return the address in inferior memory where the name
11603 of the exception is stored, if applicable.
11604
11605 Return zero if the address could not be computed, or if not relevant. */
11606
11607static CORE_ADDR
761269c8 11608ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11609 struct breakpoint *b)
11610{
3eecfa55
JB
11611 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11612
f7f9143b
JB
11613 switch (ex)
11614 {
761269c8 11615 case ada_catch_exception:
f7f9143b
JB
11616 return (parse_and_eval_address ("e.full_name"));
11617 break;
11618
761269c8 11619 case ada_catch_exception_unhandled:
3eecfa55 11620 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
11621 break;
11622
761269c8 11623 case ada_catch_assert:
f7f9143b
JB
11624 return 0; /* Exception name is not relevant in this case. */
11625 break;
11626
11627 default:
11628 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11629 break;
11630 }
11631
11632 return 0; /* Should never be reached. */
11633}
11634
11635/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11636 any error that ada_exception_name_addr_1 might cause to be thrown.
11637 When an error is intercepted, a warning with the error message is printed,
11638 and zero is returned. */
11639
11640static CORE_ADDR
761269c8 11641ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11642 struct breakpoint *b)
11643{
bfd189b1 11644 volatile struct gdb_exception e;
f7f9143b
JB
11645 CORE_ADDR result = 0;
11646
11647 TRY_CATCH (e, RETURN_MASK_ERROR)
11648 {
11649 result = ada_exception_name_addr_1 (ex, b);
11650 }
11651
11652 if (e.reason < 0)
11653 {
11654 warning (_("failed to get exception name: %s"), e.message);
11655 return 0;
11656 }
11657
11658 return result;
11659}
11660
28010a5d
PA
11661static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11662
11663/* Ada catchpoints.
11664
11665 In the case of catchpoints on Ada exceptions, the catchpoint will
11666 stop the target on every exception the program throws. When a user
11667 specifies the name of a specific exception, we translate this
11668 request into a condition expression (in text form), and then parse
11669 it into an expression stored in each of the catchpoint's locations.
11670 We then use this condition to check whether the exception that was
11671 raised is the one the user is interested in. If not, then the
11672 target is resumed again. We store the name of the requested
11673 exception, in order to be able to re-set the condition expression
11674 when symbols change. */
11675
11676/* An instance of this type is used to represent an Ada catchpoint
11677 breakpoint location. It includes a "struct bp_location" as a kind
11678 of base class; users downcast to "struct bp_location *" when
11679 needed. */
11680
11681struct ada_catchpoint_location
11682{
11683 /* The base class. */
11684 struct bp_location base;
11685
11686 /* The condition that checks whether the exception that was raised
11687 is the specific exception the user specified on catchpoint
11688 creation. */
11689 struct expression *excep_cond_expr;
11690};
11691
11692/* Implement the DTOR method in the bp_location_ops structure for all
11693 Ada exception catchpoint kinds. */
11694
11695static void
11696ada_catchpoint_location_dtor (struct bp_location *bl)
11697{
11698 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11699
11700 xfree (al->excep_cond_expr);
11701}
11702
11703/* The vtable to be used in Ada catchpoint locations. */
11704
11705static const struct bp_location_ops ada_catchpoint_location_ops =
11706{
11707 ada_catchpoint_location_dtor
11708};
11709
11710/* An instance of this type is used to represent an Ada catchpoint.
11711 It includes a "struct breakpoint" as a kind of base class; users
11712 downcast to "struct breakpoint *" when needed. */
11713
11714struct ada_catchpoint
11715{
11716 /* The base class. */
11717 struct breakpoint base;
11718
11719 /* The name of the specific exception the user specified. */
11720 char *excep_string;
11721};
11722
11723/* Parse the exception condition string in the context of each of the
11724 catchpoint's locations, and store them for later evaluation. */
11725
11726static void
11727create_excep_cond_exprs (struct ada_catchpoint *c)
11728{
11729 struct cleanup *old_chain;
11730 struct bp_location *bl;
11731 char *cond_string;
11732
11733 /* Nothing to do if there's no specific exception to catch. */
11734 if (c->excep_string == NULL)
11735 return;
11736
11737 /* Same if there are no locations... */
11738 if (c->base.loc == NULL)
11739 return;
11740
11741 /* Compute the condition expression in text form, from the specific
11742 expection we want to catch. */
11743 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11744 old_chain = make_cleanup (xfree, cond_string);
11745
11746 /* Iterate over all the catchpoint's locations, and parse an
11747 expression for each. */
11748 for (bl = c->base.loc; bl != NULL; bl = bl->next)
11749 {
11750 struct ada_catchpoint_location *ada_loc
11751 = (struct ada_catchpoint_location *) bl;
11752 struct expression *exp = NULL;
11753
11754 if (!bl->shlib_disabled)
11755 {
11756 volatile struct gdb_exception e;
bbc13ae3 11757 const char *s;
28010a5d
PA
11758
11759 s = cond_string;
11760 TRY_CATCH (e, RETURN_MASK_ERROR)
11761 {
1bb9788d
TT
11762 exp = parse_exp_1 (&s, bl->address,
11763 block_for_pc (bl->address), 0);
28010a5d
PA
11764 }
11765 if (e.reason < 0)
849f2b52
JB
11766 {
11767 warning (_("failed to reevaluate internal exception condition "
11768 "for catchpoint %d: %s"),
11769 c->base.number, e.message);
11770 /* There is a bug in GCC on sparc-solaris when building with
11771 optimization which causes EXP to change unexpectedly
11772 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11773 The problem should be fixed starting with GCC 4.9.
11774 In the meantime, work around it by forcing EXP back
11775 to NULL. */
11776 exp = NULL;
11777 }
28010a5d
PA
11778 }
11779
11780 ada_loc->excep_cond_expr = exp;
11781 }
11782
11783 do_cleanups (old_chain);
11784}
11785
11786/* Implement the DTOR method in the breakpoint_ops structure for all
11787 exception catchpoint kinds. */
11788
11789static void
761269c8 11790dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11791{
11792 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11793
11794 xfree (c->excep_string);
348d480f 11795
2060206e 11796 bkpt_breakpoint_ops.dtor (b);
28010a5d
PA
11797}
11798
11799/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11800 structure for all exception catchpoint kinds. */
11801
11802static struct bp_location *
761269c8 11803allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
11804 struct breakpoint *self)
11805{
11806 struct ada_catchpoint_location *loc;
11807
11808 loc = XNEW (struct ada_catchpoint_location);
11809 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11810 loc->excep_cond_expr = NULL;
11811 return &loc->base;
11812}
11813
11814/* Implement the RE_SET method in the breakpoint_ops structure for all
11815 exception catchpoint kinds. */
11816
11817static void
761269c8 11818re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11819{
11820 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11821
11822 /* Call the base class's method. This updates the catchpoint's
11823 locations. */
2060206e 11824 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
11825
11826 /* Reparse the exception conditional expressions. One for each
11827 location. */
11828 create_excep_cond_exprs (c);
11829}
11830
11831/* Returns true if we should stop for this breakpoint hit. If the
11832 user specified a specific exception, we only want to cause a stop
11833 if the program thrown that exception. */
11834
11835static int
11836should_stop_exception (const struct bp_location *bl)
11837{
11838 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11839 const struct ada_catchpoint_location *ada_loc
11840 = (const struct ada_catchpoint_location *) bl;
11841 volatile struct gdb_exception ex;
11842 int stop;
11843
11844 /* With no specific exception, should always stop. */
11845 if (c->excep_string == NULL)
11846 return 1;
11847
11848 if (ada_loc->excep_cond_expr == NULL)
11849 {
11850 /* We will have a NULL expression if back when we were creating
11851 the expressions, this location's had failed to parse. */
11852 return 1;
11853 }
11854
11855 stop = 1;
11856 TRY_CATCH (ex, RETURN_MASK_ALL)
11857 {
11858 struct value *mark;
11859
11860 mark = value_mark ();
11861 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11862 value_free_to_mark (mark);
11863 }
11864 if (ex.reason < 0)
11865 exception_fprintf (gdb_stderr, ex,
11866 _("Error in testing exception condition:\n"));
11867 return stop;
11868}
11869
11870/* Implement the CHECK_STATUS method in the breakpoint_ops structure
11871 for all exception catchpoint kinds. */
11872
11873static void
761269c8 11874check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
11875{
11876 bs->stop = should_stop_exception (bs->bp_location_at);
11877}
11878
f7f9143b
JB
11879/* Implement the PRINT_IT method in the breakpoint_ops structure
11880 for all exception catchpoint kinds. */
11881
11882static enum print_stop_action
761269c8 11883print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 11884{
79a45e25 11885 struct ui_out *uiout = current_uiout;
348d480f
PA
11886 struct breakpoint *b = bs->breakpoint_at;
11887
956a9fb9 11888 annotate_catchpoint (b->number);
f7f9143b 11889
956a9fb9 11890 if (ui_out_is_mi_like_p (uiout))
f7f9143b 11891 {
956a9fb9
JB
11892 ui_out_field_string (uiout, "reason",
11893 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11894 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
f7f9143b
JB
11895 }
11896
00eb2c4a
JB
11897 ui_out_text (uiout,
11898 b->disposition == disp_del ? "\nTemporary catchpoint "
11899 : "\nCatchpoint ");
956a9fb9
JB
11900 ui_out_field_int (uiout, "bkptno", b->number);
11901 ui_out_text (uiout, ", ");
f7f9143b 11902
f7f9143b
JB
11903 switch (ex)
11904 {
761269c8
JB
11905 case ada_catch_exception:
11906 case ada_catch_exception_unhandled:
956a9fb9
JB
11907 {
11908 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11909 char exception_name[256];
11910
11911 if (addr != 0)
11912 {
c714b426
PA
11913 read_memory (addr, (gdb_byte *) exception_name,
11914 sizeof (exception_name) - 1);
956a9fb9
JB
11915 exception_name [sizeof (exception_name) - 1] = '\0';
11916 }
11917 else
11918 {
11919 /* For some reason, we were unable to read the exception
11920 name. This could happen if the Runtime was compiled
11921 without debugging info, for instance. In that case,
11922 just replace the exception name by the generic string
11923 "exception" - it will read as "an exception" in the
11924 notification we are about to print. */
967cff16 11925 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
11926 }
11927 /* In the case of unhandled exception breakpoints, we print
11928 the exception name as "unhandled EXCEPTION_NAME", to make
11929 it clearer to the user which kind of catchpoint just got
11930 hit. We used ui_out_text to make sure that this extra
11931 info does not pollute the exception name in the MI case. */
761269c8 11932 if (ex == ada_catch_exception_unhandled)
956a9fb9
JB
11933 ui_out_text (uiout, "unhandled ");
11934 ui_out_field_string (uiout, "exception-name", exception_name);
11935 }
11936 break;
761269c8 11937 case ada_catch_assert:
956a9fb9
JB
11938 /* In this case, the name of the exception is not really
11939 important. Just print "failed assertion" to make it clearer
11940 that his program just hit an assertion-failure catchpoint.
11941 We used ui_out_text because this info does not belong in
11942 the MI output. */
11943 ui_out_text (uiout, "failed assertion");
11944 break;
f7f9143b 11945 }
956a9fb9
JB
11946 ui_out_text (uiout, " at ");
11947 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
11948
11949 return PRINT_SRC_AND_LOC;
11950}
11951
11952/* Implement the PRINT_ONE method in the breakpoint_ops structure
11953 for all exception catchpoint kinds. */
11954
11955static void
761269c8 11956print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 11957 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 11958{
79a45e25 11959 struct ui_out *uiout = current_uiout;
28010a5d 11960 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
11961 struct value_print_options opts;
11962
11963 get_user_print_options (&opts);
11964 if (opts.addressprint)
f7f9143b
JB
11965 {
11966 annotate_field (4);
5af949e3 11967 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
11968 }
11969
11970 annotate_field (5);
a6d9a66e 11971 *last_loc = b->loc;
f7f9143b
JB
11972 switch (ex)
11973 {
761269c8 11974 case ada_catch_exception:
28010a5d 11975 if (c->excep_string != NULL)
f7f9143b 11976 {
28010a5d
PA
11977 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11978
f7f9143b
JB
11979 ui_out_field_string (uiout, "what", msg);
11980 xfree (msg);
11981 }
11982 else
11983 ui_out_field_string (uiout, "what", "all Ada exceptions");
11984
11985 break;
11986
761269c8 11987 case ada_catch_exception_unhandled:
f7f9143b
JB
11988 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
11989 break;
11990
761269c8 11991 case ada_catch_assert:
f7f9143b
JB
11992 ui_out_field_string (uiout, "what", "failed Ada assertions");
11993 break;
11994
11995 default:
11996 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11997 break;
11998 }
11999}
12000
12001/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12002 for all exception catchpoint kinds. */
12003
12004static void
761269c8 12005print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12006 struct breakpoint *b)
12007{
28010a5d 12008 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12009 struct ui_out *uiout = current_uiout;
28010a5d 12010
00eb2c4a
JB
12011 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
12012 : _("Catchpoint "));
12013 ui_out_field_int (uiout, "bkptno", b->number);
12014 ui_out_text (uiout, ": ");
12015
f7f9143b
JB
12016 switch (ex)
12017 {
761269c8 12018 case ada_catch_exception:
28010a5d 12019 if (c->excep_string != NULL)
00eb2c4a
JB
12020 {
12021 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
12022 struct cleanup *old_chain = make_cleanup (xfree, info);
12023
12024 ui_out_text (uiout, info);
12025 do_cleanups (old_chain);
12026 }
f7f9143b 12027 else
00eb2c4a 12028 ui_out_text (uiout, _("all Ada exceptions"));
f7f9143b
JB
12029 break;
12030
761269c8 12031 case ada_catch_exception_unhandled:
00eb2c4a 12032 ui_out_text (uiout, _("unhandled Ada exceptions"));
f7f9143b
JB
12033 break;
12034
761269c8 12035 case ada_catch_assert:
00eb2c4a 12036 ui_out_text (uiout, _("failed Ada assertions"));
f7f9143b
JB
12037 break;
12038
12039 default:
12040 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12041 break;
12042 }
12043}
12044
6149aea9
PA
12045/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12046 for all exception catchpoint kinds. */
12047
12048static void
761269c8 12049print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
12050 struct breakpoint *b, struct ui_file *fp)
12051{
28010a5d
PA
12052 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12053
6149aea9
PA
12054 switch (ex)
12055 {
761269c8 12056 case ada_catch_exception:
6149aea9 12057 fprintf_filtered (fp, "catch exception");
28010a5d
PA
12058 if (c->excep_string != NULL)
12059 fprintf_filtered (fp, " %s", c->excep_string);
6149aea9
PA
12060 break;
12061
761269c8 12062 case ada_catch_exception_unhandled:
78076abc 12063 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12064 break;
12065
761269c8 12066 case ada_catch_assert:
6149aea9
PA
12067 fprintf_filtered (fp, "catch assert");
12068 break;
12069
12070 default:
12071 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12072 }
d9b3f62e 12073 print_recreate_thread (b, fp);
6149aea9
PA
12074}
12075
f7f9143b
JB
12076/* Virtual table for "catch exception" breakpoints. */
12077
28010a5d
PA
12078static void
12079dtor_catch_exception (struct breakpoint *b)
12080{
761269c8 12081 dtor_exception (ada_catch_exception, b);
28010a5d
PA
12082}
12083
12084static struct bp_location *
12085allocate_location_catch_exception (struct breakpoint *self)
12086{
761269c8 12087 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
12088}
12089
12090static void
12091re_set_catch_exception (struct breakpoint *b)
12092{
761269c8 12093 re_set_exception (ada_catch_exception, b);
28010a5d
PA
12094}
12095
12096static void
12097check_status_catch_exception (bpstat bs)
12098{
761269c8 12099 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
12100}
12101
f7f9143b 12102static enum print_stop_action
348d480f 12103print_it_catch_exception (bpstat bs)
f7f9143b 12104{
761269c8 12105 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
12106}
12107
12108static void
a6d9a66e 12109print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12110{
761269c8 12111 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
12112}
12113
12114static void
12115print_mention_catch_exception (struct breakpoint *b)
12116{
761269c8 12117 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
12118}
12119
6149aea9
PA
12120static void
12121print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
12122{
761269c8 12123 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
12124}
12125
2060206e 12126static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
12127
12128/* Virtual table for "catch exception unhandled" breakpoints. */
12129
28010a5d
PA
12130static void
12131dtor_catch_exception_unhandled (struct breakpoint *b)
12132{
761269c8 12133 dtor_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12134}
12135
12136static struct bp_location *
12137allocate_location_catch_exception_unhandled (struct breakpoint *self)
12138{
761269c8 12139 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
12140}
12141
12142static void
12143re_set_catch_exception_unhandled (struct breakpoint *b)
12144{
761269c8 12145 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
12146}
12147
12148static void
12149check_status_catch_exception_unhandled (bpstat bs)
12150{
761269c8 12151 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
12152}
12153
f7f9143b 12154static enum print_stop_action
348d480f 12155print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 12156{
761269c8 12157 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
12158}
12159
12160static void
a6d9a66e
UW
12161print_one_catch_exception_unhandled (struct breakpoint *b,
12162 struct bp_location **last_loc)
f7f9143b 12163{
761269c8 12164 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
12165}
12166
12167static void
12168print_mention_catch_exception_unhandled (struct breakpoint *b)
12169{
761269c8 12170 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
12171}
12172
6149aea9
PA
12173static void
12174print_recreate_catch_exception_unhandled (struct breakpoint *b,
12175 struct ui_file *fp)
12176{
761269c8 12177 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
12178}
12179
2060206e 12180static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
12181
12182/* Virtual table for "catch assert" breakpoints. */
12183
28010a5d
PA
12184static void
12185dtor_catch_assert (struct breakpoint *b)
12186{
761269c8 12187 dtor_exception (ada_catch_assert, b);
28010a5d
PA
12188}
12189
12190static struct bp_location *
12191allocate_location_catch_assert (struct breakpoint *self)
12192{
761269c8 12193 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
12194}
12195
12196static void
12197re_set_catch_assert (struct breakpoint *b)
12198{
761269c8 12199 re_set_exception (ada_catch_assert, b);
28010a5d
PA
12200}
12201
12202static void
12203check_status_catch_assert (bpstat bs)
12204{
761269c8 12205 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
12206}
12207
f7f9143b 12208static enum print_stop_action
348d480f 12209print_it_catch_assert (bpstat bs)
f7f9143b 12210{
761269c8 12211 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
12212}
12213
12214static void
a6d9a66e 12215print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12216{
761269c8 12217 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
12218}
12219
12220static void
12221print_mention_catch_assert (struct breakpoint *b)
12222{
761269c8 12223 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
12224}
12225
6149aea9
PA
12226static void
12227print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
12228{
761269c8 12229 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
12230}
12231
2060206e 12232static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 12233
f7f9143b
JB
12234/* Return a newly allocated copy of the first space-separated token
12235 in ARGSP, and then adjust ARGSP to point immediately after that
12236 token.
12237
12238 Return NULL if ARGPS does not contain any more tokens. */
12239
12240static char *
12241ada_get_next_arg (char **argsp)
12242{
12243 char *args = *argsp;
12244 char *end;
12245 char *result;
12246
0fcd72ba 12247 args = skip_spaces (args);
f7f9143b
JB
12248 if (args[0] == '\0')
12249 return NULL; /* No more arguments. */
12250
12251 /* Find the end of the current argument. */
12252
0fcd72ba 12253 end = skip_to_space (args);
f7f9143b
JB
12254
12255 /* Adjust ARGSP to point to the start of the next argument. */
12256
12257 *argsp = end;
12258
12259 /* Make a copy of the current argument and return it. */
12260
12261 result = xmalloc (end - args + 1);
12262 strncpy (result, args, end - args);
12263 result[end - args] = '\0';
12264
12265 return result;
12266}
12267
12268/* Split the arguments specified in a "catch exception" command.
12269 Set EX to the appropriate catchpoint type.
28010a5d 12270 Set EXCEP_STRING to the name of the specific exception if
5845583d
JB
12271 specified by the user.
12272 If a condition is found at the end of the arguments, the condition
12273 expression is stored in COND_STRING (memory must be deallocated
12274 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12275
12276static void
12277catch_ada_exception_command_split (char *args,
761269c8 12278 enum ada_exception_catchpoint_kind *ex,
5845583d
JB
12279 char **excep_string,
12280 char **cond_string)
f7f9143b
JB
12281{
12282 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
12283 char *exception_name;
5845583d 12284 char *cond = NULL;
f7f9143b
JB
12285
12286 exception_name = ada_get_next_arg (&args);
5845583d
JB
12287 if (exception_name != NULL && strcmp (exception_name, "if") == 0)
12288 {
12289 /* This is not an exception name; this is the start of a condition
12290 expression for a catchpoint on all exceptions. So, "un-get"
12291 this token, and set exception_name to NULL. */
12292 xfree (exception_name);
12293 exception_name = NULL;
12294 args -= 2;
12295 }
f7f9143b
JB
12296 make_cleanup (xfree, exception_name);
12297
5845583d 12298 /* Check to see if we have a condition. */
f7f9143b 12299
0fcd72ba 12300 args = skip_spaces (args);
5845583d
JB
12301 if (strncmp (args, "if", 2) == 0
12302 && (isspace (args[2]) || args[2] == '\0'))
12303 {
12304 args += 2;
12305 args = skip_spaces (args);
12306
12307 if (args[0] == '\0')
12308 error (_("Condition missing after `if' keyword"));
12309 cond = xstrdup (args);
12310 make_cleanup (xfree, cond);
12311
12312 args += strlen (args);
12313 }
12314
12315 /* Check that we do not have any more arguments. Anything else
12316 is unexpected. */
f7f9143b
JB
12317
12318 if (args[0] != '\0')
12319 error (_("Junk at end of expression"));
12320
12321 discard_cleanups (old_chain);
12322
12323 if (exception_name == NULL)
12324 {
12325 /* Catch all exceptions. */
761269c8 12326 *ex = ada_catch_exception;
28010a5d 12327 *excep_string = NULL;
f7f9143b
JB
12328 }
12329 else if (strcmp (exception_name, "unhandled") == 0)
12330 {
12331 /* Catch unhandled exceptions. */
761269c8 12332 *ex = ada_catch_exception_unhandled;
28010a5d 12333 *excep_string = NULL;
f7f9143b
JB
12334 }
12335 else
12336 {
12337 /* Catch a specific exception. */
761269c8 12338 *ex = ada_catch_exception;
28010a5d 12339 *excep_string = exception_name;
f7f9143b 12340 }
5845583d 12341 *cond_string = cond;
f7f9143b
JB
12342}
12343
12344/* Return the name of the symbol on which we should break in order to
12345 implement a catchpoint of the EX kind. */
12346
12347static const char *
761269c8 12348ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12349{
3eecfa55
JB
12350 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12351
12352 gdb_assert (data->exception_info != NULL);
0259addd 12353
f7f9143b
JB
12354 switch (ex)
12355 {
761269c8 12356 case ada_catch_exception:
3eecfa55 12357 return (data->exception_info->catch_exception_sym);
f7f9143b 12358 break;
761269c8 12359 case ada_catch_exception_unhandled:
3eecfa55 12360 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 12361 break;
761269c8 12362 case ada_catch_assert:
3eecfa55 12363 return (data->exception_info->catch_assert_sym);
f7f9143b
JB
12364 break;
12365 default:
12366 internal_error (__FILE__, __LINE__,
12367 _("unexpected catchpoint kind (%d)"), ex);
12368 }
12369}
12370
12371/* Return the breakpoint ops "virtual table" used for catchpoints
12372 of the EX kind. */
12373
c0a91b2b 12374static const struct breakpoint_ops *
761269c8 12375ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12376{
12377 switch (ex)
12378 {
761269c8 12379 case ada_catch_exception:
f7f9143b
JB
12380 return (&catch_exception_breakpoint_ops);
12381 break;
761269c8 12382 case ada_catch_exception_unhandled:
f7f9143b
JB
12383 return (&catch_exception_unhandled_breakpoint_ops);
12384 break;
761269c8 12385 case ada_catch_assert:
f7f9143b
JB
12386 return (&catch_assert_breakpoint_ops);
12387 break;
12388 default:
12389 internal_error (__FILE__, __LINE__,
12390 _("unexpected catchpoint kind (%d)"), ex);
12391 }
12392}
12393
12394/* Return the condition that will be used to match the current exception
12395 being raised with the exception that the user wants to catch. This
12396 assumes that this condition is used when the inferior just triggered
12397 an exception catchpoint.
12398
12399 The string returned is a newly allocated string that needs to be
12400 deallocated later. */
12401
12402static char *
28010a5d 12403ada_exception_catchpoint_cond_string (const char *excep_string)
f7f9143b 12404{
3d0b0fa3
JB
12405 int i;
12406
0963b4bd 12407 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12408 runtime units that have been compiled without debugging info; if
28010a5d 12409 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12410 exception (e.g. "constraint_error") then, during the evaluation
12411 of the condition expression, the symbol lookup on this name would
0963b4bd 12412 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12413 may then be set only on user-defined exceptions which have the
12414 same not-fully-qualified name (e.g. my_package.constraint_error).
12415
12416 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12417 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12418 exception constraint_error" is rewritten into "catch exception
12419 standard.constraint_error".
12420
12421 If an exception named contraint_error is defined in another package of
12422 the inferior program, then the only way to specify this exception as a
12423 breakpoint condition is to use its fully-qualified named:
12424 e.g. my_package.constraint_error. */
12425
12426 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12427 {
28010a5d 12428 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3
JB
12429 {
12430 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
28010a5d 12431 excep_string);
3d0b0fa3
JB
12432 }
12433 }
28010a5d 12434 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
f7f9143b
JB
12435}
12436
12437/* Return the symtab_and_line that should be used to insert an exception
12438 catchpoint of the TYPE kind.
12439
28010a5d
PA
12440 EXCEP_STRING should contain the name of a specific exception that
12441 the catchpoint should catch, or NULL otherwise.
f7f9143b 12442
28010a5d
PA
12443 ADDR_STRING returns the name of the function where the real
12444 breakpoint that implements the catchpoints is set, depending on the
12445 type of catchpoint we need to create. */
f7f9143b
JB
12446
12447static struct symtab_and_line
761269c8 12448ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
c0a91b2b 12449 char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12450{
12451 const char *sym_name;
12452 struct symbol *sym;
f7f9143b 12453
0259addd
JB
12454 /* First, find out which exception support info to use. */
12455 ada_exception_support_info_sniffer ();
12456
12457 /* Then lookup the function on which we will break in order to catch
f7f9143b 12458 the Ada exceptions requested by the user. */
f7f9143b
JB
12459 sym_name = ada_exception_sym_name (ex);
12460 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12461
f17011e0
JB
12462 /* We can assume that SYM is not NULL at this stage. If the symbol
12463 did not exist, ada_exception_support_info_sniffer would have
12464 raised an exception.
f7f9143b 12465
f17011e0
JB
12466 Also, ada_exception_support_info_sniffer should have already
12467 verified that SYM is a function symbol. */
12468 gdb_assert (sym != NULL);
12469 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
f7f9143b
JB
12470
12471 /* Set ADDR_STRING. */
f7f9143b
JB
12472 *addr_string = xstrdup (sym_name);
12473
f7f9143b 12474 /* Set OPS. */
4b9eee8c 12475 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12476
f17011e0 12477 return find_function_start_sal (sym, 1);
f7f9143b
JB
12478}
12479
b4a5b78b 12480/* Create an Ada exception catchpoint.
f7f9143b 12481
b4a5b78b 12482 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12483
2df4d1d5
JB
12484 If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12485 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12486 of the exception to which this catchpoint applies. When not NULL,
12487 the string must be allocated on the heap, and its deallocation
12488 is no longer the responsibility of the caller.
12489
12490 COND_STRING, if not NULL, is the catchpoint condition. This string
12491 must be allocated on the heap, and its deallocation is no longer
12492 the responsibility of the caller.
f7f9143b 12493
b4a5b78b
JB
12494 TEMPFLAG, if nonzero, means that the underlying breakpoint
12495 should be temporary.
28010a5d 12496
b4a5b78b 12497 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12498
349774ef 12499void
28010a5d 12500create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12501 enum ada_exception_catchpoint_kind ex_kind,
28010a5d 12502 char *excep_string,
5845583d 12503 char *cond_string,
28010a5d 12504 int tempflag,
349774ef 12505 int disabled,
28010a5d
PA
12506 int from_tty)
12507{
12508 struct ada_catchpoint *c;
b4a5b78b
JB
12509 char *addr_string = NULL;
12510 const struct breakpoint_ops *ops = NULL;
12511 struct symtab_and_line sal
12512 = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
28010a5d
PA
12513
12514 c = XNEW (struct ada_catchpoint);
12515 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
349774ef 12516 ops, tempflag, disabled, from_tty);
28010a5d
PA
12517 c->excep_string = excep_string;
12518 create_excep_cond_exprs (c);
5845583d
JB
12519 if (cond_string != NULL)
12520 set_breakpoint_condition (&c->base, cond_string, from_tty);
3ea46bff 12521 install_breakpoint (0, &c->base, 1);
f7f9143b
JB
12522}
12523
9ac4176b
PA
12524/* Implement the "catch exception" command. */
12525
12526static void
12527catch_ada_exception_command (char *arg, int from_tty,
12528 struct cmd_list_element *command)
12529{
12530 struct gdbarch *gdbarch = get_current_arch ();
12531 int tempflag;
761269c8 12532 enum ada_exception_catchpoint_kind ex_kind;
28010a5d 12533 char *excep_string = NULL;
5845583d 12534 char *cond_string = NULL;
9ac4176b
PA
12535
12536 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12537
12538 if (!arg)
12539 arg = "";
b4a5b78b
JB
12540 catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12541 &cond_string);
12542 create_ada_exception_catchpoint (gdbarch, ex_kind,
12543 excep_string, cond_string,
349774ef
JB
12544 tempflag, 1 /* enabled */,
12545 from_tty);
9ac4176b
PA
12546}
12547
b4a5b78b 12548/* Split the arguments specified in a "catch assert" command.
5845583d 12549
b4a5b78b
JB
12550 ARGS contains the command's arguments (or the empty string if
12551 no arguments were passed).
5845583d
JB
12552
12553 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12554 (the memory needs to be deallocated after use). */
5845583d 12555
b4a5b78b
JB
12556static void
12557catch_ada_assert_command_split (char *args, char **cond_string)
f7f9143b 12558{
5845583d 12559 args = skip_spaces (args);
f7f9143b 12560
5845583d
JB
12561 /* Check whether a condition was provided. */
12562 if (strncmp (args, "if", 2) == 0
12563 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12564 {
5845583d 12565 args += 2;
0fcd72ba 12566 args = skip_spaces (args);
5845583d
JB
12567 if (args[0] == '\0')
12568 error (_("condition missing after `if' keyword"));
12569 *cond_string = xstrdup (args);
f7f9143b
JB
12570 }
12571
5845583d
JB
12572 /* Otherwise, there should be no other argument at the end of
12573 the command. */
12574 else if (args[0] != '\0')
12575 error (_("Junk at end of arguments."));
f7f9143b
JB
12576}
12577
9ac4176b
PA
12578/* Implement the "catch assert" command. */
12579
12580static void
12581catch_assert_command (char *arg, int from_tty,
12582 struct cmd_list_element *command)
12583{
12584 struct gdbarch *gdbarch = get_current_arch ();
12585 int tempflag;
5845583d 12586 char *cond_string = NULL;
9ac4176b
PA
12587
12588 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12589
12590 if (!arg)
12591 arg = "";
b4a5b78b 12592 catch_ada_assert_command_split (arg, &cond_string);
761269c8 12593 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
b4a5b78b 12594 NULL, cond_string,
349774ef
JB
12595 tempflag, 1 /* enabled */,
12596 from_tty);
9ac4176b 12597}
778865d3
JB
12598
12599/* Return non-zero if the symbol SYM is an Ada exception object. */
12600
12601static int
12602ada_is_exception_sym (struct symbol *sym)
12603{
12604 const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12605
12606 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12607 && SYMBOL_CLASS (sym) != LOC_BLOCK
12608 && SYMBOL_CLASS (sym) != LOC_CONST
12609 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12610 && type_name != NULL && strcmp (type_name, "exception") == 0);
12611}
12612
12613/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12614 Ada exception object. This matches all exceptions except the ones
12615 defined by the Ada language. */
12616
12617static int
12618ada_is_non_standard_exception_sym (struct symbol *sym)
12619{
12620 int i;
12621
12622 if (!ada_is_exception_sym (sym))
12623 return 0;
12624
12625 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12626 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12627 return 0; /* A standard exception. */
12628
12629 /* Numeric_Error is also a standard exception, so exclude it.
12630 See the STANDARD_EXC description for more details as to why
12631 this exception is not listed in that array. */
12632 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12633 return 0;
12634
12635 return 1;
12636}
12637
12638/* A helper function for qsort, comparing two struct ada_exc_info
12639 objects.
12640
12641 The comparison is determined first by exception name, and then
12642 by exception address. */
12643
12644static int
12645compare_ada_exception_info (const void *a, const void *b)
12646{
12647 const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12648 const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12649 int result;
12650
12651 result = strcmp (exc_a->name, exc_b->name);
12652 if (result != 0)
12653 return result;
12654
12655 if (exc_a->addr < exc_b->addr)
12656 return -1;
12657 if (exc_a->addr > exc_b->addr)
12658 return 1;
12659
12660 return 0;
12661}
12662
12663/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12664 routine, but keeping the first SKIP elements untouched.
12665
12666 All duplicates are also removed. */
12667
12668static void
12669sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12670 int skip)
12671{
12672 struct ada_exc_info *to_sort
12673 = VEC_address (ada_exc_info, *exceptions) + skip;
12674 int to_sort_len
12675 = VEC_length (ada_exc_info, *exceptions) - skip;
12676 int i, j;
12677
12678 qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12679 compare_ada_exception_info);
12680
12681 for (i = 1, j = 1; i < to_sort_len; i++)
12682 if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12683 to_sort[j++] = to_sort[i];
12684 to_sort_len = j;
12685 VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12686}
12687
12688/* A function intended as the "name_matcher" callback in the struct
12689 quick_symbol_functions' expand_symtabs_matching method.
12690
12691 SEARCH_NAME is the symbol's search name.
12692
12693 If USER_DATA is not NULL, it is a pointer to a regext_t object
12694 used to match the symbol (by natural name). Otherwise, when USER_DATA
12695 is null, no filtering is performed, and all symbols are a positive
12696 match. */
12697
12698static int
12699ada_exc_search_name_matches (const char *search_name, void *user_data)
12700{
12701 regex_t *preg = user_data;
12702
12703 if (preg == NULL)
12704 return 1;
12705
12706 /* In Ada, the symbol "search name" is a linkage name, whereas
12707 the regular expression used to do the matching refers to
12708 the natural name. So match against the decoded name. */
12709 return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12710}
12711
12712/* Add all exceptions defined by the Ada standard whose name match
12713 a regular expression.
12714
12715 If PREG is not NULL, then this regexp_t object is used to
12716 perform the symbol name matching. Otherwise, no name-based
12717 filtering is performed.
12718
12719 EXCEPTIONS is a vector of exceptions to which matching exceptions
12720 gets pushed. */
12721
12722static void
12723ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12724{
12725 int i;
12726
12727 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12728 {
12729 if (preg == NULL
12730 || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12731 {
12732 struct bound_minimal_symbol msymbol
12733 = ada_lookup_simple_minsym (standard_exc[i]);
12734
12735 if (msymbol.minsym != NULL)
12736 {
12737 struct ada_exc_info info
77e371c0 12738 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3
JB
12739
12740 VEC_safe_push (ada_exc_info, *exceptions, &info);
12741 }
12742 }
12743 }
12744}
12745
12746/* Add all Ada exceptions defined locally and accessible from the given
12747 FRAME.
12748
12749 If PREG is not NULL, then this regexp_t object is used to
12750 perform the symbol name matching. Otherwise, no name-based
12751 filtering is performed.
12752
12753 EXCEPTIONS is a vector of exceptions to which matching exceptions
12754 gets pushed. */
12755
12756static void
12757ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12758 VEC(ada_exc_info) **exceptions)
12759{
12760 struct block *block = get_frame_block (frame, 0);
12761
12762 while (block != 0)
12763 {
12764 struct block_iterator iter;
12765 struct symbol *sym;
12766
12767 ALL_BLOCK_SYMBOLS (block, iter, sym)
12768 {
12769 switch (SYMBOL_CLASS (sym))
12770 {
12771 case LOC_TYPEDEF:
12772 case LOC_BLOCK:
12773 case LOC_CONST:
12774 break;
12775 default:
12776 if (ada_is_exception_sym (sym))
12777 {
12778 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12779 SYMBOL_VALUE_ADDRESS (sym)};
12780
12781 VEC_safe_push (ada_exc_info, *exceptions, &info);
12782 }
12783 }
12784 }
12785 if (BLOCK_FUNCTION (block) != NULL)
12786 break;
12787 block = BLOCK_SUPERBLOCK (block);
12788 }
12789}
12790
12791/* Add all exceptions defined globally whose name name match
12792 a regular expression, excluding standard exceptions.
12793
12794 The reason we exclude standard exceptions is that they need
12795 to be handled separately: Standard exceptions are defined inside
12796 a runtime unit which is normally not compiled with debugging info,
12797 and thus usually do not show up in our symbol search. However,
12798 if the unit was in fact built with debugging info, we need to
12799 exclude them because they would duplicate the entry we found
12800 during the special loop that specifically searches for those
12801 standard exceptions.
12802
12803 If PREG is not NULL, then this regexp_t object is used to
12804 perform the symbol name matching. Otherwise, no name-based
12805 filtering is performed.
12806
12807 EXCEPTIONS is a vector of exceptions to which matching exceptions
12808 gets pushed. */
12809
12810static void
12811ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12812{
12813 struct objfile *objfile;
12814 struct symtab *s;
12815
bb4142cf
DE
12816 expand_symtabs_matching (NULL, ada_exc_search_name_matches,
12817 VARIABLES_DOMAIN, preg);
778865d3
JB
12818
12819 ALL_PRIMARY_SYMTABS (objfile, s)
12820 {
12821 struct blockvector *bv = BLOCKVECTOR (s);
12822 int i;
12823
12824 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12825 {
12826 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12827 struct block_iterator iter;
12828 struct symbol *sym;
12829
12830 ALL_BLOCK_SYMBOLS (b, iter, sym)
12831 if (ada_is_non_standard_exception_sym (sym)
12832 && (preg == NULL
12833 || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12834 0, NULL, 0) == 0))
12835 {
12836 struct ada_exc_info info
12837 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12838
12839 VEC_safe_push (ada_exc_info, *exceptions, &info);
12840 }
12841 }
12842 }
12843}
12844
12845/* Implements ada_exceptions_list with the regular expression passed
12846 as a regex_t, rather than a string.
12847
12848 If not NULL, PREG is used to filter out exceptions whose names
12849 do not match. Otherwise, all exceptions are listed. */
12850
12851static VEC(ada_exc_info) *
12852ada_exceptions_list_1 (regex_t *preg)
12853{
12854 VEC(ada_exc_info) *result = NULL;
12855 struct cleanup *old_chain
12856 = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12857 int prev_len;
12858
12859 /* First, list the known standard exceptions. These exceptions
12860 need to be handled separately, as they are usually defined in
12861 runtime units that have been compiled without debugging info. */
12862
12863 ada_add_standard_exceptions (preg, &result);
12864
12865 /* Next, find all exceptions whose scope is local and accessible
12866 from the currently selected frame. */
12867
12868 if (has_stack_frames ())
12869 {
12870 prev_len = VEC_length (ada_exc_info, result);
12871 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12872 &result);
12873 if (VEC_length (ada_exc_info, result) > prev_len)
12874 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12875 }
12876
12877 /* Add all exceptions whose scope is global. */
12878
12879 prev_len = VEC_length (ada_exc_info, result);
12880 ada_add_global_exceptions (preg, &result);
12881 if (VEC_length (ada_exc_info, result) > prev_len)
12882 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12883
12884 discard_cleanups (old_chain);
12885 return result;
12886}
12887
12888/* Return a vector of ada_exc_info.
12889
12890 If REGEXP is NULL, all exceptions are included in the result.
12891 Otherwise, it should contain a valid regular expression,
12892 and only the exceptions whose names match that regular expression
12893 are included in the result.
12894
12895 The exceptions are sorted in the following order:
12896 - Standard exceptions (defined by the Ada language), in
12897 alphabetical order;
12898 - Exceptions only visible from the current frame, in
12899 alphabetical order;
12900 - Exceptions whose scope is global, in alphabetical order. */
12901
12902VEC(ada_exc_info) *
12903ada_exceptions_list (const char *regexp)
12904{
12905 VEC(ada_exc_info) *result = NULL;
12906 struct cleanup *old_chain = NULL;
12907 regex_t reg;
12908
12909 if (regexp != NULL)
12910 old_chain = compile_rx_or_error (&reg, regexp,
12911 _("invalid regular expression"));
12912
12913 result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12914
12915 if (old_chain != NULL)
12916 do_cleanups (old_chain);
12917 return result;
12918}
12919
12920/* Implement the "info exceptions" command. */
12921
12922static void
12923info_exceptions_command (char *regexp, int from_tty)
12924{
12925 VEC(ada_exc_info) *exceptions;
12926 struct cleanup *cleanup;
12927 struct gdbarch *gdbarch = get_current_arch ();
12928 int ix;
12929 struct ada_exc_info *info;
12930
12931 exceptions = ada_exceptions_list (regexp);
12932 cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12933
12934 if (regexp != NULL)
12935 printf_filtered
12936 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12937 else
12938 printf_filtered (_("All defined Ada exceptions:\n"));
12939
12940 for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12941 printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12942
12943 do_cleanups (cleanup);
12944}
12945
4c4b4cd2
PH
12946 /* Operators */
12947/* Information about operators given special treatment in functions
12948 below. */
12949/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
12950
12951#define ADA_OPERATORS \
12952 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12953 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12954 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12955 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12956 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12957 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12958 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12959 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12960 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12961 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12962 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12963 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12964 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12965 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12966 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
12967 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12968 OP_DEFN (OP_OTHERS, 1, 1, 0) \
12969 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12970 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
12971
12972static void
554794dc
SDJ
12973ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12974 int *argsp)
4c4b4cd2
PH
12975{
12976 switch (exp->elts[pc - 1].opcode)
12977 {
76a01679 12978 default:
4c4b4cd2
PH
12979 operator_length_standard (exp, pc, oplenp, argsp);
12980 break;
12981
12982#define OP_DEFN(op, len, args, binop) \
12983 case op: *oplenp = len; *argsp = args; break;
12984 ADA_OPERATORS;
12985#undef OP_DEFN
52ce6436
PH
12986
12987 case OP_AGGREGATE:
12988 *oplenp = 3;
12989 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
12990 break;
12991
12992 case OP_CHOICES:
12993 *oplenp = 3;
12994 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
12995 break;
4c4b4cd2
PH
12996 }
12997}
12998
c0201579
JK
12999/* Implementation of the exp_descriptor method operator_check. */
13000
13001static int
13002ada_operator_check (struct expression *exp, int pos,
13003 int (*objfile_func) (struct objfile *objfile, void *data),
13004 void *data)
13005{
13006 const union exp_element *const elts = exp->elts;
13007 struct type *type = NULL;
13008
13009 switch (elts[pos].opcode)
13010 {
13011 case UNOP_IN_RANGE:
13012 case UNOP_QUAL:
13013 type = elts[pos + 1].type;
13014 break;
13015
13016 default:
13017 return operator_check_standard (exp, pos, objfile_func, data);
13018 }
13019
13020 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13021
13022 if (type && TYPE_OBJFILE (type)
13023 && (*objfile_func) (TYPE_OBJFILE (type), data))
13024 return 1;
13025
13026 return 0;
13027}
13028
4c4b4cd2
PH
13029static char *
13030ada_op_name (enum exp_opcode opcode)
13031{
13032 switch (opcode)
13033 {
76a01679 13034 default:
4c4b4cd2 13035 return op_name_standard (opcode);
52ce6436 13036
4c4b4cd2
PH
13037#define OP_DEFN(op, len, args, binop) case op: return #op;
13038 ADA_OPERATORS;
13039#undef OP_DEFN
52ce6436
PH
13040
13041 case OP_AGGREGATE:
13042 return "OP_AGGREGATE";
13043 case OP_CHOICES:
13044 return "OP_CHOICES";
13045 case OP_NAME:
13046 return "OP_NAME";
4c4b4cd2
PH
13047 }
13048}
13049
13050/* As for operator_length, but assumes PC is pointing at the first
13051 element of the operator, and gives meaningful results only for the
52ce6436 13052 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13053
13054static void
76a01679
JB
13055ada_forward_operator_length (struct expression *exp, int pc,
13056 int *oplenp, int *argsp)
4c4b4cd2 13057{
76a01679 13058 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13059 {
13060 default:
13061 *oplenp = *argsp = 0;
13062 break;
52ce6436 13063
4c4b4cd2
PH
13064#define OP_DEFN(op, len, args, binop) \
13065 case op: *oplenp = len; *argsp = args; break;
13066 ADA_OPERATORS;
13067#undef OP_DEFN
52ce6436
PH
13068
13069 case OP_AGGREGATE:
13070 *oplenp = 3;
13071 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13072 break;
13073
13074 case OP_CHOICES:
13075 *oplenp = 3;
13076 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13077 break;
13078
13079 case OP_STRING:
13080 case OP_NAME:
13081 {
13082 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13083
52ce6436
PH
13084 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13085 *argsp = 0;
13086 break;
13087 }
4c4b4cd2
PH
13088 }
13089}
13090
13091static int
13092ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13093{
13094 enum exp_opcode op = exp->elts[elt].opcode;
13095 int oplen, nargs;
13096 int pc = elt;
13097 int i;
76a01679 13098
4c4b4cd2
PH
13099 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13100
76a01679 13101 switch (op)
4c4b4cd2 13102 {
76a01679 13103 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13104 case OP_ATR_FIRST:
13105 case OP_ATR_LAST:
13106 case OP_ATR_LENGTH:
13107 case OP_ATR_IMAGE:
13108 case OP_ATR_MAX:
13109 case OP_ATR_MIN:
13110 case OP_ATR_MODULUS:
13111 case OP_ATR_POS:
13112 case OP_ATR_SIZE:
13113 case OP_ATR_TAG:
13114 case OP_ATR_VAL:
13115 break;
13116
13117 case UNOP_IN_RANGE:
13118 case UNOP_QUAL:
323e0a4a
AC
13119 /* XXX: gdb_sprint_host_address, type_sprint */
13120 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13121 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13122 fprintf_filtered (stream, " (");
13123 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13124 fprintf_filtered (stream, ")");
13125 break;
13126 case BINOP_IN_BOUNDS:
52ce6436
PH
13127 fprintf_filtered (stream, " (%d)",
13128 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13129 break;
13130 case TERNOP_IN_RANGE:
13131 break;
13132
52ce6436
PH
13133 case OP_AGGREGATE:
13134 case OP_OTHERS:
13135 case OP_DISCRETE_RANGE:
13136 case OP_POSITIONAL:
13137 case OP_CHOICES:
13138 break;
13139
13140 case OP_NAME:
13141 case OP_STRING:
13142 {
13143 char *name = &exp->elts[elt + 2].string;
13144 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13145
52ce6436
PH
13146 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13147 break;
13148 }
13149
4c4b4cd2
PH
13150 default:
13151 return dump_subexp_body_standard (exp, stream, elt);
13152 }
13153
13154 elt += oplen;
13155 for (i = 0; i < nargs; i += 1)
13156 elt = dump_subexp (exp, stream, elt);
13157
13158 return elt;
13159}
13160
13161/* The Ada extension of print_subexp (q.v.). */
13162
76a01679
JB
13163static void
13164ada_print_subexp (struct expression *exp, int *pos,
13165 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13166{
52ce6436 13167 int oplen, nargs, i;
4c4b4cd2
PH
13168 int pc = *pos;
13169 enum exp_opcode op = exp->elts[pc].opcode;
13170
13171 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13172
52ce6436 13173 *pos += oplen;
4c4b4cd2
PH
13174 switch (op)
13175 {
13176 default:
52ce6436 13177 *pos -= oplen;
4c4b4cd2
PH
13178 print_subexp_standard (exp, pos, stream, prec);
13179 return;
13180
13181 case OP_VAR_VALUE:
4c4b4cd2
PH
13182 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
13183 return;
13184
13185 case BINOP_IN_BOUNDS:
323e0a4a 13186 /* XXX: sprint_subexp */
4c4b4cd2 13187 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13188 fputs_filtered (" in ", stream);
4c4b4cd2 13189 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13190 fputs_filtered ("'range", stream);
4c4b4cd2 13191 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13192 fprintf_filtered (stream, "(%ld)",
13193 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13194 return;
13195
13196 case TERNOP_IN_RANGE:
4c4b4cd2 13197 if (prec >= PREC_EQUAL)
76a01679 13198 fputs_filtered ("(", stream);
323e0a4a 13199 /* XXX: sprint_subexp */
4c4b4cd2 13200 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13201 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13202 print_subexp (exp, pos, stream, PREC_EQUAL);
13203 fputs_filtered (" .. ", stream);
13204 print_subexp (exp, pos, stream, PREC_EQUAL);
13205 if (prec >= PREC_EQUAL)
76a01679
JB
13206 fputs_filtered (")", stream);
13207 return;
4c4b4cd2
PH
13208
13209 case OP_ATR_FIRST:
13210 case OP_ATR_LAST:
13211 case OP_ATR_LENGTH:
13212 case OP_ATR_IMAGE:
13213 case OP_ATR_MAX:
13214 case OP_ATR_MIN:
13215 case OP_ATR_MODULUS:
13216 case OP_ATR_POS:
13217 case OP_ATR_SIZE:
13218 case OP_ATR_TAG:
13219 case OP_ATR_VAL:
4c4b4cd2 13220 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
13221 {
13222 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
13223 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13224 &type_print_raw_options);
76a01679
JB
13225 *pos += 3;
13226 }
4c4b4cd2 13227 else
76a01679 13228 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13229 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13230 if (nargs > 1)
76a01679
JB
13231 {
13232 int tem;
5b4ee69b 13233
76a01679
JB
13234 for (tem = 1; tem < nargs; tem += 1)
13235 {
13236 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13237 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13238 }
13239 fputs_filtered (")", stream);
13240 }
4c4b4cd2 13241 return;
14f9c5c9 13242
4c4b4cd2 13243 case UNOP_QUAL:
4c4b4cd2
PH
13244 type_print (exp->elts[pc + 1].type, "", stream, 0);
13245 fputs_filtered ("'(", stream);
13246 print_subexp (exp, pos, stream, PREC_PREFIX);
13247 fputs_filtered (")", stream);
13248 return;
14f9c5c9 13249
4c4b4cd2 13250 case UNOP_IN_RANGE:
323e0a4a 13251 /* XXX: sprint_subexp */
4c4b4cd2 13252 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13253 fputs_filtered (" in ", stream);
79d43c61
TT
13254 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13255 &type_print_raw_options);
4c4b4cd2 13256 return;
52ce6436
PH
13257
13258 case OP_DISCRETE_RANGE:
13259 print_subexp (exp, pos, stream, PREC_SUFFIX);
13260 fputs_filtered ("..", stream);
13261 print_subexp (exp, pos, stream, PREC_SUFFIX);
13262 return;
13263
13264 case OP_OTHERS:
13265 fputs_filtered ("others => ", stream);
13266 print_subexp (exp, pos, stream, PREC_SUFFIX);
13267 return;
13268
13269 case OP_CHOICES:
13270 for (i = 0; i < nargs-1; i += 1)
13271 {
13272 if (i > 0)
13273 fputs_filtered ("|", stream);
13274 print_subexp (exp, pos, stream, PREC_SUFFIX);
13275 }
13276 fputs_filtered (" => ", stream);
13277 print_subexp (exp, pos, stream, PREC_SUFFIX);
13278 return;
13279
13280 case OP_POSITIONAL:
13281 print_subexp (exp, pos, stream, PREC_SUFFIX);
13282 return;
13283
13284 case OP_AGGREGATE:
13285 fputs_filtered ("(", stream);
13286 for (i = 0; i < nargs; i += 1)
13287 {
13288 if (i > 0)
13289 fputs_filtered (", ", stream);
13290 print_subexp (exp, pos, stream, PREC_SUFFIX);
13291 }
13292 fputs_filtered (")", stream);
13293 return;
4c4b4cd2
PH
13294 }
13295}
14f9c5c9
AS
13296
13297/* Table mapping opcodes into strings for printing operators
13298 and precedences of the operators. */
13299
d2e4a39e
AS
13300static const struct op_print ada_op_print_tab[] = {
13301 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13302 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13303 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13304 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13305 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13306 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13307 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13308 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13309 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13310 {">=", BINOP_GEQ, PREC_ORDER, 0},
13311 {">", BINOP_GTR, PREC_ORDER, 0},
13312 {"<", BINOP_LESS, PREC_ORDER, 0},
13313 {">>", BINOP_RSH, PREC_SHIFT, 0},
13314 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13315 {"+", BINOP_ADD, PREC_ADD, 0},
13316 {"-", BINOP_SUB, PREC_ADD, 0},
13317 {"&", BINOP_CONCAT, PREC_ADD, 0},
13318 {"*", BINOP_MUL, PREC_MUL, 0},
13319 {"/", BINOP_DIV, PREC_MUL, 0},
13320 {"rem", BINOP_REM, PREC_MUL, 0},
13321 {"mod", BINOP_MOD, PREC_MUL, 0},
13322 {"**", BINOP_EXP, PREC_REPEAT, 0},
13323 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13324 {"-", UNOP_NEG, PREC_PREFIX, 0},
13325 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13326 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13327 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13328 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13329 {".all", UNOP_IND, PREC_SUFFIX, 1},
13330 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13331 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
d2e4a39e 13332 {NULL, 0, 0, 0}
14f9c5c9
AS
13333};
13334\f
72d5681a
PH
13335enum ada_primitive_types {
13336 ada_primitive_type_int,
13337 ada_primitive_type_long,
13338 ada_primitive_type_short,
13339 ada_primitive_type_char,
13340 ada_primitive_type_float,
13341 ada_primitive_type_double,
13342 ada_primitive_type_void,
13343 ada_primitive_type_long_long,
13344 ada_primitive_type_long_double,
13345 ada_primitive_type_natural,
13346 ada_primitive_type_positive,
13347 ada_primitive_type_system_address,
13348 nr_ada_primitive_types
13349};
6c038f32
PH
13350
13351static void
d4a9a881 13352ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
13353 struct language_arch_info *lai)
13354{
d4a9a881 13355 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 13356
72d5681a 13357 lai->primitive_type_vector
d4a9a881 13358 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 13359 struct type *);
e9bb382b
UW
13360
13361 lai->primitive_type_vector [ada_primitive_type_int]
13362 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13363 0, "integer");
13364 lai->primitive_type_vector [ada_primitive_type_long]
13365 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13366 0, "long_integer");
13367 lai->primitive_type_vector [ada_primitive_type_short]
13368 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13369 0, "short_integer");
13370 lai->string_char_type
13371 = lai->primitive_type_vector [ada_primitive_type_char]
13372 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13373 lai->primitive_type_vector [ada_primitive_type_float]
13374 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13375 "float", NULL);
13376 lai->primitive_type_vector [ada_primitive_type_double]
13377 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13378 "long_float", NULL);
13379 lai->primitive_type_vector [ada_primitive_type_long_long]
13380 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13381 0, "long_long_integer");
13382 lai->primitive_type_vector [ada_primitive_type_long_double]
13383 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13384 "long_long_float", NULL);
13385 lai->primitive_type_vector [ada_primitive_type_natural]
13386 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13387 0, "natural");
13388 lai->primitive_type_vector [ada_primitive_type_positive]
13389 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13390 0, "positive");
13391 lai->primitive_type_vector [ada_primitive_type_void]
13392 = builtin->builtin_void;
13393
13394 lai->primitive_type_vector [ada_primitive_type_system_address]
13395 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
13396 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13397 = "system__address";
fbb06eb1 13398
47e729a8 13399 lai->bool_type_symbol = NULL;
fbb06eb1 13400 lai->bool_type_default = builtin->builtin_bool;
6c038f32 13401}
6c038f32
PH
13402\f
13403 /* Language vector */
13404
13405/* Not really used, but needed in the ada_language_defn. */
13406
13407static void
6c7a06a3 13408emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 13409{
6c7a06a3 13410 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
13411}
13412
13413static int
410a0ff2 13414parse (struct parser_state *ps)
6c038f32
PH
13415{
13416 warnings_issued = 0;
410a0ff2 13417 return ada_parse (ps);
6c038f32
PH
13418}
13419
13420static const struct exp_descriptor ada_exp_descriptor = {
13421 ada_print_subexp,
13422 ada_operator_length,
c0201579 13423 ada_operator_check,
6c038f32
PH
13424 ada_op_name,
13425 ada_dump_subexp_body,
13426 ada_evaluate_subexp
13427};
13428
1a119f36 13429/* Implement the "la_get_symbol_name_cmp" language_defn method
74ccd7f5
JB
13430 for Ada. */
13431
1a119f36
JB
13432static symbol_name_cmp_ftype
13433ada_get_symbol_name_cmp (const char *lookup_name)
74ccd7f5
JB
13434{
13435 if (should_use_wild_match (lookup_name))
13436 return wild_match;
13437 else
13438 return compare_names;
13439}
13440
a5ee536b
JB
13441/* Implement the "la_read_var_value" language_defn method for Ada. */
13442
13443static struct value *
13444ada_read_var_value (struct symbol *var, struct frame_info *frame)
13445{
13446 struct block *frame_block = NULL;
13447 struct symbol *renaming_sym = NULL;
13448
13449 /* The only case where default_read_var_value is not sufficient
13450 is when VAR is a renaming... */
13451 if (frame)
13452 frame_block = get_frame_block (frame, NULL);
13453 if (frame_block)
13454 renaming_sym = ada_find_renaming_symbol (var, frame_block);
13455 if (renaming_sym != NULL)
13456 return ada_read_renaming_var_value (renaming_sym, frame_block);
13457
13458 /* This is a typical case where we expect the default_read_var_value
13459 function to work. */
13460 return default_read_var_value (var, frame);
13461}
13462
6c038f32
PH
13463const struct language_defn ada_language_defn = {
13464 "ada", /* Language name */
6abde28f 13465 "Ada",
6c038f32 13466 language_ada,
6c038f32 13467 range_check_off,
6c038f32
PH
13468 case_sensitive_on, /* Yes, Ada is case-insensitive, but
13469 that's not quite what this means. */
6c038f32 13470 array_row_major,
9a044a89 13471 macro_expansion_no,
6c038f32
PH
13472 &ada_exp_descriptor,
13473 parse,
13474 ada_error,
13475 resolve,
13476 ada_printchar, /* Print a character constant */
13477 ada_printstr, /* Function to print string constant */
13478 emit_char, /* Function to print single char (not used) */
6c038f32 13479 ada_print_type, /* Print a type using appropriate syntax */
be942545 13480 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
13481 ada_val_print, /* Print a value using appropriate syntax */
13482 ada_value_print, /* Print a top-level value */
a5ee536b 13483 ada_read_var_value, /* la_read_var_value */
6c038f32 13484 NULL, /* Language specific skip_trampoline */
2b2d9e11 13485 NULL, /* name_of_this */
6c038f32
PH
13486 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
13487 basic_lookup_transparent_type, /* lookup_transparent_type */
13488 ada_la_decode, /* Language specific symbol demangler */
0963b4bd
MS
13489 NULL, /* Language specific
13490 class_name_from_physname */
6c038f32
PH
13491 ada_op_print_tab, /* expression operators for printing */
13492 0, /* c-style arrays */
13493 1, /* String lower bound */
6c038f32 13494 ada_get_gdb_completer_word_break_characters,
41d27058 13495 ada_make_symbol_completion_list,
72d5681a 13496 ada_language_arch_info,
e79af960 13497 ada_print_array_index,
41f1b697 13498 default_pass_by_reference,
ae6a3a4c 13499 c_get_string,
1a119f36 13500 ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */
f8eba3c6 13501 ada_iterate_over_symbols,
a53b64ea 13502 &ada_varobj_ops,
6c038f32
PH
13503 LANG_MAGIC
13504};
13505
2c0b251b
PA
13506/* Provide a prototype to silence -Wmissing-prototypes. */
13507extern initialize_file_ftype _initialize_ada_language;
13508
5bf03f13
JB
13509/* Command-list for the "set/show ada" prefix command. */
13510static struct cmd_list_element *set_ada_list;
13511static struct cmd_list_element *show_ada_list;
13512
13513/* Implement the "set ada" prefix command. */
13514
13515static void
13516set_ada_command (char *arg, int from_tty)
13517{
13518 printf_unfiltered (_(\
13519"\"set ada\" must be followed by the name of a setting.\n"));
13520 help_list (set_ada_list, "set ada ", -1, gdb_stdout);
13521}
13522
13523/* Implement the "show ada" prefix command. */
13524
13525static void
13526show_ada_command (char *args, int from_tty)
13527{
13528 cmd_show_list (show_ada_list, from_tty, "");
13529}
13530
2060206e
PA
13531static void
13532initialize_ada_catchpoint_ops (void)
13533{
13534 struct breakpoint_ops *ops;
13535
13536 initialize_breakpoint_ops ();
13537
13538 ops = &catch_exception_breakpoint_ops;
13539 *ops = bkpt_breakpoint_ops;
13540 ops->dtor = dtor_catch_exception;
13541 ops->allocate_location = allocate_location_catch_exception;
13542 ops->re_set = re_set_catch_exception;
13543 ops->check_status = check_status_catch_exception;
13544 ops->print_it = print_it_catch_exception;
13545 ops->print_one = print_one_catch_exception;
13546 ops->print_mention = print_mention_catch_exception;
13547 ops->print_recreate = print_recreate_catch_exception;
13548
13549 ops = &catch_exception_unhandled_breakpoint_ops;
13550 *ops = bkpt_breakpoint_ops;
13551 ops->dtor = dtor_catch_exception_unhandled;
13552 ops->allocate_location = allocate_location_catch_exception_unhandled;
13553 ops->re_set = re_set_catch_exception_unhandled;
13554 ops->check_status = check_status_catch_exception_unhandled;
13555 ops->print_it = print_it_catch_exception_unhandled;
13556 ops->print_one = print_one_catch_exception_unhandled;
13557 ops->print_mention = print_mention_catch_exception_unhandled;
13558 ops->print_recreate = print_recreate_catch_exception_unhandled;
13559
13560 ops = &catch_assert_breakpoint_ops;
13561 *ops = bkpt_breakpoint_ops;
13562 ops->dtor = dtor_catch_assert;
13563 ops->allocate_location = allocate_location_catch_assert;
13564 ops->re_set = re_set_catch_assert;
13565 ops->check_status = check_status_catch_assert;
13566 ops->print_it = print_it_catch_assert;
13567 ops->print_one = print_one_catch_assert;
13568 ops->print_mention = print_mention_catch_assert;
13569 ops->print_recreate = print_recreate_catch_assert;
13570}
13571
3d9434b5
JB
13572/* This module's 'new_objfile' observer. */
13573
13574static void
13575ada_new_objfile_observer (struct objfile *objfile)
13576{
13577 ada_clear_symbol_cache ();
13578}
13579
13580/* This module's 'free_objfile' observer. */
13581
13582static void
13583ada_free_objfile_observer (struct objfile *objfile)
13584{
13585 ada_clear_symbol_cache ();
13586}
13587
d2e4a39e 13588void
6c038f32 13589_initialize_ada_language (void)
14f9c5c9 13590{
6c038f32
PH
13591 add_language (&ada_language_defn);
13592
2060206e
PA
13593 initialize_ada_catchpoint_ops ();
13594
5bf03f13
JB
13595 add_prefix_cmd ("ada", no_class, set_ada_command,
13596 _("Prefix command for changing Ada-specfic settings"),
13597 &set_ada_list, "set ada ", 0, &setlist);
13598
13599 add_prefix_cmd ("ada", no_class, show_ada_command,
13600 _("Generic command for showing Ada-specific settings."),
13601 &show_ada_list, "show ada ", 0, &showlist);
13602
13603 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13604 &trust_pad_over_xvs, _("\
13605Enable or disable an optimization trusting PAD types over XVS types"), _("\
13606Show whether an optimization trusting PAD types over XVS types is activated"),
13607 _("\
13608This is related to the encoding used by the GNAT compiler. The debugger\n\
13609should normally trust the contents of PAD types, but certain older versions\n\
13610of GNAT have a bug that sometimes causes the information in the PAD type\n\
13611to be incorrect. Turning this setting \"off\" allows the debugger to\n\
13612work around this bug. It is always safe to turn this option \"off\", but\n\
13613this incurs a slight performance penalty, so it is recommended to NOT change\n\
13614this option to \"off\" unless necessary."),
13615 NULL, NULL, &set_ada_list, &show_ada_list);
13616
9ac4176b
PA
13617 add_catch_command ("exception", _("\
13618Catch Ada exceptions, when raised.\n\
13619With an argument, catch only exceptions with the given name."),
13620 catch_ada_exception_command,
13621 NULL,
13622 CATCH_PERMANENT,
13623 CATCH_TEMPORARY);
13624 add_catch_command ("assert", _("\
13625Catch failed Ada assertions, when raised.\n\
13626With an argument, catch only exceptions with the given name."),
13627 catch_assert_command,
13628 NULL,
13629 CATCH_PERMANENT,
13630 CATCH_TEMPORARY);
13631
6c038f32 13632 varsize_limit = 65536;
6c038f32 13633
778865d3
JB
13634 add_info ("exceptions", info_exceptions_command,
13635 _("\
13636List all Ada exception names.\n\
13637If a regular expression is passed as an argument, only those matching\n\
13638the regular expression are listed."));
13639
c6044dd1
JB
13640 add_prefix_cmd ("ada", class_maintenance, maint_set_ada_cmd,
13641 _("Set Ada maintenance-related variables."),
13642 &maint_set_ada_cmdlist, "maintenance set ada ",
13643 0/*allow-unknown*/, &maintenance_set_cmdlist);
13644
13645 add_prefix_cmd ("ada", class_maintenance, maint_show_ada_cmd,
13646 _("Show Ada maintenance-related variables"),
13647 &maint_show_ada_cmdlist, "maintenance show ada ",
13648 0/*allow-unknown*/, &maintenance_show_cmdlist);
13649
13650 add_setshow_boolean_cmd
13651 ("ignore-descriptive-types", class_maintenance,
13652 &ada_ignore_descriptive_types_p,
13653 _("Set whether descriptive types generated by GNAT should be ignored."),
13654 _("Show whether descriptive types generated by GNAT should be ignored."),
13655 _("\
13656When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
13657DWARF attribute."),
13658 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
13659
6c038f32
PH
13660 obstack_init (&symbol_list_obstack);
13661
13662 decoded_names_store = htab_create_alloc
13663 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13664 NULL, xcalloc, xfree);
6b69afc4 13665
3d9434b5
JB
13666 /* The ada-lang observers. */
13667 observer_attach_new_objfile (ada_new_objfile_observer);
13668 observer_attach_free_objfile (ada_free_objfile_observer);
e802dbe0 13669 observer_attach_inferior_exit (ada_inferior_exit);
ee01b665
JB
13670
13671 /* Setup various context-specific data. */
e802dbe0 13672 ada_inferior_data
8e260fc0 13673 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
ee01b665
JB
13674 ada_pspace_data_handle
13675 = register_program_space_data_with_cleanup (NULL, ada_pspace_data_cleanup);
14f9c5c9 13676}