Add amd64_x32_linux_record_tdep and amd64_x32_sys
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
28e7fd62 3 Copyright (C) 1992-2013 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>
4c4b4cd2 47#ifdef UI_OUT
14f9c5c9 48#include "ui-out.h"
4c4b4cd2 49#endif
fe898f56 50#include "block.h"
04714b91 51#include "infcall.h"
de4f826b 52#include "dictionary.h"
60250e8b 53#include "exceptions.h"
f7f9143b
JB
54#include "annotate.h"
55#include "valprint.h"
9bbc9174 56#include "source.h"
0259addd 57#include "observer.h"
2ba95b9b 58#include "vec.h"
692465f1 59#include "stack.h"
fa864999 60#include "gdb_vecs.h"
79d43c61 61#include "typeprint.h"
14f9c5c9 62
ccefe4c4 63#include "psymtab.h"
40bc484c 64#include "value.h"
956a9fb9 65#include "mi/mi-common.h"
9ac4176b 66#include "arch-utils.h"
28010a5d 67#include "exceptions.h"
0fcd72ba 68#include "cli/cli-utils.h"
ccefe4c4 69
4c4b4cd2 70/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 71 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
72 Copied from valarith.c. */
73
74#ifndef TRUNCATION_TOWARDS_ZERO
75#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
76#endif
77
d2e4a39e 78static struct type *desc_base_type (struct type *);
14f9c5c9 79
d2e4a39e 80static struct type *desc_bounds_type (struct type *);
14f9c5c9 81
d2e4a39e 82static struct value *desc_bounds (struct value *);
14f9c5c9 83
d2e4a39e 84static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 85
d2e4a39e 86static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 87
556bdfd4 88static struct type *desc_data_target_type (struct type *);
14f9c5c9 89
d2e4a39e 90static struct value *desc_data (struct value *);
14f9c5c9 91
d2e4a39e 92static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 93
d2e4a39e 94static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 95
d2e4a39e 96static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 97
d2e4a39e 98static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 99
d2e4a39e 100static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 101
d2e4a39e 102static struct type *desc_index_type (struct type *, int);
14f9c5c9 103
d2e4a39e 104static int desc_arity (struct type *);
14f9c5c9 105
d2e4a39e 106static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 107
d2e4a39e 108static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 109
40658b94
PH
110static int full_match (const char *, const char *);
111
40bc484c 112static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 113
4c4b4cd2 114static void ada_add_block_symbols (struct obstack *,
76a01679 115 struct block *, const char *,
2570f2b7 116 domain_enum, struct objfile *, int);
14f9c5c9 117
4c4b4cd2 118static int is_nonfunction (struct ada_symbol_info *, int);
14f9c5c9 119
76a01679 120static void add_defn_to_vec (struct obstack *, struct symbol *,
2570f2b7 121 struct block *);
14f9c5c9 122
4c4b4cd2
PH
123static int num_defns_collected (struct obstack *);
124
125static struct ada_symbol_info *defns_collected (struct obstack *, int);
14f9c5c9 126
4c4b4cd2 127static struct value *resolve_subexp (struct expression **, int *, int,
76a01679 128 struct type *);
14f9c5c9 129
d2e4a39e 130static void replace_operator_with_call (struct expression **, int, int, int,
270140bd 131 struct symbol *, const struct block *);
14f9c5c9 132
d2e4a39e 133static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 134
4c4b4cd2
PH
135static char *ada_op_name (enum exp_opcode);
136
137static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 138
d2e4a39e 139static int numeric_type_p (struct type *);
14f9c5c9 140
d2e4a39e 141static int integer_type_p (struct type *);
14f9c5c9 142
d2e4a39e 143static int scalar_type_p (struct type *);
14f9c5c9 144
d2e4a39e 145static int discrete_type_p (struct type *);
14f9c5c9 146
aeb5907d
JB
147static enum ada_renaming_category parse_old_style_renaming (struct type *,
148 const char **,
149 int *,
150 const char **);
151
152static struct symbol *find_old_style_renaming_symbol (const char *,
270140bd 153 const struct block *);
aeb5907d 154
4c4b4cd2 155static struct type *ada_lookup_struct_elt_type (struct type *, char *,
76a01679 156 int, int, int *);
4c4b4cd2 157
d2e4a39e 158static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 159
b4ba55a1
JB
160static struct type *ada_find_parallel_type_with_name (struct type *,
161 const char *);
162
d2e4a39e 163static int is_dynamic_field (struct type *, int);
14f9c5c9 164
10a2c479 165static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 166 const gdb_byte *,
4c4b4cd2
PH
167 CORE_ADDR, struct value *);
168
169static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 170
28c85d6c 171static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 172
d2e4a39e 173static struct type *to_static_fixed_type (struct type *);
f192137b 174static struct type *static_unwrap_type (struct type *type);
14f9c5c9 175
d2e4a39e 176static struct value *unwrap_value (struct value *);
14f9c5c9 177
ad82864c 178static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 179
ad82864c 180static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 181
ad82864c
JB
182static long decode_packed_array_bitsize (struct type *);
183
184static struct value *decode_constrained_packed_array (struct value *);
185
186static int ada_is_packed_array_type (struct type *);
187
188static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 189
d2e4a39e 190static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 191 struct value **);
14f9c5c9 192
50810684 193static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
52ce6436 194
4c4b4cd2
PH
195static struct value *coerce_unspec_val_to_type (struct value *,
196 struct type *);
14f9c5c9 197
d2e4a39e 198static struct value *get_var_value (char *, char *);
14f9c5c9 199
d2e4a39e 200static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 201
d2e4a39e 202static int equiv_types (struct type *, struct type *);
14f9c5c9 203
d2e4a39e 204static int is_name_suffix (const char *);
14f9c5c9 205
73589123
PH
206static int advance_wild_match (const char **, const char *, int);
207
208static int wild_match (const char *, const char *);
14f9c5c9 209
d2e4a39e 210static struct value *ada_coerce_ref (struct value *);
14f9c5c9 211
4c4b4cd2
PH
212static LONGEST pos_atr (struct value *);
213
3cb382c9 214static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 215
d2e4a39e 216static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 217
4c4b4cd2
PH
218static struct symbol *standard_lookup (const char *, const struct block *,
219 domain_enum);
14f9c5c9 220
4c4b4cd2
PH
221static struct value *ada_search_struct_field (char *, struct value *, int,
222 struct type *);
223
224static struct value *ada_value_primitive_field (struct value *, int, int,
225 struct type *);
226
0d5cff50 227static int find_struct_field (const char *, struct type *, int,
52ce6436 228 struct type **, int *, int *, int *, int *);
4c4b4cd2
PH
229
230static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
231 struct value *);
232
4c4b4cd2
PH
233static int ada_resolve_function (struct ada_symbol_info *, int,
234 struct value **, int, const char *,
235 struct type *);
236
4c4b4cd2
PH
237static int ada_is_direct_array_type (struct type *);
238
72d5681a
PH
239static void ada_language_arch_info (struct gdbarch *,
240 struct language_arch_info *);
714e53ab
PH
241
242static void check_size (const struct type *);
52ce6436
PH
243
244static struct value *ada_index_struct_field (int, struct value *, int,
245 struct type *);
246
247static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
248 struct expression *,
249 int *, enum noside);
52ce6436
PH
250
251static void aggregate_assign_from_choices (struct value *, struct value *,
252 struct expression *,
253 int *, LONGEST *, int *,
254 int, LONGEST, LONGEST);
255
256static void aggregate_assign_positional (struct value *, struct value *,
257 struct expression *,
258 int *, LONGEST *, int *, int,
259 LONGEST, LONGEST);
260
261
262static void aggregate_assign_others (struct value *, struct value *,
263 struct expression *,
264 int *, LONGEST *, int, LONGEST, LONGEST);
265
266
267static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
268
269
270static struct value *ada_evaluate_subexp (struct type *, struct expression *,
271 int *, enum noside);
272
273static void ada_forward_operator_length (struct expression *, int, int *,
274 int *);
852dff6c
JB
275
276static struct type *ada_find_any_type (const char *name);
4c4b4cd2
PH
277\f
278
76a01679 279
4c4b4cd2 280/* Maximum-sized dynamic type. */
14f9c5c9
AS
281static unsigned int varsize_limit;
282
4c4b4cd2
PH
283/* FIXME: brobecker/2003-09-17: No longer a const because it is
284 returned by a function that does not return a const char *. */
285static char *ada_completer_word_break_characters =
286#ifdef VMS
287 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
288#else
14f9c5c9 289 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 290#endif
14f9c5c9 291
4c4b4cd2 292/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 293static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 294 = "__gnat_ada_main_program_name";
14f9c5c9 295
4c4b4cd2
PH
296/* Limit on the number of warnings to raise per expression evaluation. */
297static int warning_limit = 2;
298
299/* Number of warning messages issued; reset to 0 by cleanups after
300 expression evaluation. */
301static int warnings_issued = 0;
302
303static const char *known_runtime_file_name_patterns[] = {
304 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
305};
306
307static const char *known_auxiliary_function_name_patterns[] = {
308 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
309};
310
311/* Space for allocating results of ada_lookup_symbol_list. */
312static struct obstack symbol_list_obstack;
313
e802dbe0
JB
314 /* Inferior-specific data. */
315
316/* Per-inferior data for this module. */
317
318struct ada_inferior_data
319{
320 /* The ada__tags__type_specific_data type, which is used when decoding
321 tagged types. With older versions of GNAT, this type was directly
322 accessible through a component ("tsd") in the object tag. But this
323 is no longer the case, so we cache it for each inferior. */
324 struct type *tsd_type;
3eecfa55
JB
325
326 /* The exception_support_info data. This data is used to determine
327 how to implement support for Ada exception catchpoints in a given
328 inferior. */
329 const struct exception_support_info *exception_info;
e802dbe0
JB
330};
331
332/* Our key to this module's inferior data. */
333static const struct inferior_data *ada_inferior_data;
334
335/* A cleanup routine for our inferior data. */
336static void
337ada_inferior_data_cleanup (struct inferior *inf, void *arg)
338{
339 struct ada_inferior_data *data;
340
341 data = inferior_data (inf, ada_inferior_data);
342 if (data != NULL)
343 xfree (data);
344}
345
346/* Return our inferior data for the given inferior (INF).
347
348 This function always returns a valid pointer to an allocated
349 ada_inferior_data structure. If INF's inferior data has not
350 been previously set, this functions creates a new one with all
351 fields set to zero, sets INF's inferior to it, and then returns
352 a pointer to that newly allocated ada_inferior_data. */
353
354static struct ada_inferior_data *
355get_ada_inferior_data (struct inferior *inf)
356{
357 struct ada_inferior_data *data;
358
359 data = inferior_data (inf, ada_inferior_data);
360 if (data == NULL)
361 {
362 data = XZALLOC (struct ada_inferior_data);
363 set_inferior_data (inf, ada_inferior_data, data);
364 }
365
366 return data;
367}
368
369/* Perform all necessary cleanups regarding our module's inferior data
370 that is required after the inferior INF just exited. */
371
372static void
373ada_inferior_exit (struct inferior *inf)
374{
375 ada_inferior_data_cleanup (inf, NULL);
376 set_inferior_data (inf, ada_inferior_data, NULL);
377}
378
4c4b4cd2
PH
379 /* Utilities */
380
720d1a40 381/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 382 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
383
384 Normally, we really expect a typedef type to only have 1 typedef layer.
385 In other words, we really expect the target type of a typedef type to be
386 a non-typedef type. This is particularly true for Ada units, because
387 the language does not have a typedef vs not-typedef distinction.
388 In that respect, the Ada compiler has been trying to eliminate as many
389 typedef definitions in the debugging information, since they generally
390 do not bring any extra information (we still use typedef under certain
391 circumstances related mostly to the GNAT encoding).
392
393 Unfortunately, we have seen situations where the debugging information
394 generated by the compiler leads to such multiple typedef layers. For
395 instance, consider the following example with stabs:
396
397 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
398 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
399
400 This is an error in the debugging information which causes type
401 pck__float_array___XUP to be defined twice, and the second time,
402 it is defined as a typedef of a typedef.
403
404 This is on the fringe of legality as far as debugging information is
405 concerned, and certainly unexpected. But it is easy to handle these
406 situations correctly, so we can afford to be lenient in this case. */
407
408static struct type *
409ada_typedef_target_type (struct type *type)
410{
411 while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
412 type = TYPE_TARGET_TYPE (type);
413 return type;
414}
415
41d27058
JB
416/* Given DECODED_NAME a string holding a symbol name in its
417 decoded form (ie using the Ada dotted notation), returns
418 its unqualified name. */
419
420static const char *
421ada_unqualified_name (const char *decoded_name)
422{
423 const char *result = strrchr (decoded_name, '.');
424
425 if (result != NULL)
426 result++; /* Skip the dot... */
427 else
428 result = decoded_name;
429
430 return result;
431}
432
433/* Return a string starting with '<', followed by STR, and '>'.
434 The result is good until the next call. */
435
436static char *
437add_angle_brackets (const char *str)
438{
439 static char *result = NULL;
440
441 xfree (result);
88c15c34 442 result = xstrprintf ("<%s>", str);
41d27058
JB
443 return result;
444}
96d887e8 445
4c4b4cd2
PH
446static char *
447ada_get_gdb_completer_word_break_characters (void)
448{
449 return ada_completer_word_break_characters;
450}
451
e79af960
JB
452/* Print an array element index using the Ada syntax. */
453
454static void
455ada_print_array_index (struct value *index_value, struct ui_file *stream,
79a45b7d 456 const struct value_print_options *options)
e79af960 457{
79a45b7d 458 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
459 fprintf_filtered (stream, " => ");
460}
461
f27cf670 462/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 463 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 464 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 465
f27cf670
AS
466void *
467grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 468{
d2e4a39e
AS
469 if (*size < min_size)
470 {
471 *size *= 2;
472 if (*size < min_size)
4c4b4cd2 473 *size = min_size;
f27cf670 474 vect = xrealloc (vect, *size * element_size);
d2e4a39e 475 }
f27cf670 476 return vect;
14f9c5c9
AS
477}
478
479/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 480 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
481
482static int
ebf56fd3 483field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
484{
485 int len = strlen (target);
5b4ee69b 486
d2e4a39e 487 return
4c4b4cd2
PH
488 (strncmp (field_name, target, len) == 0
489 && (field_name[len] == '\0'
490 || (strncmp (field_name + len, "___", 3) == 0
76a01679
JB
491 && strcmp (field_name + strlen (field_name) - 6,
492 "___XVN") != 0)));
14f9c5c9
AS
493}
494
495
872c8b51
JB
496/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
497 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
498 and return its index. This function also handles fields whose name
499 have ___ suffixes because the compiler sometimes alters their name
500 by adding such a suffix to represent fields with certain constraints.
501 If the field could not be found, return a negative number if
502 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
503
504int
505ada_get_field_index (const struct type *type, const char *field_name,
506 int maybe_missing)
507{
508 int fieldno;
872c8b51
JB
509 struct type *struct_type = check_typedef ((struct type *) type);
510
511 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
512 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
513 return fieldno;
514
515 if (!maybe_missing)
323e0a4a 516 error (_("Unable to find field %s in struct %s. Aborting"),
872c8b51 517 field_name, TYPE_NAME (struct_type));
4c4b4cd2
PH
518
519 return -1;
520}
521
522/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
523
524int
d2e4a39e 525ada_name_prefix_len (const char *name)
14f9c5c9
AS
526{
527 if (name == NULL)
528 return 0;
d2e4a39e 529 else
14f9c5c9 530 {
d2e4a39e 531 const char *p = strstr (name, "___");
5b4ee69b 532
14f9c5c9 533 if (p == NULL)
4c4b4cd2 534 return strlen (name);
14f9c5c9 535 else
4c4b4cd2 536 return p - name;
14f9c5c9
AS
537 }
538}
539
4c4b4cd2
PH
540/* Return non-zero if SUFFIX is a suffix of STR.
541 Return zero if STR is null. */
542
14f9c5c9 543static int
d2e4a39e 544is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
545{
546 int len1, len2;
5b4ee69b 547
14f9c5c9
AS
548 if (str == NULL)
549 return 0;
550 len1 = strlen (str);
551 len2 = strlen (suffix);
4c4b4cd2 552 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
553}
554
4c4b4cd2
PH
555/* The contents of value VAL, treated as a value of type TYPE. The
556 result is an lval in memory if VAL is. */
14f9c5c9 557
d2e4a39e 558static struct value *
4c4b4cd2 559coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 560{
61ee279c 561 type = ada_check_typedef (type);
df407dfe 562 if (value_type (val) == type)
4c4b4cd2 563 return val;
d2e4a39e 564 else
14f9c5c9 565 {
4c4b4cd2
PH
566 struct value *result;
567
568 /* Make sure that the object size is not unreasonable before
569 trying to allocate some memory for it. */
714e53ab 570 check_size (type);
4c4b4cd2 571
41e8491f
JK
572 if (value_lazy (val)
573 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
574 result = allocate_value_lazy (type);
575 else
576 {
577 result = allocate_value (type);
578 memcpy (value_contents_raw (result), value_contents (val),
579 TYPE_LENGTH (type));
580 }
74bcbdf3 581 set_value_component_location (result, val);
9bbda503
AC
582 set_value_bitsize (result, value_bitsize (val));
583 set_value_bitpos (result, value_bitpos (val));
42ae5230 584 set_value_address (result, value_address (val));
eca07816 585 set_value_optimized_out (result, value_optimized_out_const (val));
14f9c5c9
AS
586 return result;
587 }
588}
589
fc1a4b47
AC
590static const gdb_byte *
591cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
592{
593 if (valaddr == NULL)
594 return NULL;
595 else
596 return valaddr + offset;
597}
598
599static CORE_ADDR
ebf56fd3 600cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
601{
602 if (address == 0)
603 return 0;
d2e4a39e 604 else
14f9c5c9
AS
605 return address + offset;
606}
607
4c4b4cd2
PH
608/* Issue a warning (as for the definition of warning in utils.c, but
609 with exactly one argument rather than ...), unless the limit on the
610 number of warnings has passed during the evaluation of the current
611 expression. */
a2249542 612
77109804
AC
613/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
614 provided by "complaint". */
a0b31db1 615static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 616
14f9c5c9 617static void
a2249542 618lim_warning (const char *format, ...)
14f9c5c9 619{
a2249542 620 va_list args;
a2249542 621
5b4ee69b 622 va_start (args, format);
4c4b4cd2
PH
623 warnings_issued += 1;
624 if (warnings_issued <= warning_limit)
a2249542
MK
625 vwarning (format, args);
626
627 va_end (args);
4c4b4cd2
PH
628}
629
714e53ab
PH
630/* Issue an error if the size of an object of type T is unreasonable,
631 i.e. if it would be a bad idea to allocate a value of this type in
632 GDB. */
633
634static void
635check_size (const struct type *type)
636{
637 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 638 error (_("object size is larger than varsize-limit"));
714e53ab
PH
639}
640
0963b4bd 641/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 642static LONGEST
c3e5cd34 643max_of_size (int size)
4c4b4cd2 644{
76a01679 645 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 646
76a01679 647 return top_bit | (top_bit - 1);
4c4b4cd2
PH
648}
649
0963b4bd 650/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 651static LONGEST
c3e5cd34 652min_of_size (int size)
4c4b4cd2 653{
c3e5cd34 654 return -max_of_size (size) - 1;
4c4b4cd2
PH
655}
656
0963b4bd 657/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 658static ULONGEST
c3e5cd34 659umax_of_size (int size)
4c4b4cd2 660{
76a01679 661 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 662
76a01679 663 return top_bit | (top_bit - 1);
4c4b4cd2
PH
664}
665
0963b4bd 666/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
667static LONGEST
668max_of_type (struct type *t)
4c4b4cd2 669{
c3e5cd34
PH
670 if (TYPE_UNSIGNED (t))
671 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
672 else
673 return max_of_size (TYPE_LENGTH (t));
674}
675
0963b4bd 676/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
677static LONGEST
678min_of_type (struct type *t)
679{
680 if (TYPE_UNSIGNED (t))
681 return 0;
682 else
683 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
684}
685
686/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
687LONGEST
688ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 689{
76a01679 690 switch (TYPE_CODE (type))
4c4b4cd2
PH
691 {
692 case TYPE_CODE_RANGE:
690cc4eb 693 return TYPE_HIGH_BOUND (type);
4c4b4cd2 694 case TYPE_CODE_ENUM:
14e75d8e 695 return TYPE_FIELD_ENUMVAL (type, TYPE_NFIELDS (type) - 1);
690cc4eb
PH
696 case TYPE_CODE_BOOL:
697 return 1;
698 case TYPE_CODE_CHAR:
76a01679 699 case TYPE_CODE_INT:
690cc4eb 700 return max_of_type (type);
4c4b4cd2 701 default:
43bbcdc2 702 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
703 }
704}
705
14e75d8e 706/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
707LONGEST
708ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 709{
76a01679 710 switch (TYPE_CODE (type))
4c4b4cd2
PH
711 {
712 case TYPE_CODE_RANGE:
690cc4eb 713 return TYPE_LOW_BOUND (type);
4c4b4cd2 714 case TYPE_CODE_ENUM:
14e75d8e 715 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
716 case TYPE_CODE_BOOL:
717 return 0;
718 case TYPE_CODE_CHAR:
76a01679 719 case TYPE_CODE_INT:
690cc4eb 720 return min_of_type (type);
4c4b4cd2 721 default:
43bbcdc2 722 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
723 }
724}
725
726/* The identity on non-range types. For range types, the underlying
76a01679 727 non-range scalar type. */
4c4b4cd2
PH
728
729static struct type *
18af8284 730get_base_type (struct type *type)
4c4b4cd2
PH
731{
732 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
733 {
76a01679
JB
734 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
735 return type;
4c4b4cd2
PH
736 type = TYPE_TARGET_TYPE (type);
737 }
738 return type;
14f9c5c9 739}
41246937
JB
740
741/* Return a decoded version of the given VALUE. This means returning
742 a value whose type is obtained by applying all the GNAT-specific
743 encondings, making the resulting type a static but standard description
744 of the initial type. */
745
746struct value *
747ada_get_decoded_value (struct value *value)
748{
749 struct type *type = ada_check_typedef (value_type (value));
750
751 if (ada_is_array_descriptor_type (type)
752 || (ada_is_constrained_packed_array_type (type)
753 && TYPE_CODE (type) != TYPE_CODE_PTR))
754 {
755 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */
756 value = ada_coerce_to_simple_array_ptr (value);
757 else
758 value = ada_coerce_to_simple_array (value);
759 }
760 else
761 value = ada_to_fixed_value (value);
762
763 return value;
764}
765
766/* Same as ada_get_decoded_value, but with the given TYPE.
767 Because there is no associated actual value for this type,
768 the resulting type might be a best-effort approximation in
769 the case of dynamic types. */
770
771struct type *
772ada_get_decoded_type (struct type *type)
773{
774 type = to_static_fixed_type (type);
775 if (ada_is_constrained_packed_array_type (type))
776 type = ada_coerce_to_simple_array_type (type);
777 return type;
778}
779
4c4b4cd2 780\f
76a01679 781
4c4b4cd2 782 /* Language Selection */
14f9c5c9
AS
783
784/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 785 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 786
14f9c5c9 787enum language
ccefe4c4 788ada_update_initial_language (enum language lang)
14f9c5c9 789{
d2e4a39e 790 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
4c4b4cd2
PH
791 (struct objfile *) NULL) != NULL)
792 return language_ada;
14f9c5c9
AS
793
794 return lang;
795}
96d887e8
PH
796
797/* If the main procedure is written in Ada, then return its name.
798 The result is good until the next call. Return NULL if the main
799 procedure doesn't appear to be in Ada. */
800
801char *
802ada_main_name (void)
803{
804 struct minimal_symbol *msym;
f9bc20b9 805 static char *main_program_name = NULL;
6c038f32 806
96d887e8
PH
807 /* For Ada, the name of the main procedure is stored in a specific
808 string constant, generated by the binder. Look for that symbol,
809 extract its address, and then read that string. If we didn't find
810 that string, then most probably the main procedure is not written
811 in Ada. */
812 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
813
814 if (msym != NULL)
815 {
f9bc20b9
JB
816 CORE_ADDR main_program_name_addr;
817 int err_code;
818
96d887e8
PH
819 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
820 if (main_program_name_addr == 0)
323e0a4a 821 error (_("Invalid address for Ada main program name."));
96d887e8 822
f9bc20b9
JB
823 xfree (main_program_name);
824 target_read_string (main_program_name_addr, &main_program_name,
825 1024, &err_code);
826
827 if (err_code != 0)
828 return NULL;
96d887e8
PH
829 return main_program_name;
830 }
831
832 /* The main procedure doesn't seem to be in Ada. */
833 return NULL;
834}
14f9c5c9 835\f
4c4b4cd2 836 /* Symbols */
d2e4a39e 837
4c4b4cd2
PH
838/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
839 of NULLs. */
14f9c5c9 840
d2e4a39e
AS
841const struct ada_opname_map ada_opname_table[] = {
842 {"Oadd", "\"+\"", BINOP_ADD},
843 {"Osubtract", "\"-\"", BINOP_SUB},
844 {"Omultiply", "\"*\"", BINOP_MUL},
845 {"Odivide", "\"/\"", BINOP_DIV},
846 {"Omod", "\"mod\"", BINOP_MOD},
847 {"Orem", "\"rem\"", BINOP_REM},
848 {"Oexpon", "\"**\"", BINOP_EXP},
849 {"Olt", "\"<\"", BINOP_LESS},
850 {"Ole", "\"<=\"", BINOP_LEQ},
851 {"Ogt", "\">\"", BINOP_GTR},
852 {"Oge", "\">=\"", BINOP_GEQ},
853 {"Oeq", "\"=\"", BINOP_EQUAL},
854 {"One", "\"/=\"", BINOP_NOTEQUAL},
855 {"Oand", "\"and\"", BINOP_BITWISE_AND},
856 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
857 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
858 {"Oconcat", "\"&\"", BINOP_CONCAT},
859 {"Oabs", "\"abs\"", UNOP_ABS},
860 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
861 {"Oadd", "\"+\"", UNOP_PLUS},
862 {"Osubtract", "\"-\"", UNOP_NEG},
863 {NULL, NULL}
14f9c5c9
AS
864};
865
4c4b4cd2
PH
866/* The "encoded" form of DECODED, according to GNAT conventions.
867 The result is valid until the next call to ada_encode. */
868
14f9c5c9 869char *
4c4b4cd2 870ada_encode (const char *decoded)
14f9c5c9 871{
4c4b4cd2
PH
872 static char *encoding_buffer = NULL;
873 static size_t encoding_buffer_size = 0;
d2e4a39e 874 const char *p;
14f9c5c9 875 int k;
d2e4a39e 876
4c4b4cd2 877 if (decoded == NULL)
14f9c5c9
AS
878 return NULL;
879
4c4b4cd2
PH
880 GROW_VECT (encoding_buffer, encoding_buffer_size,
881 2 * strlen (decoded) + 10);
14f9c5c9
AS
882
883 k = 0;
4c4b4cd2 884 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 885 {
cdc7bb92 886 if (*p == '.')
4c4b4cd2
PH
887 {
888 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
889 k += 2;
890 }
14f9c5c9 891 else if (*p == '"')
4c4b4cd2
PH
892 {
893 const struct ada_opname_map *mapping;
894
895 for (mapping = ada_opname_table;
1265e4aa
JB
896 mapping->encoded != NULL
897 && strncmp (mapping->decoded, p,
898 strlen (mapping->decoded)) != 0; mapping += 1)
4c4b4cd2
PH
899 ;
900 if (mapping->encoded == NULL)
323e0a4a 901 error (_("invalid Ada operator name: %s"), p);
4c4b4cd2
PH
902 strcpy (encoding_buffer + k, mapping->encoded);
903 k += strlen (mapping->encoded);
904 break;
905 }
d2e4a39e 906 else
4c4b4cd2
PH
907 {
908 encoding_buffer[k] = *p;
909 k += 1;
910 }
14f9c5c9
AS
911 }
912
4c4b4cd2
PH
913 encoding_buffer[k] = '\0';
914 return encoding_buffer;
14f9c5c9
AS
915}
916
917/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
918 quotes, unfolded, but with the quotes stripped away. Result good
919 to next call. */
920
d2e4a39e
AS
921char *
922ada_fold_name (const char *name)
14f9c5c9 923{
d2e4a39e 924 static char *fold_buffer = NULL;
14f9c5c9
AS
925 static size_t fold_buffer_size = 0;
926
927 int len = strlen (name);
d2e4a39e 928 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
929
930 if (name[0] == '\'')
931 {
d2e4a39e
AS
932 strncpy (fold_buffer, name + 1, len - 2);
933 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
934 }
935 else
936 {
937 int i;
5b4ee69b 938
14f9c5c9 939 for (i = 0; i <= len; i += 1)
4c4b4cd2 940 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
941 }
942
943 return fold_buffer;
944}
945
529cad9c
PH
946/* Return nonzero if C is either a digit or a lowercase alphabet character. */
947
948static int
949is_lower_alphanum (const char c)
950{
951 return (isdigit (c) || (isalpha (c) && islower (c)));
952}
953
c90092fe
JB
954/* ENCODED is the linkage name of a symbol and LEN contains its length.
955 This function saves in LEN the length of that same symbol name but
956 without either of these suffixes:
29480c32
JB
957 . .{DIGIT}+
958 . ${DIGIT}+
959 . ___{DIGIT}+
960 . __{DIGIT}+.
c90092fe 961
29480c32
JB
962 These are suffixes introduced by the compiler for entities such as
963 nested subprogram for instance, in order to avoid name clashes.
964 They do not serve any purpose for the debugger. */
965
966static void
967ada_remove_trailing_digits (const char *encoded, int *len)
968{
969 if (*len > 1 && isdigit (encoded[*len - 1]))
970 {
971 int i = *len - 2;
5b4ee69b 972
29480c32
JB
973 while (i > 0 && isdigit (encoded[i]))
974 i--;
975 if (i >= 0 && encoded[i] == '.')
976 *len = i;
977 else if (i >= 0 && encoded[i] == '$')
978 *len = i;
979 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
980 *len = i - 2;
981 else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
982 *len = i - 1;
983 }
984}
985
986/* Remove the suffix introduced by the compiler for protected object
987 subprograms. */
988
989static void
990ada_remove_po_subprogram_suffix (const char *encoded, int *len)
991{
992 /* Remove trailing N. */
993
994 /* Protected entry subprograms are broken into two
995 separate subprograms: The first one is unprotected, and has
996 a 'N' suffix; the second is the protected version, and has
0963b4bd 997 the 'P' suffix. The second calls the first one after handling
29480c32
JB
998 the protection. Since the P subprograms are internally generated,
999 we leave these names undecoded, giving the user a clue that this
1000 entity is internal. */
1001
1002 if (*len > 1
1003 && encoded[*len - 1] == 'N'
1004 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1005 *len = *len - 1;
1006}
1007
69fadcdf
JB
1008/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
1009
1010static void
1011ada_remove_Xbn_suffix (const char *encoded, int *len)
1012{
1013 int i = *len - 1;
1014
1015 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
1016 i--;
1017
1018 if (encoded[i] != 'X')
1019 return;
1020
1021 if (i == 0)
1022 return;
1023
1024 if (isalnum (encoded[i-1]))
1025 *len = i;
1026}
1027
29480c32
JB
1028/* If ENCODED follows the GNAT entity encoding conventions, then return
1029 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
1030 replaced by ENCODED.
14f9c5c9 1031
4c4b4cd2 1032 The resulting string is valid until the next call of ada_decode.
29480c32 1033 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
1034 is returned. */
1035
1036const char *
1037ada_decode (const char *encoded)
14f9c5c9
AS
1038{
1039 int i, j;
1040 int len0;
d2e4a39e 1041 const char *p;
4c4b4cd2 1042 char *decoded;
14f9c5c9 1043 int at_start_name;
4c4b4cd2
PH
1044 static char *decoding_buffer = NULL;
1045 static size_t decoding_buffer_size = 0;
d2e4a39e 1046
29480c32
JB
1047 /* The name of the Ada main procedure starts with "_ada_".
1048 This prefix is not part of the decoded name, so skip this part
1049 if we see this prefix. */
4c4b4cd2
PH
1050 if (strncmp (encoded, "_ada_", 5) == 0)
1051 encoded += 5;
14f9c5c9 1052
29480c32
JB
1053 /* If the name starts with '_', then it is not a properly encoded
1054 name, so do not attempt to decode it. Similarly, if the name
1055 starts with '<', the name should not be decoded. */
4c4b4cd2 1056 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1057 goto Suppress;
1058
4c4b4cd2 1059 len0 = strlen (encoded);
4c4b4cd2 1060
29480c32
JB
1061 ada_remove_trailing_digits (encoded, &len0);
1062 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1063
4c4b4cd2
PH
1064 /* Remove the ___X.* suffix if present. Do not forget to verify that
1065 the suffix is located before the current "end" of ENCODED. We want
1066 to avoid re-matching parts of ENCODED that have previously been
1067 marked as discarded (by decrementing LEN0). */
1068 p = strstr (encoded, "___");
1069 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1070 {
1071 if (p[3] == 'X')
4c4b4cd2 1072 len0 = p - encoded;
14f9c5c9 1073 else
4c4b4cd2 1074 goto Suppress;
14f9c5c9 1075 }
4c4b4cd2 1076
29480c32
JB
1077 /* Remove any trailing TKB suffix. It tells us that this symbol
1078 is for the body of a task, but that information does not actually
1079 appear in the decoded name. */
1080
4c4b4cd2 1081 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
14f9c5c9 1082 len0 -= 3;
76a01679 1083
a10967fa
JB
1084 /* Remove any trailing TB suffix. The TB suffix is slightly different
1085 from the TKB suffix because it is used for non-anonymous task
1086 bodies. */
1087
1088 if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1089 len0 -= 2;
1090
29480c32
JB
1091 /* Remove trailing "B" suffixes. */
1092 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1093
4c4b4cd2 1094 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
14f9c5c9
AS
1095 len0 -= 1;
1096
4c4b4cd2 1097 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1098
4c4b4cd2
PH
1099 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1100 decoded = decoding_buffer;
14f9c5c9 1101
29480c32
JB
1102 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1103
4c4b4cd2 1104 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1105 {
4c4b4cd2
PH
1106 i = len0 - 2;
1107 while ((i >= 0 && isdigit (encoded[i]))
1108 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1109 i -= 1;
1110 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1111 len0 = i - 1;
1112 else if (encoded[i] == '$')
1113 len0 = i;
d2e4a39e 1114 }
14f9c5c9 1115
29480c32
JB
1116 /* The first few characters that are not alphabetic are not part
1117 of any encoding we use, so we can copy them over verbatim. */
1118
4c4b4cd2
PH
1119 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1120 decoded[j] = encoded[i];
14f9c5c9
AS
1121
1122 at_start_name = 1;
1123 while (i < len0)
1124 {
29480c32 1125 /* Is this a symbol function? */
4c4b4cd2
PH
1126 if (at_start_name && encoded[i] == 'O')
1127 {
1128 int k;
5b4ee69b 1129
4c4b4cd2
PH
1130 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1131 {
1132 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1133 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1134 op_len - 1) == 0)
1135 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1136 {
1137 strcpy (decoded + j, ada_opname_table[k].decoded);
1138 at_start_name = 0;
1139 i += op_len;
1140 j += strlen (ada_opname_table[k].decoded);
1141 break;
1142 }
1143 }
1144 if (ada_opname_table[k].encoded != NULL)
1145 continue;
1146 }
14f9c5c9
AS
1147 at_start_name = 0;
1148
529cad9c
PH
1149 /* Replace "TK__" with "__", which will eventually be translated
1150 into "." (just below). */
1151
4c4b4cd2
PH
1152 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1153 i += 2;
529cad9c 1154
29480c32
JB
1155 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1156 be translated into "." (just below). These are internal names
1157 generated for anonymous blocks inside which our symbol is nested. */
1158
1159 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1160 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1161 && isdigit (encoded [i+4]))
1162 {
1163 int k = i + 5;
1164
1165 while (k < len0 && isdigit (encoded[k]))
1166 k++; /* Skip any extra digit. */
1167
1168 /* Double-check that the "__B_{DIGITS}+" sequence we found
1169 is indeed followed by "__". */
1170 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1171 i = k;
1172 }
1173
529cad9c
PH
1174 /* Remove _E{DIGITS}+[sb] */
1175
1176 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1177 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1178 one implements the actual entry code, and has a suffix following
1179 the convention above; the second one implements the barrier and
1180 uses the same convention as above, except that the 'E' is replaced
1181 by a 'B'.
1182
1183 Just as above, we do not decode the name of barrier functions
1184 to give the user a clue that the code he is debugging has been
1185 internally generated. */
1186
1187 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1188 && isdigit (encoded[i+2]))
1189 {
1190 int k = i + 3;
1191
1192 while (k < len0 && isdigit (encoded[k]))
1193 k++;
1194
1195 if (k < len0
1196 && (encoded[k] == 'b' || encoded[k] == 's'))
1197 {
1198 k++;
1199 /* Just as an extra precaution, make sure that if this
1200 suffix is followed by anything else, it is a '_'.
1201 Otherwise, we matched this sequence by accident. */
1202 if (k == len0
1203 || (k < len0 && encoded[k] == '_'))
1204 i = k;
1205 }
1206 }
1207
1208 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1209 the GNAT front-end in protected object subprograms. */
1210
1211 if (i < len0 + 3
1212 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1213 {
1214 /* Backtrack a bit up until we reach either the begining of
1215 the encoded name, or "__". Make sure that we only find
1216 digits or lowercase characters. */
1217 const char *ptr = encoded + i - 1;
1218
1219 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1220 ptr--;
1221 if (ptr < encoded
1222 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1223 i++;
1224 }
1225
4c4b4cd2
PH
1226 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1227 {
29480c32
JB
1228 /* This is a X[bn]* sequence not separated from the previous
1229 part of the name with a non-alpha-numeric character (in other
1230 words, immediately following an alpha-numeric character), then
1231 verify that it is placed at the end of the encoded name. If
1232 not, then the encoding is not valid and we should abort the
1233 decoding. Otherwise, just skip it, it is used in body-nested
1234 package names. */
4c4b4cd2
PH
1235 do
1236 i += 1;
1237 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1238 if (i < len0)
1239 goto Suppress;
1240 }
cdc7bb92 1241 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1242 {
29480c32 1243 /* Replace '__' by '.'. */
4c4b4cd2
PH
1244 decoded[j] = '.';
1245 at_start_name = 1;
1246 i += 2;
1247 j += 1;
1248 }
14f9c5c9 1249 else
4c4b4cd2 1250 {
29480c32
JB
1251 /* It's a character part of the decoded name, so just copy it
1252 over. */
4c4b4cd2
PH
1253 decoded[j] = encoded[i];
1254 i += 1;
1255 j += 1;
1256 }
14f9c5c9 1257 }
4c4b4cd2 1258 decoded[j] = '\000';
14f9c5c9 1259
29480c32
JB
1260 /* Decoded names should never contain any uppercase character.
1261 Double-check this, and abort the decoding if we find one. */
1262
4c4b4cd2
PH
1263 for (i = 0; decoded[i] != '\0'; i += 1)
1264 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1265 goto Suppress;
1266
4c4b4cd2
PH
1267 if (strcmp (decoded, encoded) == 0)
1268 return encoded;
1269 else
1270 return decoded;
14f9c5c9
AS
1271
1272Suppress:
4c4b4cd2
PH
1273 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1274 decoded = decoding_buffer;
1275 if (encoded[0] == '<')
1276 strcpy (decoded, encoded);
14f9c5c9 1277 else
88c15c34 1278 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1279 return decoded;
1280
1281}
1282
1283/* Table for keeping permanent unique copies of decoded names. Once
1284 allocated, names in this table are never released. While this is a
1285 storage leak, it should not be significant unless there are massive
1286 changes in the set of decoded names in successive versions of a
1287 symbol table loaded during a single session. */
1288static struct htab *decoded_names_store;
1289
1290/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1291 in the language-specific part of GSYMBOL, if it has not been
1292 previously computed. Tries to save the decoded name in the same
1293 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1294 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1295 GSYMBOL).
4c4b4cd2
PH
1296 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1297 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1298 when a decoded name is cached in it. */
4c4b4cd2 1299
45e6c716 1300const char *
f85f34ed 1301ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1302{
f85f34ed
TT
1303 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1304 const char **resultp =
1305 &gsymbol->language_specific.mangled_lang.demangled_name;
5b4ee69b 1306
f85f34ed 1307 if (!gsymbol->ada_mangled)
4c4b4cd2
PH
1308 {
1309 const char *decoded = ada_decode (gsymbol->name);
f85f34ed 1310 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1311
f85f34ed 1312 gsymbol->ada_mangled = 1;
5b4ee69b 1313
f85f34ed
TT
1314 if (obstack != NULL)
1315 *resultp = obstack_copy0 (obstack, decoded, strlen (decoded));
1316 else
76a01679 1317 {
f85f34ed
TT
1318 /* Sometimes, we can't find a corresponding objfile, in
1319 which case, we put the result on the heap. Since we only
1320 decode when needed, we hope this usually does not cause a
1321 significant memory leak (FIXME). */
1322
76a01679
JB
1323 char **slot = (char **) htab_find_slot (decoded_names_store,
1324 decoded, INSERT);
5b4ee69b 1325
76a01679
JB
1326 if (*slot == NULL)
1327 *slot = xstrdup (decoded);
1328 *resultp = *slot;
1329 }
4c4b4cd2 1330 }
14f9c5c9 1331
4c4b4cd2
PH
1332 return *resultp;
1333}
76a01679 1334
2c0b251b 1335static char *
76a01679 1336ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1337{
1338 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1339}
1340
1341/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
4c4b4cd2
PH
1342 suffixes that encode debugging information or leading _ada_ on
1343 SYM_NAME (see is_name_suffix commentary for the debugging
1344 information that is ignored). If WILD, then NAME need only match a
1345 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1346 either argument is NULL. */
14f9c5c9 1347
2c0b251b 1348static int
40658b94 1349match_name (const char *sym_name, const char *name, int wild)
14f9c5c9
AS
1350{
1351 if (sym_name == NULL || name == NULL)
1352 return 0;
1353 else if (wild)
73589123 1354 return wild_match (sym_name, name) == 0;
d2e4a39e
AS
1355 else
1356 {
1357 int len_name = strlen (name);
5b4ee69b 1358
4c4b4cd2
PH
1359 return (strncmp (sym_name, name, len_name) == 0
1360 && is_name_suffix (sym_name + len_name))
1361 || (strncmp (sym_name, "_ada_", 5) == 0
1362 && strncmp (sym_name + 5, name, len_name) == 0
1363 && is_name_suffix (sym_name + len_name + 5));
d2e4a39e 1364 }
14f9c5c9 1365}
14f9c5c9 1366\f
d2e4a39e 1367
4c4b4cd2 1368 /* Arrays */
14f9c5c9 1369
28c85d6c
JB
1370/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1371 generated by the GNAT compiler to describe the index type used
1372 for each dimension of an array, check whether it follows the latest
1373 known encoding. If not, fix it up to conform to the latest encoding.
1374 Otherwise, do nothing. This function also does nothing if
1375 INDEX_DESC_TYPE is NULL.
1376
1377 The GNAT encoding used to describle the array index type evolved a bit.
1378 Initially, the information would be provided through the name of each
1379 field of the structure type only, while the type of these fields was
1380 described as unspecified and irrelevant. The debugger was then expected
1381 to perform a global type lookup using the name of that field in order
1382 to get access to the full index type description. Because these global
1383 lookups can be very expensive, the encoding was later enhanced to make
1384 the global lookup unnecessary by defining the field type as being
1385 the full index type description.
1386
1387 The purpose of this routine is to allow us to support older versions
1388 of the compiler by detecting the use of the older encoding, and by
1389 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1390 we essentially replace each field's meaningless type by the associated
1391 index subtype). */
1392
1393void
1394ada_fixup_array_indexes_type (struct type *index_desc_type)
1395{
1396 int i;
1397
1398 if (index_desc_type == NULL)
1399 return;
1400 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1401
1402 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1403 to check one field only, no need to check them all). If not, return
1404 now.
1405
1406 If our INDEX_DESC_TYPE was generated using the older encoding,
1407 the field type should be a meaningless integer type whose name
1408 is not equal to the field name. */
1409 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1410 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1411 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1412 return;
1413
1414 /* Fixup each field of INDEX_DESC_TYPE. */
1415 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1416 {
0d5cff50 1417 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1418 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1419
1420 if (raw_type)
1421 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1422 }
1423}
1424
4c4b4cd2 1425/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1426
d2e4a39e
AS
1427static char *bound_name[] = {
1428 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1429 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1430};
1431
1432/* Maximum number of array dimensions we are prepared to handle. */
1433
4c4b4cd2 1434#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1435
14f9c5c9 1436
4c4b4cd2
PH
1437/* The desc_* routines return primitive portions of array descriptors
1438 (fat pointers). */
14f9c5c9
AS
1439
1440/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1441 level of indirection, if needed. */
1442
d2e4a39e
AS
1443static struct type *
1444desc_base_type (struct type *type)
14f9c5c9
AS
1445{
1446 if (type == NULL)
1447 return NULL;
61ee279c 1448 type = ada_check_typedef (type);
720d1a40
JB
1449 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1450 type = ada_typedef_target_type (type);
1451
1265e4aa
JB
1452 if (type != NULL
1453 && (TYPE_CODE (type) == TYPE_CODE_PTR
1454 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1455 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1456 else
1457 return type;
1458}
1459
4c4b4cd2
PH
1460/* True iff TYPE indicates a "thin" array pointer type. */
1461
14f9c5c9 1462static int
d2e4a39e 1463is_thin_pntr (struct type *type)
14f9c5c9 1464{
d2e4a39e 1465 return
14f9c5c9
AS
1466 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1467 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1468}
1469
4c4b4cd2
PH
1470/* The descriptor type for thin pointer type TYPE. */
1471
d2e4a39e
AS
1472static struct type *
1473thin_descriptor_type (struct type *type)
14f9c5c9 1474{
d2e4a39e 1475 struct type *base_type = desc_base_type (type);
5b4ee69b 1476
14f9c5c9
AS
1477 if (base_type == NULL)
1478 return NULL;
1479 if (is_suffix (ada_type_name (base_type), "___XVE"))
1480 return base_type;
d2e4a39e 1481 else
14f9c5c9 1482 {
d2e4a39e 1483 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1484
14f9c5c9 1485 if (alt_type == NULL)
4c4b4cd2 1486 return base_type;
14f9c5c9 1487 else
4c4b4cd2 1488 return alt_type;
14f9c5c9
AS
1489 }
1490}
1491
4c4b4cd2
PH
1492/* A pointer to the array data for thin-pointer value VAL. */
1493
d2e4a39e
AS
1494static struct value *
1495thin_data_pntr (struct value *val)
14f9c5c9 1496{
828292f2 1497 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1498 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1499
556bdfd4
UW
1500 data_type = lookup_pointer_type (data_type);
1501
14f9c5c9 1502 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1503 return value_cast (data_type, value_copy (val));
d2e4a39e 1504 else
42ae5230 1505 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1506}
1507
4c4b4cd2
PH
1508/* True iff TYPE indicates a "thick" array pointer type. */
1509
14f9c5c9 1510static int
d2e4a39e 1511is_thick_pntr (struct type *type)
14f9c5c9
AS
1512{
1513 type = desc_base_type (type);
1514 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1515 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1516}
1517
4c4b4cd2
PH
1518/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1519 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1520
d2e4a39e
AS
1521static struct type *
1522desc_bounds_type (struct type *type)
14f9c5c9 1523{
d2e4a39e 1524 struct type *r;
14f9c5c9
AS
1525
1526 type = desc_base_type (type);
1527
1528 if (type == NULL)
1529 return NULL;
1530 else if (is_thin_pntr (type))
1531 {
1532 type = thin_descriptor_type (type);
1533 if (type == NULL)
4c4b4cd2 1534 return NULL;
14f9c5c9
AS
1535 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1536 if (r != NULL)
61ee279c 1537 return ada_check_typedef (r);
14f9c5c9
AS
1538 }
1539 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1540 {
1541 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1542 if (r != NULL)
61ee279c 1543 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1544 }
1545 return NULL;
1546}
1547
1548/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1549 one, a pointer to its bounds data. Otherwise NULL. */
1550
d2e4a39e
AS
1551static struct value *
1552desc_bounds (struct value *arr)
14f9c5c9 1553{
df407dfe 1554 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1555
d2e4a39e 1556 if (is_thin_pntr (type))
14f9c5c9 1557 {
d2e4a39e 1558 struct type *bounds_type =
4c4b4cd2 1559 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1560 LONGEST addr;
1561
4cdfadb1 1562 if (bounds_type == NULL)
323e0a4a 1563 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1564
1565 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1566 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1567 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1568 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1569 addr = value_as_long (arr);
d2e4a39e 1570 else
42ae5230 1571 addr = value_address (arr);
14f9c5c9 1572
d2e4a39e 1573 return
4c4b4cd2
PH
1574 value_from_longest (lookup_pointer_type (bounds_type),
1575 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1576 }
1577
1578 else if (is_thick_pntr (type))
05e522ef
JB
1579 {
1580 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1581 _("Bad GNAT array descriptor"));
1582 struct type *p_bounds_type = value_type (p_bounds);
1583
1584 if (p_bounds_type
1585 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1586 {
1587 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1588
1589 if (TYPE_STUB (target_type))
1590 p_bounds = value_cast (lookup_pointer_type
1591 (ada_check_typedef (target_type)),
1592 p_bounds);
1593 }
1594 else
1595 error (_("Bad GNAT array descriptor"));
1596
1597 return p_bounds;
1598 }
14f9c5c9
AS
1599 else
1600 return NULL;
1601}
1602
4c4b4cd2
PH
1603/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1604 position of the field containing the address of the bounds data. */
1605
14f9c5c9 1606static int
d2e4a39e 1607fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1608{
1609 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1610}
1611
1612/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1613 size of the field containing the address of the bounds data. */
1614
14f9c5c9 1615static int
d2e4a39e 1616fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1617{
1618 type = desc_base_type (type);
1619
d2e4a39e 1620 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1621 return TYPE_FIELD_BITSIZE (type, 1);
1622 else
61ee279c 1623 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1624}
1625
4c4b4cd2 1626/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1627 pointer to one, the type of its array data (a array-with-no-bounds type);
1628 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1629 data. */
4c4b4cd2 1630
d2e4a39e 1631static struct type *
556bdfd4 1632desc_data_target_type (struct type *type)
14f9c5c9
AS
1633{
1634 type = desc_base_type (type);
1635
4c4b4cd2 1636 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1637 if (is_thin_pntr (type))
556bdfd4 1638 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1639 else if (is_thick_pntr (type))
556bdfd4
UW
1640 {
1641 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1642
1643 if (data_type
1644 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1645 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1646 }
1647
1648 return NULL;
14f9c5c9
AS
1649}
1650
1651/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1652 its array data. */
4c4b4cd2 1653
d2e4a39e
AS
1654static struct value *
1655desc_data (struct value *arr)
14f9c5c9 1656{
df407dfe 1657 struct type *type = value_type (arr);
5b4ee69b 1658
14f9c5c9
AS
1659 if (is_thin_pntr (type))
1660 return thin_data_pntr (arr);
1661 else if (is_thick_pntr (type))
d2e4a39e 1662 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1663 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1664 else
1665 return NULL;
1666}
1667
1668
1669/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1670 position of the field containing the address of the data. */
1671
14f9c5c9 1672static int
d2e4a39e 1673fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1674{
1675 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1676}
1677
1678/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1679 size of the field containing the address of the data. */
1680
14f9c5c9 1681static int
d2e4a39e 1682fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1683{
1684 type = desc_base_type (type);
1685
1686 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1687 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1688 else
14f9c5c9
AS
1689 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1690}
1691
4c4b4cd2 1692/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1693 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1694 bound, if WHICH is 1. The first bound is I=1. */
1695
d2e4a39e
AS
1696static struct value *
1697desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1698{
d2e4a39e 1699 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1700 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1701}
1702
1703/* If BOUNDS is an array-bounds structure type, return the bit position
1704 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1705 bound, if WHICH is 1. The first bound is I=1. */
1706
14f9c5c9 1707static int
d2e4a39e 1708desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1709{
d2e4a39e 1710 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1711}
1712
1713/* If BOUNDS is an array-bounds structure type, return the bit field size
1714 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1715 bound, if WHICH is 1. The first bound is I=1. */
1716
76a01679 1717static int
d2e4a39e 1718desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1719{
1720 type = desc_base_type (type);
1721
d2e4a39e
AS
1722 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1723 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1724 else
1725 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1726}
1727
1728/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1729 Ith bound (numbering from 1). Otherwise, NULL. */
1730
d2e4a39e
AS
1731static struct type *
1732desc_index_type (struct type *type, int i)
14f9c5c9
AS
1733{
1734 type = desc_base_type (type);
1735
1736 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1737 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1738 else
14f9c5c9
AS
1739 return NULL;
1740}
1741
4c4b4cd2
PH
1742/* The number of index positions in the array-bounds type TYPE.
1743 Return 0 if TYPE is NULL. */
1744
14f9c5c9 1745static int
d2e4a39e 1746desc_arity (struct type *type)
14f9c5c9
AS
1747{
1748 type = desc_base_type (type);
1749
1750 if (type != NULL)
1751 return TYPE_NFIELDS (type) / 2;
1752 return 0;
1753}
1754
4c4b4cd2
PH
1755/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1756 an array descriptor type (representing an unconstrained array
1757 type). */
1758
76a01679
JB
1759static int
1760ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1761{
1762 if (type == NULL)
1763 return 0;
61ee279c 1764 type = ada_check_typedef (type);
4c4b4cd2 1765 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1766 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1767}
1768
52ce6436 1769/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1770 * to one. */
52ce6436 1771
2c0b251b 1772static int
52ce6436
PH
1773ada_is_array_type (struct type *type)
1774{
1775 while (type != NULL
1776 && (TYPE_CODE (type) == TYPE_CODE_PTR
1777 || TYPE_CODE (type) == TYPE_CODE_REF))
1778 type = TYPE_TARGET_TYPE (type);
1779 return ada_is_direct_array_type (type);
1780}
1781
4c4b4cd2 1782/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1783
14f9c5c9 1784int
4c4b4cd2 1785ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1786{
1787 if (type == NULL)
1788 return 0;
61ee279c 1789 type = ada_check_typedef (type);
14f9c5c9 1790 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2 1791 || (TYPE_CODE (type) == TYPE_CODE_PTR
b0dd7688
JB
1792 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1793 == TYPE_CODE_ARRAY));
14f9c5c9
AS
1794}
1795
4c4b4cd2
PH
1796/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1797
14f9c5c9 1798int
4c4b4cd2 1799ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1800{
556bdfd4 1801 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1802
1803 if (type == NULL)
1804 return 0;
61ee279c 1805 type = ada_check_typedef (type);
556bdfd4
UW
1806 return (data_type != NULL
1807 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1808 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1809}
1810
1811/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1812 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1813 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1814 is still needed. */
1815
14f9c5c9 1816int
ebf56fd3 1817ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1818{
d2e4a39e 1819 return
14f9c5c9
AS
1820 type != NULL
1821 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1822 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1823 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1824 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1825}
1826
1827
4c4b4cd2 1828/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1829 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1830 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1831 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1832 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1833 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1834 a descriptor. */
d2e4a39e
AS
1835struct type *
1836ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1837{
ad82864c
JB
1838 if (ada_is_constrained_packed_array_type (value_type (arr)))
1839 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1840
df407dfe
AC
1841 if (!ada_is_array_descriptor_type (value_type (arr)))
1842 return value_type (arr);
d2e4a39e
AS
1843
1844 if (!bounds)
ad82864c
JB
1845 {
1846 struct type *array_type =
1847 ada_check_typedef (desc_data_target_type (value_type (arr)));
1848
1849 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1850 TYPE_FIELD_BITSIZE (array_type, 0) =
1851 decode_packed_array_bitsize (value_type (arr));
1852
1853 return array_type;
1854 }
14f9c5c9
AS
1855 else
1856 {
d2e4a39e 1857 struct type *elt_type;
14f9c5c9 1858 int arity;
d2e4a39e 1859 struct value *descriptor;
14f9c5c9 1860
df407dfe
AC
1861 elt_type = ada_array_element_type (value_type (arr), -1);
1862 arity = ada_array_arity (value_type (arr));
14f9c5c9 1863
d2e4a39e 1864 if (elt_type == NULL || arity == 0)
df407dfe 1865 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1866
1867 descriptor = desc_bounds (arr);
d2e4a39e 1868 if (value_as_long (descriptor) == 0)
4c4b4cd2 1869 return NULL;
d2e4a39e 1870 while (arity > 0)
4c4b4cd2 1871 {
e9bb382b
UW
1872 struct type *range_type = alloc_type_copy (value_type (arr));
1873 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1874 struct value *low = desc_one_bound (descriptor, arity, 0);
1875 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1876
5b4ee69b 1877 arity -= 1;
df407dfe 1878 create_range_type (range_type, value_type (low),
529cad9c
PH
1879 longest_to_int (value_as_long (low)),
1880 longest_to_int (value_as_long (high)));
4c4b4cd2 1881 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1882
1883 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1884 {
1885 /* We need to store the element packed bitsize, as well as
1886 recompute the array size, because it was previously
1887 computed based on the unpacked element size. */
1888 LONGEST lo = value_as_long (low);
1889 LONGEST hi = value_as_long (high);
1890
1891 TYPE_FIELD_BITSIZE (elt_type, 0) =
1892 decode_packed_array_bitsize (value_type (arr));
1893 /* If the array has no element, then the size is already
1894 zero, and does not need to be recomputed. */
1895 if (lo < hi)
1896 {
1897 int array_bitsize =
1898 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
1899
1900 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1901 }
1902 }
4c4b4cd2 1903 }
14f9c5c9
AS
1904
1905 return lookup_pointer_type (elt_type);
1906 }
1907}
1908
1909/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
1910 Otherwise, returns either a standard GDB array with bounds set
1911 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1912 GDB array. Returns NULL if ARR is a null fat pointer. */
1913
d2e4a39e
AS
1914struct value *
1915ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 1916{
df407dfe 1917 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1918 {
d2e4a39e 1919 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 1920
14f9c5c9 1921 if (arrType == NULL)
4c4b4cd2 1922 return NULL;
14f9c5c9
AS
1923 return value_cast (arrType, value_copy (desc_data (arr)));
1924 }
ad82864c
JB
1925 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1926 return decode_constrained_packed_array (arr);
14f9c5c9
AS
1927 else
1928 return arr;
1929}
1930
1931/* If ARR does not represent an array, returns ARR unchanged.
1932 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
1933 be ARR itself if it already is in the proper form). */
1934
720d1a40 1935struct value *
d2e4a39e 1936ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 1937{
df407dfe 1938 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1939 {
d2e4a39e 1940 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 1941
14f9c5c9 1942 if (arrVal == NULL)
323e0a4a 1943 error (_("Bounds unavailable for null array pointer."));
529cad9c 1944 check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
1945 return value_ind (arrVal);
1946 }
ad82864c
JB
1947 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1948 return decode_constrained_packed_array (arr);
d2e4a39e 1949 else
14f9c5c9
AS
1950 return arr;
1951}
1952
1953/* If TYPE represents a GNAT array type, return it translated to an
1954 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
1955 packing). For other types, is the identity. */
1956
d2e4a39e
AS
1957struct type *
1958ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 1959{
ad82864c
JB
1960 if (ada_is_constrained_packed_array_type (type))
1961 return decode_constrained_packed_array_type (type);
17280b9f
UW
1962
1963 if (ada_is_array_descriptor_type (type))
556bdfd4 1964 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
1965
1966 return type;
14f9c5c9
AS
1967}
1968
4c4b4cd2
PH
1969/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1970
ad82864c
JB
1971static int
1972ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
1973{
1974 if (type == NULL)
1975 return 0;
4c4b4cd2 1976 type = desc_base_type (type);
61ee279c 1977 type = ada_check_typedef (type);
d2e4a39e 1978 return
14f9c5c9
AS
1979 ada_type_name (type) != NULL
1980 && strstr (ada_type_name (type), "___XP") != NULL;
1981}
1982
ad82864c
JB
1983/* Non-zero iff TYPE represents a standard GNAT constrained
1984 packed-array type. */
1985
1986int
1987ada_is_constrained_packed_array_type (struct type *type)
1988{
1989 return ada_is_packed_array_type (type)
1990 && !ada_is_array_descriptor_type (type);
1991}
1992
1993/* Non-zero iff TYPE represents an array descriptor for a
1994 unconstrained packed-array type. */
1995
1996static int
1997ada_is_unconstrained_packed_array_type (struct type *type)
1998{
1999 return ada_is_packed_array_type (type)
2000 && ada_is_array_descriptor_type (type);
2001}
2002
2003/* Given that TYPE encodes a packed array type (constrained or unconstrained),
2004 return the size of its elements in bits. */
2005
2006static long
2007decode_packed_array_bitsize (struct type *type)
2008{
0d5cff50
DE
2009 const char *raw_name;
2010 const char *tail;
ad82864c
JB
2011 long bits;
2012
720d1a40
JB
2013 /* Access to arrays implemented as fat pointers are encoded as a typedef
2014 of the fat pointer type. We need the name of the fat pointer type
2015 to do the decoding, so strip the typedef layer. */
2016 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
2017 type = ada_typedef_target_type (type);
2018
2019 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2020 if (!raw_name)
2021 raw_name = ada_type_name (desc_base_type (type));
2022
2023 if (!raw_name)
2024 return 0;
2025
2026 tail = strstr (raw_name, "___XP");
720d1a40 2027 gdb_assert (tail != NULL);
ad82864c
JB
2028
2029 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2030 {
2031 lim_warning
2032 (_("could not understand bit size information on packed array"));
2033 return 0;
2034 }
2035
2036 return bits;
2037}
2038
14f9c5c9
AS
2039/* Given that TYPE is a standard GDB array type with all bounds filled
2040 in, and that the element size of its ultimate scalar constituents
2041 (that is, either its elements, or, if it is an array of arrays, its
2042 elements' elements, etc.) is *ELT_BITS, return an identical type,
2043 but with the bit sizes of its elements (and those of any
2044 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2
PH
2045 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2046 in bits. */
2047
d2e4a39e 2048static struct type *
ad82864c 2049constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2050{
d2e4a39e
AS
2051 struct type *new_elt_type;
2052 struct type *new_type;
99b1c762
JB
2053 struct type *index_type_desc;
2054 struct type *index_type;
14f9c5c9
AS
2055 LONGEST low_bound, high_bound;
2056
61ee279c 2057 type = ada_check_typedef (type);
14f9c5c9
AS
2058 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2059 return type;
2060
99b1c762
JB
2061 index_type_desc = ada_find_parallel_type (type, "___XA");
2062 if (index_type_desc)
2063 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2064 NULL);
2065 else
2066 index_type = TYPE_INDEX_TYPE (type);
2067
e9bb382b 2068 new_type = alloc_type_copy (type);
ad82864c
JB
2069 new_elt_type =
2070 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2071 elt_bits);
99b1c762 2072 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9
AS
2073 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2074 TYPE_NAME (new_type) = ada_type_name (type);
2075
99b1c762 2076 if (get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
14f9c5c9
AS
2077 low_bound = high_bound = 0;
2078 if (high_bound < low_bound)
2079 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2080 else
14f9c5c9
AS
2081 {
2082 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2083 TYPE_LENGTH (new_type) =
4c4b4cd2 2084 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2085 }
2086
876cecd0 2087 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2088 return new_type;
2089}
2090
ad82864c
JB
2091/* The array type encoded by TYPE, where
2092 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2093
d2e4a39e 2094static struct type *
ad82864c 2095decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2096{
0d5cff50 2097 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2098 char *name;
0d5cff50 2099 const char *tail;
d2e4a39e 2100 struct type *shadow_type;
14f9c5c9 2101 long bits;
14f9c5c9 2102
727e3d2e
JB
2103 if (!raw_name)
2104 raw_name = ada_type_name (desc_base_type (type));
2105
2106 if (!raw_name)
2107 return NULL;
2108
2109 name = (char *) alloca (strlen (raw_name) + 1);
2110 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2111 type = desc_base_type (type);
2112
14f9c5c9
AS
2113 memcpy (name, raw_name, tail - raw_name);
2114 name[tail - raw_name] = '\000';
2115
b4ba55a1
JB
2116 shadow_type = ada_find_parallel_type_with_name (type, name);
2117
2118 if (shadow_type == NULL)
14f9c5c9 2119 {
323e0a4a 2120 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2121 return NULL;
2122 }
cb249c71 2123 CHECK_TYPEDEF (shadow_type);
14f9c5c9
AS
2124
2125 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2126 {
0963b4bd
MS
2127 lim_warning (_("could not understand bounds "
2128 "information on packed array"));
14f9c5c9
AS
2129 return NULL;
2130 }
d2e4a39e 2131
ad82864c
JB
2132 bits = decode_packed_array_bitsize (type);
2133 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2134}
2135
ad82864c
JB
2136/* Given that ARR is a struct value *indicating a GNAT constrained packed
2137 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2138 standard GDB array type except that the BITSIZEs of the array
2139 target types are set to the number of bits in each element, and the
4c4b4cd2 2140 type length is set appropriately. */
14f9c5c9 2141
d2e4a39e 2142static struct value *
ad82864c 2143decode_constrained_packed_array (struct value *arr)
14f9c5c9 2144{
4c4b4cd2 2145 struct type *type;
14f9c5c9 2146
4c4b4cd2 2147 arr = ada_coerce_ref (arr);
284614f0
JB
2148
2149 /* If our value is a pointer, then dererence it. Make sure that
2150 this operation does not cause the target type to be fixed, as
2151 this would indirectly cause this array to be decoded. The rest
2152 of the routine assumes that the array hasn't been decoded yet,
2153 so we use the basic "value_ind" routine to perform the dereferencing,
2154 as opposed to using "ada_value_ind". */
828292f2 2155 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
284614f0 2156 arr = value_ind (arr);
4c4b4cd2 2157
ad82864c 2158 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2159 if (type == NULL)
2160 {
323e0a4a 2161 error (_("can't unpack array"));
14f9c5c9
AS
2162 return NULL;
2163 }
61ee279c 2164
50810684 2165 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2166 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2167 {
2168 /* This is a (right-justified) modular type representing a packed
2169 array with no wrapper. In order to interpret the value through
2170 the (left-justified) packed array type we just built, we must
2171 first left-justify it. */
2172 int bit_size, bit_pos;
2173 ULONGEST mod;
2174
df407dfe 2175 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2176 bit_size = 0;
2177 while (mod > 0)
2178 {
2179 bit_size += 1;
2180 mod >>= 1;
2181 }
df407dfe 2182 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2183 arr = ada_value_primitive_packed_val (arr, NULL,
2184 bit_pos / HOST_CHAR_BIT,
2185 bit_pos % HOST_CHAR_BIT,
2186 bit_size,
2187 type);
2188 }
2189
4c4b4cd2 2190 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2191}
2192
2193
2194/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2195 given in IND. ARR must be a simple array. */
14f9c5c9 2196
d2e4a39e
AS
2197static struct value *
2198value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2199{
2200 int i;
2201 int bits, elt_off, bit_off;
2202 long elt_total_bit_offset;
d2e4a39e
AS
2203 struct type *elt_type;
2204 struct value *v;
14f9c5c9
AS
2205
2206 bits = 0;
2207 elt_total_bit_offset = 0;
df407dfe 2208 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2209 for (i = 0; i < arity; i += 1)
14f9c5c9 2210 {
d2e4a39e 2211 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2212 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2213 error
0963b4bd
MS
2214 (_("attempt to do packed indexing of "
2215 "something other than a packed array"));
14f9c5c9 2216 else
4c4b4cd2
PH
2217 {
2218 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2219 LONGEST lowerbound, upperbound;
2220 LONGEST idx;
2221
2222 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2223 {
323e0a4a 2224 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2225 lowerbound = upperbound = 0;
2226 }
2227
3cb382c9 2228 idx = pos_atr (ind[i]);
4c4b4cd2 2229 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2230 lim_warning (_("packed array index %ld out of bounds"),
2231 (long) idx);
4c4b4cd2
PH
2232 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2233 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2234 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2235 }
14f9c5c9
AS
2236 }
2237 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2238 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2239
2240 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2241 bits, elt_type);
14f9c5c9
AS
2242 return v;
2243}
2244
4c4b4cd2 2245/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2246
2247static int
d2e4a39e 2248has_negatives (struct type *type)
14f9c5c9 2249{
d2e4a39e
AS
2250 switch (TYPE_CODE (type))
2251 {
2252 default:
2253 return 0;
2254 case TYPE_CODE_INT:
2255 return !TYPE_UNSIGNED (type);
2256 case TYPE_CODE_RANGE:
2257 return TYPE_LOW_BOUND (type) < 0;
2258 }
14f9c5c9 2259}
d2e4a39e 2260
14f9c5c9
AS
2261
2262/* Create a new value of type TYPE from the contents of OBJ starting
2263 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2264 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
0963b4bd 2265 assigning through the result will set the field fetched from.
4c4b4cd2
PH
2266 VALADDR is ignored unless OBJ is NULL, in which case,
2267 VALADDR+OFFSET must address the start of storage containing the
2268 packed value. The value returned in this case is never an lval.
2269 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
14f9c5c9 2270
d2e4a39e 2271struct value *
fc1a4b47 2272ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
a2bd3dcd 2273 long offset, int bit_offset, int bit_size,
4c4b4cd2 2274 struct type *type)
14f9c5c9 2275{
d2e4a39e 2276 struct value *v;
4c4b4cd2
PH
2277 int src, /* Index into the source area */
2278 targ, /* Index into the target area */
2279 srcBitsLeft, /* Number of source bits left to move */
2280 nsrc, ntarg, /* Number of source and target bytes */
2281 unusedLS, /* Number of bits in next significant
2282 byte of source that are unused */
2283 accumSize; /* Number of meaningful bits in accum */
2284 unsigned char *bytes; /* First byte containing data to unpack */
d2e4a39e 2285 unsigned char *unpacked;
4c4b4cd2 2286 unsigned long accum; /* Staging area for bits being transferred */
14f9c5c9
AS
2287 unsigned char sign;
2288 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
4c4b4cd2
PH
2289 /* Transmit bytes from least to most significant; delta is the direction
2290 the indices move. */
50810684 2291 int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
14f9c5c9 2292
61ee279c 2293 type = ada_check_typedef (type);
14f9c5c9
AS
2294
2295 if (obj == NULL)
2296 {
2297 v = allocate_value (type);
d2e4a39e 2298 bytes = (unsigned char *) (valaddr + offset);
14f9c5c9 2299 }
9214ee5f 2300 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
14f9c5c9 2301 {
53ba8333 2302 v = value_at (type, value_address (obj));
d2e4a39e 2303 bytes = (unsigned char *) alloca (len);
53ba8333 2304 read_memory (value_address (v) + offset, bytes, len);
14f9c5c9 2305 }
d2e4a39e 2306 else
14f9c5c9
AS
2307 {
2308 v = allocate_value (type);
0fd88904 2309 bytes = (unsigned char *) value_contents (obj) + offset;
14f9c5c9 2310 }
d2e4a39e
AS
2311
2312 if (obj != NULL)
14f9c5c9 2313 {
53ba8333 2314 long new_offset = offset;
5b4ee69b 2315
74bcbdf3 2316 set_value_component_location (v, obj);
9bbda503
AC
2317 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2318 set_value_bitsize (v, bit_size);
df407dfe 2319 if (value_bitpos (v) >= HOST_CHAR_BIT)
4c4b4cd2 2320 {
53ba8333 2321 ++new_offset;
9bbda503 2322 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
4c4b4cd2 2323 }
53ba8333
JB
2324 set_value_offset (v, new_offset);
2325
2326 /* Also set the parent value. This is needed when trying to
2327 assign a new value (in inferior memory). */
2328 set_value_parent (v, obj);
14f9c5c9
AS
2329 }
2330 else
9bbda503 2331 set_value_bitsize (v, bit_size);
0fd88904 2332 unpacked = (unsigned char *) value_contents (v);
14f9c5c9
AS
2333
2334 srcBitsLeft = bit_size;
2335 nsrc = len;
2336 ntarg = TYPE_LENGTH (type);
2337 sign = 0;
2338 if (bit_size == 0)
2339 {
2340 memset (unpacked, 0, TYPE_LENGTH (type));
2341 return v;
2342 }
50810684 2343 else if (gdbarch_bits_big_endian (get_type_arch (type)))
14f9c5c9 2344 {
d2e4a39e 2345 src = len - 1;
1265e4aa
JB
2346 if (has_negatives (type)
2347 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2348 sign = ~0;
d2e4a39e
AS
2349
2350 unusedLS =
4c4b4cd2
PH
2351 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2352 % HOST_CHAR_BIT;
14f9c5c9
AS
2353
2354 switch (TYPE_CODE (type))
4c4b4cd2
PH
2355 {
2356 case TYPE_CODE_ARRAY:
2357 case TYPE_CODE_UNION:
2358 case TYPE_CODE_STRUCT:
2359 /* Non-scalar values must be aligned at a byte boundary... */
2360 accumSize =
2361 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2362 /* ... And are placed at the beginning (most-significant) bytes
2363 of the target. */
529cad9c 2364 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
0056e4d5 2365 ntarg = targ + 1;
4c4b4cd2
PH
2366 break;
2367 default:
2368 accumSize = 0;
2369 targ = TYPE_LENGTH (type) - 1;
2370 break;
2371 }
14f9c5c9 2372 }
d2e4a39e 2373 else
14f9c5c9
AS
2374 {
2375 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2376
2377 src = targ = 0;
2378 unusedLS = bit_offset;
2379 accumSize = 0;
2380
d2e4a39e 2381 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2382 sign = ~0;
14f9c5c9 2383 }
d2e4a39e 2384
14f9c5c9
AS
2385 accum = 0;
2386 while (nsrc > 0)
2387 {
2388 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2389 part of the value. */
d2e4a39e 2390 unsigned int unusedMSMask =
4c4b4cd2
PH
2391 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2392 1;
2393 /* Sign-extend bits for this byte. */
14f9c5c9 2394 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2395
d2e4a39e 2396 accum |=
4c4b4cd2 2397 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2398 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2399 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2
PH
2400 {
2401 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2402 accumSize -= HOST_CHAR_BIT;
2403 accum >>= HOST_CHAR_BIT;
2404 ntarg -= 1;
2405 targ += delta;
2406 }
14f9c5c9
AS
2407 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2408 unusedLS = 0;
2409 nsrc -= 1;
2410 src += delta;
2411 }
2412 while (ntarg > 0)
2413 {
2414 accum |= sign << accumSize;
2415 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2416 accumSize -= HOST_CHAR_BIT;
2417 accum >>= HOST_CHAR_BIT;
2418 ntarg -= 1;
2419 targ += delta;
2420 }
2421
2422 return v;
2423}
d2e4a39e 2424
14f9c5c9
AS
2425/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2426 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2427 not overlap. */
14f9c5c9 2428static void
fc1a4b47 2429move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2430 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2431{
2432 unsigned int accum, mask;
2433 int accum_bits, chunk_size;
2434
2435 target += targ_offset / HOST_CHAR_BIT;
2436 targ_offset %= HOST_CHAR_BIT;
2437 source += src_offset / HOST_CHAR_BIT;
2438 src_offset %= HOST_CHAR_BIT;
50810684 2439 if (bits_big_endian_p)
14f9c5c9
AS
2440 {
2441 accum = (unsigned char) *source;
2442 source += 1;
2443 accum_bits = HOST_CHAR_BIT - src_offset;
2444
d2e4a39e 2445 while (n > 0)
4c4b4cd2
PH
2446 {
2447 int unused_right;
5b4ee69b 2448
4c4b4cd2
PH
2449 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2450 accum_bits += HOST_CHAR_BIT;
2451 source += 1;
2452 chunk_size = HOST_CHAR_BIT - targ_offset;
2453 if (chunk_size > n)
2454 chunk_size = n;
2455 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2456 mask = ((1 << chunk_size) - 1) << unused_right;
2457 *target =
2458 (*target & ~mask)
2459 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2460 n -= chunk_size;
2461 accum_bits -= chunk_size;
2462 target += 1;
2463 targ_offset = 0;
2464 }
14f9c5c9
AS
2465 }
2466 else
2467 {
2468 accum = (unsigned char) *source >> src_offset;
2469 source += 1;
2470 accum_bits = HOST_CHAR_BIT - src_offset;
2471
d2e4a39e 2472 while (n > 0)
4c4b4cd2
PH
2473 {
2474 accum = accum + ((unsigned char) *source << accum_bits);
2475 accum_bits += HOST_CHAR_BIT;
2476 source += 1;
2477 chunk_size = HOST_CHAR_BIT - targ_offset;
2478 if (chunk_size > n)
2479 chunk_size = n;
2480 mask = ((1 << chunk_size) - 1) << targ_offset;
2481 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2482 n -= chunk_size;
2483 accum_bits -= chunk_size;
2484 accum >>= chunk_size;
2485 target += 1;
2486 targ_offset = 0;
2487 }
14f9c5c9
AS
2488 }
2489}
2490
14f9c5c9
AS
2491/* Store the contents of FROMVAL into the location of TOVAL.
2492 Return a new value with the location of TOVAL and contents of
2493 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2494 floating-point or non-scalar types. */
14f9c5c9 2495
d2e4a39e
AS
2496static struct value *
2497ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2498{
df407dfe
AC
2499 struct type *type = value_type (toval);
2500 int bits = value_bitsize (toval);
14f9c5c9 2501
52ce6436
PH
2502 toval = ada_coerce_ref (toval);
2503 fromval = ada_coerce_ref (fromval);
2504
2505 if (ada_is_direct_array_type (value_type (toval)))
2506 toval = ada_coerce_to_simple_array (toval);
2507 if (ada_is_direct_array_type (value_type (fromval)))
2508 fromval = ada_coerce_to_simple_array (fromval);
2509
88e3b34b 2510 if (!deprecated_value_modifiable (toval))
323e0a4a 2511 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2512
d2e4a39e 2513 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2514 && bits > 0
d2e4a39e 2515 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2516 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2517 {
df407dfe
AC
2518 int len = (value_bitpos (toval)
2519 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2520 int from_size;
948f8e3d 2521 gdb_byte *buffer = alloca (len);
d2e4a39e 2522 struct value *val;
42ae5230 2523 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2524
2525 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2526 fromval = value_cast (type, fromval);
14f9c5c9 2527
52ce6436 2528 read_memory (to_addr, buffer, len);
aced2898
PH
2529 from_size = value_bitsize (fromval);
2530 if (from_size == 0)
2531 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2532 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2533 move_bits (buffer, value_bitpos (toval),
50810684 2534 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2535 else
50810684
UW
2536 move_bits (buffer, value_bitpos (toval),
2537 value_contents (fromval), 0, bits, 0);
972daa01 2538 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2539
14f9c5c9 2540 val = value_copy (toval);
0fd88904 2541 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2542 TYPE_LENGTH (type));
04624583 2543 deprecated_set_value_type (val, type);
d2e4a39e 2544
14f9c5c9
AS
2545 return val;
2546 }
2547
2548 return value_assign (toval, fromval);
2549}
2550
2551
52ce6436
PH
2552/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2553 * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2554 * CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2555 * COMPONENT, and not the inferior's memory. The current contents
2556 * of COMPONENT are ignored. */
2557static void
2558value_assign_to_component (struct value *container, struct value *component,
2559 struct value *val)
2560{
2561 LONGEST offset_in_container =
42ae5230 2562 (LONGEST) (value_address (component) - value_address (container));
52ce6436
PH
2563 int bit_offset_in_container =
2564 value_bitpos (component) - value_bitpos (container);
2565 int bits;
2566
2567 val = value_cast (value_type (component), val);
2568
2569 if (value_bitsize (component) == 0)
2570 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2571 else
2572 bits = value_bitsize (component);
2573
50810684 2574 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
52ce6436
PH
2575 move_bits (value_contents_writeable (container) + offset_in_container,
2576 value_bitpos (container) + bit_offset_in_container,
2577 value_contents (val),
2578 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
50810684 2579 bits, 1);
52ce6436
PH
2580 else
2581 move_bits (value_contents_writeable (container) + offset_in_container,
2582 value_bitpos (container) + bit_offset_in_container,
50810684 2583 value_contents (val), 0, bits, 0);
52ce6436
PH
2584}
2585
4c4b4cd2
PH
2586/* The value of the element of array ARR at the ARITY indices given in IND.
2587 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2588 thereto. */
2589
d2e4a39e
AS
2590struct value *
2591ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2592{
2593 int k;
d2e4a39e
AS
2594 struct value *elt;
2595 struct type *elt_type;
14f9c5c9
AS
2596
2597 elt = ada_coerce_to_simple_array (arr);
2598
df407dfe 2599 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2600 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2601 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2602 return value_subscript_packed (elt, arity, ind);
2603
2604 for (k = 0; k < arity; k += 1)
2605 {
2606 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2607 error (_("too many subscripts (%d expected)"), k);
2497b498 2608 elt = value_subscript (elt, pos_atr (ind[k]));
14f9c5c9
AS
2609 }
2610 return elt;
2611}
2612
2613/* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2614 value of the element of *ARR at the ARITY indices given in
4c4b4cd2 2615 IND. Does not read the entire array into memory. */
14f9c5c9 2616
2c0b251b 2617static struct value *
d2e4a39e 2618ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
4c4b4cd2 2619 struct value **ind)
14f9c5c9
AS
2620{
2621 int k;
2622
2623 for (k = 0; k < arity; k += 1)
2624 {
2625 LONGEST lwb, upb;
14f9c5c9
AS
2626
2627 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2628 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2629 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2630 value_copy (arr));
14f9c5c9 2631 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2497b498 2632 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2633 type = TYPE_TARGET_TYPE (type);
2634 }
2635
2636 return value_ind (arr);
2637}
2638
0b5d8877 2639/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
f5938064
JG
2640 actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2641 elements starting at index LOW. The lower bound of this array is LOW, as
0963b4bd 2642 per Ada rules. */
0b5d8877 2643static struct value *
f5938064
JG
2644ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2645 int low, int high)
0b5d8877 2646{
b0dd7688 2647 struct type *type0 = ada_check_typedef (type);
6c038f32 2648 CORE_ADDR base = value_as_address (array_ptr)
b0dd7688
JB
2649 + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2650 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
6c038f32 2651 struct type *index_type =
b0dd7688 2652 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
0b5d8877 2653 low, high);
6c038f32 2654 struct type *slice_type =
b0dd7688 2655 create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
5b4ee69b 2656
f5938064 2657 return value_at_lazy (slice_type, base);
0b5d8877
PH
2658}
2659
2660
2661static struct value *
2662ada_value_slice (struct value *array, int low, int high)
2663{
b0dd7688 2664 struct type *type = ada_check_typedef (value_type (array));
6c038f32 2665 struct type *index_type =
0b5d8877 2666 create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
6c038f32 2667 struct type *slice_type =
0b5d8877 2668 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
5b4ee69b 2669
6c038f32 2670 return value_cast (slice_type, value_slice (array, low, high - low + 1));
0b5d8877
PH
2671}
2672
14f9c5c9
AS
2673/* If type is a record type in the form of a standard GNAT array
2674 descriptor, returns the number of dimensions for type. If arr is a
2675 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2676 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2677
2678int
d2e4a39e 2679ada_array_arity (struct type *type)
14f9c5c9
AS
2680{
2681 int arity;
2682
2683 if (type == NULL)
2684 return 0;
2685
2686 type = desc_base_type (type);
2687
2688 arity = 0;
d2e4a39e 2689 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2690 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2691 else
2692 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2693 {
4c4b4cd2 2694 arity += 1;
61ee279c 2695 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2696 }
d2e4a39e 2697
14f9c5c9
AS
2698 return arity;
2699}
2700
2701/* If TYPE is a record type in the form of a standard GNAT array
2702 descriptor or a simple array type, returns the element type for
2703 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2704 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2705
d2e4a39e
AS
2706struct type *
2707ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2708{
2709 type = desc_base_type (type);
2710
d2e4a39e 2711 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2712 {
2713 int k;
d2e4a39e 2714 struct type *p_array_type;
14f9c5c9 2715
556bdfd4 2716 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2717
2718 k = ada_array_arity (type);
2719 if (k == 0)
4c4b4cd2 2720 return NULL;
d2e4a39e 2721
4c4b4cd2 2722 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2723 if (nindices >= 0 && k > nindices)
4c4b4cd2 2724 k = nindices;
d2e4a39e 2725 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2726 {
61ee279c 2727 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2728 k -= 1;
2729 }
14f9c5c9
AS
2730 return p_array_type;
2731 }
2732 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2733 {
2734 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2735 {
2736 type = TYPE_TARGET_TYPE (type);
2737 nindices -= 1;
2738 }
14f9c5c9
AS
2739 return type;
2740 }
2741
2742 return NULL;
2743}
2744
4c4b4cd2 2745/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2746 Does not examine memory. Throws an error if N is invalid or TYPE
2747 is not an array type. NAME is the name of the Ada attribute being
2748 evaluated ('range, 'first, 'last, or 'length); it is used in building
2749 the error message. */
14f9c5c9 2750
1eea4ebd
UW
2751static struct type *
2752ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2753{
4c4b4cd2
PH
2754 struct type *result_type;
2755
14f9c5c9
AS
2756 type = desc_base_type (type);
2757
1eea4ebd
UW
2758 if (n < 0 || n > ada_array_arity (type))
2759 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2760
4c4b4cd2 2761 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2762 {
2763 int i;
2764
2765 for (i = 1; i < n; i += 1)
4c4b4cd2 2766 type = TYPE_TARGET_TYPE (type);
262452ec 2767 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
2768 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2769 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 2770 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
2771 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2772 result_type = NULL;
14f9c5c9 2773 }
d2e4a39e 2774 else
1eea4ebd
UW
2775 {
2776 result_type = desc_index_type (desc_bounds_type (type), n);
2777 if (result_type == NULL)
2778 error (_("attempt to take bound of something that is not an array"));
2779 }
2780
2781 return result_type;
14f9c5c9
AS
2782}
2783
2784/* Given that arr is an array type, returns the lower bound of the
2785 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2786 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2787 array-descriptor type. It works for other arrays with bounds supplied
2788 by run-time quantities other than discriminants. */
14f9c5c9 2789
abb68b3e 2790static LONGEST
fb5e3d5c 2791ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2792{
8a48ac95 2793 struct type *type, *index_type_desc, *index_type;
1ce677a4 2794 int i;
262452ec
JK
2795
2796 gdb_assert (which == 0 || which == 1);
14f9c5c9 2797
ad82864c
JB
2798 if (ada_is_constrained_packed_array_type (arr_type))
2799 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2800
4c4b4cd2 2801 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2802 return (LONGEST) - which;
14f9c5c9
AS
2803
2804 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2805 type = TYPE_TARGET_TYPE (arr_type);
2806 else
2807 type = arr_type;
2808
2809 index_type_desc = ada_find_parallel_type (type, "___XA");
28c85d6c 2810 ada_fixup_array_indexes_type (index_type_desc);
262452ec 2811 if (index_type_desc != NULL)
28c85d6c
JB
2812 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2813 NULL);
262452ec 2814 else
8a48ac95
JB
2815 {
2816 struct type *elt_type = check_typedef (type);
2817
2818 for (i = 1; i < n; i++)
2819 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2820
2821 index_type = TYPE_INDEX_TYPE (elt_type);
2822 }
262452ec 2823
43bbcdc2
PH
2824 return
2825 (LONGEST) (which == 0
2826 ? ada_discrete_type_low_bound (index_type)
2827 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2828}
2829
2830/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
2831 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2832 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 2833 supplied by run-time quantities other than discriminants. */
14f9c5c9 2834
1eea4ebd 2835static LONGEST
4dc81987 2836ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 2837{
df407dfe 2838 struct type *arr_type = value_type (arr);
14f9c5c9 2839
ad82864c
JB
2840 if (ada_is_constrained_packed_array_type (arr_type))
2841 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 2842 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 2843 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 2844 else
1eea4ebd 2845 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
2846}
2847
2848/* Given that arr is an array value, returns the length of the
2849 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
2850 supplied by run-time quantities other than discriminants.
2851 Does not work for arrays indexed by enumeration types with representation
2852 clauses at the moment. */
14f9c5c9 2853
1eea4ebd 2854static LONGEST
d2e4a39e 2855ada_array_length (struct value *arr, int n)
14f9c5c9 2856{
df407dfe 2857 struct type *arr_type = ada_check_typedef (value_type (arr));
14f9c5c9 2858
ad82864c
JB
2859 if (ada_is_constrained_packed_array_type (arr_type))
2860 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 2861
4c4b4cd2 2862 if (ada_is_simple_array_type (arr_type))
1eea4ebd
UW
2863 return (ada_array_bound_from_type (arr_type, n, 1)
2864 - ada_array_bound_from_type (arr_type, n, 0) + 1);
14f9c5c9 2865 else
1eea4ebd
UW
2866 return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2867 - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
4c4b4cd2
PH
2868}
2869
2870/* An empty array whose type is that of ARR_TYPE (an array type),
2871 with bounds LOW to LOW-1. */
2872
2873static struct value *
2874empty_array (struct type *arr_type, int low)
2875{
b0dd7688 2876 struct type *arr_type0 = ada_check_typedef (arr_type);
6c038f32 2877 struct type *index_type =
b0dd7688 2878 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),
0b5d8877 2879 low, low - 1);
b0dd7688 2880 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 2881
0b5d8877 2882 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 2883}
14f9c5c9 2884\f
d2e4a39e 2885
4c4b4cd2 2886 /* Name resolution */
14f9c5c9 2887
4c4b4cd2
PH
2888/* The "decoded" name for the user-definable Ada operator corresponding
2889 to OP. */
14f9c5c9 2890
d2e4a39e 2891static const char *
4c4b4cd2 2892ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
2893{
2894 int i;
2895
4c4b4cd2 2896 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
2897 {
2898 if (ada_opname_table[i].op == op)
4c4b4cd2 2899 return ada_opname_table[i].decoded;
14f9c5c9 2900 }
323e0a4a 2901 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
2902}
2903
2904
4c4b4cd2
PH
2905/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2906 references (marked by OP_VAR_VALUE nodes in which the symbol has an
2907 undefined namespace) and converts operators that are
2908 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
2909 non-null, it provides a preferred result type [at the moment, only
2910 type void has any effect---causing procedures to be preferred over
2911 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 2912 return type is preferred. May change (expand) *EXP. */
14f9c5c9 2913
4c4b4cd2
PH
2914static void
2915resolve (struct expression **expp, int void_context_p)
14f9c5c9 2916{
30b15541
UW
2917 struct type *context_type = NULL;
2918 int pc = 0;
2919
2920 if (void_context_p)
2921 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
2922
2923 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
2924}
2925
4c4b4cd2
PH
2926/* Resolve the operator of the subexpression beginning at
2927 position *POS of *EXPP. "Resolving" consists of replacing
2928 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2929 with their resolutions, replacing built-in operators with
2930 function calls to user-defined operators, where appropriate, and,
2931 when DEPROCEDURE_P is non-zero, converting function-valued variables
2932 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
2933 are as in ada_resolve, above. */
14f9c5c9 2934
d2e4a39e 2935static struct value *
4c4b4cd2 2936resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 2937 struct type *context_type)
14f9c5c9
AS
2938{
2939 int pc = *pos;
2940 int i;
4c4b4cd2 2941 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 2942 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
2943 struct value **argvec; /* Vector of operand types (alloca'ed). */
2944 int nargs; /* Number of operands. */
52ce6436 2945 int oplen;
14f9c5c9
AS
2946
2947 argvec = NULL;
2948 nargs = 0;
2949 exp = *expp;
2950
52ce6436
PH
2951 /* Pass one: resolve operands, saving their types and updating *pos,
2952 if needed. */
14f9c5c9
AS
2953 switch (op)
2954 {
4c4b4cd2
PH
2955 case OP_FUNCALL:
2956 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
2957 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2958 *pos += 7;
4c4b4cd2
PH
2959 else
2960 {
2961 *pos += 3;
2962 resolve_subexp (expp, pos, 0, NULL);
2963 }
2964 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
2965 break;
2966
14f9c5c9 2967 case UNOP_ADDR:
4c4b4cd2
PH
2968 *pos += 1;
2969 resolve_subexp (expp, pos, 0, NULL);
2970 break;
2971
52ce6436
PH
2972 case UNOP_QUAL:
2973 *pos += 3;
17466c1a 2974 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
2975 break;
2976
52ce6436 2977 case OP_ATR_MODULUS:
4c4b4cd2
PH
2978 case OP_ATR_SIZE:
2979 case OP_ATR_TAG:
4c4b4cd2
PH
2980 case OP_ATR_FIRST:
2981 case OP_ATR_LAST:
2982 case OP_ATR_LENGTH:
2983 case OP_ATR_POS:
2984 case OP_ATR_VAL:
4c4b4cd2
PH
2985 case OP_ATR_MIN:
2986 case OP_ATR_MAX:
52ce6436
PH
2987 case TERNOP_IN_RANGE:
2988 case BINOP_IN_BOUNDS:
2989 case UNOP_IN_RANGE:
2990 case OP_AGGREGATE:
2991 case OP_OTHERS:
2992 case OP_CHOICES:
2993 case OP_POSITIONAL:
2994 case OP_DISCRETE_RANGE:
2995 case OP_NAME:
2996 ada_forward_operator_length (exp, pc, &oplen, &nargs);
2997 *pos += oplen;
14f9c5c9
AS
2998 break;
2999
3000 case BINOP_ASSIGN:
3001 {
4c4b4cd2
PH
3002 struct value *arg1;
3003
3004 *pos += 1;
3005 arg1 = resolve_subexp (expp, pos, 0, NULL);
3006 if (arg1 == NULL)
3007 resolve_subexp (expp, pos, 1, NULL);
3008 else
df407dfe 3009 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 3010 break;
14f9c5c9
AS
3011 }
3012
4c4b4cd2 3013 case UNOP_CAST:
4c4b4cd2
PH
3014 *pos += 3;
3015 nargs = 1;
3016 break;
14f9c5c9 3017
4c4b4cd2
PH
3018 case BINOP_ADD:
3019 case BINOP_SUB:
3020 case BINOP_MUL:
3021 case BINOP_DIV:
3022 case BINOP_REM:
3023 case BINOP_MOD:
3024 case BINOP_EXP:
3025 case BINOP_CONCAT:
3026 case BINOP_LOGICAL_AND:
3027 case BINOP_LOGICAL_OR:
3028 case BINOP_BITWISE_AND:
3029 case BINOP_BITWISE_IOR:
3030 case BINOP_BITWISE_XOR:
14f9c5c9 3031
4c4b4cd2
PH
3032 case BINOP_EQUAL:
3033 case BINOP_NOTEQUAL:
3034 case BINOP_LESS:
3035 case BINOP_GTR:
3036 case BINOP_LEQ:
3037 case BINOP_GEQ:
14f9c5c9 3038
4c4b4cd2
PH
3039 case BINOP_REPEAT:
3040 case BINOP_SUBSCRIPT:
3041 case BINOP_COMMA:
40c8aaa9
JB
3042 *pos += 1;
3043 nargs = 2;
3044 break;
14f9c5c9 3045
4c4b4cd2
PH
3046 case UNOP_NEG:
3047 case UNOP_PLUS:
3048 case UNOP_LOGICAL_NOT:
3049 case UNOP_ABS:
3050 case UNOP_IND:
3051 *pos += 1;
3052 nargs = 1;
3053 break;
14f9c5c9 3054
4c4b4cd2
PH
3055 case OP_LONG:
3056 case OP_DOUBLE:
3057 case OP_VAR_VALUE:
3058 *pos += 4;
3059 break;
14f9c5c9 3060
4c4b4cd2
PH
3061 case OP_TYPE:
3062 case OP_BOOL:
3063 case OP_LAST:
4c4b4cd2
PH
3064 case OP_INTERNALVAR:
3065 *pos += 3;
3066 break;
14f9c5c9 3067
4c4b4cd2
PH
3068 case UNOP_MEMVAL:
3069 *pos += 3;
3070 nargs = 1;
3071 break;
3072
67f3407f
DJ
3073 case OP_REGISTER:
3074 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3075 break;
3076
4c4b4cd2
PH
3077 case STRUCTOP_STRUCT:
3078 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3079 nargs = 1;
3080 break;
3081
4c4b4cd2 3082 case TERNOP_SLICE:
4c4b4cd2
PH
3083 *pos += 1;
3084 nargs = 3;
3085 break;
3086
52ce6436 3087 case OP_STRING:
14f9c5c9 3088 break;
4c4b4cd2
PH
3089
3090 default:
323e0a4a 3091 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3092 }
3093
76a01679 3094 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
4c4b4cd2
PH
3095 for (i = 0; i < nargs; i += 1)
3096 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3097 argvec[i] = NULL;
3098 exp = *expp;
3099
3100 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3101 switch (op)
3102 {
3103 default:
3104 break;
3105
14f9c5c9 3106 case OP_VAR_VALUE:
4c4b4cd2 3107 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
3108 {
3109 struct ada_symbol_info *candidates;
3110 int n_candidates;
3111
3112 n_candidates =
3113 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3114 (exp->elts[pc + 2].symbol),
3115 exp->elts[pc + 1].block, VAR_DOMAIN,
4eeaa230 3116 &candidates);
76a01679
JB
3117
3118 if (n_candidates > 1)
3119 {
3120 /* Types tend to get re-introduced locally, so if there
3121 are any local symbols that are not types, first filter
3122 out all types. */
3123 int j;
3124 for (j = 0; j < n_candidates; j += 1)
3125 switch (SYMBOL_CLASS (candidates[j].sym))
3126 {
3127 case LOC_REGISTER:
3128 case LOC_ARG:
3129 case LOC_REF_ARG:
76a01679
JB
3130 case LOC_REGPARM_ADDR:
3131 case LOC_LOCAL:
76a01679 3132 case LOC_COMPUTED:
76a01679
JB
3133 goto FoundNonType;
3134 default:
3135 break;
3136 }
3137 FoundNonType:
3138 if (j < n_candidates)
3139 {
3140 j = 0;
3141 while (j < n_candidates)
3142 {
3143 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3144 {
3145 candidates[j] = candidates[n_candidates - 1];
3146 n_candidates -= 1;
3147 }
3148 else
3149 j += 1;
3150 }
3151 }
3152 }
3153
3154 if (n_candidates == 0)
323e0a4a 3155 error (_("No definition found for %s"),
76a01679
JB
3156 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3157 else if (n_candidates == 1)
3158 i = 0;
3159 else if (deprocedure_p
3160 && !is_nonfunction (candidates, n_candidates))
3161 {
06d5cf63
JB
3162 i = ada_resolve_function
3163 (candidates, n_candidates, NULL, 0,
3164 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3165 context_type);
76a01679 3166 if (i < 0)
323e0a4a 3167 error (_("Could not find a match for %s"),
76a01679
JB
3168 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3169 }
3170 else
3171 {
323e0a4a 3172 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3173 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3174 user_select_syms (candidates, n_candidates, 1);
3175 i = 0;
3176 }
3177
3178 exp->elts[pc + 1].block = candidates[i].block;
3179 exp->elts[pc + 2].symbol = candidates[i].sym;
1265e4aa
JB
3180 if (innermost_block == NULL
3181 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3182 innermost_block = candidates[i].block;
3183 }
3184
3185 if (deprocedure_p
3186 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3187 == TYPE_CODE_FUNC))
3188 {
3189 replace_operator_with_call (expp, pc, 0, 0,
3190 exp->elts[pc + 2].symbol,
3191 exp->elts[pc + 1].block);
3192 exp = *expp;
3193 }
14f9c5c9
AS
3194 break;
3195
3196 case OP_FUNCALL:
3197 {
4c4b4cd2 3198 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3199 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2
PH
3200 {
3201 struct ada_symbol_info *candidates;
3202 int n_candidates;
3203
3204 n_candidates =
76a01679
JB
3205 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3206 (exp->elts[pc + 5].symbol),
3207 exp->elts[pc + 4].block, VAR_DOMAIN,
4eeaa230 3208 &candidates);
4c4b4cd2
PH
3209 if (n_candidates == 1)
3210 i = 0;
3211 else
3212 {
06d5cf63
JB
3213 i = ada_resolve_function
3214 (candidates, n_candidates,
3215 argvec, nargs,
3216 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3217 context_type);
4c4b4cd2 3218 if (i < 0)
323e0a4a 3219 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3220 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3221 }
3222
3223 exp->elts[pc + 4].block = candidates[i].block;
3224 exp->elts[pc + 5].symbol = candidates[i].sym;
1265e4aa
JB
3225 if (innermost_block == NULL
3226 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3227 innermost_block = candidates[i].block;
3228 }
14f9c5c9
AS
3229 }
3230 break;
3231 case BINOP_ADD:
3232 case BINOP_SUB:
3233 case BINOP_MUL:
3234 case BINOP_DIV:
3235 case BINOP_REM:
3236 case BINOP_MOD:
3237 case BINOP_CONCAT:
3238 case BINOP_BITWISE_AND:
3239 case BINOP_BITWISE_IOR:
3240 case BINOP_BITWISE_XOR:
3241 case BINOP_EQUAL:
3242 case BINOP_NOTEQUAL:
3243 case BINOP_LESS:
3244 case BINOP_GTR:
3245 case BINOP_LEQ:
3246 case BINOP_GEQ:
3247 case BINOP_EXP:
3248 case UNOP_NEG:
3249 case UNOP_PLUS:
3250 case UNOP_LOGICAL_NOT:
3251 case UNOP_ABS:
3252 if (possible_user_operator_p (op, argvec))
4c4b4cd2
PH
3253 {
3254 struct ada_symbol_info *candidates;
3255 int n_candidates;
3256
3257 n_candidates =
3258 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3259 (struct block *) NULL, VAR_DOMAIN,
4eeaa230 3260 &candidates);
4c4b4cd2 3261 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3262 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3263 if (i < 0)
3264 break;
3265
76a01679
JB
3266 replace_operator_with_call (expp, pc, nargs, 1,
3267 candidates[i].sym, candidates[i].block);
4c4b4cd2
PH
3268 exp = *expp;
3269 }
14f9c5c9 3270 break;
4c4b4cd2
PH
3271
3272 case OP_TYPE:
b3dbf008 3273 case OP_REGISTER:
4c4b4cd2 3274 return NULL;
14f9c5c9
AS
3275 }
3276
3277 *pos = pc;
3278 return evaluate_subexp_type (exp, pos);
3279}
3280
3281/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3282 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3283 a non-pointer. */
14f9c5c9 3284/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3285 liberal. */
14f9c5c9
AS
3286
3287static int
4dc81987 3288ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3289{
61ee279c
PH
3290 ftype = ada_check_typedef (ftype);
3291 atype = ada_check_typedef (atype);
14f9c5c9
AS
3292
3293 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3294 ftype = TYPE_TARGET_TYPE (ftype);
3295 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3296 atype = TYPE_TARGET_TYPE (atype);
3297
d2e4a39e 3298 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3299 {
3300 default:
5b3d5b7d 3301 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3302 case TYPE_CODE_PTR:
3303 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3304 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3305 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3306 else
1265e4aa
JB
3307 return (may_deref
3308 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3309 case TYPE_CODE_INT:
3310 case TYPE_CODE_ENUM:
3311 case TYPE_CODE_RANGE:
3312 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3313 {
3314 case TYPE_CODE_INT:
3315 case TYPE_CODE_ENUM:
3316 case TYPE_CODE_RANGE:
3317 return 1;
3318 default:
3319 return 0;
3320 }
14f9c5c9
AS
3321
3322 case TYPE_CODE_ARRAY:
d2e4a39e 3323 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3324 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3325
3326 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3327 if (ada_is_array_descriptor_type (ftype))
3328 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3329 || ada_is_array_descriptor_type (atype));
14f9c5c9 3330 else
4c4b4cd2
PH
3331 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3332 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3333
3334 case TYPE_CODE_UNION:
3335 case TYPE_CODE_FLT:
3336 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3337 }
3338}
3339
3340/* Return non-zero if the formals of FUNC "sufficiently match" the
3341 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3342 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3343 argument function. */
14f9c5c9
AS
3344
3345static int
d2e4a39e 3346ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3347{
3348 int i;
d2e4a39e 3349 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3350
1265e4aa
JB
3351 if (SYMBOL_CLASS (func) == LOC_CONST
3352 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3353 return (n_actuals == 0);
3354 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3355 return 0;
3356
3357 if (TYPE_NFIELDS (func_type) != n_actuals)
3358 return 0;
3359
3360 for (i = 0; i < n_actuals; i += 1)
3361 {
4c4b4cd2 3362 if (actuals[i] == NULL)
76a01679
JB
3363 return 0;
3364 else
3365 {
5b4ee69b
MS
3366 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3367 i));
df407dfe 3368 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3369
76a01679
JB
3370 if (!ada_type_match (ftype, atype, 1))
3371 return 0;
3372 }
14f9c5c9
AS
3373 }
3374 return 1;
3375}
3376
3377/* False iff function type FUNC_TYPE definitely does not produce a value
3378 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3379 FUNC_TYPE is not a valid function type with a non-null return type
3380 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3381
3382static int
d2e4a39e 3383return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3384{
d2e4a39e 3385 struct type *return_type;
14f9c5c9
AS
3386
3387 if (func_type == NULL)
3388 return 1;
3389
4c4b4cd2 3390 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3391 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3392 else
18af8284 3393 return_type = get_base_type (func_type);
14f9c5c9
AS
3394 if (return_type == NULL)
3395 return 1;
3396
18af8284 3397 context_type = get_base_type (context_type);
14f9c5c9
AS
3398
3399 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3400 return context_type == NULL || return_type == context_type;
3401 else if (context_type == NULL)
3402 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3403 else
3404 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3405}
3406
3407
4c4b4cd2 3408/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3409 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3410 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3411 that returns that type, then eliminate matches that don't. If
3412 CONTEXT_TYPE is void and there is at least one match that does not
3413 return void, eliminate all matches that do.
3414
14f9c5c9
AS
3415 Asks the user if there is more than one match remaining. Returns -1
3416 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3417 solely for messages. May re-arrange and modify SYMS in
3418 the process; the index returned is for the modified vector. */
14f9c5c9 3419
4c4b4cd2
PH
3420static int
3421ada_resolve_function (struct ada_symbol_info syms[],
3422 int nsyms, struct value **args, int nargs,
3423 const char *name, struct type *context_type)
14f9c5c9 3424{
30b15541 3425 int fallback;
14f9c5c9 3426 int k;
4c4b4cd2 3427 int m; /* Number of hits */
14f9c5c9 3428
d2e4a39e 3429 m = 0;
30b15541
UW
3430 /* In the first pass of the loop, we only accept functions matching
3431 context_type. If none are found, we add a second pass of the loop
3432 where every function is accepted. */
3433 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3434 {
3435 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3436 {
61ee279c 3437 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
4c4b4cd2
PH
3438
3439 if (ada_args_match (syms[k].sym, args, nargs)
30b15541 3440 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3441 {
3442 syms[m] = syms[k];
3443 m += 1;
3444 }
3445 }
14f9c5c9
AS
3446 }
3447
3448 if (m == 0)
3449 return -1;
3450 else if (m > 1)
3451 {
323e0a4a 3452 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3453 user_select_syms (syms, m, 1);
14f9c5c9
AS
3454 return 0;
3455 }
3456 return 0;
3457}
3458
4c4b4cd2
PH
3459/* Returns true (non-zero) iff decoded name N0 should appear before N1
3460 in a listing of choices during disambiguation (see sort_choices, below).
3461 The idea is that overloadings of a subprogram name from the
3462 same package should sort in their source order. We settle for ordering
3463 such symbols by their trailing number (__N or $N). */
3464
14f9c5c9 3465static int
0d5cff50 3466encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9
AS
3467{
3468 if (N1 == NULL)
3469 return 0;
3470 else if (N0 == NULL)
3471 return 1;
3472 else
3473 {
3474 int k0, k1;
5b4ee69b 3475
d2e4a39e 3476 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3477 ;
d2e4a39e 3478 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3479 ;
d2e4a39e 3480 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3481 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3482 {
3483 int n0, n1;
5b4ee69b 3484
4c4b4cd2
PH
3485 n0 = k0;
3486 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3487 n0 -= 1;
3488 n1 = k1;
3489 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3490 n1 -= 1;
3491 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3492 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3493 }
14f9c5c9
AS
3494 return (strcmp (N0, N1) < 0);
3495 }
3496}
d2e4a39e 3497
4c4b4cd2
PH
3498/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3499 encoded names. */
3500
d2e4a39e 3501static void
4c4b4cd2 3502sort_choices (struct ada_symbol_info syms[], int nsyms)
14f9c5c9 3503{
4c4b4cd2 3504 int i;
5b4ee69b 3505
d2e4a39e 3506 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3507 {
4c4b4cd2 3508 struct ada_symbol_info sym = syms[i];
14f9c5c9
AS
3509 int j;
3510
d2e4a39e 3511 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2
PH
3512 {
3513 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3514 SYMBOL_LINKAGE_NAME (sym.sym)))
3515 break;
3516 syms[j + 1] = syms[j];
3517 }
d2e4a39e 3518 syms[j + 1] = sym;
14f9c5c9
AS
3519 }
3520}
3521
4c4b4cd2
PH
3522/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3523 by asking the user (if necessary), returning the number selected,
3524 and setting the first elements of SYMS items. Error if no symbols
3525 selected. */
14f9c5c9
AS
3526
3527/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3528 to be re-integrated one of these days. */
14f9c5c9
AS
3529
3530int
4c4b4cd2 3531user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
14f9c5c9
AS
3532{
3533 int i;
d2e4a39e 3534 int *chosen = (int *) alloca (sizeof (int) * nsyms);
14f9c5c9
AS
3535 int n_chosen;
3536 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3537 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3538
3539 if (max_results < 1)
323e0a4a 3540 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3541 if (nsyms <= 1)
3542 return nsyms;
3543
717d2f5a
JB
3544 if (select_mode == multiple_symbols_cancel)
3545 error (_("\
3546canceled because the command is ambiguous\n\
3547See set/show multiple-symbol."));
3548
3549 /* If select_mode is "all", then return all possible symbols.
3550 Only do that if more than one symbol can be selected, of course.
3551 Otherwise, display the menu as usual. */
3552 if (select_mode == multiple_symbols_all && max_results > 1)
3553 return nsyms;
3554
323e0a4a 3555 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3556 if (max_results > 1)
323e0a4a 3557 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3558
4c4b4cd2 3559 sort_choices (syms, nsyms);
14f9c5c9
AS
3560
3561 for (i = 0; i < nsyms; i += 1)
3562 {
4c4b4cd2
PH
3563 if (syms[i].sym == NULL)
3564 continue;
3565
3566 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3567 {
76a01679
JB
3568 struct symtab_and_line sal =
3569 find_function_start_sal (syms[i].sym, 1);
5b4ee69b 3570
323e0a4a
AC
3571 if (sal.symtab == NULL)
3572 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3573 i + first_choice,
3574 SYMBOL_PRINT_NAME (syms[i].sym),
3575 sal.line);
3576 else
3577 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3578 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3579 symtab_to_filename_for_display (sal.symtab),
3580 sal.line);
4c4b4cd2
PH
3581 continue;
3582 }
d2e4a39e 3583 else
4c4b4cd2
PH
3584 {
3585 int is_enumeral =
3586 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3587 && SYMBOL_TYPE (syms[i].sym) != NULL
3588 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
210bbc17 3589 struct symtab *symtab = SYMBOL_SYMTAB (syms[i].sym);
4c4b4cd2
PH
3590
3591 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
323e0a4a 3592 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2
PH
3593 i + first_choice,
3594 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821
JK
3595 symtab_to_filename_for_display (symtab),
3596 SYMBOL_LINE (syms[i].sym));
76a01679
JB
3597 else if (is_enumeral
3598 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
4c4b4cd2 3599 {
a3f17187 3600 printf_unfiltered (("[%d] "), i + first_choice);
76a01679 3601 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
79d43c61 3602 gdb_stdout, -1, 0, &type_print_raw_options);
323e0a4a 3603 printf_unfiltered (_("'(%s) (enumeral)\n"),
4c4b4cd2
PH
3604 SYMBOL_PRINT_NAME (syms[i].sym));
3605 }
3606 else if (symtab != NULL)
3607 printf_unfiltered (is_enumeral
323e0a4a
AC
3608 ? _("[%d] %s in %s (enumeral)\n")
3609 : _("[%d] %s at %s:?\n"),
4c4b4cd2
PH
3610 i + first_choice,
3611 SYMBOL_PRINT_NAME (syms[i].sym),
05cba821 3612 symtab_to_filename_for_display (symtab));
4c4b4cd2
PH
3613 else
3614 printf_unfiltered (is_enumeral
323e0a4a
AC
3615 ? _("[%d] %s (enumeral)\n")
3616 : _("[%d] %s at ?\n"),
4c4b4cd2
PH
3617 i + first_choice,
3618 SYMBOL_PRINT_NAME (syms[i].sym));
3619 }
14f9c5c9 3620 }
d2e4a39e 3621
14f9c5c9 3622 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3623 "overload-choice");
14f9c5c9
AS
3624
3625 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3626 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3627
3628 return n_chosen;
3629}
3630
3631/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3632 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3633 order in CHOICES[0 .. N-1], and return N.
3634
3635 The user types choices as a sequence of numbers on one line
3636 separated by blanks, encoding them as follows:
3637
4c4b4cd2 3638 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3639 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3640 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3641
4c4b4cd2 3642 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3643
3644 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3645 prompts (for use with the -f switch). */
14f9c5c9
AS
3646
3647int
d2e4a39e 3648get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3649 int is_all_choice, char *annotation_suffix)
14f9c5c9 3650{
d2e4a39e 3651 char *args;
0bcd0149 3652 char *prompt;
14f9c5c9
AS
3653 int n_chosen;
3654 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3655
14f9c5c9
AS
3656 prompt = getenv ("PS2");
3657 if (prompt == NULL)
0bcd0149 3658 prompt = "> ";
14f9c5c9 3659
0bcd0149 3660 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3661
14f9c5c9 3662 if (args == NULL)
323e0a4a 3663 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3664
3665 n_chosen = 0;
76a01679 3666
4c4b4cd2
PH
3667 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3668 order, as given in args. Choices are validated. */
14f9c5c9
AS
3669 while (1)
3670 {
d2e4a39e 3671 char *args2;
14f9c5c9
AS
3672 int choice, j;
3673
0fcd72ba 3674 args = skip_spaces (args);
14f9c5c9 3675 if (*args == '\0' && n_chosen == 0)
323e0a4a 3676 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3677 else if (*args == '\0')
4c4b4cd2 3678 break;
14f9c5c9
AS
3679
3680 choice = strtol (args, &args2, 10);
d2e4a39e 3681 if (args == args2 || choice < 0
4c4b4cd2 3682 || choice > n_choices + first_choice - 1)
323e0a4a 3683 error (_("Argument must be choice number"));
14f9c5c9
AS
3684 args = args2;
3685
d2e4a39e 3686 if (choice == 0)
323e0a4a 3687 error (_("cancelled"));
14f9c5c9
AS
3688
3689 if (choice < first_choice)
4c4b4cd2
PH
3690 {
3691 n_chosen = n_choices;
3692 for (j = 0; j < n_choices; j += 1)
3693 choices[j] = j;
3694 break;
3695 }
14f9c5c9
AS
3696 choice -= first_choice;
3697
d2e4a39e 3698 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3699 {
3700 }
14f9c5c9
AS
3701
3702 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3703 {
3704 int k;
5b4ee69b 3705
4c4b4cd2
PH
3706 for (k = n_chosen - 1; k > j; k -= 1)
3707 choices[k + 1] = choices[k];
3708 choices[j + 1] = choice;
3709 n_chosen += 1;
3710 }
14f9c5c9
AS
3711 }
3712
3713 if (n_chosen > max_results)
323e0a4a 3714 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3715
14f9c5c9
AS
3716 return n_chosen;
3717}
3718
4c4b4cd2
PH
3719/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3720 on the function identified by SYM and BLOCK, and taking NARGS
3721 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3722
3723static void
d2e4a39e 3724replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2 3725 int oplen, struct symbol *sym,
270140bd 3726 const struct block *block)
14f9c5c9
AS
3727{
3728 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 3729 symbol, -oplen for operator being replaced). */
d2e4a39e 3730 struct expression *newexp = (struct expression *)
8c1a34e7 3731 xzalloc (sizeof (struct expression)
4c4b4cd2 3732 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 3733 struct expression *exp = *expp;
14f9c5c9
AS
3734
3735 newexp->nelts = exp->nelts + 7 - oplen;
3736 newexp->language_defn = exp->language_defn;
3489610d 3737 newexp->gdbarch = exp->gdbarch;
14f9c5c9 3738 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 3739 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 3740 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
3741
3742 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3743 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3744
3745 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3746 newexp->elts[pc + 4].block = block;
3747 newexp->elts[pc + 5].symbol = sym;
3748
3749 *expp = newexp;
aacb1f0a 3750 xfree (exp);
d2e4a39e 3751}
14f9c5c9
AS
3752
3753/* Type-class predicates */
3754
4c4b4cd2
PH
3755/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3756 or FLOAT). */
14f9c5c9
AS
3757
3758static int
d2e4a39e 3759numeric_type_p (struct type *type)
14f9c5c9
AS
3760{
3761 if (type == NULL)
3762 return 0;
d2e4a39e
AS
3763 else
3764 {
3765 switch (TYPE_CODE (type))
4c4b4cd2
PH
3766 {
3767 case TYPE_CODE_INT:
3768 case TYPE_CODE_FLT:
3769 return 1;
3770 case TYPE_CODE_RANGE:
3771 return (type == TYPE_TARGET_TYPE (type)
3772 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3773 default:
3774 return 0;
3775 }
d2e4a39e 3776 }
14f9c5c9
AS
3777}
3778
4c4b4cd2 3779/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
3780
3781static int
d2e4a39e 3782integer_type_p (struct type *type)
14f9c5c9
AS
3783{
3784 if (type == NULL)
3785 return 0;
d2e4a39e
AS
3786 else
3787 {
3788 switch (TYPE_CODE (type))
4c4b4cd2
PH
3789 {
3790 case TYPE_CODE_INT:
3791 return 1;
3792 case TYPE_CODE_RANGE:
3793 return (type == TYPE_TARGET_TYPE (type)
3794 || integer_type_p (TYPE_TARGET_TYPE (type)));
3795 default:
3796 return 0;
3797 }
d2e4a39e 3798 }
14f9c5c9
AS
3799}
3800
4c4b4cd2 3801/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
3802
3803static int
d2e4a39e 3804scalar_type_p (struct type *type)
14f9c5c9
AS
3805{
3806 if (type == NULL)
3807 return 0;
d2e4a39e
AS
3808 else
3809 {
3810 switch (TYPE_CODE (type))
4c4b4cd2
PH
3811 {
3812 case TYPE_CODE_INT:
3813 case TYPE_CODE_RANGE:
3814 case TYPE_CODE_ENUM:
3815 case TYPE_CODE_FLT:
3816 return 1;
3817 default:
3818 return 0;
3819 }
d2e4a39e 3820 }
14f9c5c9
AS
3821}
3822
4c4b4cd2 3823/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
3824
3825static int
d2e4a39e 3826discrete_type_p (struct type *type)
14f9c5c9
AS
3827{
3828 if (type == NULL)
3829 return 0;
d2e4a39e
AS
3830 else
3831 {
3832 switch (TYPE_CODE (type))
4c4b4cd2
PH
3833 {
3834 case TYPE_CODE_INT:
3835 case TYPE_CODE_RANGE:
3836 case TYPE_CODE_ENUM:
872f0337 3837 case TYPE_CODE_BOOL:
4c4b4cd2
PH
3838 return 1;
3839 default:
3840 return 0;
3841 }
d2e4a39e 3842 }
14f9c5c9
AS
3843}
3844
4c4b4cd2
PH
3845/* Returns non-zero if OP with operands in the vector ARGS could be
3846 a user-defined function. Errs on the side of pre-defined operators
3847 (i.e., result 0). */
14f9c5c9
AS
3848
3849static int
d2e4a39e 3850possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 3851{
76a01679 3852 struct type *type0 =
df407dfe 3853 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 3854 struct type *type1 =
df407dfe 3855 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 3856
4c4b4cd2
PH
3857 if (type0 == NULL)
3858 return 0;
3859
14f9c5c9
AS
3860 switch (op)
3861 {
3862 default:
3863 return 0;
3864
3865 case BINOP_ADD:
3866 case BINOP_SUB:
3867 case BINOP_MUL:
3868 case BINOP_DIV:
d2e4a39e 3869 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
3870
3871 case BINOP_REM:
3872 case BINOP_MOD:
3873 case BINOP_BITWISE_AND:
3874 case BINOP_BITWISE_IOR:
3875 case BINOP_BITWISE_XOR:
d2e4a39e 3876 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
3877
3878 case BINOP_EQUAL:
3879 case BINOP_NOTEQUAL:
3880 case BINOP_LESS:
3881 case BINOP_GTR:
3882 case BINOP_LEQ:
3883 case BINOP_GEQ:
d2e4a39e 3884 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
3885
3886 case BINOP_CONCAT:
ee90b9ab 3887 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
3888
3889 case BINOP_EXP:
d2e4a39e 3890 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
3891
3892 case UNOP_NEG:
3893 case UNOP_PLUS:
3894 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
3895 case UNOP_ABS:
3896 return (!numeric_type_p (type0));
14f9c5c9
AS
3897
3898 }
3899}
3900\f
4c4b4cd2 3901 /* Renaming */
14f9c5c9 3902
aeb5907d
JB
3903/* NOTES:
3904
3905 1. In the following, we assume that a renaming type's name may
3906 have an ___XD suffix. It would be nice if this went away at some
3907 point.
3908 2. We handle both the (old) purely type-based representation of
3909 renamings and the (new) variable-based encoding. At some point,
3910 it is devoutly to be hoped that the former goes away
3911 (FIXME: hilfinger-2007-07-09).
3912 3. Subprogram renamings are not implemented, although the XRS
3913 suffix is recognized (FIXME: hilfinger-2007-07-09). */
3914
3915/* If SYM encodes a renaming,
3916
3917 <renaming> renames <renamed entity>,
3918
3919 sets *LEN to the length of the renamed entity's name,
3920 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3921 the string describing the subcomponent selected from the renamed
0963b4bd 3922 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
3923 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3924 are undefined). Otherwise, returns a value indicating the category
3925 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3926 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3927 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
3928 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3929 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3930 may be NULL, in which case they are not assigned.
3931
3932 [Currently, however, GCC does not generate subprogram renamings.] */
3933
3934enum ada_renaming_category
3935ada_parse_renaming (struct symbol *sym,
3936 const char **renamed_entity, int *len,
3937 const char **renaming_expr)
3938{
3939 enum ada_renaming_category kind;
3940 const char *info;
3941 const char *suffix;
3942
3943 if (sym == NULL)
3944 return ADA_NOT_RENAMING;
3945 switch (SYMBOL_CLASS (sym))
14f9c5c9 3946 {
aeb5907d
JB
3947 default:
3948 return ADA_NOT_RENAMING;
3949 case LOC_TYPEDEF:
3950 return parse_old_style_renaming (SYMBOL_TYPE (sym),
3951 renamed_entity, len, renaming_expr);
3952 case LOC_LOCAL:
3953 case LOC_STATIC:
3954 case LOC_COMPUTED:
3955 case LOC_OPTIMIZED_OUT:
3956 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3957 if (info == NULL)
3958 return ADA_NOT_RENAMING;
3959 switch (info[5])
3960 {
3961 case '_':
3962 kind = ADA_OBJECT_RENAMING;
3963 info += 6;
3964 break;
3965 case 'E':
3966 kind = ADA_EXCEPTION_RENAMING;
3967 info += 7;
3968 break;
3969 case 'P':
3970 kind = ADA_PACKAGE_RENAMING;
3971 info += 7;
3972 break;
3973 case 'S':
3974 kind = ADA_SUBPROGRAM_RENAMING;
3975 info += 7;
3976 break;
3977 default:
3978 return ADA_NOT_RENAMING;
3979 }
14f9c5c9 3980 }
4c4b4cd2 3981
aeb5907d
JB
3982 if (renamed_entity != NULL)
3983 *renamed_entity = info;
3984 suffix = strstr (info, "___XE");
3985 if (suffix == NULL || suffix == info)
3986 return ADA_NOT_RENAMING;
3987 if (len != NULL)
3988 *len = strlen (info) - strlen (suffix);
3989 suffix += 5;
3990 if (renaming_expr != NULL)
3991 *renaming_expr = suffix;
3992 return kind;
3993}
3994
3995/* Assuming TYPE encodes a renaming according to the old encoding in
3996 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3997 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
3998 ADA_NOT_RENAMING otherwise. */
3999static enum ada_renaming_category
4000parse_old_style_renaming (struct type *type,
4001 const char **renamed_entity, int *len,
4002 const char **renaming_expr)
4003{
4004 enum ada_renaming_category kind;
4005 const char *name;
4006 const char *info;
4007 const char *suffix;
14f9c5c9 4008
aeb5907d
JB
4009 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
4010 || TYPE_NFIELDS (type) != 1)
4011 return ADA_NOT_RENAMING;
14f9c5c9 4012
aeb5907d
JB
4013 name = type_name_no_tag (type);
4014 if (name == NULL)
4015 return ADA_NOT_RENAMING;
4016
4017 name = strstr (name, "___XR");
4018 if (name == NULL)
4019 return ADA_NOT_RENAMING;
4020 switch (name[5])
4021 {
4022 case '\0':
4023 case '_':
4024 kind = ADA_OBJECT_RENAMING;
4025 break;
4026 case 'E':
4027 kind = ADA_EXCEPTION_RENAMING;
4028 break;
4029 case 'P':
4030 kind = ADA_PACKAGE_RENAMING;
4031 break;
4032 case 'S':
4033 kind = ADA_SUBPROGRAM_RENAMING;
4034 break;
4035 default:
4036 return ADA_NOT_RENAMING;
4037 }
14f9c5c9 4038
aeb5907d
JB
4039 info = TYPE_FIELD_NAME (type, 0);
4040 if (info == NULL)
4041 return ADA_NOT_RENAMING;
4042 if (renamed_entity != NULL)
4043 *renamed_entity = info;
4044 suffix = strstr (info, "___XE");
4045 if (renaming_expr != NULL)
4046 *renaming_expr = suffix + 5;
4047 if (suffix == NULL || suffix == info)
4048 return ADA_NOT_RENAMING;
4049 if (len != NULL)
4050 *len = suffix - info;
4051 return kind;
a5ee536b
JB
4052}
4053
4054/* Compute the value of the given RENAMING_SYM, which is expected to
4055 be a symbol encoding a renaming expression. BLOCK is the block
4056 used to evaluate the renaming. */
52ce6436 4057
a5ee536b
JB
4058static struct value *
4059ada_read_renaming_var_value (struct symbol *renaming_sym,
4060 struct block *block)
4061{
bbc13ae3 4062 const char *sym_name;
a5ee536b
JB
4063 struct expression *expr;
4064 struct value *value;
4065 struct cleanup *old_chain = NULL;
4066
bbc13ae3 4067 sym_name = SYMBOL_LINKAGE_NAME (renaming_sym);
1bb9788d 4068 expr = parse_exp_1 (&sym_name, 0, block, 0);
bbc13ae3 4069 old_chain = make_cleanup (free_current_contents, &expr);
a5ee536b
JB
4070 value = evaluate_expression (expr);
4071
4072 do_cleanups (old_chain);
4073 return value;
4074}
14f9c5c9 4075\f
d2e4a39e 4076
4c4b4cd2 4077 /* Evaluation: Function Calls */
14f9c5c9 4078
4c4b4cd2 4079/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4080 lvalues, and otherwise has the side-effect of allocating memory
4081 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4082
d2e4a39e 4083static struct value *
40bc484c 4084ensure_lval (struct value *val)
14f9c5c9 4085{
40bc484c
JB
4086 if (VALUE_LVAL (val) == not_lval
4087 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4088 {
df407dfe 4089 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4090 const CORE_ADDR addr =
4091 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4092
40bc484c 4093 set_value_address (val, addr);
a84a8a0d 4094 VALUE_LVAL (val) = lval_memory;
40bc484c 4095 write_memory (addr, value_contents (val), len);
c3e5cd34 4096 }
14f9c5c9
AS
4097
4098 return val;
4099}
4100
4101/* Return the value ACTUAL, converted to be an appropriate value for a
4102 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4103 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4104 values not residing in memory, updating it as needed. */
14f9c5c9 4105
a93c0eb6 4106struct value *
40bc484c 4107ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4108{
df407dfe 4109 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4110 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4111 struct type *formal_target =
4112 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4113 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4114 struct type *actual_target =
4115 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4116 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4117
4c4b4cd2 4118 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4119 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4120 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4121 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4122 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4123 {
a84a8a0d 4124 struct value *result;
5b4ee69b 4125
14f9c5c9 4126 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4127 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4128 result = desc_data (actual);
14f9c5c9 4129 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4130 {
4131 if (VALUE_LVAL (actual) != lval_memory)
4132 {
4133 struct value *val;
5b4ee69b 4134
df407dfe 4135 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4136 val = allocate_value (actual_type);
990a07ab 4137 memcpy ((char *) value_contents_raw (val),
0fd88904 4138 (char *) value_contents (actual),
4c4b4cd2 4139 TYPE_LENGTH (actual_type));
40bc484c 4140 actual = ensure_lval (val);
4c4b4cd2 4141 }
a84a8a0d 4142 result = value_addr (actual);
4c4b4cd2 4143 }
a84a8a0d
JB
4144 else
4145 return actual;
b1af9e97 4146 return value_cast_pointers (formal_type, result, 0);
14f9c5c9
AS
4147 }
4148 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4149 return ada_value_ind (actual);
4150
4151 return actual;
4152}
4153
438c98a1
JB
4154/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4155 type TYPE. This is usually an inefficient no-op except on some targets
4156 (such as AVR) where the representation of a pointer and an address
4157 differs. */
4158
4159static CORE_ADDR
4160value_pointer (struct value *value, struct type *type)
4161{
4162 struct gdbarch *gdbarch = get_type_arch (type);
4163 unsigned len = TYPE_LENGTH (type);
4164 gdb_byte *buf = alloca (len);
4165 CORE_ADDR addr;
4166
4167 addr = value_address (value);
4168 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4169 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4170 return addr;
4171}
4172
14f9c5c9 4173
4c4b4cd2
PH
4174/* Push a descriptor of type TYPE for array value ARR on the stack at
4175 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4176 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4177 to-descriptor type rather than a descriptor type), a struct value *
4178 representing a pointer to this descriptor. */
14f9c5c9 4179
d2e4a39e 4180static struct value *
40bc484c 4181make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4182{
d2e4a39e
AS
4183 struct type *bounds_type = desc_bounds_type (type);
4184 struct type *desc_type = desc_base_type (type);
4185 struct value *descriptor = allocate_value (desc_type);
4186 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4187 int i;
d2e4a39e 4188
0963b4bd
MS
4189 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4190 i > 0; i -= 1)
14f9c5c9 4191 {
19f220c3
JK
4192 modify_field (value_type (bounds), value_contents_writeable (bounds),
4193 ada_array_bound (arr, i, 0),
4194 desc_bound_bitpos (bounds_type, i, 0),
4195 desc_bound_bitsize (bounds_type, i, 0));
4196 modify_field (value_type (bounds), value_contents_writeable (bounds),
4197 ada_array_bound (arr, i, 1),
4198 desc_bound_bitpos (bounds_type, i, 1),
4199 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4200 }
d2e4a39e 4201
40bc484c 4202 bounds = ensure_lval (bounds);
d2e4a39e 4203
19f220c3
JK
4204 modify_field (value_type (descriptor),
4205 value_contents_writeable (descriptor),
4206 value_pointer (ensure_lval (arr),
4207 TYPE_FIELD_TYPE (desc_type, 0)),
4208 fat_pntr_data_bitpos (desc_type),
4209 fat_pntr_data_bitsize (desc_type));
4210
4211 modify_field (value_type (descriptor),
4212 value_contents_writeable (descriptor),
4213 value_pointer (bounds,
4214 TYPE_FIELD_TYPE (desc_type, 1)),
4215 fat_pntr_bounds_bitpos (desc_type),
4216 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4217
40bc484c 4218 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4219
4220 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4221 return value_addr (descriptor);
4222 else
4223 return descriptor;
4224}
14f9c5c9 4225\f
963a6417 4226/* Dummy definitions for an experimental caching module that is not
0963b4bd 4227 * used in the public sources. */
96d887e8 4228
96d887e8
PH
4229static int
4230lookup_cached_symbol (const char *name, domain_enum namespace,
2570f2b7 4231 struct symbol **sym, struct block **block)
96d887e8
PH
4232{
4233 return 0;
4234}
4235
4236static void
4237cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
270140bd 4238 const struct block *block)
96d887e8
PH
4239{
4240}
4c4b4cd2
PH
4241\f
4242 /* Symbol Lookup */
4243
c0431670
JB
4244/* Return nonzero if wild matching should be used when searching for
4245 all symbols matching LOOKUP_NAME.
4246
4247 LOOKUP_NAME is expected to be a symbol name after transformation
4248 for Ada lookups (see ada_name_for_lookup). */
4249
4250static int
4251should_use_wild_match (const char *lookup_name)
4252{
4253 return (strstr (lookup_name, "__") == NULL);
4254}
4255
4c4b4cd2
PH
4256/* Return the result of a standard (literal, C-like) lookup of NAME in
4257 given DOMAIN, visible from lexical block BLOCK. */
4258
4259static struct symbol *
4260standard_lookup (const char *name, const struct block *block,
4261 domain_enum domain)
4262{
acbd605d
MGD
4263 /* Initialize it just to avoid a GCC false warning. */
4264 struct symbol *sym = NULL;
4c4b4cd2 4265
2570f2b7 4266 if (lookup_cached_symbol (name, domain, &sym, NULL))
4c4b4cd2 4267 return sym;
2570f2b7
UW
4268 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4269 cache_symbol (name, domain, sym, block_found);
4c4b4cd2
PH
4270 return sym;
4271}
4272
4273
4274/* Non-zero iff there is at least one non-function/non-enumeral symbol
4275 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4276 since they contend in overloading in the same way. */
4277static int
4278is_nonfunction (struct ada_symbol_info syms[], int n)
4279{
4280 int i;
4281
4282 for (i = 0; i < n; i += 1)
4283 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4284 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4285 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
14f9c5c9
AS
4286 return 1;
4287
4288 return 0;
4289}
4290
4291/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4292 struct types. Otherwise, they may not. */
14f9c5c9
AS
4293
4294static int
d2e4a39e 4295equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4296{
d2e4a39e 4297 if (type0 == type1)
14f9c5c9 4298 return 1;
d2e4a39e 4299 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4300 || TYPE_CODE (type0) != TYPE_CODE (type1))
4301 return 0;
d2e4a39e 4302 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4303 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4304 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4305 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4306 return 1;
d2e4a39e 4307
14f9c5c9
AS
4308 return 0;
4309}
4310
4311/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4312 no more defined than that of SYM1. */
14f9c5c9
AS
4313
4314static int
d2e4a39e 4315lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4316{
4317 if (sym0 == sym1)
4318 return 1;
176620f1 4319 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4320 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4321 return 0;
4322
d2e4a39e 4323 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4324 {
4325 case LOC_UNDEF:
4326 return 1;
4327 case LOC_TYPEDEF:
4328 {
4c4b4cd2
PH
4329 struct type *type0 = SYMBOL_TYPE (sym0);
4330 struct type *type1 = SYMBOL_TYPE (sym1);
0d5cff50
DE
4331 const char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4332 const char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4c4b4cd2 4333 int len0 = strlen (name0);
5b4ee69b 4334
4c4b4cd2
PH
4335 return
4336 TYPE_CODE (type0) == TYPE_CODE (type1)
4337 && (equiv_types (type0, type1)
4338 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4339 && strncmp (name1 + len0, "___XV", 5) == 0));
14f9c5c9
AS
4340 }
4341 case LOC_CONST:
4342 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4343 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4344 default:
4345 return 0;
14f9c5c9
AS
4346 }
4347}
4348
4c4b4cd2
PH
4349/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4350 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4351
4352static void
76a01679
JB
4353add_defn_to_vec (struct obstack *obstackp,
4354 struct symbol *sym,
2570f2b7 4355 struct block *block)
14f9c5c9
AS
4356{
4357 int i;
4c4b4cd2 4358 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4359
529cad9c
PH
4360 /* Do not try to complete stub types, as the debugger is probably
4361 already scanning all symbols matching a certain name at the
4362 time when this function is called. Trying to replace the stub
4363 type by its associated full type will cause us to restart a scan
4364 which may lead to an infinite recursion. Instead, the client
4365 collecting the matching symbols will end up collecting several
4366 matches, with at least one of them complete. It can then filter
4367 out the stub ones if needed. */
4368
4c4b4cd2
PH
4369 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4370 {
4371 if (lesseq_defined_than (sym, prevDefns[i].sym))
4372 return;
4373 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4374 {
4375 prevDefns[i].sym = sym;
4376 prevDefns[i].block = block;
4c4b4cd2 4377 return;
76a01679 4378 }
4c4b4cd2
PH
4379 }
4380
4381 {
4382 struct ada_symbol_info info;
4383
4384 info.sym = sym;
4385 info.block = block;
4c4b4cd2
PH
4386 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4387 }
4388}
4389
4390/* Number of ada_symbol_info structures currently collected in
4391 current vector in *OBSTACKP. */
4392
76a01679
JB
4393static int
4394num_defns_collected (struct obstack *obstackp)
4c4b4cd2
PH
4395{
4396 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4397}
4398
4399/* Vector of ada_symbol_info structures currently collected in current
4400 vector in *OBSTACKP. If FINISH, close off the vector and return
4401 its final address. */
4402
76a01679 4403static struct ada_symbol_info *
4c4b4cd2
PH
4404defns_collected (struct obstack *obstackp, int finish)
4405{
4406 if (finish)
4407 return obstack_finish (obstackp);
4408 else
4409 return (struct ada_symbol_info *) obstack_base (obstackp);
4410}
4411
7c7b6655
TT
4412/* Return a bound minimal symbol matching NAME according to Ada
4413 decoding rules. Returns an invalid symbol if there is no such
4414 minimal symbol. Names prefixed with "standard__" are handled
4415 specially: "standard__" is first stripped off, and only static and
4416 global symbols are searched. */
4c4b4cd2 4417
7c7b6655 4418struct bound_minimal_symbol
96d887e8 4419ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4420{
7c7b6655 4421 struct bound_minimal_symbol result;
4c4b4cd2 4422 struct objfile *objfile;
96d887e8 4423 struct minimal_symbol *msymbol;
dc4024cd 4424 const int wild_match_p = should_use_wild_match (name);
4c4b4cd2 4425
7c7b6655
TT
4426 memset (&result, 0, sizeof (result));
4427
c0431670
JB
4428 /* Special case: If the user specifies a symbol name inside package
4429 Standard, do a non-wild matching of the symbol name without
4430 the "standard__" prefix. This was primarily introduced in order
4431 to allow the user to specifically access the standard exceptions
4432 using, for instance, Standard.Constraint_Error when Constraint_Error
4433 is ambiguous (due to the user defining its own Constraint_Error
4434 entity inside its program). */
96d887e8 4435 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
c0431670 4436 name += sizeof ("standard__") - 1;
4c4b4cd2 4437
96d887e8
PH
4438 ALL_MSYMBOLS (objfile, msymbol)
4439 {
dc4024cd 4440 if (match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match_p)
96d887e8 4441 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
7c7b6655
TT
4442 {
4443 result.minsym = msymbol;
4444 result.objfile = objfile;
4445 break;
4446 }
96d887e8 4447 }
4c4b4cd2 4448
7c7b6655 4449 return result;
96d887e8 4450}
4c4b4cd2 4451
96d887e8
PH
4452/* For all subprograms that statically enclose the subprogram of the
4453 selected frame, add symbols matching identifier NAME in DOMAIN
4454 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4455 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4456 with a wildcard prefix. */
4c4b4cd2 4457
96d887e8
PH
4458static void
4459add_symbols_from_enclosing_procs (struct obstack *obstackp,
76a01679 4460 const char *name, domain_enum namespace,
48b78332 4461 int wild_match_p)
96d887e8 4462{
96d887e8 4463}
14f9c5c9 4464
96d887e8
PH
4465/* True if TYPE is definitely an artificial type supplied to a symbol
4466 for which no debugging information was given in the symbol file. */
14f9c5c9 4467
96d887e8
PH
4468static int
4469is_nondebugging_type (struct type *type)
4470{
0d5cff50 4471 const char *name = ada_type_name (type);
5b4ee69b 4472
96d887e8
PH
4473 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4474}
4c4b4cd2 4475
8f17729f
JB
4476/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4477 that are deemed "identical" for practical purposes.
4478
4479 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4480 types and that their number of enumerals is identical (in other
4481 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4482
4483static int
4484ada_identical_enum_types_p (struct type *type1, struct type *type2)
4485{
4486 int i;
4487
4488 /* The heuristic we use here is fairly conservative. We consider
4489 that 2 enumerate types are identical if they have the same
4490 number of enumerals and that all enumerals have the same
4491 underlying value and name. */
4492
4493 /* All enums in the type should have an identical underlying value. */
4494 for (i = 0; i < TYPE_NFIELDS (type1); i++)
14e75d8e 4495 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4496 return 0;
4497
4498 /* All enumerals should also have the same name (modulo any numerical
4499 suffix). */
4500 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4501 {
0d5cff50
DE
4502 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4503 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4504 int len_1 = strlen (name_1);
4505 int len_2 = strlen (name_2);
4506
4507 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4508 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4509 if (len_1 != len_2
4510 || strncmp (TYPE_FIELD_NAME (type1, i),
4511 TYPE_FIELD_NAME (type2, i),
4512 len_1) != 0)
4513 return 0;
4514 }
4515
4516 return 1;
4517}
4518
4519/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4520 that are deemed "identical" for practical purposes. Sometimes,
4521 enumerals are not strictly identical, but their types are so similar
4522 that they can be considered identical.
4523
4524 For instance, consider the following code:
4525
4526 type Color is (Black, Red, Green, Blue, White);
4527 type RGB_Color is new Color range Red .. Blue;
4528
4529 Type RGB_Color is a subrange of an implicit type which is a copy
4530 of type Color. If we call that implicit type RGB_ColorB ("B" is
4531 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4532 As a result, when an expression references any of the enumeral
4533 by name (Eg. "print green"), the expression is technically
4534 ambiguous and the user should be asked to disambiguate. But
4535 doing so would only hinder the user, since it wouldn't matter
4536 what choice he makes, the outcome would always be the same.
4537 So, for practical purposes, we consider them as the same. */
4538
4539static int
4540symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4541{
4542 int i;
4543
4544 /* Before performing a thorough comparison check of each type,
4545 we perform a series of inexpensive checks. We expect that these
4546 checks will quickly fail in the vast majority of cases, and thus
4547 help prevent the unnecessary use of a more expensive comparison.
4548 Said comparison also expects us to make some of these checks
4549 (see ada_identical_enum_types_p). */
4550
4551 /* Quick check: All symbols should have an enum type. */
4552 for (i = 0; i < nsyms; i++)
4553 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4554 return 0;
4555
4556 /* Quick check: They should all have the same value. */
4557 for (i = 1; i < nsyms; i++)
4558 if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4559 return 0;
4560
4561 /* Quick check: They should all have the same number of enumerals. */
4562 for (i = 1; i < nsyms; i++)
4563 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4564 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4565 return 0;
4566
4567 /* All the sanity checks passed, so we might have a set of
4568 identical enumeration types. Perform a more complete
4569 comparison of the type of each symbol. */
4570 for (i = 1; i < nsyms; i++)
4571 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4572 SYMBOL_TYPE (syms[0].sym)))
4573 return 0;
4574
4575 return 1;
4576}
4577
96d887e8
PH
4578/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4579 duplicate other symbols in the list (The only case I know of where
4580 this happens is when object files containing stabs-in-ecoff are
4581 linked with files containing ordinary ecoff debugging symbols (or no
4582 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4583 Returns the number of items in the modified list. */
4c4b4cd2 4584
96d887e8
PH
4585static int
4586remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4587{
4588 int i, j;
4c4b4cd2 4589
8f17729f
JB
4590 /* We should never be called with less than 2 symbols, as there
4591 cannot be any extra symbol in that case. But it's easy to
4592 handle, since we have nothing to do in that case. */
4593 if (nsyms < 2)
4594 return nsyms;
4595
96d887e8
PH
4596 i = 0;
4597 while (i < nsyms)
4598 {
a35ddb44 4599 int remove_p = 0;
339c13b6
JB
4600
4601 /* If two symbols have the same name and one of them is a stub type,
4602 the get rid of the stub. */
4603
4604 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4605 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4606 {
4607 for (j = 0; j < nsyms; j++)
4608 {
4609 if (j != i
4610 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4611 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4612 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4613 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
a35ddb44 4614 remove_p = 1;
339c13b6
JB
4615 }
4616 }
4617
4618 /* Two symbols with the same name, same class and same address
4619 should be identical. */
4620
4621 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
96d887e8
PH
4622 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4623 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4624 {
4625 for (j = 0; j < nsyms; j += 1)
4626 {
4627 if (i != j
4628 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4629 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
76a01679 4630 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
96d887e8
PH
4631 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4632 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4633 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
a35ddb44 4634 remove_p = 1;
4c4b4cd2 4635 }
4c4b4cd2 4636 }
339c13b6 4637
a35ddb44 4638 if (remove_p)
339c13b6
JB
4639 {
4640 for (j = i + 1; j < nsyms; j += 1)
4641 syms[j - 1] = syms[j];
4642 nsyms -= 1;
4643 }
4644
96d887e8 4645 i += 1;
14f9c5c9 4646 }
8f17729f
JB
4647
4648 /* If all the remaining symbols are identical enumerals, then
4649 just keep the first one and discard the rest.
4650
4651 Unlike what we did previously, we do not discard any entry
4652 unless they are ALL identical. This is because the symbol
4653 comparison is not a strict comparison, but rather a practical
4654 comparison. If all symbols are considered identical, then
4655 we can just go ahead and use the first one and discard the rest.
4656 But if we cannot reduce the list to a single element, we have
4657 to ask the user to disambiguate anyways. And if we have to
4658 present a multiple-choice menu, it's less confusing if the list
4659 isn't missing some choices that were identical and yet distinct. */
4660 if (symbols_are_identical_enums (syms, nsyms))
4661 nsyms = 1;
4662
96d887e8 4663 return nsyms;
14f9c5c9
AS
4664}
4665
96d887e8
PH
4666/* Given a type that corresponds to a renaming entity, use the type name
4667 to extract the scope (package name or function name, fully qualified,
4668 and following the GNAT encoding convention) where this renaming has been
4669 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 4670
96d887e8
PH
4671static char *
4672xget_renaming_scope (struct type *renaming_type)
14f9c5c9 4673{
96d887e8 4674 /* The renaming types adhere to the following convention:
0963b4bd 4675 <scope>__<rename>___<XR extension>.
96d887e8
PH
4676 So, to extract the scope, we search for the "___XR" extension,
4677 and then backtrack until we find the first "__". */
76a01679 4678
96d887e8
PH
4679 const char *name = type_name_no_tag (renaming_type);
4680 char *suffix = strstr (name, "___XR");
4681 char *last;
4682 int scope_len;
4683 char *scope;
14f9c5c9 4684
96d887e8
PH
4685 /* Now, backtrack a bit until we find the first "__". Start looking
4686 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 4687
96d887e8
PH
4688 for (last = suffix - 3; last > name; last--)
4689 if (last[0] == '_' && last[1] == '_')
4690 break;
76a01679 4691
96d887e8 4692 /* Make a copy of scope and return it. */
14f9c5c9 4693
96d887e8
PH
4694 scope_len = last - name;
4695 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 4696
96d887e8
PH
4697 strncpy (scope, name, scope_len);
4698 scope[scope_len] = '\0';
4c4b4cd2 4699
96d887e8 4700 return scope;
4c4b4cd2
PH
4701}
4702
96d887e8 4703/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 4704
96d887e8
PH
4705static int
4706is_package_name (const char *name)
4c4b4cd2 4707{
96d887e8
PH
4708 /* Here, We take advantage of the fact that no symbols are generated
4709 for packages, while symbols are generated for each function.
4710 So the condition for NAME represent a package becomes equivalent
4711 to NAME not existing in our list of symbols. There is only one
4712 small complication with library-level functions (see below). */
4c4b4cd2 4713
96d887e8 4714 char *fun_name;
76a01679 4715
96d887e8
PH
4716 /* If it is a function that has not been defined at library level,
4717 then we should be able to look it up in the symbols. */
4718 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4719 return 0;
14f9c5c9 4720
96d887e8
PH
4721 /* Library-level function names start with "_ada_". See if function
4722 "_ada_" followed by NAME can be found. */
14f9c5c9 4723
96d887e8 4724 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 4725 functions names cannot contain "__" in them. */
96d887e8
PH
4726 if (strstr (name, "__") != NULL)
4727 return 0;
4c4b4cd2 4728
b435e160 4729 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 4730
96d887e8
PH
4731 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4732}
14f9c5c9 4733
96d887e8 4734/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 4735 not visible from FUNCTION_NAME. */
14f9c5c9 4736
96d887e8 4737static int
0d5cff50 4738old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 4739{
aeb5907d 4740 char *scope;
1509e573 4741 struct cleanup *old_chain;
aeb5907d
JB
4742
4743 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4744 return 0;
4745
4746 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
1509e573 4747 old_chain = make_cleanup (xfree, scope);
14f9c5c9 4748
96d887e8
PH
4749 /* If the rename has been defined in a package, then it is visible. */
4750 if (is_package_name (scope))
1509e573
JB
4751 {
4752 do_cleanups (old_chain);
4753 return 0;
4754 }
14f9c5c9 4755
96d887e8
PH
4756 /* Check that the rename is in the current function scope by checking
4757 that its name starts with SCOPE. */
76a01679 4758
96d887e8
PH
4759 /* If the function name starts with "_ada_", it means that it is
4760 a library-level function. Strip this prefix before doing the
4761 comparison, as the encoding for the renaming does not contain
4762 this prefix. */
4763 if (strncmp (function_name, "_ada_", 5) == 0)
4764 function_name += 5;
f26caa11 4765
1509e573
JB
4766 {
4767 int is_invisible = strncmp (function_name, scope, strlen (scope)) != 0;
4768
4769 do_cleanups (old_chain);
4770 return is_invisible;
4771 }
f26caa11
PH
4772}
4773
aeb5907d
JB
4774/* Remove entries from SYMS that corresponds to a renaming entity that
4775 is not visible from the function associated with CURRENT_BLOCK or
4776 that is superfluous due to the presence of more specific renaming
4777 information. Places surviving symbols in the initial entries of
4778 SYMS and returns the number of surviving symbols.
96d887e8
PH
4779
4780 Rationale:
aeb5907d
JB
4781 First, in cases where an object renaming is implemented as a
4782 reference variable, GNAT may produce both the actual reference
4783 variable and the renaming encoding. In this case, we discard the
4784 latter.
4785
4786 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
4787 entity. Unfortunately, STABS currently does not support the definition
4788 of types that are local to a given lexical block, so all renamings types
4789 are emitted at library level. As a consequence, if an application
4790 contains two renaming entities using the same name, and a user tries to
4791 print the value of one of these entities, the result of the ada symbol
4792 lookup will also contain the wrong renaming type.
f26caa11 4793
96d887e8
PH
4794 This function partially covers for this limitation by attempting to
4795 remove from the SYMS list renaming symbols that should be visible
4796 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
4797 method with the current information available. The implementation
4798 below has a couple of limitations (FIXME: brobecker-2003-05-12):
4799
4800 - When the user tries to print a rename in a function while there
4801 is another rename entity defined in a package: Normally, the
4802 rename in the function has precedence over the rename in the
4803 package, so the latter should be removed from the list. This is
4804 currently not the case.
4805
4806 - This function will incorrectly remove valid renames if
4807 the CURRENT_BLOCK corresponds to a function which symbol name
4808 has been changed by an "Export" pragma. As a consequence,
4809 the user will be unable to print such rename entities. */
4c4b4cd2 4810
14f9c5c9 4811static int
aeb5907d
JB
4812remove_irrelevant_renamings (struct ada_symbol_info *syms,
4813 int nsyms, const struct block *current_block)
4c4b4cd2
PH
4814{
4815 struct symbol *current_function;
0d5cff50 4816 const char *current_function_name;
4c4b4cd2 4817 int i;
aeb5907d
JB
4818 int is_new_style_renaming;
4819
4820 /* If there is both a renaming foo___XR... encoded as a variable and
4821 a simple variable foo in the same block, discard the latter.
0963b4bd 4822 First, zero out such symbols, then compress. */
aeb5907d
JB
4823 is_new_style_renaming = 0;
4824 for (i = 0; i < nsyms; i += 1)
4825 {
4826 struct symbol *sym = syms[i].sym;
270140bd 4827 const struct block *block = syms[i].block;
aeb5907d
JB
4828 const char *name;
4829 const char *suffix;
4830
4831 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4832 continue;
4833 name = SYMBOL_LINKAGE_NAME (sym);
4834 suffix = strstr (name, "___XR");
4835
4836 if (suffix != NULL)
4837 {
4838 int name_len = suffix - name;
4839 int j;
5b4ee69b 4840
aeb5907d
JB
4841 is_new_style_renaming = 1;
4842 for (j = 0; j < nsyms; j += 1)
4843 if (i != j && syms[j].sym != NULL
4844 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4845 name_len) == 0
4846 && block == syms[j].block)
4847 syms[j].sym = NULL;
4848 }
4849 }
4850 if (is_new_style_renaming)
4851 {
4852 int j, k;
4853
4854 for (j = k = 0; j < nsyms; j += 1)
4855 if (syms[j].sym != NULL)
4856 {
4857 syms[k] = syms[j];
4858 k += 1;
4859 }
4860 return k;
4861 }
4c4b4cd2
PH
4862
4863 /* Extract the function name associated to CURRENT_BLOCK.
4864 Abort if unable to do so. */
76a01679 4865
4c4b4cd2
PH
4866 if (current_block == NULL)
4867 return nsyms;
76a01679 4868
7f0df278 4869 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
4870 if (current_function == NULL)
4871 return nsyms;
4872
4873 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4874 if (current_function_name == NULL)
4875 return nsyms;
4876
4877 /* Check each of the symbols, and remove it from the list if it is
4878 a type corresponding to a renaming that is out of the scope of
4879 the current block. */
4880
4881 i = 0;
4882 while (i < nsyms)
4883 {
aeb5907d
JB
4884 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4885 == ADA_OBJECT_RENAMING
4886 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4c4b4cd2
PH
4887 {
4888 int j;
5b4ee69b 4889
aeb5907d 4890 for (j = i + 1; j < nsyms; j += 1)
76a01679 4891 syms[j - 1] = syms[j];
4c4b4cd2
PH
4892 nsyms -= 1;
4893 }
4894 else
4895 i += 1;
4896 }
4897
4898 return nsyms;
4899}
4900
339c13b6
JB
4901/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4902 whose name and domain match NAME and DOMAIN respectively.
4903 If no match was found, then extend the search to "enclosing"
4904 routines (in other words, if we're inside a nested function,
4905 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
4906 If WILD_MATCH_P is nonzero, perform the naming matching in
4907 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
4908
4909 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
4910
4911static void
4912ada_add_local_symbols (struct obstack *obstackp, const char *name,
4913 struct block *block, domain_enum domain,
d0a8ab18 4914 int wild_match_p)
339c13b6
JB
4915{
4916 int block_depth = 0;
4917
4918 while (block != NULL)
4919 {
4920 block_depth += 1;
d0a8ab18
JB
4921 ada_add_block_symbols (obstackp, block, name, domain, NULL,
4922 wild_match_p);
339c13b6
JB
4923
4924 /* If we found a non-function match, assume that's the one. */
4925 if (is_nonfunction (defns_collected (obstackp, 0),
4926 num_defns_collected (obstackp)))
4927 return;
4928
4929 block = BLOCK_SUPERBLOCK (block);
4930 }
4931
4932 /* If no luck so far, try to find NAME as a local symbol in some lexically
4933 enclosing subprogram. */
4934 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
d0a8ab18 4935 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match_p);
339c13b6
JB
4936}
4937
ccefe4c4 4938/* An object of this type is used as the user_data argument when
40658b94 4939 calling the map_matching_symbols method. */
ccefe4c4 4940
40658b94 4941struct match_data
ccefe4c4 4942{
40658b94 4943 struct objfile *objfile;
ccefe4c4 4944 struct obstack *obstackp;
40658b94
PH
4945 struct symbol *arg_sym;
4946 int found_sym;
ccefe4c4
TT
4947};
4948
40658b94
PH
4949/* A callback for add_matching_symbols that adds SYM, found in BLOCK,
4950 to a list of symbols. DATA0 is a pointer to a struct match_data *
4951 containing the obstack that collects the symbol list, the file that SYM
4952 must come from, a flag indicating whether a non-argument symbol has
4953 been found in the current block, and the last argument symbol
4954 passed in SYM within the current block (if any). When SYM is null,
4955 marking the end of a block, the argument symbol is added if no
4956 other has been found. */
ccefe4c4 4957
40658b94
PH
4958static int
4959aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 4960{
40658b94
PH
4961 struct match_data *data = (struct match_data *) data0;
4962
4963 if (sym == NULL)
4964 {
4965 if (!data->found_sym && data->arg_sym != NULL)
4966 add_defn_to_vec (data->obstackp,
4967 fixup_symbol_section (data->arg_sym, data->objfile),
4968 block);
4969 data->found_sym = 0;
4970 data->arg_sym = NULL;
4971 }
4972 else
4973 {
4974 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
4975 return 0;
4976 else if (SYMBOL_IS_ARGUMENT (sym))
4977 data->arg_sym = sym;
4978 else
4979 {
4980 data->found_sym = 1;
4981 add_defn_to_vec (data->obstackp,
4982 fixup_symbol_section (sym, data->objfile),
4983 block);
4984 }
4985 }
4986 return 0;
4987}
4988
db230ce3
JB
4989/* Implements compare_names, but only applying the comparision using
4990 the given CASING. */
5b4ee69b 4991
40658b94 4992static int
db230ce3
JB
4993compare_names_with_case (const char *string1, const char *string2,
4994 enum case_sensitivity casing)
40658b94
PH
4995{
4996 while (*string1 != '\0' && *string2 != '\0')
4997 {
db230ce3
JB
4998 char c1, c2;
4999
40658b94
PH
5000 if (isspace (*string1) || isspace (*string2))
5001 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5002
5003 if (casing == case_sensitive_off)
5004 {
5005 c1 = tolower (*string1);
5006 c2 = tolower (*string2);
5007 }
5008 else
5009 {
5010 c1 = *string1;
5011 c2 = *string2;
5012 }
5013 if (c1 != c2)
40658b94 5014 break;
db230ce3 5015
40658b94
PH
5016 string1 += 1;
5017 string2 += 1;
5018 }
db230ce3 5019
40658b94
PH
5020 switch (*string1)
5021 {
5022 case '(':
5023 return strcmp_iw_ordered (string1, string2);
5024 case '_':
5025 if (*string2 == '\0')
5026 {
052874e8 5027 if (is_name_suffix (string1))
40658b94
PH
5028 return 0;
5029 else
1a1d5513 5030 return 1;
40658b94 5031 }
dbb8534f 5032 /* FALLTHROUGH */
40658b94
PH
5033 default:
5034 if (*string2 == '(')
5035 return strcmp_iw_ordered (string1, string2);
5036 else
db230ce3
JB
5037 {
5038 if (casing == case_sensitive_off)
5039 return tolower (*string1) - tolower (*string2);
5040 else
5041 return *string1 - *string2;
5042 }
40658b94 5043 }
ccefe4c4
TT
5044}
5045
db230ce3
JB
5046/* Compare STRING1 to STRING2, with results as for strcmp.
5047 Compatible with strcmp_iw_ordered in that...
5048
5049 strcmp_iw_ordered (STRING1, STRING2) <= 0
5050
5051 ... implies...
5052
5053 compare_names (STRING1, STRING2) <= 0
5054
5055 (they may differ as to what symbols compare equal). */
5056
5057static int
5058compare_names (const char *string1, const char *string2)
5059{
5060 int result;
5061
5062 /* Similar to what strcmp_iw_ordered does, we need to perform
5063 a case-insensitive comparison first, and only resort to
5064 a second, case-sensitive, comparison if the first one was
5065 not sufficient to differentiate the two strings. */
5066
5067 result = compare_names_with_case (string1, string2, case_sensitive_off);
5068 if (result == 0)
5069 result = compare_names_with_case (string1, string2, case_sensitive_on);
5070
5071 return result;
5072}
5073
339c13b6
JB
5074/* Add to OBSTACKP all non-local symbols whose name and domain match
5075 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
5076 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
5077
5078static void
40658b94
PH
5079add_nonlocal_symbols (struct obstack *obstackp, const char *name,
5080 domain_enum domain, int global,
5081 int is_wild_match)
339c13b6
JB
5082{
5083 struct objfile *objfile;
40658b94 5084 struct match_data data;
339c13b6 5085
6475f2fe 5086 memset (&data, 0, sizeof data);
ccefe4c4 5087 data.obstackp = obstackp;
339c13b6 5088
ccefe4c4 5089 ALL_OBJFILES (objfile)
40658b94
PH
5090 {
5091 data.objfile = objfile;
5092
5093 if (is_wild_match)
ade7ed9e 5094 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
40658b94
PH
5095 aux_add_nonlocal_symbols, &data,
5096 wild_match, NULL);
5097 else
ade7ed9e 5098 objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
40658b94
PH
5099 aux_add_nonlocal_symbols, &data,
5100 full_match, compare_names);
5101 }
5102
5103 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5104 {
5105 ALL_OBJFILES (objfile)
5106 {
5107 char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
5108 strcpy (name1, "_ada_");
5109 strcpy (name1 + sizeof ("_ada_") - 1, name);
5110 data.objfile = objfile;
ade7ed9e
DE
5111 objfile->sf->qf->map_matching_symbols (objfile, name1, domain,
5112 global,
0963b4bd
MS
5113 aux_add_nonlocal_symbols,
5114 &data,
40658b94
PH
5115 full_match, compare_names);
5116 }
5117 }
339c13b6
JB
5118}
5119
4eeaa230
DE
5120/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and, if full_search is
5121 non-zero, enclosing scope and in global scopes, returning the number of
5122 matches.
9f88c959 5123 Sets *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4c4b4cd2 5124 indicating the symbols found and the blocks and symbol tables (if
4eeaa230
DE
5125 any) in which they were found. This vector is transient---good only to
5126 the next call of ada_lookup_symbol_list.
5127
5128 When full_search is non-zero, any non-function/non-enumeral
4c4b4cd2
PH
5129 symbol match within the nest of blocks whose innermost member is BLOCK0,
5130 is the one match returned (no other matches in that or
d9680e73 5131 enclosing blocks is returned). If there are any matches in or
4eeaa230
DE
5132 surrounding BLOCK0, then these alone are returned.
5133
9f88c959 5134 Names prefixed with "standard__" are handled specially: "standard__"
4c4b4cd2 5135 is first stripped off, and only static and global symbols are searched. */
14f9c5c9 5136
4eeaa230
DE
5137static int
5138ada_lookup_symbol_list_worker (const char *name0, const struct block *block0,
5139 domain_enum namespace,
5140 struct ada_symbol_info **results,
5141 int full_search)
14f9c5c9
AS
5142{
5143 struct symbol *sym;
14f9c5c9 5144 struct block *block;
4c4b4cd2 5145 const char *name;
82ccd55e 5146 const int wild_match_p = should_use_wild_match (name0);
14f9c5c9 5147 int cacheIfUnique;
4c4b4cd2 5148 int ndefns;
14f9c5c9 5149
4c4b4cd2
PH
5150 obstack_free (&symbol_list_obstack, NULL);
5151 obstack_init (&symbol_list_obstack);
14f9c5c9 5152
14f9c5c9
AS
5153 cacheIfUnique = 0;
5154
5155 /* Search specified block and its superiors. */
5156
4c4b4cd2 5157 name = name0;
76a01679
JB
5158 block = (struct block *) block0; /* FIXME: No cast ought to be
5159 needed, but adding const will
5160 have a cascade effect. */
339c13b6
JB
5161
5162 /* Special case: If the user specifies a symbol name inside package
5163 Standard, do a non-wild matching of the symbol name without
5164 the "standard__" prefix. This was primarily introduced in order
5165 to allow the user to specifically access the standard exceptions
5166 using, for instance, Standard.Constraint_Error when Constraint_Error
5167 is ambiguous (due to the user defining its own Constraint_Error
5168 entity inside its program). */
4c4b4cd2
PH
5169 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5170 {
4c4b4cd2
PH
5171 block = NULL;
5172 name = name0 + sizeof ("standard__") - 1;
5173 }
5174
339c13b6 5175 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5176
4eeaa230
DE
5177 if (block != NULL)
5178 {
5179 if (full_search)
5180 {
5181 ada_add_local_symbols (&symbol_list_obstack, name, block,
5182 namespace, wild_match_p);
5183 }
5184 else
5185 {
5186 /* In the !full_search case we're are being called by
5187 ada_iterate_over_symbols, and we don't want to search
5188 superblocks. */
5189 ada_add_block_symbols (&symbol_list_obstack, block, name,
5190 namespace, NULL, wild_match_p);
5191 }
5192 if (num_defns_collected (&symbol_list_obstack) > 0 || !full_search)
5193 goto done;
5194 }
d2e4a39e 5195
339c13b6
JB
5196 /* No non-global symbols found. Check our cache to see if we have
5197 already performed this search before. If we have, then return
5198 the same result. */
5199
14f9c5c9 5200 cacheIfUnique = 1;
2570f2b7 5201 if (lookup_cached_symbol (name0, namespace, &sym, &block))
4c4b4cd2
PH
5202 {
5203 if (sym != NULL)
2570f2b7 5204 add_defn_to_vec (&symbol_list_obstack, sym, block);
4c4b4cd2
PH
5205 goto done;
5206 }
14f9c5c9 5207
339c13b6
JB
5208 /* Search symbols from all global blocks. */
5209
40658b94 5210 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
82ccd55e 5211 wild_match_p);
d2e4a39e 5212
4c4b4cd2 5213 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5214 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5215
4c4b4cd2 5216 if (num_defns_collected (&symbol_list_obstack) == 0)
40658b94 5217 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
82ccd55e 5218 wild_match_p);
14f9c5c9 5219
4c4b4cd2
PH
5220done:
5221 ndefns = num_defns_collected (&symbol_list_obstack);
5222 *results = defns_collected (&symbol_list_obstack, 1);
5223
5224 ndefns = remove_extra_symbols (*results, ndefns);
5225
2ad01556 5226 if (ndefns == 0 && full_search)
2570f2b7 5227 cache_symbol (name0, namespace, NULL, NULL);
14f9c5c9 5228
2ad01556 5229 if (ndefns == 1 && full_search && cacheIfUnique)
2570f2b7 5230 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
14f9c5c9 5231
aeb5907d 5232 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
14f9c5c9 5233
14f9c5c9
AS
5234 return ndefns;
5235}
5236
4eeaa230
DE
5237/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing scope and
5238 in global scopes, returning the number of matches, and setting *RESULTS
5239 to a vector of (SYM,BLOCK) tuples.
5240 See ada_lookup_symbol_list_worker for further details. */
5241
5242int
5243ada_lookup_symbol_list (const char *name0, const struct block *block0,
5244 domain_enum domain, struct ada_symbol_info **results)
5245{
5246 return ada_lookup_symbol_list_worker (name0, block0, domain, results, 1);
5247}
5248
5249/* Implementation of the la_iterate_over_symbols method. */
5250
5251static void
5252ada_iterate_over_symbols (const struct block *block,
5253 const char *name, domain_enum domain,
5254 symbol_found_callback_ftype *callback,
5255 void *data)
5256{
5257 int ndefs, i;
5258 struct ada_symbol_info *results;
5259
5260 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
5261 for (i = 0; i < ndefs; ++i)
5262 {
5263 if (! (*callback) (results[i].sym, data))
5264 break;
5265 }
5266}
5267
f8eba3c6
TT
5268/* If NAME is the name of an entity, return a string that should
5269 be used to look that entity up in Ada units. This string should
5270 be deallocated after use using xfree.
5271
5272 NAME can have any form that the "break" or "print" commands might
5273 recognize. In other words, it does not have to be the "natural"
5274 name, or the "encoded" name. */
5275
5276char *
5277ada_name_for_lookup (const char *name)
5278{
5279 char *canon;
5280 int nlen = strlen (name);
5281
5282 if (name[0] == '<' && name[nlen - 1] == '>')
5283 {
5284 canon = xmalloc (nlen - 1);
5285 memcpy (canon, name + 1, nlen - 2);
5286 canon[nlen - 2] = '\0';
5287 }
5288 else
5289 canon = xstrdup (ada_encode (ada_fold_name (name)));
5290 return canon;
5291}
5292
4e5c77fe
JB
5293/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5294 to 1, but choosing the first symbol found if there are multiple
5295 choices.
5296
5e2336be
JB
5297 The result is stored in *INFO, which must be non-NULL.
5298 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5299
5300void
5301ada_lookup_encoded_symbol (const char *name, const struct block *block,
5302 domain_enum namespace,
5e2336be 5303 struct ada_symbol_info *info)
14f9c5c9 5304{
4c4b4cd2 5305 struct ada_symbol_info *candidates;
14f9c5c9
AS
5306 int n_candidates;
5307
5e2336be
JB
5308 gdb_assert (info != NULL);
5309 memset (info, 0, sizeof (struct ada_symbol_info));
4e5c77fe 5310
4eeaa230 5311 n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates);
14f9c5c9 5312 if (n_candidates == 0)
4e5c77fe 5313 return;
4c4b4cd2 5314
5e2336be
JB
5315 *info = candidates[0];
5316 info->sym = fixup_symbol_section (info->sym, NULL);
4e5c77fe 5317}
aeb5907d
JB
5318
5319/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5320 scope and in global scopes, or NULL if none. NAME is folded and
5321 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5322 choosing the first symbol if there are multiple choices.
4e5c77fe
JB
5323 If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
5324
aeb5907d
JB
5325struct symbol *
5326ada_lookup_symbol (const char *name, const struct block *block0,
21b556f4 5327 domain_enum namespace, int *is_a_field_of_this)
aeb5907d 5328{
5e2336be 5329 struct ada_symbol_info info;
4e5c77fe 5330
aeb5907d
JB
5331 if (is_a_field_of_this != NULL)
5332 *is_a_field_of_this = 0;
5333
4e5c77fe 5334 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
5e2336be
JB
5335 block0, namespace, &info);
5336 return info.sym;
4c4b4cd2 5337}
14f9c5c9 5338
4c4b4cd2
PH
5339static struct symbol *
5340ada_lookup_symbol_nonlocal (const char *name,
76a01679 5341 const struct block *block,
21b556f4 5342 const domain_enum domain)
4c4b4cd2 5343{
94af9270 5344 return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
14f9c5c9
AS
5345}
5346
5347
4c4b4cd2
PH
5348/* True iff STR is a possible encoded suffix of a normal Ada name
5349 that is to be ignored for matching purposes. Suffixes of parallel
5350 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5351 are given by any of the regular expressions:
4c4b4cd2 5352
babe1480
JB
5353 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5354 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5355 TKB [subprogram suffix for task bodies]
babe1480 5356 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5357 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5358
5359 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5360 match is performed. This sequence is used to differentiate homonyms,
5361 is an optional part of a valid name suffix. */
4c4b4cd2 5362
14f9c5c9 5363static int
d2e4a39e 5364is_name_suffix (const char *str)
14f9c5c9
AS
5365{
5366 int k;
4c4b4cd2
PH
5367 const char *matching;
5368 const int len = strlen (str);
5369
babe1480
JB
5370 /* Skip optional leading __[0-9]+. */
5371
4c4b4cd2
PH
5372 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5373 {
babe1480
JB
5374 str += 3;
5375 while (isdigit (str[0]))
5376 str += 1;
4c4b4cd2 5377 }
babe1480
JB
5378
5379 /* [.$][0-9]+ */
4c4b4cd2 5380
babe1480 5381 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5382 {
babe1480 5383 matching = str + 1;
4c4b4cd2
PH
5384 while (isdigit (matching[0]))
5385 matching += 1;
5386 if (matching[0] == '\0')
5387 return 1;
5388 }
5389
5390 /* ___[0-9]+ */
babe1480 5391
4c4b4cd2
PH
5392 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5393 {
5394 matching = str + 3;
5395 while (isdigit (matching[0]))
5396 matching += 1;
5397 if (matching[0] == '\0')
5398 return 1;
5399 }
5400
9ac7f98e
JB
5401 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5402
5403 if (strcmp (str, "TKB") == 0)
5404 return 1;
5405
529cad9c
PH
5406#if 0
5407 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5408 with a N at the end. Unfortunately, the compiler uses the same
5409 convention for other internal types it creates. So treating
529cad9c 5410 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5411 some regressions. For instance, consider the case of an enumerated
5412 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5413 name ends with N.
5414 Having a single character like this as a suffix carrying some
0963b4bd 5415 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5416 to be something like "_N" instead. In the meantime, do not do
5417 the following check. */
5418 /* Protected Object Subprograms */
5419 if (len == 1 && str [0] == 'N')
5420 return 1;
5421#endif
5422
5423 /* _E[0-9]+[bs]$ */
5424 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5425 {
5426 matching = str + 3;
5427 while (isdigit (matching[0]))
5428 matching += 1;
5429 if ((matching[0] == 'b' || matching[0] == 's')
5430 && matching [1] == '\0')
5431 return 1;
5432 }
5433
4c4b4cd2
PH
5434 /* ??? We should not modify STR directly, as we are doing below. This
5435 is fine in this case, but may become problematic later if we find
5436 that this alternative did not work, and want to try matching
5437 another one from the begining of STR. Since we modified it, we
5438 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5439 if (str[0] == 'X')
5440 {
5441 str += 1;
d2e4a39e 5442 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
5443 {
5444 if (str[0] != 'n' && str[0] != 'b')
5445 return 0;
5446 str += 1;
5447 }
14f9c5c9 5448 }
babe1480 5449
14f9c5c9
AS
5450 if (str[0] == '\000')
5451 return 1;
babe1480 5452
d2e4a39e 5453 if (str[0] == '_')
14f9c5c9
AS
5454 {
5455 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 5456 return 0;
d2e4a39e 5457 if (str[2] == '_')
4c4b4cd2 5458 {
61ee279c
PH
5459 if (strcmp (str + 3, "JM") == 0)
5460 return 1;
5461 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5462 the LJM suffix in favor of the JM one. But we will
5463 still accept LJM as a valid suffix for a reasonable
5464 amount of time, just to allow ourselves to debug programs
5465 compiled using an older version of GNAT. */
4c4b4cd2
PH
5466 if (strcmp (str + 3, "LJM") == 0)
5467 return 1;
5468 if (str[3] != 'X')
5469 return 0;
1265e4aa
JB
5470 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5471 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
5472 return 1;
5473 if (str[4] == 'R' && str[5] != 'T')
5474 return 1;
5475 return 0;
5476 }
5477 if (!isdigit (str[2]))
5478 return 0;
5479 for (k = 3; str[k] != '\0'; k += 1)
5480 if (!isdigit (str[k]) && str[k] != '_')
5481 return 0;
14f9c5c9
AS
5482 return 1;
5483 }
4c4b4cd2 5484 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5485 {
4c4b4cd2
PH
5486 for (k = 2; str[k] != '\0'; k += 1)
5487 if (!isdigit (str[k]) && str[k] != '_')
5488 return 0;
14f9c5c9
AS
5489 return 1;
5490 }
5491 return 0;
5492}
d2e4a39e 5493
aeb5907d
JB
5494/* Return non-zero if the string starting at NAME and ending before
5495 NAME_END contains no capital letters. */
529cad9c
PH
5496
5497static int
5498is_valid_name_for_wild_match (const char *name0)
5499{
5500 const char *decoded_name = ada_decode (name0);
5501 int i;
5502
5823c3ef
JB
5503 /* If the decoded name starts with an angle bracket, it means that
5504 NAME0 does not follow the GNAT encoding format. It should then
5505 not be allowed as a possible wild match. */
5506 if (decoded_name[0] == '<')
5507 return 0;
5508
529cad9c
PH
5509 for (i=0; decoded_name[i] != '\0'; i++)
5510 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5511 return 0;
5512
5513 return 1;
5514}
5515
73589123
PH
5516/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5517 that could start a simple name. Assumes that *NAMEP points into
5518 the string beginning at NAME0. */
4c4b4cd2 5519
14f9c5c9 5520static int
73589123 5521advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 5522{
73589123 5523 const char *name = *namep;
5b4ee69b 5524
5823c3ef 5525 while (1)
14f9c5c9 5526 {
aa27d0b3 5527 int t0, t1;
73589123
PH
5528
5529 t0 = *name;
5530 if (t0 == '_')
5531 {
5532 t1 = name[1];
5533 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5534 {
5535 name += 1;
5536 if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5537 break;
5538 else
5539 name += 1;
5540 }
aa27d0b3
JB
5541 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5542 || name[2] == target0))
73589123
PH
5543 {
5544 name += 2;
5545 break;
5546 }
5547 else
5548 return 0;
5549 }
5550 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5551 name += 1;
5552 else
5823c3ef 5553 return 0;
73589123
PH
5554 }
5555
5556 *namep = name;
5557 return 1;
5558}
5559
5560/* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
5561 informational suffixes of NAME (i.e., for which is_name_suffix is
5562 true). Assumes that PATN is a lower-cased Ada simple name. */
5563
5564static int
5565wild_match (const char *name, const char *patn)
5566{
22e048c9 5567 const char *p;
73589123
PH
5568 const char *name0 = name;
5569
5570 while (1)
5571 {
5572 const char *match = name;
5573
5574 if (*name == *patn)
5575 {
5576 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5577 if (*p != *name)
5578 break;
5579 if (*p == '\0' && is_name_suffix (name))
5580 return match != name0 && !is_valid_name_for_wild_match (name0);
5581
5582 if (name[-1] == '_')
5583 name -= 1;
5584 }
5585 if (!advance_wild_match (&name, name0, *patn))
5586 return 1;
96d887e8 5587 }
96d887e8
PH
5588}
5589
40658b94
PH
5590/* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5591 informational suffix. */
5592
c4d840bd
PH
5593static int
5594full_match (const char *sym_name, const char *search_name)
5595{
40658b94 5596 return !match_name (sym_name, search_name, 0);
c4d840bd
PH
5597}
5598
5599
96d887e8
PH
5600/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5601 vector *defn_symbols, updating the list of symbols in OBSTACKP
0963b4bd 5602 (if necessary). If WILD, treat as NAME with a wildcard prefix.
4eeaa230 5603 OBJFILE is the section containing BLOCK. */
96d887e8
PH
5604
5605static void
5606ada_add_block_symbols (struct obstack *obstackp,
76a01679 5607 struct block *block, const char *name,
96d887e8 5608 domain_enum domain, struct objfile *objfile,
2570f2b7 5609 int wild)
96d887e8 5610{
8157b174 5611 struct block_iterator iter;
96d887e8
PH
5612 int name_len = strlen (name);
5613 /* A matching argument symbol, if any. */
5614 struct symbol *arg_sym;
5615 /* Set true when we find a matching non-argument symbol. */
5616 int found_sym;
5617 struct symbol *sym;
5618
5619 arg_sym = NULL;
5620 found_sym = 0;
5621 if (wild)
5622 {
8157b174
TT
5623 for (sym = block_iter_match_first (block, name, wild_match, &iter);
5624 sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
76a01679 5625 {
5eeb2539
AR
5626 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5627 SYMBOL_DOMAIN (sym), domain)
73589123 5628 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
76a01679 5629 {
2a2d4dc3
AS
5630 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5631 continue;
5632 else if (SYMBOL_IS_ARGUMENT (sym))
5633 arg_sym = sym;
5634 else
5635 {
76a01679
JB
5636 found_sym = 1;
5637 add_defn_to_vec (obstackp,
5638 fixup_symbol_section (sym, objfile),
2570f2b7 5639 block);
76a01679
JB
5640 }
5641 }
5642 }
96d887e8
PH
5643 }
5644 else
5645 {
8157b174
TT
5646 for (sym = block_iter_match_first (block, name, full_match, &iter);
5647 sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
76a01679 5648 {
5eeb2539
AR
5649 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5650 SYMBOL_DOMAIN (sym), domain))
76a01679 5651 {
c4d840bd
PH
5652 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5653 {
5654 if (SYMBOL_IS_ARGUMENT (sym))
5655 arg_sym = sym;
5656 else
2a2d4dc3 5657 {
c4d840bd
PH
5658 found_sym = 1;
5659 add_defn_to_vec (obstackp,
5660 fixup_symbol_section (sym, objfile),
5661 block);
2a2d4dc3 5662 }
c4d840bd 5663 }
76a01679
JB
5664 }
5665 }
96d887e8
PH
5666 }
5667
5668 if (!found_sym && arg_sym != NULL)
5669 {
76a01679
JB
5670 add_defn_to_vec (obstackp,
5671 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5672 block);
96d887e8
PH
5673 }
5674
5675 if (!wild)
5676 {
5677 arg_sym = NULL;
5678 found_sym = 0;
5679
5680 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5681 {
5eeb2539
AR
5682 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5683 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
5684 {
5685 int cmp;
5686
5687 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5688 if (cmp == 0)
5689 {
5690 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5691 if (cmp == 0)
5692 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5693 name_len);
5694 }
5695
5696 if (cmp == 0
5697 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5698 {
2a2d4dc3
AS
5699 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5700 {
5701 if (SYMBOL_IS_ARGUMENT (sym))
5702 arg_sym = sym;
5703 else
5704 {
5705 found_sym = 1;
5706 add_defn_to_vec (obstackp,
5707 fixup_symbol_section (sym, objfile),
5708 block);
5709 }
5710 }
76a01679
JB
5711 }
5712 }
76a01679 5713 }
96d887e8
PH
5714
5715 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5716 They aren't parameters, right? */
5717 if (!found_sym && arg_sym != NULL)
5718 {
5719 add_defn_to_vec (obstackp,
76a01679 5720 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5721 block);
96d887e8
PH
5722 }
5723 }
5724}
5725\f
41d27058
JB
5726
5727 /* Symbol Completion */
5728
5729/* If SYM_NAME is a completion candidate for TEXT, return this symbol
5730 name in a form that's appropriate for the completion. The result
5731 does not need to be deallocated, but is only good until the next call.
5732
5733 TEXT_LEN is equal to the length of TEXT.
e701b3c0 5734 Perform a wild match if WILD_MATCH_P is set.
6ea35997 5735 ENCODED_P should be set if TEXT represents the start of a symbol name
41d27058
JB
5736 in its encoded form. */
5737
5738static const char *
5739symbol_completion_match (const char *sym_name,
5740 const char *text, int text_len,
6ea35997 5741 int wild_match_p, int encoded_p)
41d27058 5742{
41d27058
JB
5743 const int verbatim_match = (text[0] == '<');
5744 int match = 0;
5745
5746 if (verbatim_match)
5747 {
5748 /* Strip the leading angle bracket. */
5749 text = text + 1;
5750 text_len--;
5751 }
5752
5753 /* First, test against the fully qualified name of the symbol. */
5754
5755 if (strncmp (sym_name, text, text_len) == 0)
5756 match = 1;
5757
6ea35997 5758 if (match && !encoded_p)
41d27058
JB
5759 {
5760 /* One needed check before declaring a positive match is to verify
5761 that iff we are doing a verbatim match, the decoded version
5762 of the symbol name starts with '<'. Otherwise, this symbol name
5763 is not a suitable completion. */
5764 const char *sym_name_copy = sym_name;
5765 int has_angle_bracket;
5766
5767 sym_name = ada_decode (sym_name);
5768 has_angle_bracket = (sym_name[0] == '<');
5769 match = (has_angle_bracket == verbatim_match);
5770 sym_name = sym_name_copy;
5771 }
5772
5773 if (match && !verbatim_match)
5774 {
5775 /* When doing non-verbatim match, another check that needs to
5776 be done is to verify that the potentially matching symbol name
5777 does not include capital letters, because the ada-mode would
5778 not be able to understand these symbol names without the
5779 angle bracket notation. */
5780 const char *tmp;
5781
5782 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5783 if (*tmp != '\0')
5784 match = 0;
5785 }
5786
5787 /* Second: Try wild matching... */
5788
e701b3c0 5789 if (!match && wild_match_p)
41d27058
JB
5790 {
5791 /* Since we are doing wild matching, this means that TEXT
5792 may represent an unqualified symbol name. We therefore must
5793 also compare TEXT against the unqualified name of the symbol. */
5794 sym_name = ada_unqualified_name (ada_decode (sym_name));
5795
5796 if (strncmp (sym_name, text, text_len) == 0)
5797 match = 1;
5798 }
5799
5800 /* Finally: If we found a mach, prepare the result to return. */
5801
5802 if (!match)
5803 return NULL;
5804
5805 if (verbatim_match)
5806 sym_name = add_angle_brackets (sym_name);
5807
6ea35997 5808 if (!encoded_p)
41d27058
JB
5809 sym_name = ada_decode (sym_name);
5810
5811 return sym_name;
5812}
5813
5814/* A companion function to ada_make_symbol_completion_list().
5815 Check if SYM_NAME represents a symbol which name would be suitable
5816 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5817 it is appended at the end of the given string vector SV.
5818
5819 ORIG_TEXT is the string original string from the user command
5820 that needs to be completed. WORD is the entire command on which
5821 completion should be performed. These two parameters are used to
5822 determine which part of the symbol name should be added to the
5823 completion vector.
c0af1706 5824 if WILD_MATCH_P is set, then wild matching is performed.
cb8e9b97 5825 ENCODED_P should be set if TEXT represents a symbol name in its
41d27058
JB
5826 encoded formed (in which case the completion should also be
5827 encoded). */
5828
5829static void
d6565258 5830symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
5831 const char *sym_name,
5832 const char *text, int text_len,
5833 const char *orig_text, const char *word,
cb8e9b97 5834 int wild_match_p, int encoded_p)
41d27058
JB
5835{
5836 const char *match = symbol_completion_match (sym_name, text, text_len,
cb8e9b97 5837 wild_match_p, encoded_p);
41d27058
JB
5838 char *completion;
5839
5840 if (match == NULL)
5841 return;
5842
5843 /* We found a match, so add the appropriate completion to the given
5844 string vector. */
5845
5846 if (word == orig_text)
5847 {
5848 completion = xmalloc (strlen (match) + 5);
5849 strcpy (completion, match);
5850 }
5851 else if (word > orig_text)
5852 {
5853 /* Return some portion of sym_name. */
5854 completion = xmalloc (strlen (match) + 5);
5855 strcpy (completion, match + (word - orig_text));
5856 }
5857 else
5858 {
5859 /* Return some of ORIG_TEXT plus sym_name. */
5860 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5861 strncpy (completion, word, orig_text - word);
5862 completion[orig_text - word] = '\0';
5863 strcat (completion, match);
5864 }
5865
d6565258 5866 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
5867}
5868
ccefe4c4 5869/* An object of this type is passed as the user_data argument to the
7b08b9eb 5870 expand_partial_symbol_names method. */
ccefe4c4
TT
5871struct add_partial_datum
5872{
5873 VEC(char_ptr) **completions;
6f937416 5874 const char *text;
ccefe4c4 5875 int text_len;
6f937416
PA
5876 const char *text0;
5877 const char *word;
ccefe4c4
TT
5878 int wild_match;
5879 int encoded;
5880};
5881
7b08b9eb
JK
5882/* A callback for expand_partial_symbol_names. */
5883static int
e078317b 5884ada_expand_partial_symbol_name (const char *name, void *user_data)
ccefe4c4
TT
5885{
5886 struct add_partial_datum *data = user_data;
7b08b9eb
JK
5887
5888 return symbol_completion_match (name, data->text, data->text_len,
5889 data->wild_match, data->encoded) != NULL;
ccefe4c4
TT
5890}
5891
49c4e619
TT
5892/* Return a list of possible symbol names completing TEXT0. WORD is
5893 the entire command on which completion is made. */
41d27058 5894
49c4e619 5895static VEC (char_ptr) *
6f937416
PA
5896ada_make_symbol_completion_list (const char *text0, const char *word,
5897 enum type_code code)
41d27058
JB
5898{
5899 char *text;
5900 int text_len;
b1ed564a
JB
5901 int wild_match_p;
5902 int encoded_p;
2ba95b9b 5903 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058
JB
5904 struct symbol *sym;
5905 struct symtab *s;
41d27058
JB
5906 struct minimal_symbol *msymbol;
5907 struct objfile *objfile;
5908 struct block *b, *surrounding_static_block = 0;
5909 int i;
8157b174 5910 struct block_iterator iter;
b8fea896 5911 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
41d27058 5912
2f68a895
TT
5913 gdb_assert (code == TYPE_CODE_UNDEF);
5914
41d27058
JB
5915 if (text0[0] == '<')
5916 {
5917 text = xstrdup (text0);
5918 make_cleanup (xfree, text);
5919 text_len = strlen (text);
b1ed564a
JB
5920 wild_match_p = 0;
5921 encoded_p = 1;
41d27058
JB
5922 }
5923 else
5924 {
5925 text = xstrdup (ada_encode (text0));
5926 make_cleanup (xfree, text);
5927 text_len = strlen (text);
5928 for (i = 0; i < text_len; i++)
5929 text[i] = tolower (text[i]);
5930
b1ed564a 5931 encoded_p = (strstr (text0, "__") != NULL);
41d27058
JB
5932 /* If the name contains a ".", then the user is entering a fully
5933 qualified entity name, and the match must not be done in wild
5934 mode. Similarly, if the user wants to complete what looks like
5935 an encoded name, the match must not be done in wild mode. */
b1ed564a 5936 wild_match_p = (strchr (text0, '.') == NULL && !encoded_p);
41d27058
JB
5937 }
5938
5939 /* First, look at the partial symtab symbols. */
41d27058 5940 {
ccefe4c4
TT
5941 struct add_partial_datum data;
5942
5943 data.completions = &completions;
5944 data.text = text;
5945 data.text_len = text_len;
5946 data.text0 = text0;
5947 data.word = word;
b1ed564a
JB
5948 data.wild_match = wild_match_p;
5949 data.encoded = encoded_p;
7b08b9eb 5950 expand_partial_symbol_names (ada_expand_partial_symbol_name, &data);
41d27058
JB
5951 }
5952
5953 /* At this point scan through the misc symbol vectors and add each
5954 symbol you find to the list. Eventually we want to ignore
5955 anything that isn't a text symbol (everything else will be
5956 handled by the psymtab code above). */
5957
5958 ALL_MSYMBOLS (objfile, msymbol)
5959 {
5960 QUIT;
d6565258 5961 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
b1ed564a
JB
5962 text, text_len, text0, word, wild_match_p,
5963 encoded_p);
41d27058
JB
5964 }
5965
5966 /* Search upwards from currently selected frame (so that we can
5967 complete on local vars. */
5968
5969 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5970 {
5971 if (!BLOCK_SUPERBLOCK (b))
5972 surrounding_static_block = b; /* For elmin of dups */
5973
5974 ALL_BLOCK_SYMBOLS (b, iter, sym)
5975 {
d6565258 5976 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 5977 text, text_len, text0, word,
b1ed564a 5978 wild_match_p, encoded_p);
41d27058
JB
5979 }
5980 }
5981
5982 /* Go through the symtabs and check the externs and statics for
5983 symbols which match. */
5984
5985 ALL_SYMTABS (objfile, s)
5986 {
5987 QUIT;
5988 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5989 ALL_BLOCK_SYMBOLS (b, iter, sym)
5990 {
d6565258 5991 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 5992 text, text_len, text0, word,
b1ed564a 5993 wild_match_p, encoded_p);
41d27058
JB
5994 }
5995 }
5996
5997 ALL_SYMTABS (objfile, s)
5998 {
5999 QUIT;
6000 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
6001 /* Don't do this block twice. */
6002 if (b == surrounding_static_block)
6003 continue;
6004 ALL_BLOCK_SYMBOLS (b, iter, sym)
6005 {
d6565258 6006 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058 6007 text, text_len, text0, word,
b1ed564a 6008 wild_match_p, encoded_p);
41d27058
JB
6009 }
6010 }
6011
b8fea896 6012 do_cleanups (old_chain);
49c4e619 6013 return completions;
41d27058
JB
6014}
6015
963a6417 6016 /* Field Access */
96d887e8 6017
73fb9985
JB
6018/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6019 for tagged types. */
6020
6021static int
6022ada_is_dispatch_table_ptr_type (struct type *type)
6023{
0d5cff50 6024 const char *name;
73fb9985
JB
6025
6026 if (TYPE_CODE (type) != TYPE_CODE_PTR)
6027 return 0;
6028
6029 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
6030 if (name == NULL)
6031 return 0;
6032
6033 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6034}
6035
ac4a2da4
JG
6036/* Return non-zero if TYPE is an interface tag. */
6037
6038static int
6039ada_is_interface_tag (struct type *type)
6040{
6041 const char *name = TYPE_NAME (type);
6042
6043 if (name == NULL)
6044 return 0;
6045
6046 return (strcmp (name, "ada__tags__interface_tag") == 0);
6047}
6048
963a6417
PH
6049/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6050 to be invisible to users. */
96d887e8 6051
963a6417
PH
6052int
6053ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6054{
963a6417
PH
6055 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
6056 return 1;
ffde82bf 6057
73fb9985
JB
6058 /* Check the name of that field. */
6059 {
6060 const char *name = TYPE_FIELD_NAME (type, field_num);
6061
6062 /* Anonymous field names should not be printed.
6063 brobecker/2007-02-20: I don't think this can actually happen
6064 but we don't want to print the value of annonymous fields anyway. */
6065 if (name == NULL)
6066 return 1;
6067
ffde82bf
JB
6068 /* Normally, fields whose name start with an underscore ("_")
6069 are fields that have been internally generated by the compiler,
6070 and thus should not be printed. The "_parent" field is special,
6071 however: This is a field internally generated by the compiler
6072 for tagged types, and it contains the components inherited from
6073 the parent type. This field should not be printed as is, but
6074 should not be ignored either. */
73fb9985
JB
6075 if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
6076 return 1;
6077 }
6078
ac4a2da4
JG
6079 /* If this is the dispatch table of a tagged type or an interface tag,
6080 then ignore. */
73fb9985 6081 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6082 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6083 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6084 return 1;
6085
6086 /* Not a special field, so it should not be ignored. */
6087 return 0;
963a6417 6088}
96d887e8 6089
963a6417 6090/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6091 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6092
963a6417
PH
6093int
6094ada_is_tagged_type (struct type *type, int refok)
6095{
6096 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
6097}
96d887e8 6098
963a6417 6099/* True iff TYPE represents the type of X'Tag */
96d887e8 6100
963a6417
PH
6101int
6102ada_is_tag_type (struct type *type)
6103{
6104 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
6105 return 0;
6106 else
96d887e8 6107 {
963a6417 6108 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6109
963a6417
PH
6110 return (name != NULL
6111 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6112 }
96d887e8
PH
6113}
6114
963a6417 6115/* The type of the tag on VAL. */
76a01679 6116
963a6417
PH
6117struct type *
6118ada_tag_type (struct value *val)
96d887e8 6119{
df407dfe 6120 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 6121}
96d887e8 6122
b50d69b5
JG
6123/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6124 retired at Ada 05). */
6125
6126static int
6127is_ada95_tag (struct value *tag)
6128{
6129 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6130}
6131
963a6417 6132/* The value of the tag on VAL. */
96d887e8 6133
963a6417
PH
6134struct value *
6135ada_value_tag (struct value *val)
6136{
03ee6b2e 6137 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6138}
6139
963a6417
PH
6140/* The value of the tag on the object of type TYPE whose contents are
6141 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6142 ADDRESS. */
96d887e8 6143
963a6417 6144static struct value *
10a2c479 6145value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6146 const gdb_byte *valaddr,
963a6417 6147 CORE_ADDR address)
96d887e8 6148{
b5385fc0 6149 int tag_byte_offset;
963a6417 6150 struct type *tag_type;
5b4ee69b 6151
963a6417 6152 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6153 NULL, NULL, NULL))
96d887e8 6154 {
fc1a4b47 6155 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6156 ? NULL
6157 : valaddr + tag_byte_offset);
963a6417 6158 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6159
963a6417 6160 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6161 }
963a6417
PH
6162 return NULL;
6163}
96d887e8 6164
963a6417
PH
6165static struct type *
6166type_from_tag (struct value *tag)
6167{
6168 const char *type_name = ada_tag_name (tag);
5b4ee69b 6169
963a6417
PH
6170 if (type_name != NULL)
6171 return ada_find_any_type (ada_encode (type_name));
6172 return NULL;
6173}
96d887e8 6174
b50d69b5
JG
6175/* Given a value OBJ of a tagged type, return a value of this
6176 type at the base address of the object. The base address, as
6177 defined in Ada.Tags, it is the address of the primary tag of
6178 the object, and therefore where the field values of its full
6179 view can be fetched. */
6180
6181struct value *
6182ada_tag_value_at_base_address (struct value *obj)
6183{
6184 volatile struct gdb_exception e;
6185 struct value *val;
6186 LONGEST offset_to_top = 0;
6187 struct type *ptr_type, *obj_type;
6188 struct value *tag;
6189 CORE_ADDR base_address;
6190
6191 obj_type = value_type (obj);
6192
6193 /* It is the responsability of the caller to deref pointers. */
6194
6195 if (TYPE_CODE (obj_type) == TYPE_CODE_PTR
6196 || TYPE_CODE (obj_type) == TYPE_CODE_REF)
6197 return obj;
6198
6199 tag = ada_value_tag (obj);
6200 if (!tag)
6201 return obj;
6202
6203 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6204
6205 if (is_ada95_tag (tag))
6206 return obj;
6207
6208 ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
6209 ptr_type = lookup_pointer_type (ptr_type);
6210 val = value_cast (ptr_type, tag);
6211 if (!val)
6212 return obj;
6213
6214 /* It is perfectly possible that an exception be raised while
6215 trying to determine the base address, just like for the tag;
6216 see ada_tag_name for more details. We do not print the error
6217 message for the same reason. */
6218
6219 TRY_CATCH (e, RETURN_MASK_ERROR)
6220 {
6221 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6222 }
6223
6224 if (e.reason < 0)
6225 return obj;
6226
6227 /* If offset is null, nothing to do. */
6228
6229 if (offset_to_top == 0)
6230 return obj;
6231
6232 /* -1 is a special case in Ada.Tags; however, what should be done
6233 is not quite clear from the documentation. So do nothing for
6234 now. */
6235
6236 if (offset_to_top == -1)
6237 return obj;
6238
6239 base_address = value_address (obj) - offset_to_top;
6240 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6241
6242 /* Make sure that we have a proper tag at the new address.
6243 Otherwise, offset_to_top is bogus (which can happen when
6244 the object is not initialized yet). */
6245
6246 if (!tag)
6247 return obj;
6248
6249 obj_type = type_from_tag (tag);
6250
6251 if (!obj_type)
6252 return obj;
6253
6254 return value_from_contents_and_address (obj_type, NULL, base_address);
6255}
6256
1b611343
JB
6257/* Return the "ada__tags__type_specific_data" type. */
6258
6259static struct type *
6260ada_get_tsd_type (struct inferior *inf)
963a6417 6261{
1b611343 6262 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6263
1b611343
JB
6264 if (data->tsd_type == 0)
6265 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6266 return data->tsd_type;
6267}
529cad9c 6268
1b611343
JB
6269/* Return the TSD (type-specific data) associated to the given TAG.
6270 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6271
1b611343 6272 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6273
1b611343
JB
6274static struct value *
6275ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6276{
4c4b4cd2 6277 struct value *val;
1b611343 6278 struct type *type;
5b4ee69b 6279
1b611343
JB
6280 /* First option: The TSD is simply stored as a field of our TAG.
6281 Only older versions of GNAT would use this format, but we have
6282 to test it first, because there are no visible markers for
6283 the current approach except the absence of that field. */
529cad9c 6284
1b611343
JB
6285 val = ada_value_struct_elt (tag, "tsd", 1);
6286 if (val)
6287 return val;
e802dbe0 6288
1b611343
JB
6289 /* Try the second representation for the dispatch table (in which
6290 there is no explicit 'tsd' field in the referent of the tag pointer,
6291 and instead the tsd pointer is stored just before the dispatch
6292 table. */
e802dbe0 6293
1b611343
JB
6294 type = ada_get_tsd_type (current_inferior());
6295 if (type == NULL)
6296 return NULL;
6297 type = lookup_pointer_type (lookup_pointer_type (type));
6298 val = value_cast (type, tag);
6299 if (val == NULL)
6300 return NULL;
6301 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6302}
6303
1b611343
JB
6304/* Given the TSD of a tag (type-specific data), return a string
6305 containing the name of the associated type.
6306
6307 The returned value is good until the next call. May return NULL
6308 if we are unable to determine the tag name. */
6309
6310static char *
6311ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6312{
529cad9c
PH
6313 static char name[1024];
6314 char *p;
1b611343 6315 struct value *val;
529cad9c 6316
1b611343 6317 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6318 if (val == NULL)
1b611343 6319 return NULL;
4c4b4cd2
PH
6320 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6321 for (p = name; *p != '\0'; p += 1)
6322 if (isalpha (*p))
6323 *p = tolower (*p);
1b611343 6324 return name;
4c4b4cd2
PH
6325}
6326
6327/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6328 a C string.
6329
6330 Return NULL if the TAG is not an Ada tag, or if we were unable to
6331 determine the name of that tag. The result is good until the next
6332 call. */
4c4b4cd2
PH
6333
6334const char *
6335ada_tag_name (struct value *tag)
6336{
1b611343
JB
6337 volatile struct gdb_exception e;
6338 char *name = NULL;
5b4ee69b 6339
df407dfe 6340 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6341 return NULL;
1b611343
JB
6342
6343 /* It is perfectly possible that an exception be raised while trying
6344 to determine the TAG's name, even under normal circumstances:
6345 The associated variable may be uninitialized or corrupted, for
6346 instance. We do not let any exception propagate past this point.
6347 instead we return NULL.
6348
6349 We also do not print the error message either (which often is very
6350 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6351 the caller print a more meaningful message if necessary. */
6352 TRY_CATCH (e, RETURN_MASK_ERROR)
6353 {
6354 struct value *tsd = ada_get_tsd_from_tag (tag);
6355
6356 if (tsd != NULL)
6357 name = ada_tag_name_from_tsd (tsd);
6358 }
6359
6360 return name;
4c4b4cd2
PH
6361}
6362
6363/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6364
d2e4a39e 6365struct type *
ebf56fd3 6366ada_parent_type (struct type *type)
14f9c5c9
AS
6367{
6368 int i;
6369
61ee279c 6370 type = ada_check_typedef (type);
14f9c5c9
AS
6371
6372 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6373 return NULL;
6374
6375 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6376 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6377 {
6378 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6379
6380 /* If the _parent field is a pointer, then dereference it. */
6381 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6382 parent_type = TYPE_TARGET_TYPE (parent_type);
6383 /* If there is a parallel XVS type, get the actual base type. */
6384 parent_type = ada_get_base_type (parent_type);
6385
6386 return ada_check_typedef (parent_type);
6387 }
14f9c5c9
AS
6388
6389 return NULL;
6390}
6391
4c4b4cd2
PH
6392/* True iff field number FIELD_NUM of structure type TYPE contains the
6393 parent-type (inherited) fields of a derived type. Assumes TYPE is
6394 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6395
6396int
ebf56fd3 6397ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6398{
61ee279c 6399 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6400
4c4b4cd2
PH
6401 return (name != NULL
6402 && (strncmp (name, "PARENT", 6) == 0
6403 || strncmp (name, "_parent", 7) == 0));
14f9c5c9
AS
6404}
6405
4c4b4cd2 6406/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6407 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6408 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6409 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6410 structures. */
14f9c5c9
AS
6411
6412int
ebf56fd3 6413ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6414{
d2e4a39e 6415 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6416
d2e4a39e 6417 return (name != NULL
4c4b4cd2
PH
6418 && (strncmp (name, "PARENT", 6) == 0
6419 || strcmp (name, "REP") == 0
6420 || strncmp (name, "_parent", 7) == 0
6421 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6422}
6423
4c4b4cd2
PH
6424/* True iff field number FIELD_NUM of structure or union type TYPE
6425 is a variant wrapper. Assumes TYPE is a structure type with at least
6426 FIELD_NUM+1 fields. */
14f9c5c9
AS
6427
6428int
ebf56fd3 6429ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6430{
d2e4a39e 6431 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6432
14f9c5c9 6433 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 6434 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
6435 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6436 == TYPE_CODE_UNION)));
14f9c5c9
AS
6437}
6438
6439/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6440 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6441 returns the type of the controlling discriminant for the variant.
6442 May return NULL if the type could not be found. */
14f9c5c9 6443
d2e4a39e 6444struct type *
ebf56fd3 6445ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6446{
d2e4a39e 6447 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6448
7c964f07 6449 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
6450}
6451
4c4b4cd2 6452/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6453 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6454 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
6455
6456int
ebf56fd3 6457ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6458{
d2e4a39e 6459 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6460
14f9c5c9
AS
6461 return (name != NULL && name[0] == 'O');
6462}
6463
6464/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6465 returns the name of the discriminant controlling the variant.
6466 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6467
d2e4a39e 6468char *
ebf56fd3 6469ada_variant_discrim_name (struct type *type0)
14f9c5c9 6470{
d2e4a39e 6471 static char *result = NULL;
14f9c5c9 6472 static size_t result_len = 0;
d2e4a39e
AS
6473 struct type *type;
6474 const char *name;
6475 const char *discrim_end;
6476 const char *discrim_start;
14f9c5c9
AS
6477
6478 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6479 type = TYPE_TARGET_TYPE (type0);
6480 else
6481 type = type0;
6482
6483 name = ada_type_name (type);
6484
6485 if (name == NULL || name[0] == '\000')
6486 return "";
6487
6488 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6489 discrim_end -= 1)
6490 {
4c4b4cd2
PH
6491 if (strncmp (discrim_end, "___XVN", 6) == 0)
6492 break;
14f9c5c9
AS
6493 }
6494 if (discrim_end == name)
6495 return "";
6496
d2e4a39e 6497 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6498 discrim_start -= 1)
6499 {
d2e4a39e 6500 if (discrim_start == name + 1)
4c4b4cd2 6501 return "";
76a01679 6502 if ((discrim_start > name + 3
4c4b4cd2
PH
6503 && strncmp (discrim_start - 3, "___", 3) == 0)
6504 || discrim_start[-1] == '.')
6505 break;
14f9c5c9
AS
6506 }
6507
6508 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6509 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 6510 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
6511 return result;
6512}
6513
4c4b4cd2
PH
6514/* Scan STR for a subtype-encoded number, beginning at position K.
6515 Put the position of the character just past the number scanned in
6516 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6517 Return 1 if there was a valid number at the given position, and 0
6518 otherwise. A "subtype-encoded" number consists of the absolute value
6519 in decimal, followed by the letter 'm' to indicate a negative number.
6520 Assumes 0m does not occur. */
14f9c5c9
AS
6521
6522int
d2e4a39e 6523ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6524{
6525 ULONGEST RU;
6526
d2e4a39e 6527 if (!isdigit (str[k]))
14f9c5c9
AS
6528 return 0;
6529
4c4b4cd2 6530 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6531 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6532 LONGEST. */
14f9c5c9
AS
6533 RU = 0;
6534 while (isdigit (str[k]))
6535 {
d2e4a39e 6536 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6537 k += 1;
6538 }
6539
d2e4a39e 6540 if (str[k] == 'm')
14f9c5c9
AS
6541 {
6542 if (R != NULL)
4c4b4cd2 6543 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6544 k += 1;
6545 }
6546 else if (R != NULL)
6547 *R = (LONGEST) RU;
6548
4c4b4cd2 6549 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6550 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6551 number representable as a LONGEST (although either would probably work
6552 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6553 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6554
6555 if (new_k != NULL)
6556 *new_k = k;
6557 return 1;
6558}
6559
4c4b4cd2
PH
6560/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6561 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6562 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6563
d2e4a39e 6564int
ebf56fd3 6565ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6566{
d2e4a39e 6567 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6568 int p;
6569
6570 p = 0;
6571 while (1)
6572 {
d2e4a39e 6573 switch (name[p])
4c4b4cd2
PH
6574 {
6575 case '\0':
6576 return 0;
6577 case 'S':
6578 {
6579 LONGEST W;
5b4ee69b 6580
4c4b4cd2
PH
6581 if (!ada_scan_number (name, p + 1, &W, &p))
6582 return 0;
6583 if (val == W)
6584 return 1;
6585 break;
6586 }
6587 case 'R':
6588 {
6589 LONGEST L, U;
5b4ee69b 6590
4c4b4cd2
PH
6591 if (!ada_scan_number (name, p + 1, &L, &p)
6592 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6593 return 0;
6594 if (val >= L && val <= U)
6595 return 1;
6596 break;
6597 }
6598 case 'O':
6599 return 1;
6600 default:
6601 return 0;
6602 }
6603 }
6604}
6605
0963b4bd 6606/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6607
6608/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6609 ARG_TYPE, extract and return the value of one of its (non-static)
6610 fields. FIELDNO says which field. Differs from value_primitive_field
6611 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6612
4c4b4cd2 6613static struct value *
d2e4a39e 6614ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 6615 struct type *arg_type)
14f9c5c9 6616{
14f9c5c9
AS
6617 struct type *type;
6618
61ee279c 6619 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
6620 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6621
4c4b4cd2 6622 /* Handle packed fields. */
14f9c5c9
AS
6623
6624 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6625 {
6626 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6627 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6628
0fd88904 6629 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
6630 offset + bit_pos / 8,
6631 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6632 }
6633 else
6634 return value_primitive_field (arg1, offset, fieldno, arg_type);
6635}
6636
52ce6436
PH
6637/* Find field with name NAME in object of type TYPE. If found,
6638 set the following for each argument that is non-null:
6639 - *FIELD_TYPE_P to the field's type;
6640 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6641 an object of that type;
6642 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6643 - *BIT_SIZE_P to its size in bits if the field is packed, and
6644 0 otherwise;
6645 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6646 fields up to but not including the desired field, or by the total
6647 number of fields if not found. A NULL value of NAME never
6648 matches; the function just counts visible fields in this case.
6649
0963b4bd 6650 Returns 1 if found, 0 otherwise. */
52ce6436 6651
4c4b4cd2 6652static int
0d5cff50 6653find_struct_field (const char *name, struct type *type, int offset,
76a01679 6654 struct type **field_type_p,
52ce6436
PH
6655 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6656 int *index_p)
4c4b4cd2
PH
6657{
6658 int i;
6659
61ee279c 6660 type = ada_check_typedef (type);
76a01679 6661
52ce6436
PH
6662 if (field_type_p != NULL)
6663 *field_type_p = NULL;
6664 if (byte_offset_p != NULL)
d5d6fca5 6665 *byte_offset_p = 0;
52ce6436
PH
6666 if (bit_offset_p != NULL)
6667 *bit_offset_p = 0;
6668 if (bit_size_p != NULL)
6669 *bit_size_p = 0;
6670
6671 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
6672 {
6673 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6674 int fld_offset = offset + bit_pos / 8;
0d5cff50 6675 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6676
4c4b4cd2
PH
6677 if (t_field_name == NULL)
6678 continue;
6679
52ce6436 6680 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
6681 {
6682 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6683
52ce6436
PH
6684 if (field_type_p != NULL)
6685 *field_type_p = TYPE_FIELD_TYPE (type, i);
6686 if (byte_offset_p != NULL)
6687 *byte_offset_p = fld_offset;
6688 if (bit_offset_p != NULL)
6689 *bit_offset_p = bit_pos % 8;
6690 if (bit_size_p != NULL)
6691 *bit_size_p = bit_size;
76a01679
JB
6692 return 1;
6693 }
4c4b4cd2
PH
6694 else if (ada_is_wrapper_field (type, i))
6695 {
52ce6436
PH
6696 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6697 field_type_p, byte_offset_p, bit_offset_p,
6698 bit_size_p, index_p))
76a01679
JB
6699 return 1;
6700 }
4c4b4cd2
PH
6701 else if (ada_is_variant_part (type, i))
6702 {
52ce6436
PH
6703 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6704 fixed type?? */
4c4b4cd2 6705 int j;
52ce6436
PH
6706 struct type *field_type
6707 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 6708
52ce6436 6709 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 6710 {
76a01679
JB
6711 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6712 fld_offset
6713 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6714 field_type_p, byte_offset_p,
52ce6436 6715 bit_offset_p, bit_size_p, index_p))
76a01679 6716 return 1;
4c4b4cd2
PH
6717 }
6718 }
52ce6436
PH
6719 else if (index_p != NULL)
6720 *index_p += 1;
4c4b4cd2
PH
6721 }
6722 return 0;
6723}
6724
0963b4bd 6725/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 6726
52ce6436
PH
6727static int
6728num_visible_fields (struct type *type)
6729{
6730 int n;
5b4ee69b 6731
52ce6436
PH
6732 n = 0;
6733 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6734 return n;
6735}
14f9c5c9 6736
4c4b4cd2 6737/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
6738 and search in it assuming it has (class) type TYPE.
6739 If found, return value, else return NULL.
6740
4c4b4cd2 6741 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 6742
4c4b4cd2 6743static struct value *
d2e4a39e 6744ada_search_struct_field (char *name, struct value *arg, int offset,
4c4b4cd2 6745 struct type *type)
14f9c5c9
AS
6746{
6747 int i;
14f9c5c9 6748
5b4ee69b 6749 type = ada_check_typedef (type);
52ce6436 6750 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9 6751 {
0d5cff50 6752 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
6753
6754 if (t_field_name == NULL)
4c4b4cd2 6755 continue;
14f9c5c9
AS
6756
6757 else if (field_name_match (t_field_name, name))
4c4b4cd2 6758 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
6759
6760 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 6761 {
0963b4bd 6762 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
6763 ada_search_struct_field (name, arg,
6764 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6765 TYPE_FIELD_TYPE (type, i));
5b4ee69b 6766
4c4b4cd2
PH
6767 if (v != NULL)
6768 return v;
6769 }
14f9c5c9
AS
6770
6771 else if (ada_is_variant_part (type, i))
4c4b4cd2 6772 {
0963b4bd 6773 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 6774 int j;
5b4ee69b
MS
6775 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6776 i));
4c4b4cd2
PH
6777 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6778
52ce6436 6779 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 6780 {
0963b4bd
MS
6781 struct value *v = ada_search_struct_field /* Force line
6782 break. */
06d5cf63
JB
6783 (name, arg,
6784 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6785 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 6786
4c4b4cd2
PH
6787 if (v != NULL)
6788 return v;
6789 }
6790 }
14f9c5c9
AS
6791 }
6792 return NULL;
6793}
d2e4a39e 6794
52ce6436
PH
6795static struct value *ada_index_struct_field_1 (int *, struct value *,
6796 int, struct type *);
6797
6798
6799/* Return field #INDEX in ARG, where the index is that returned by
6800 * find_struct_field through its INDEX_P argument. Adjust the address
6801 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 6802 * If found, return value, else return NULL. */
52ce6436
PH
6803
6804static struct value *
6805ada_index_struct_field (int index, struct value *arg, int offset,
6806 struct type *type)
6807{
6808 return ada_index_struct_field_1 (&index, arg, offset, type);
6809}
6810
6811
6812/* Auxiliary function for ada_index_struct_field. Like
6813 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 6814 * *INDEX_P. */
52ce6436
PH
6815
6816static struct value *
6817ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6818 struct type *type)
6819{
6820 int i;
6821 type = ada_check_typedef (type);
6822
6823 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6824 {
6825 if (TYPE_FIELD_NAME (type, i) == NULL)
6826 continue;
6827 else if (ada_is_wrapper_field (type, i))
6828 {
0963b4bd 6829 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
6830 ada_index_struct_field_1 (index_p, arg,
6831 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6832 TYPE_FIELD_TYPE (type, i));
5b4ee69b 6833
52ce6436
PH
6834 if (v != NULL)
6835 return v;
6836 }
6837
6838 else if (ada_is_variant_part (type, i))
6839 {
6840 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 6841 find_struct_field. */
52ce6436
PH
6842 error (_("Cannot assign this kind of variant record"));
6843 }
6844 else if (*index_p == 0)
6845 return ada_value_primitive_field (arg, offset, i, type);
6846 else
6847 *index_p -= 1;
6848 }
6849 return NULL;
6850}
6851
4c4b4cd2
PH
6852/* Given ARG, a value of type (pointer or reference to a)*
6853 structure/union, extract the component named NAME from the ultimate
6854 target structure/union and return it as a value with its
f5938064 6855 appropriate type.
14f9c5c9 6856
4c4b4cd2
PH
6857 The routine searches for NAME among all members of the structure itself
6858 and (recursively) among all members of any wrapper members
14f9c5c9
AS
6859 (e.g., '_parent').
6860
03ee6b2e
PH
6861 If NO_ERR, then simply return NULL in case of error, rather than
6862 calling error. */
14f9c5c9 6863
d2e4a39e 6864struct value *
03ee6b2e 6865ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 6866{
4c4b4cd2 6867 struct type *t, *t1;
d2e4a39e 6868 struct value *v;
14f9c5c9 6869
4c4b4cd2 6870 v = NULL;
df407dfe 6871 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
6872 if (TYPE_CODE (t) == TYPE_CODE_REF)
6873 {
6874 t1 = TYPE_TARGET_TYPE (t);
6875 if (t1 == NULL)
03ee6b2e 6876 goto BadValue;
61ee279c 6877 t1 = ada_check_typedef (t1);
4c4b4cd2 6878 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 6879 {
994b9211 6880 arg = coerce_ref (arg);
76a01679
JB
6881 t = t1;
6882 }
4c4b4cd2 6883 }
14f9c5c9 6884
4c4b4cd2
PH
6885 while (TYPE_CODE (t) == TYPE_CODE_PTR)
6886 {
6887 t1 = TYPE_TARGET_TYPE (t);
6888 if (t1 == NULL)
03ee6b2e 6889 goto BadValue;
61ee279c 6890 t1 = ada_check_typedef (t1);
4c4b4cd2 6891 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
6892 {
6893 arg = value_ind (arg);
6894 t = t1;
6895 }
4c4b4cd2 6896 else
76a01679 6897 break;
4c4b4cd2 6898 }
14f9c5c9 6899
4c4b4cd2 6900 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 6901 goto BadValue;
14f9c5c9 6902
4c4b4cd2
PH
6903 if (t1 == t)
6904 v = ada_search_struct_field (name, arg, 0, t);
6905 else
6906 {
6907 int bit_offset, bit_size, byte_offset;
6908 struct type *field_type;
6909 CORE_ADDR address;
6910
76a01679 6911 if (TYPE_CODE (t) == TYPE_CODE_PTR)
b50d69b5 6912 address = value_address (ada_value_ind (arg));
4c4b4cd2 6913 else
b50d69b5 6914 address = value_address (ada_coerce_ref (arg));
14f9c5c9 6915
1ed6ede0 6916 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
6917 if (find_struct_field (name, t1, 0,
6918 &field_type, &byte_offset, &bit_offset,
52ce6436 6919 &bit_size, NULL))
76a01679
JB
6920 {
6921 if (bit_size != 0)
6922 {
714e53ab
PH
6923 if (TYPE_CODE (t) == TYPE_CODE_REF)
6924 arg = ada_coerce_ref (arg);
6925 else
6926 arg = ada_value_ind (arg);
76a01679
JB
6927 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6928 bit_offset, bit_size,
6929 field_type);
6930 }
6931 else
f5938064 6932 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
6933 }
6934 }
6935
03ee6b2e
PH
6936 if (v != NULL || no_err)
6937 return v;
6938 else
323e0a4a 6939 error (_("There is no member named %s."), name);
14f9c5c9 6940
03ee6b2e
PH
6941 BadValue:
6942 if (no_err)
6943 return NULL;
6944 else
0963b4bd
MS
6945 error (_("Attempt to extract a component of "
6946 "a value that is not a record."));
14f9c5c9
AS
6947}
6948
6949/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
6950 If DISPP is non-null, add its byte displacement from the beginning of a
6951 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
6952 work for packed fields).
6953
6954 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 6955 followed by "___".
14f9c5c9 6956
0963b4bd 6957 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
6958 be a (pointer or reference)+ to a struct or union, and the
6959 ultimate target type will be searched.
14f9c5c9
AS
6960
6961 Looks recursively into variant clauses and parent types.
6962
4c4b4cd2
PH
6963 If NOERR is nonzero, return NULL if NAME is not suitably defined or
6964 TYPE is not a type of the right kind. */
14f9c5c9 6965
4c4b4cd2 6966static struct type *
76a01679
JB
6967ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6968 int noerr, int *dispp)
14f9c5c9
AS
6969{
6970 int i;
6971
6972 if (name == NULL)
6973 goto BadName;
6974
76a01679 6975 if (refok && type != NULL)
4c4b4cd2
PH
6976 while (1)
6977 {
61ee279c 6978 type = ada_check_typedef (type);
76a01679
JB
6979 if (TYPE_CODE (type) != TYPE_CODE_PTR
6980 && TYPE_CODE (type) != TYPE_CODE_REF)
6981 break;
6982 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 6983 }
14f9c5c9 6984
76a01679 6985 if (type == NULL
1265e4aa
JB
6986 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6987 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 6988 {
4c4b4cd2 6989 if (noerr)
76a01679 6990 return NULL;
4c4b4cd2 6991 else
76a01679
JB
6992 {
6993 target_terminal_ours ();
6994 gdb_flush (gdb_stdout);
323e0a4a
AC
6995 if (type == NULL)
6996 error (_("Type (null) is not a structure or union type"));
6997 else
6998 {
6999 /* XXX: type_sprint */
7000 fprintf_unfiltered (gdb_stderr, _("Type "));
7001 type_print (type, "", gdb_stderr, -1);
7002 error (_(" is not a structure or union type"));
7003 }
76a01679 7004 }
14f9c5c9
AS
7005 }
7006
7007 type = to_static_fixed_type (type);
7008
7009 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
7010 {
0d5cff50 7011 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7012 struct type *t;
7013 int disp;
d2e4a39e 7014
14f9c5c9 7015 if (t_field_name == NULL)
4c4b4cd2 7016 continue;
14f9c5c9
AS
7017
7018 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
7019 {
7020 if (dispp != NULL)
7021 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
61ee279c 7022 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7023 }
14f9c5c9
AS
7024
7025 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
7026 {
7027 disp = 0;
7028 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
7029 0, 1, &disp);
7030 if (t != NULL)
7031 {
7032 if (dispp != NULL)
7033 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7034 return t;
7035 }
7036 }
14f9c5c9
AS
7037
7038 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7039 {
7040 int j;
5b4ee69b
MS
7041 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7042 i));
4c4b4cd2
PH
7043
7044 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
7045 {
b1f33ddd
JB
7046 /* FIXME pnh 2008/01/26: We check for a field that is
7047 NOT wrapped in a struct, since the compiler sometimes
7048 generates these for unchecked variant types. Revisit
0963b4bd 7049 if the compiler changes this practice. */
0d5cff50 7050 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 7051 disp = 0;
b1f33ddd
JB
7052 if (v_field_name != NULL
7053 && field_name_match (v_field_name, name))
7054 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
7055 else
0963b4bd
MS
7056 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7057 j),
b1f33ddd
JB
7058 name, 0, 1, &disp);
7059
4c4b4cd2
PH
7060 if (t != NULL)
7061 {
7062 if (dispp != NULL)
7063 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
7064 return t;
7065 }
7066 }
7067 }
14f9c5c9
AS
7068
7069 }
7070
7071BadName:
d2e4a39e 7072 if (!noerr)
14f9c5c9
AS
7073 {
7074 target_terminal_ours ();
7075 gdb_flush (gdb_stdout);
323e0a4a
AC
7076 if (name == NULL)
7077 {
7078 /* XXX: type_sprint */
7079 fprintf_unfiltered (gdb_stderr, _("Type "));
7080 type_print (type, "", gdb_stderr, -1);
7081 error (_(" has no component named <null>"));
7082 }
7083 else
7084 {
7085 /* XXX: type_sprint */
7086 fprintf_unfiltered (gdb_stderr, _("Type "));
7087 type_print (type, "", gdb_stderr, -1);
7088 error (_(" has no component named %s"), name);
7089 }
14f9c5c9
AS
7090 }
7091
7092 return NULL;
7093}
7094
b1f33ddd
JB
7095/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7096 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7097 represents an unchecked union (that is, the variant part of a
0963b4bd 7098 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7099
7100static int
7101is_unchecked_variant (struct type *var_type, struct type *outer_type)
7102{
7103 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7104
b1f33ddd
JB
7105 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
7106 == NULL);
7107}
7108
7109
14f9c5c9
AS
7110/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7111 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
7112 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
7113 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7114
d2e4a39e 7115int
ebf56fd3 7116ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 7117 const gdb_byte *outer_valaddr)
14f9c5c9
AS
7118{
7119 int others_clause;
7120 int i;
d2e4a39e 7121 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
7122 struct value *outer;
7123 struct value *discrim;
14f9c5c9
AS
7124 LONGEST discrim_val;
7125
0c281816
JB
7126 outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
7127 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7128 if (discrim == NULL)
14f9c5c9 7129 return -1;
0c281816 7130 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7131
7132 others_clause = -1;
7133 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
7134 {
7135 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7136 others_clause = i;
14f9c5c9 7137 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7138 return i;
14f9c5c9
AS
7139 }
7140
7141 return others_clause;
7142}
d2e4a39e 7143\f
14f9c5c9
AS
7144
7145
4c4b4cd2 7146 /* Dynamic-Sized Records */
14f9c5c9
AS
7147
7148/* Strategy: The type ostensibly attached to a value with dynamic size
7149 (i.e., a size that is not statically recorded in the debugging
7150 data) does not accurately reflect the size or layout of the value.
7151 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7152 conventional types that are constructed on the fly. */
14f9c5c9
AS
7153
7154/* There is a subtle and tricky problem here. In general, we cannot
7155 determine the size of dynamic records without its data. However,
7156 the 'struct value' data structure, which GDB uses to represent
7157 quantities in the inferior process (the target), requires the size
7158 of the type at the time of its allocation in order to reserve space
7159 for GDB's internal copy of the data. That's why the
7160 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7161 rather than struct value*s.
14f9c5c9
AS
7162
7163 However, GDB's internal history variables ($1, $2, etc.) are
7164 struct value*s containing internal copies of the data that are not, in
7165 general, the same as the data at their corresponding addresses in
7166 the target. Fortunately, the types we give to these values are all
7167 conventional, fixed-size types (as per the strategy described
7168 above), so that we don't usually have to perform the
7169 'to_fixed_xxx_type' conversions to look at their values.
7170 Unfortunately, there is one exception: if one of the internal
7171 history variables is an array whose elements are unconstrained
7172 records, then we will need to create distinct fixed types for each
7173 element selected. */
7174
7175/* The upshot of all of this is that many routines take a (type, host
7176 address, target address) triple as arguments to represent a value.
7177 The host address, if non-null, is supposed to contain an internal
7178 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7179 target at the target address. */
14f9c5c9
AS
7180
7181/* Assuming that VAL0 represents a pointer value, the result of
7182 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7183 dynamic-sized types. */
14f9c5c9 7184
d2e4a39e
AS
7185struct value *
7186ada_value_ind (struct value *val0)
14f9c5c9 7187{
c48db5ca 7188 struct value *val = value_ind (val0);
5b4ee69b 7189
b50d69b5
JG
7190 if (ada_is_tagged_type (value_type (val), 0))
7191 val = ada_tag_value_at_base_address (val);
7192
4c4b4cd2 7193 return ada_to_fixed_value (val);
14f9c5c9
AS
7194}
7195
7196/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7197 qualifiers on VAL0. */
7198
d2e4a39e
AS
7199static struct value *
7200ada_coerce_ref (struct value *val0)
7201{
df407dfe 7202 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
7203 {
7204 struct value *val = val0;
5b4ee69b 7205
994b9211 7206 val = coerce_ref (val);
b50d69b5
JG
7207
7208 if (ada_is_tagged_type (value_type (val), 0))
7209 val = ada_tag_value_at_base_address (val);
7210
4c4b4cd2 7211 return ada_to_fixed_value (val);
d2e4a39e
AS
7212 }
7213 else
14f9c5c9
AS
7214 return val0;
7215}
7216
7217/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 7218 ALIGNMENT (a power of 2). */
14f9c5c9
AS
7219
7220static unsigned int
ebf56fd3 7221align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
7222{
7223 return (off + alignment - 1) & ~(alignment - 1);
7224}
7225
4c4b4cd2 7226/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7227
7228static unsigned int
ebf56fd3 7229field_alignment (struct type *type, int f)
14f9c5c9 7230{
d2e4a39e 7231 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7232 int len;
14f9c5c9
AS
7233 int align_offset;
7234
64a1bf19
JB
7235 /* The field name should never be null, unless the debugging information
7236 is somehow malformed. In this case, we assume the field does not
7237 require any alignment. */
7238 if (name == NULL)
7239 return 1;
7240
7241 len = strlen (name);
7242
4c4b4cd2
PH
7243 if (!isdigit (name[len - 1]))
7244 return 1;
14f9c5c9 7245
d2e4a39e 7246 if (isdigit (name[len - 2]))
14f9c5c9
AS
7247 align_offset = len - 2;
7248 else
7249 align_offset = len - 1;
7250
4c4b4cd2 7251 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
14f9c5c9
AS
7252 return TARGET_CHAR_BIT;
7253
4c4b4cd2
PH
7254 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7255}
7256
852dff6c 7257/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7258
852dff6c
JB
7259static struct symbol *
7260ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7261{
7262 struct symbol *sym;
7263
7264 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
7265 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
7266 return sym;
7267
7268 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7269 return sym;
14f9c5c9
AS
7270}
7271
dddfab26
UW
7272/* Find a type named NAME. Ignores ambiguity. This routine will look
7273 solely for types defined by debug info, it will not search the GDB
7274 primitive types. */
4c4b4cd2 7275
852dff6c 7276static struct type *
ebf56fd3 7277ada_find_any_type (const char *name)
14f9c5c9 7278{
852dff6c 7279 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7280
14f9c5c9 7281 if (sym != NULL)
dddfab26 7282 return SYMBOL_TYPE (sym);
14f9c5c9 7283
dddfab26 7284 return NULL;
14f9c5c9
AS
7285}
7286
739593e0
JB
7287/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7288 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7289 symbol, in which case it is returned. Otherwise, this looks for
7290 symbols whose name is that of NAME_SYM suffixed with "___XR".
7291 Return symbol if found, and NULL otherwise. */
4c4b4cd2
PH
7292
7293struct symbol *
270140bd 7294ada_find_renaming_symbol (struct symbol *name_sym, const struct block *block)
aeb5907d 7295{
739593e0 7296 const char *name = SYMBOL_LINKAGE_NAME (name_sym);
aeb5907d
JB
7297 struct symbol *sym;
7298
739593e0
JB
7299 if (strstr (name, "___XR") != NULL)
7300 return name_sym;
7301
aeb5907d
JB
7302 sym = find_old_style_renaming_symbol (name, block);
7303
7304 if (sym != NULL)
7305 return sym;
7306
0963b4bd 7307 /* Not right yet. FIXME pnh 7/20/2007. */
852dff6c 7308 sym = ada_find_any_type_symbol (name);
aeb5907d
JB
7309 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7310 return sym;
7311 else
7312 return NULL;
7313}
7314
7315static struct symbol *
270140bd 7316find_old_style_renaming_symbol (const char *name, const struct block *block)
4c4b4cd2 7317{
7f0df278 7318 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
7319 char *rename;
7320
7321 if (function_sym != NULL)
7322 {
7323 /* If the symbol is defined inside a function, NAME is not fully
7324 qualified. This means we need to prepend the function name
7325 as well as adding the ``___XR'' suffix to build the name of
7326 the associated renaming symbol. */
0d5cff50 7327 const char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
7328 /* Function names sometimes contain suffixes used
7329 for instance to qualify nested subprograms. When building
7330 the XR type name, we need to make sure that this suffix is
7331 not included. So do not include any suffix in the function
7332 name length below. */
69fadcdf 7333 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
7334 const int rename_len = function_name_len + 2 /* "__" */
7335 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 7336
529cad9c 7337 /* Strip the suffix if necessary. */
69fadcdf
JB
7338 ada_remove_trailing_digits (function_name, &function_name_len);
7339 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7340 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 7341
4c4b4cd2
PH
7342 /* Library-level functions are a special case, as GNAT adds
7343 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 7344 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
7345 have this prefix, so we need to skip this prefix if present. */
7346 if (function_name_len > 5 /* "_ada_" */
7347 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
7348 {
7349 function_name += 5;
7350 function_name_len -= 5;
7351 }
4c4b4cd2
PH
7352
7353 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
7354 strncpy (rename, function_name, function_name_len);
7355 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7356 "__%s___XR", name);
4c4b4cd2
PH
7357 }
7358 else
7359 {
7360 const int rename_len = strlen (name) + 6;
5b4ee69b 7361
4c4b4cd2 7362 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 7363 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
7364 }
7365
852dff6c 7366 return ada_find_any_type_symbol (rename);
4c4b4cd2
PH
7367}
7368
14f9c5c9 7369/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7370 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7371 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7372 otherwise return 0. */
7373
14f9c5c9 7374int
d2e4a39e 7375ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7376{
7377 if (type1 == NULL)
7378 return 1;
7379 else if (type0 == NULL)
7380 return 0;
7381 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7382 return 1;
7383 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7384 return 0;
4c4b4cd2
PH
7385 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7386 return 1;
ad82864c 7387 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7388 return 1;
4c4b4cd2
PH
7389 else if (ada_is_array_descriptor_type (type0)
7390 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7391 return 1;
aeb5907d
JB
7392 else
7393 {
7394 const char *type0_name = type_name_no_tag (type0);
7395 const char *type1_name = type_name_no_tag (type1);
7396
7397 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7398 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7399 return 1;
7400 }
14f9c5c9
AS
7401 return 0;
7402}
7403
7404/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
7405 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7406
0d5cff50 7407const char *
d2e4a39e 7408ada_type_name (struct type *type)
14f9c5c9 7409{
d2e4a39e 7410 if (type == NULL)
14f9c5c9
AS
7411 return NULL;
7412 else if (TYPE_NAME (type) != NULL)
7413 return TYPE_NAME (type);
7414 else
7415 return TYPE_TAG_NAME (type);
7416}
7417
b4ba55a1
JB
7418/* Search the list of "descriptive" types associated to TYPE for a type
7419 whose name is NAME. */
7420
7421static struct type *
7422find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7423{
7424 struct type *result;
7425
7426 /* If there no descriptive-type info, then there is no parallel type
7427 to be found. */
7428 if (!HAVE_GNAT_AUX_INFO (type))
7429 return NULL;
7430
7431 result = TYPE_DESCRIPTIVE_TYPE (type);
7432 while (result != NULL)
7433 {
0d5cff50 7434 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7435
7436 if (result_name == NULL)
7437 {
7438 warning (_("unexpected null name on descriptive type"));
7439 return NULL;
7440 }
7441
7442 /* If the names match, stop. */
7443 if (strcmp (result_name, name) == 0)
7444 break;
7445
7446 /* Otherwise, look at the next item on the list, if any. */
7447 if (HAVE_GNAT_AUX_INFO (result))
7448 result = TYPE_DESCRIPTIVE_TYPE (result);
7449 else
7450 result = NULL;
7451 }
7452
7453 /* If we didn't find a match, see whether this is a packed array. With
7454 older compilers, the descriptive type information is either absent or
7455 irrelevant when it comes to packed arrays so the above lookup fails.
7456 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7457 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7458 return ada_find_any_type (name);
7459
7460 return result;
7461}
7462
7463/* Find a parallel type to TYPE with the specified NAME, using the
7464 descriptive type taken from the debugging information, if available,
7465 and otherwise using the (slower) name-based method. */
7466
7467static struct type *
7468ada_find_parallel_type_with_name (struct type *type, const char *name)
7469{
7470 struct type *result = NULL;
7471
7472 if (HAVE_GNAT_AUX_INFO (type))
7473 result = find_parallel_type_by_descriptive_type (type, name);
7474 else
7475 result = ada_find_any_type (name);
7476
7477 return result;
7478}
7479
7480/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7481 SUFFIX to the name of TYPE. */
14f9c5c9 7482
d2e4a39e 7483struct type *
ebf56fd3 7484ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7485{
0d5cff50
DE
7486 char *name;
7487 const char *typename = ada_type_name (type);
14f9c5c9 7488 int len;
d2e4a39e 7489
14f9c5c9
AS
7490 if (typename == NULL)
7491 return NULL;
7492
7493 len = strlen (typename);
7494
b4ba55a1 7495 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9
AS
7496
7497 strcpy (name, typename);
7498 strcpy (name + len, suffix);
7499
b4ba55a1 7500 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7501}
7502
14f9c5c9 7503/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7504 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7505
d2e4a39e
AS
7506static struct type *
7507dynamic_template_type (struct type *type)
14f9c5c9 7508{
61ee279c 7509 type = ada_check_typedef (type);
14f9c5c9
AS
7510
7511 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 7512 || ada_type_name (type) == NULL)
14f9c5c9 7513 return NULL;
d2e4a39e 7514 else
14f9c5c9
AS
7515 {
7516 int len = strlen (ada_type_name (type));
5b4ee69b 7517
4c4b4cd2
PH
7518 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7519 return type;
14f9c5c9 7520 else
4c4b4cd2 7521 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7522 }
7523}
7524
7525/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7526 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7527
d2e4a39e
AS
7528static int
7529is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7530{
7531 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7532
d2e4a39e 7533 return name != NULL
14f9c5c9
AS
7534 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7535 && strstr (name, "___XVL") != NULL;
7536}
7537
4c4b4cd2
PH
7538/* The index of the variant field of TYPE, or -1 if TYPE does not
7539 represent a variant record type. */
14f9c5c9 7540
d2e4a39e 7541static int
4c4b4cd2 7542variant_field_index (struct type *type)
14f9c5c9
AS
7543{
7544 int f;
7545
4c4b4cd2
PH
7546 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7547 return -1;
7548
7549 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7550 {
7551 if (ada_is_variant_part (type, f))
7552 return f;
7553 }
7554 return -1;
14f9c5c9
AS
7555}
7556
4c4b4cd2
PH
7557/* A record type with no fields. */
7558
d2e4a39e 7559static struct type *
e9bb382b 7560empty_record (struct type *template)
14f9c5c9 7561{
e9bb382b 7562 struct type *type = alloc_type_copy (template);
5b4ee69b 7563
14f9c5c9
AS
7564 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7565 TYPE_NFIELDS (type) = 0;
7566 TYPE_FIELDS (type) = NULL;
b1f33ddd 7567 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
7568 TYPE_NAME (type) = "<empty>";
7569 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
7570 TYPE_LENGTH (type) = 0;
7571 return type;
7572}
7573
7574/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7575 the value of type TYPE at VALADDR or ADDRESS (see comments at
7576 the beginning of this section) VAL according to GNAT conventions.
7577 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7578 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7579 an outer-level type (i.e., as opposed to a branch of a variant.) A
7580 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7581 of the variant.
14f9c5c9 7582
4c4b4cd2
PH
7583 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7584 length are not statically known are discarded. As a consequence,
7585 VALADDR, ADDRESS and DVAL0 are ignored.
7586
7587 NOTE: Limitations: For now, we assume that dynamic fields and
7588 variants occupy whole numbers of bytes. However, they need not be
7589 byte-aligned. */
7590
7591struct type *
10a2c479 7592ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7593 const gdb_byte *valaddr,
4c4b4cd2
PH
7594 CORE_ADDR address, struct value *dval0,
7595 int keep_dynamic_fields)
14f9c5c9 7596{
d2e4a39e
AS
7597 struct value *mark = value_mark ();
7598 struct value *dval;
7599 struct type *rtype;
14f9c5c9 7600 int nfields, bit_len;
4c4b4cd2 7601 int variant_field;
14f9c5c9 7602 long off;
d94e4f4f 7603 int fld_bit_len;
14f9c5c9
AS
7604 int f;
7605
4c4b4cd2
PH
7606 /* Compute the number of fields in this record type that are going
7607 to be processed: unless keep_dynamic_fields, this includes only
7608 fields whose position and length are static will be processed. */
7609 if (keep_dynamic_fields)
7610 nfields = TYPE_NFIELDS (type);
7611 else
7612 {
7613 nfields = 0;
76a01679 7614 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
7615 && !ada_is_variant_part (type, nfields)
7616 && !is_dynamic_field (type, nfields))
7617 nfields++;
7618 }
7619
e9bb382b 7620 rtype = alloc_type_copy (type);
14f9c5c9
AS
7621 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7622 INIT_CPLUS_SPECIFIC (rtype);
7623 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 7624 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
7625 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7626 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7627 TYPE_NAME (rtype) = ada_type_name (type);
7628 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7629 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 7630
d2e4a39e
AS
7631 off = 0;
7632 bit_len = 0;
4c4b4cd2
PH
7633 variant_field = -1;
7634
14f9c5c9
AS
7635 for (f = 0; f < nfields; f += 1)
7636 {
6c038f32
PH
7637 off = align_value (off, field_alignment (type, f))
7638 + TYPE_FIELD_BITPOS (type, f);
945b3a32 7639 SET_FIELD_BITPOS (TYPE_FIELD (rtype, f), off);
d2e4a39e 7640 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7641
d2e4a39e 7642 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
7643 {
7644 variant_field = f;
d94e4f4f 7645 fld_bit_len = 0;
4c4b4cd2 7646 }
14f9c5c9 7647 else if (is_dynamic_field (type, f))
4c4b4cd2 7648 {
284614f0
JB
7649 const gdb_byte *field_valaddr = valaddr;
7650 CORE_ADDR field_address = address;
7651 struct type *field_type =
7652 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7653
4c4b4cd2 7654 if (dval0 == NULL)
b5304971
JG
7655 {
7656 /* rtype's length is computed based on the run-time
7657 value of discriminants. If the discriminants are not
7658 initialized, the type size may be completely bogus and
0963b4bd 7659 GDB may fail to allocate a value for it. So check the
b5304971
JG
7660 size first before creating the value. */
7661 check_size (rtype);
7662 dval = value_from_contents_and_address (rtype, valaddr, address);
7663 }
4c4b4cd2
PH
7664 else
7665 dval = dval0;
7666
284614f0
JB
7667 /* If the type referenced by this field is an aligner type, we need
7668 to unwrap that aligner type, because its size might not be set.
7669 Keeping the aligner type would cause us to compute the wrong
7670 size for this field, impacting the offset of the all the fields
7671 that follow this one. */
7672 if (ada_is_aligner_type (field_type))
7673 {
7674 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7675
7676 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7677 field_address = cond_offset_target (field_address, field_offset);
7678 field_type = ada_aligned_type (field_type);
7679 }
7680
7681 field_valaddr = cond_offset_host (field_valaddr,
7682 off / TARGET_CHAR_BIT);
7683 field_address = cond_offset_target (field_address,
7684 off / TARGET_CHAR_BIT);
7685
7686 /* Get the fixed type of the field. Note that, in this case,
7687 we do not want to get the real type out of the tag: if
7688 the current field is the parent part of a tagged record,
7689 we will get the tag of the object. Clearly wrong: the real
7690 type of the parent is not the real type of the child. We
7691 would end up in an infinite loop. */
7692 field_type = ada_get_base_type (field_type);
7693 field_type = ada_to_fixed_type (field_type, field_valaddr,
7694 field_address, dval, 0);
27f2a97b
JB
7695 /* If the field size is already larger than the maximum
7696 object size, then the record itself will necessarily
7697 be larger than the maximum object size. We need to make
7698 this check now, because the size might be so ridiculously
7699 large (due to an uninitialized variable in the inferior)
7700 that it would cause an overflow when adding it to the
7701 record size. */
7702 check_size (field_type);
284614f0
JB
7703
7704 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 7705 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
7706 /* The multiplication can potentially overflow. But because
7707 the field length has been size-checked just above, and
7708 assuming that the maximum size is a reasonable value,
7709 an overflow should not happen in practice. So rather than
7710 adding overflow recovery code to this already complex code,
7711 we just assume that it's not going to happen. */
d94e4f4f 7712 fld_bit_len =
4c4b4cd2
PH
7713 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7714 }
14f9c5c9 7715 else
4c4b4cd2 7716 {
5ded5331
JB
7717 /* Note: If this field's type is a typedef, it is important
7718 to preserve the typedef layer.
7719
7720 Otherwise, we might be transforming a typedef to a fat
7721 pointer (encoding a pointer to an unconstrained array),
7722 into a basic fat pointer (encoding an unconstrained
7723 array). As both types are implemented using the same
7724 structure, the typedef is the only clue which allows us
7725 to distinguish between the two options. Stripping it
7726 would prevent us from printing this field appropriately. */
7727 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
7728 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7729 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 7730 fld_bit_len =
4c4b4cd2
PH
7731 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7732 else
5ded5331
JB
7733 {
7734 struct type *field_type = TYPE_FIELD_TYPE (type, f);
7735
7736 /* We need to be careful of typedefs when computing
7737 the length of our field. If this is a typedef,
7738 get the length of the target type, not the length
7739 of the typedef. */
7740 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7741 field_type = ada_typedef_target_type (field_type);
7742
7743 fld_bit_len =
7744 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
7745 }
4c4b4cd2 7746 }
14f9c5c9 7747 if (off + fld_bit_len > bit_len)
4c4b4cd2 7748 bit_len = off + fld_bit_len;
d94e4f4f 7749 off += fld_bit_len;
4c4b4cd2
PH
7750 TYPE_LENGTH (rtype) =
7751 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7752 }
4c4b4cd2
PH
7753
7754 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7755 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7756 the record. This can happen in the presence of representation
7757 clauses. */
7758 if (variant_field >= 0)
7759 {
7760 struct type *branch_type;
7761
7762 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7763
7764 if (dval0 == NULL)
7765 dval = value_from_contents_and_address (rtype, valaddr, address);
7766 else
7767 dval = dval0;
7768
7769 branch_type =
7770 to_fixed_variant_branch_type
7771 (TYPE_FIELD_TYPE (type, variant_field),
7772 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7773 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7774 if (branch_type == NULL)
7775 {
7776 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
7777 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7778 TYPE_NFIELDS (rtype) -= 1;
7779 }
7780 else
7781 {
7782 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7783 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7784 fld_bit_len =
7785 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7786 TARGET_CHAR_BIT;
7787 if (off + fld_bit_len > bit_len)
7788 bit_len = off + fld_bit_len;
7789 TYPE_LENGTH (rtype) =
7790 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7791 }
7792 }
7793
714e53ab
PH
7794 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7795 should contain the alignment of that record, which should be a strictly
7796 positive value. If null or negative, then something is wrong, most
7797 probably in the debug info. In that case, we don't round up the size
0963b4bd 7798 of the resulting type. If this record is not part of another structure,
714e53ab
PH
7799 the current RTYPE length might be good enough for our purposes. */
7800 if (TYPE_LENGTH (type) <= 0)
7801 {
323e0a4a
AC
7802 if (TYPE_NAME (rtype))
7803 warning (_("Invalid type size for `%s' detected: %d."),
7804 TYPE_NAME (rtype), TYPE_LENGTH (type));
7805 else
7806 warning (_("Invalid type size for <unnamed> detected: %d."),
7807 TYPE_LENGTH (type));
714e53ab
PH
7808 }
7809 else
7810 {
7811 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7812 TYPE_LENGTH (type));
7813 }
14f9c5c9
AS
7814
7815 value_free_to_mark (mark);
d2e4a39e 7816 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 7817 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7818 return rtype;
7819}
7820
4c4b4cd2
PH
7821/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7822 of 1. */
14f9c5c9 7823
d2e4a39e 7824static struct type *
fc1a4b47 7825template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
7826 CORE_ADDR address, struct value *dval0)
7827{
7828 return ada_template_to_fixed_record_type_1 (type, valaddr,
7829 address, dval0, 1);
7830}
7831
7832/* An ordinary record type in which ___XVL-convention fields and
7833 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7834 static approximations, containing all possible fields. Uses
7835 no runtime values. Useless for use in values, but that's OK,
7836 since the results are used only for type determinations. Works on both
7837 structs and unions. Representation note: to save space, we memorize
7838 the result of this function in the TYPE_TARGET_TYPE of the
7839 template type. */
7840
7841static struct type *
7842template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
7843{
7844 struct type *type;
7845 int nfields;
7846 int f;
7847
4c4b4cd2
PH
7848 if (TYPE_TARGET_TYPE (type0) != NULL)
7849 return TYPE_TARGET_TYPE (type0);
7850
7851 nfields = TYPE_NFIELDS (type0);
7852 type = type0;
14f9c5c9
AS
7853
7854 for (f = 0; f < nfields; f += 1)
7855 {
61ee279c 7856 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
4c4b4cd2 7857 struct type *new_type;
14f9c5c9 7858
4c4b4cd2
PH
7859 if (is_dynamic_field (type0, f))
7860 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
14f9c5c9 7861 else
f192137b 7862 new_type = static_unwrap_type (field_type);
4c4b4cd2
PH
7863 if (type == type0 && new_type != field_type)
7864 {
e9bb382b 7865 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
4c4b4cd2
PH
7866 TYPE_CODE (type) = TYPE_CODE (type0);
7867 INIT_CPLUS_SPECIFIC (type);
7868 TYPE_NFIELDS (type) = nfields;
7869 TYPE_FIELDS (type) = (struct field *)
7870 TYPE_ALLOC (type, nfields * sizeof (struct field));
7871 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7872 sizeof (struct field) * nfields);
7873 TYPE_NAME (type) = ada_type_name (type0);
7874 TYPE_TAG_NAME (type) = NULL;
876cecd0 7875 TYPE_FIXED_INSTANCE (type) = 1;
4c4b4cd2
PH
7876 TYPE_LENGTH (type) = 0;
7877 }
7878 TYPE_FIELD_TYPE (type, f) = new_type;
7879 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
14f9c5c9 7880 }
14f9c5c9
AS
7881 return type;
7882}
7883
4c4b4cd2 7884/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
7885 whose address in memory is ADDRESS, returns a revision of TYPE,
7886 which should be a non-dynamic-sized record, in which the variant
7887 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
7888 for discriminant values in DVAL0, which can be NULL if the record
7889 contains the necessary discriminant values. */
7890
d2e4a39e 7891static struct type *
fc1a4b47 7892to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 7893 CORE_ADDR address, struct value *dval0)
14f9c5c9 7894{
d2e4a39e 7895 struct value *mark = value_mark ();
4c4b4cd2 7896 struct value *dval;
d2e4a39e 7897 struct type *rtype;
14f9c5c9
AS
7898 struct type *branch_type;
7899 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 7900 int variant_field = variant_field_index (type);
14f9c5c9 7901
4c4b4cd2 7902 if (variant_field == -1)
14f9c5c9
AS
7903 return type;
7904
4c4b4cd2
PH
7905 if (dval0 == NULL)
7906 dval = value_from_contents_and_address (type, valaddr, address);
7907 else
7908 dval = dval0;
7909
e9bb382b 7910 rtype = alloc_type_copy (type);
14f9c5c9 7911 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
7912 INIT_CPLUS_SPECIFIC (rtype);
7913 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
7914 TYPE_FIELDS (rtype) =
7915 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7916 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 7917 sizeof (struct field) * nfields);
14f9c5c9
AS
7918 TYPE_NAME (rtype) = ada_type_name (type);
7919 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7920 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
7921 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7922
4c4b4cd2
PH
7923 branch_type = to_fixed_variant_branch_type
7924 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 7925 cond_offset_host (valaddr,
4c4b4cd2
PH
7926 TYPE_FIELD_BITPOS (type, variant_field)
7927 / TARGET_CHAR_BIT),
d2e4a39e 7928 cond_offset_target (address,
4c4b4cd2
PH
7929 TYPE_FIELD_BITPOS (type, variant_field)
7930 / TARGET_CHAR_BIT), dval);
d2e4a39e 7931 if (branch_type == NULL)
14f9c5c9 7932 {
4c4b4cd2 7933 int f;
5b4ee69b 7934
4c4b4cd2
PH
7935 for (f = variant_field + 1; f < nfields; f += 1)
7936 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 7937 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
7938 }
7939 else
7940 {
4c4b4cd2
PH
7941 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7942 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7943 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 7944 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 7945 }
4c4b4cd2 7946 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 7947
4c4b4cd2 7948 value_free_to_mark (mark);
14f9c5c9
AS
7949 return rtype;
7950}
7951
7952/* An ordinary record type (with fixed-length fields) that describes
7953 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7954 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
7955 should be in DVAL, a record value; it may be NULL if the object
7956 at ADDR itself contains any necessary discriminant values.
7957 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7958 values from the record are needed. Except in the case that DVAL,
7959 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7960 unchecked) is replaced by a particular branch of the variant.
7961
7962 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7963 is questionable and may be removed. It can arise during the
7964 processing of an unconstrained-array-of-record type where all the
7965 variant branches have exactly the same size. This is because in
7966 such cases, the compiler does not bother to use the XVS convention
7967 when encoding the record. I am currently dubious of this
7968 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 7969
d2e4a39e 7970static struct type *
fc1a4b47 7971to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 7972 CORE_ADDR address, struct value *dval)
14f9c5c9 7973{
d2e4a39e 7974 struct type *templ_type;
14f9c5c9 7975
876cecd0 7976 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
7977 return type0;
7978
d2e4a39e 7979 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
7980
7981 if (templ_type != NULL)
7982 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
7983 else if (variant_field_index (type0) >= 0)
7984 {
7985 if (dval == NULL && valaddr == NULL && address == 0)
7986 return type0;
7987 return to_record_with_fixed_variant_part (type0, valaddr, address,
7988 dval);
7989 }
14f9c5c9
AS
7990 else
7991 {
876cecd0 7992 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
7993 return type0;
7994 }
7995
7996}
7997
7998/* An ordinary record type (with fixed-length fields) that describes
7999 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8000 union type. Any necessary discriminants' values should be in DVAL,
8001 a record value. That is, this routine selects the appropriate
8002 branch of the union at ADDR according to the discriminant value
b1f33ddd 8003 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8004 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8005
d2e4a39e 8006static struct type *
fc1a4b47 8007to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8008 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8009{
8010 int which;
d2e4a39e
AS
8011 struct type *templ_type;
8012 struct type *var_type;
14f9c5c9
AS
8013
8014 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
8015 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8016 else
14f9c5c9
AS
8017 var_type = var_type0;
8018
8019 templ_type = ada_find_parallel_type (var_type, "___XVU");
8020
8021 if (templ_type != NULL)
8022 var_type = templ_type;
8023
b1f33ddd
JB
8024 if (is_unchecked_variant (var_type, value_type (dval)))
8025 return var_type0;
d2e4a39e
AS
8026 which =
8027 ada_which_variant_applies (var_type,
0fd88904 8028 value_type (dval), value_contents (dval));
14f9c5c9
AS
8029
8030 if (which < 0)
e9bb382b 8031 return empty_record (var_type);
14f9c5c9 8032 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8033 return to_fixed_record_type
d2e4a39e
AS
8034 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8035 valaddr, address, dval);
4c4b4cd2 8036 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8037 return
8038 to_fixed_record_type
8039 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8040 else
8041 return TYPE_FIELD_TYPE (var_type, which);
8042}
8043
8044/* Assuming that TYPE0 is an array type describing the type of a value
8045 at ADDR, and that DVAL describes a record containing any
8046 discriminants used in TYPE0, returns a type for the value that
8047 contains no dynamic components (that is, no components whose sizes
8048 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8049 true, gives an error message if the resulting type's size is over
4c4b4cd2 8050 varsize_limit. */
14f9c5c9 8051
d2e4a39e
AS
8052static struct type *
8053to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8054 int ignore_too_big)
14f9c5c9 8055{
d2e4a39e
AS
8056 struct type *index_type_desc;
8057 struct type *result;
ad82864c 8058 int constrained_packed_array_p;
14f9c5c9 8059
b0dd7688 8060 type0 = ada_check_typedef (type0);
284614f0 8061 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8062 return type0;
14f9c5c9 8063
ad82864c
JB
8064 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8065 if (constrained_packed_array_p)
8066 type0 = decode_constrained_packed_array_type (type0);
284614f0 8067
14f9c5c9 8068 index_type_desc = ada_find_parallel_type (type0, "___XA");
28c85d6c 8069 ada_fixup_array_indexes_type (index_type_desc);
14f9c5c9
AS
8070 if (index_type_desc == NULL)
8071 {
61ee279c 8072 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8073
14f9c5c9 8074 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8075 depend on the contents of the array in properly constructed
8076 debugging data. */
529cad9c
PH
8077 /* Create a fixed version of the array element type.
8078 We're not providing the address of an element here,
e1d5a0d2 8079 and thus the actual object value cannot be inspected to do
529cad9c
PH
8080 the conversion. This should not be a problem, since arrays of
8081 unconstrained objects are not allowed. In particular, all
8082 the elements of an array of a tagged type should all be of
8083 the same type specified in the debugging info. No need to
8084 consult the object tag. */
1ed6ede0 8085 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8086
284614f0
JB
8087 /* Make sure we always create a new array type when dealing with
8088 packed array types, since we're going to fix-up the array
8089 type length and element bitsize a little further down. */
ad82864c 8090 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8091 result = type0;
14f9c5c9 8092 else
e9bb382b 8093 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8094 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8095 }
8096 else
8097 {
8098 int i;
8099 struct type *elt_type0;
8100
8101 elt_type0 = type0;
8102 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 8103 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8104
8105 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8106 depend on the contents of the array in properly constructed
8107 debugging data. */
529cad9c
PH
8108 /* Create a fixed version of the array element type.
8109 We're not providing the address of an element here,
e1d5a0d2 8110 and thus the actual object value cannot be inspected to do
529cad9c
PH
8111 the conversion. This should not be a problem, since arrays of
8112 unconstrained objects are not allowed. In particular, all
8113 the elements of an array of a tagged type should all be of
8114 the same type specified in the debugging info. No need to
8115 consult the object tag. */
1ed6ede0
JB
8116 result =
8117 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8118
8119 elt_type0 = type0;
14f9c5c9 8120 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8121 {
8122 struct type *range_type =
28c85d6c 8123 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8124
e9bb382b 8125 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8126 result, range_type);
1ce677a4 8127 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8128 }
d2e4a39e 8129 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8130 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8131 }
8132
2e6fda7d
JB
8133 /* We want to preserve the type name. This can be useful when
8134 trying to get the type name of a value that has already been
8135 printed (for instance, if the user did "print VAR; whatis $". */
8136 TYPE_NAME (result) = TYPE_NAME (type0);
8137
ad82864c 8138 if (constrained_packed_array_p)
284614f0
JB
8139 {
8140 /* So far, the resulting type has been created as if the original
8141 type was a regular (non-packed) array type. As a result, the
8142 bitsize of the array elements needs to be set again, and the array
8143 length needs to be recomputed based on that bitsize. */
8144 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8145 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8146
8147 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8148 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8149 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8150 TYPE_LENGTH (result)++;
8151 }
8152
876cecd0 8153 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 8154 return result;
d2e4a39e 8155}
14f9c5c9
AS
8156
8157
8158/* A standard type (containing no dynamically sized components)
8159 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8160 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8161 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8162 ADDRESS or in VALADDR contains these discriminants.
8163
1ed6ede0
JB
8164 If CHECK_TAG is not null, in the case of tagged types, this function
8165 attempts to locate the object's tag and use it to compute the actual
8166 type. However, when ADDRESS is null, we cannot use it to determine the
8167 location of the tag, and therefore compute the tagged type's actual type.
8168 So we return the tagged type without consulting the tag. */
529cad9c 8169
f192137b
JB
8170static struct type *
8171ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 8172 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8173{
61ee279c 8174 type = ada_check_typedef (type);
d2e4a39e
AS
8175 switch (TYPE_CODE (type))
8176 {
8177 default:
14f9c5c9 8178 return type;
d2e4a39e 8179 case TYPE_CODE_STRUCT:
4c4b4cd2 8180 {
76a01679 8181 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
8182 struct type *fixed_record_type =
8183 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 8184
529cad9c
PH
8185 /* If STATIC_TYPE is a tagged type and we know the object's address,
8186 then we can determine its tag, and compute the object's actual
0963b4bd 8187 type from there. Note that we have to use the fixed record
1ed6ede0
JB
8188 type (the parent part of the record may have dynamic fields
8189 and the way the location of _tag is expressed may depend on
8190 them). */
529cad9c 8191
1ed6ede0 8192 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 8193 {
b50d69b5
JG
8194 struct value *tag =
8195 value_tag_from_contents_and_address
8196 (fixed_record_type,
8197 valaddr,
8198 address);
8199 struct type *real_type = type_from_tag (tag);
8200 struct value *obj =
8201 value_from_contents_and_address (fixed_record_type,
8202 valaddr,
8203 address);
76a01679 8204 if (real_type != NULL)
b50d69b5
JG
8205 return to_fixed_record_type
8206 (real_type, NULL,
8207 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 8208 }
4af88198
JB
8209
8210 /* Check to see if there is a parallel ___XVZ variable.
8211 If there is, then it provides the actual size of our type. */
8212 else if (ada_type_name (fixed_record_type) != NULL)
8213 {
0d5cff50 8214 const char *name = ada_type_name (fixed_record_type);
4af88198
JB
8215 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
8216 int xvz_found = 0;
8217 LONGEST size;
8218
88c15c34 8219 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
8220 size = get_int_var_value (xvz_name, &xvz_found);
8221 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8222 {
8223 fixed_record_type = copy_type (fixed_record_type);
8224 TYPE_LENGTH (fixed_record_type) = size;
8225
8226 /* The FIXED_RECORD_TYPE may have be a stub. We have
8227 observed this when the debugging info is STABS, and
8228 apparently it is something that is hard to fix.
8229
8230 In practice, we don't need the actual type definition
8231 at all, because the presence of the XVZ variable allows us
8232 to assume that there must be a XVS type as well, which we
8233 should be able to use later, when we need the actual type
8234 definition.
8235
8236 In the meantime, pretend that the "fixed" type we are
8237 returning is NOT a stub, because this can cause trouble
8238 when using this type to create new types targeting it.
8239 Indeed, the associated creation routines often check
8240 whether the target type is a stub and will try to replace
0963b4bd 8241 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
8242 might cause the new type to have the wrong size too.
8243 Consider the case of an array, for instance, where the size
8244 of the array is computed from the number of elements in
8245 our array multiplied by the size of its element. */
8246 TYPE_STUB (fixed_record_type) = 0;
8247 }
8248 }
1ed6ede0 8249 return fixed_record_type;
4c4b4cd2 8250 }
d2e4a39e 8251 case TYPE_CODE_ARRAY:
4c4b4cd2 8252 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8253 case TYPE_CODE_UNION:
8254 if (dval == NULL)
4c4b4cd2 8255 return type;
d2e4a39e 8256 else
4c4b4cd2 8257 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8258 }
14f9c5c9
AS
8259}
8260
f192137b
JB
8261/* The same as ada_to_fixed_type_1, except that it preserves the type
8262 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8263
8264 The typedef layer needs be preserved in order to differentiate between
8265 arrays and array pointers when both types are implemented using the same
8266 fat pointer. In the array pointer case, the pointer is encoded as
8267 a typedef of the pointer type. For instance, considering:
8268
8269 type String_Access is access String;
8270 S1 : String_Access := null;
8271
8272 To the debugger, S1 is defined as a typedef of type String. But
8273 to the user, it is a pointer. So if the user tries to print S1,
8274 we should not dereference the array, but print the array address
8275 instead.
8276
8277 If we didn't preserve the typedef layer, we would lose the fact that
8278 the type is to be presented as a pointer (needs de-reference before
8279 being printed). And we would also use the source-level type name. */
f192137b
JB
8280
8281struct type *
8282ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8283 CORE_ADDR address, struct value *dval, int check_tag)
8284
8285{
8286 struct type *fixed_type =
8287 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8288
96dbd2c1
JB
8289 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8290 then preserve the typedef layer.
8291
8292 Implementation note: We can only check the main-type portion of
8293 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8294 from TYPE now returns a type that has the same instance flags
8295 as TYPE. For instance, if TYPE is a "typedef const", and its
8296 target type is a "struct", then the typedef elimination will return
8297 a "const" version of the target type. See check_typedef for more
8298 details about how the typedef layer elimination is done.
8299
8300 brobecker/2010-11-19: It seems to me that the only case where it is
8301 useful to preserve the typedef layer is when dealing with fat pointers.
8302 Perhaps, we could add a check for that and preserve the typedef layer
8303 only in that situation. But this seems unecessary so far, probably
8304 because we call check_typedef/ada_check_typedef pretty much everywhere.
8305 */
f192137b 8306 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 8307 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8308 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8309 return type;
8310
8311 return fixed_type;
8312}
8313
14f9c5c9 8314/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8315 TYPE0, but based on no runtime data. */
14f9c5c9 8316
d2e4a39e
AS
8317static struct type *
8318to_static_fixed_type (struct type *type0)
14f9c5c9 8319{
d2e4a39e 8320 struct type *type;
14f9c5c9
AS
8321
8322 if (type0 == NULL)
8323 return NULL;
8324
876cecd0 8325 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8326 return type0;
8327
61ee279c 8328 type0 = ada_check_typedef (type0);
d2e4a39e 8329
14f9c5c9
AS
8330 switch (TYPE_CODE (type0))
8331 {
8332 default:
8333 return type0;
8334 case TYPE_CODE_STRUCT:
8335 type = dynamic_template_type (type0);
d2e4a39e 8336 if (type != NULL)
4c4b4cd2
PH
8337 return template_to_static_fixed_type (type);
8338 else
8339 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8340 case TYPE_CODE_UNION:
8341 type = ada_find_parallel_type (type0, "___XVU");
8342 if (type != NULL)
4c4b4cd2
PH
8343 return template_to_static_fixed_type (type);
8344 else
8345 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8346 }
8347}
8348
4c4b4cd2
PH
8349/* A static approximation of TYPE with all type wrappers removed. */
8350
d2e4a39e
AS
8351static struct type *
8352static_unwrap_type (struct type *type)
14f9c5c9
AS
8353{
8354 if (ada_is_aligner_type (type))
8355 {
61ee279c 8356 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 8357 if (ada_type_name (type1) == NULL)
4c4b4cd2 8358 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
8359
8360 return static_unwrap_type (type1);
8361 }
d2e4a39e 8362 else
14f9c5c9 8363 {
d2e4a39e 8364 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8365
d2e4a39e 8366 if (raw_real_type == type)
4c4b4cd2 8367 return type;
14f9c5c9 8368 else
4c4b4cd2 8369 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8370 }
8371}
8372
8373/* In some cases, incomplete and private types require
4c4b4cd2 8374 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8375 type Foo;
8376 type FooP is access Foo;
8377 V: FooP;
8378 type Foo is array ...;
4c4b4cd2 8379 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8380 cross-references to such types, we instead substitute for FooP a
8381 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8382 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8383
8384/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8385 exists, otherwise TYPE. */
8386
d2e4a39e 8387struct type *
61ee279c 8388ada_check_typedef (struct type *type)
14f9c5c9 8389{
727e3d2e
JB
8390 if (type == NULL)
8391 return NULL;
8392
720d1a40
JB
8393 /* If our type is a typedef type of a fat pointer, then we're done.
8394 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8395 what allows us to distinguish between fat pointers that represent
8396 array types, and fat pointers that represent array access types
8397 (in both cases, the compiler implements them as fat pointers). */
8398 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8399 && is_thick_pntr (ada_typedef_target_type (type)))
8400 return type;
8401
14f9c5c9
AS
8402 CHECK_TYPEDEF (type);
8403 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 8404 || !TYPE_STUB (type)
14f9c5c9
AS
8405 || TYPE_TAG_NAME (type) == NULL)
8406 return type;
d2e4a39e 8407 else
14f9c5c9 8408 {
0d5cff50 8409 const char *name = TYPE_TAG_NAME (type);
d2e4a39e 8410 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8411
05e522ef
JB
8412 if (type1 == NULL)
8413 return type;
8414
8415 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8416 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8417 types, only for the typedef-to-array types). If that's the case,
8418 strip the typedef layer. */
8419 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8420 type1 = ada_check_typedef (type1);
8421
8422 return type1;
14f9c5c9
AS
8423 }
8424}
8425
8426/* A value representing the data at VALADDR/ADDRESS as described by
8427 type TYPE0, but with a standard (static-sized) type that correctly
8428 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8429 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8430 creation of struct values]. */
14f9c5c9 8431
4c4b4cd2
PH
8432static struct value *
8433ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8434 struct value *val0)
14f9c5c9 8435{
1ed6ede0 8436 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8437
14f9c5c9
AS
8438 if (type == type0 && val0 != NULL)
8439 return val0;
d2e4a39e 8440 else
4c4b4cd2
PH
8441 return value_from_contents_and_address (type, 0, address);
8442}
8443
8444/* A value representing VAL, but with a standard (static-sized) type
8445 that correctly describes it. Does not necessarily create a new
8446 value. */
8447
0c3acc09 8448struct value *
4c4b4cd2
PH
8449ada_to_fixed_value (struct value *val)
8450{
c48db5ca
JB
8451 val = unwrap_value (val);
8452 val = ada_to_fixed_value_create (value_type (val),
8453 value_address (val),
8454 val);
8455 return val;
14f9c5c9 8456}
d2e4a39e 8457\f
14f9c5c9 8458
14f9c5c9
AS
8459/* Attributes */
8460
4c4b4cd2
PH
8461/* Table mapping attribute numbers to names.
8462 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8463
d2e4a39e 8464static const char *attribute_names[] = {
14f9c5c9
AS
8465 "<?>",
8466
d2e4a39e 8467 "first",
14f9c5c9
AS
8468 "last",
8469 "length",
8470 "image",
14f9c5c9
AS
8471 "max",
8472 "min",
4c4b4cd2
PH
8473 "modulus",
8474 "pos",
8475 "size",
8476 "tag",
14f9c5c9 8477 "val",
14f9c5c9
AS
8478 0
8479};
8480
d2e4a39e 8481const char *
4c4b4cd2 8482ada_attribute_name (enum exp_opcode n)
14f9c5c9 8483{
4c4b4cd2
PH
8484 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8485 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8486 else
8487 return attribute_names[0];
8488}
8489
4c4b4cd2 8490/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8491
4c4b4cd2
PH
8492static LONGEST
8493pos_atr (struct value *arg)
14f9c5c9 8494{
24209737
PH
8495 struct value *val = coerce_ref (arg);
8496 struct type *type = value_type (val);
14f9c5c9 8497
d2e4a39e 8498 if (!discrete_type_p (type))
323e0a4a 8499 error (_("'POS only defined on discrete types"));
14f9c5c9
AS
8500
8501 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8502 {
8503 int i;
24209737 8504 LONGEST v = value_as_long (val);
14f9c5c9 8505
d2e4a39e 8506 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2 8507 {
14e75d8e 8508 if (v == TYPE_FIELD_ENUMVAL (type, i))
4c4b4cd2
PH
8509 return i;
8510 }
323e0a4a 8511 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9
AS
8512 }
8513 else
24209737 8514 return value_as_long (val);
4c4b4cd2
PH
8515}
8516
8517static struct value *
3cb382c9 8518value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8519{
3cb382c9 8520 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8521}
8522
4c4b4cd2 8523/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8524
d2e4a39e
AS
8525static struct value *
8526value_val_atr (struct type *type, struct value *arg)
14f9c5c9 8527{
d2e4a39e 8528 if (!discrete_type_p (type))
323e0a4a 8529 error (_("'VAL only defined on discrete types"));
df407dfe 8530 if (!integer_type_p (value_type (arg)))
323e0a4a 8531 error (_("'VAL requires integral argument"));
14f9c5c9
AS
8532
8533 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8534 {
8535 long pos = value_as_long (arg);
5b4ee69b 8536
14f9c5c9 8537 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 8538 error (_("argument to 'VAL out of range"));
14e75d8e 8539 return value_from_longest (type, TYPE_FIELD_ENUMVAL (type, pos));
14f9c5c9
AS
8540 }
8541 else
8542 return value_from_longest (type, value_as_long (arg));
8543}
14f9c5c9 8544\f
d2e4a39e 8545
4c4b4cd2 8546 /* Evaluation */
14f9c5c9 8547
4c4b4cd2
PH
8548/* True if TYPE appears to be an Ada character type.
8549 [At the moment, this is true only for Character and Wide_Character;
8550 It is a heuristic test that could stand improvement]. */
14f9c5c9 8551
d2e4a39e
AS
8552int
8553ada_is_character_type (struct type *type)
14f9c5c9 8554{
7b9f71f2
JB
8555 const char *name;
8556
8557 /* If the type code says it's a character, then assume it really is,
8558 and don't check any further. */
8559 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8560 return 1;
8561
8562 /* Otherwise, assume it's a character type iff it is a discrete type
8563 with a known character type name. */
8564 name = ada_type_name (type);
8565 return (name != NULL
8566 && (TYPE_CODE (type) == TYPE_CODE_INT
8567 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8568 && (strcmp (name, "character") == 0
8569 || strcmp (name, "wide_character") == 0
5a517ebd 8570 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 8571 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8572}
8573
4c4b4cd2 8574/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
8575
8576int
ebf56fd3 8577ada_is_string_type (struct type *type)
14f9c5c9 8578{
61ee279c 8579 type = ada_check_typedef (type);
d2e4a39e 8580 if (type != NULL
14f9c5c9 8581 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
8582 && (ada_is_simple_array_type (type)
8583 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8584 && ada_array_arity (type) == 1)
8585 {
8586 struct type *elttype = ada_array_element_type (type, 1);
8587
8588 return ada_is_character_type (elttype);
8589 }
d2e4a39e 8590 else
14f9c5c9
AS
8591 return 0;
8592}
8593
5bf03f13
JB
8594/* The compiler sometimes provides a parallel XVS type for a given
8595 PAD type. Normally, it is safe to follow the PAD type directly,
8596 but older versions of the compiler have a bug that causes the offset
8597 of its "F" field to be wrong. Following that field in that case
8598 would lead to incorrect results, but this can be worked around
8599 by ignoring the PAD type and using the associated XVS type instead.
8600
8601 Set to True if the debugger should trust the contents of PAD types.
8602 Otherwise, ignore the PAD type if there is a parallel XVS type. */
8603static int trust_pad_over_xvs = 1;
14f9c5c9
AS
8604
8605/* True if TYPE is a struct type introduced by the compiler to force the
8606 alignment of a value. Such types have a single field with a
4c4b4cd2 8607 distinctive name. */
14f9c5c9
AS
8608
8609int
ebf56fd3 8610ada_is_aligner_type (struct type *type)
14f9c5c9 8611{
61ee279c 8612 type = ada_check_typedef (type);
714e53ab 8613
5bf03f13 8614 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
8615 return 0;
8616
14f9c5c9 8617 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
8618 && TYPE_NFIELDS (type) == 1
8619 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
8620}
8621
8622/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 8623 the parallel type. */
14f9c5c9 8624
d2e4a39e
AS
8625struct type *
8626ada_get_base_type (struct type *raw_type)
14f9c5c9 8627{
d2e4a39e
AS
8628 struct type *real_type_namer;
8629 struct type *raw_real_type;
14f9c5c9
AS
8630
8631 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8632 return raw_type;
8633
284614f0
JB
8634 if (ada_is_aligner_type (raw_type))
8635 /* The encoding specifies that we should always use the aligner type.
8636 So, even if this aligner type has an associated XVS type, we should
8637 simply ignore it.
8638
8639 According to the compiler gurus, an XVS type parallel to an aligner
8640 type may exist because of a stabs limitation. In stabs, aligner
8641 types are empty because the field has a variable-sized type, and
8642 thus cannot actually be used as an aligner type. As a result,
8643 we need the associated parallel XVS type to decode the type.
8644 Since the policy in the compiler is to not change the internal
8645 representation based on the debugging info format, we sometimes
8646 end up having a redundant XVS type parallel to the aligner type. */
8647 return raw_type;
8648
14f9c5c9 8649 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 8650 if (real_type_namer == NULL
14f9c5c9
AS
8651 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8652 || TYPE_NFIELDS (real_type_namer) != 1)
8653 return raw_type;
8654
f80d3ff2
JB
8655 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8656 {
8657 /* This is an older encoding form where the base type needs to be
8658 looked up by name. We prefer the newer enconding because it is
8659 more efficient. */
8660 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8661 if (raw_real_type == NULL)
8662 return raw_type;
8663 else
8664 return raw_real_type;
8665 }
8666
8667 /* The field in our XVS type is a reference to the base type. */
8668 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 8669}
14f9c5c9 8670
4c4b4cd2 8671/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 8672
d2e4a39e
AS
8673struct type *
8674ada_aligned_type (struct type *type)
14f9c5c9
AS
8675{
8676 if (ada_is_aligner_type (type))
8677 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8678 else
8679 return ada_get_base_type (type);
8680}
8681
8682
8683/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 8684 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 8685
fc1a4b47
AC
8686const gdb_byte *
8687ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 8688{
d2e4a39e 8689 if (ada_is_aligner_type (type))
14f9c5c9 8690 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
8691 valaddr +
8692 TYPE_FIELD_BITPOS (type,
8693 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
8694 else
8695 return valaddr;
8696}
8697
4c4b4cd2
PH
8698
8699
14f9c5c9 8700/* The printed representation of an enumeration literal with encoded
4c4b4cd2 8701 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
8702const char *
8703ada_enum_name (const char *name)
14f9c5c9 8704{
4c4b4cd2
PH
8705 static char *result;
8706 static size_t result_len = 0;
d2e4a39e 8707 char *tmp;
14f9c5c9 8708
4c4b4cd2
PH
8709 /* First, unqualify the enumeration name:
8710 1. Search for the last '.' character. If we find one, then skip
177b42fe 8711 all the preceding characters, the unqualified name starts
76a01679 8712 right after that dot.
4c4b4cd2 8713 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
8714 translates dots into "__". Search forward for double underscores,
8715 but stop searching when we hit an overloading suffix, which is
8716 of the form "__" followed by digits. */
4c4b4cd2 8717
c3e5cd34
PH
8718 tmp = strrchr (name, '.');
8719 if (tmp != NULL)
4c4b4cd2
PH
8720 name = tmp + 1;
8721 else
14f9c5c9 8722 {
4c4b4cd2
PH
8723 while ((tmp = strstr (name, "__")) != NULL)
8724 {
8725 if (isdigit (tmp[2]))
8726 break;
8727 else
8728 name = tmp + 2;
8729 }
14f9c5c9
AS
8730 }
8731
8732 if (name[0] == 'Q')
8733 {
14f9c5c9 8734 int v;
5b4ee69b 8735
14f9c5c9 8736 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
8737 {
8738 if (sscanf (name + 2, "%x", &v) != 1)
8739 return name;
8740 }
14f9c5c9 8741 else
4c4b4cd2 8742 return name;
14f9c5c9 8743
4c4b4cd2 8744 GROW_VECT (result, result_len, 16);
14f9c5c9 8745 if (isascii (v) && isprint (v))
88c15c34 8746 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 8747 else if (name[1] == 'U')
88c15c34 8748 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 8749 else
88c15c34 8750 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
8751
8752 return result;
8753 }
d2e4a39e 8754 else
4c4b4cd2 8755 {
c3e5cd34
PH
8756 tmp = strstr (name, "__");
8757 if (tmp == NULL)
8758 tmp = strstr (name, "$");
8759 if (tmp != NULL)
4c4b4cd2
PH
8760 {
8761 GROW_VECT (result, result_len, tmp - name + 1);
8762 strncpy (result, name, tmp - name);
8763 result[tmp - name] = '\0';
8764 return result;
8765 }
8766
8767 return name;
8768 }
14f9c5c9
AS
8769}
8770
14f9c5c9
AS
8771/* Evaluate the subexpression of EXP starting at *POS as for
8772 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 8773 expression. */
14f9c5c9 8774
d2e4a39e
AS
8775static struct value *
8776evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 8777{
4b27a620 8778 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
8779}
8780
8781/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 8782 value it wraps. */
14f9c5c9 8783
d2e4a39e
AS
8784static struct value *
8785unwrap_value (struct value *val)
14f9c5c9 8786{
df407dfe 8787 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 8788
14f9c5c9
AS
8789 if (ada_is_aligner_type (type))
8790 {
de4d072f 8791 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 8792 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 8793
14f9c5c9 8794 if (ada_type_name (val_type) == NULL)
4c4b4cd2 8795 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
8796
8797 return unwrap_value (v);
8798 }
d2e4a39e 8799 else
14f9c5c9 8800 {
d2e4a39e 8801 struct type *raw_real_type =
61ee279c 8802 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 8803
5bf03f13
JB
8804 /* If there is no parallel XVS or XVE type, then the value is
8805 already unwrapped. Return it without further modification. */
8806 if ((type == raw_real_type)
8807 && ada_find_parallel_type (type, "___XVE") == NULL)
8808 return val;
14f9c5c9 8809
d2e4a39e 8810 return
4c4b4cd2
PH
8811 coerce_unspec_val_to_type
8812 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 8813 value_address (val),
1ed6ede0 8814 NULL, 1));
14f9c5c9
AS
8815 }
8816}
d2e4a39e
AS
8817
8818static struct value *
8819cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
8820{
8821 LONGEST val;
8822
df407dfe 8823 if (type == value_type (arg))
14f9c5c9 8824 return arg;
df407dfe 8825 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 8826 val = ada_float_to_fixed (type,
df407dfe 8827 ada_fixed_to_float (value_type (arg),
4c4b4cd2 8828 value_as_long (arg)));
d2e4a39e 8829 else
14f9c5c9 8830 {
a53b7a21 8831 DOUBLEST argd = value_as_double (arg);
5b4ee69b 8832
14f9c5c9
AS
8833 val = ada_float_to_fixed (type, argd);
8834 }
8835
8836 return value_from_longest (type, val);
8837}
8838
d2e4a39e 8839static struct value *
a53b7a21 8840cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 8841{
df407dfe 8842 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 8843 value_as_long (arg));
5b4ee69b 8844
a53b7a21 8845 return value_from_double (type, val);
14f9c5c9
AS
8846}
8847
d99dcf51
JB
8848/* Given two array types T1 and T2, return nonzero iff both arrays
8849 contain the same number of elements. */
8850
8851static int
8852ada_same_array_size_p (struct type *t1, struct type *t2)
8853{
8854 LONGEST lo1, hi1, lo2, hi2;
8855
8856 /* Get the array bounds in order to verify that the size of
8857 the two arrays match. */
8858 if (!get_array_bounds (t1, &lo1, &hi1)
8859 || !get_array_bounds (t2, &lo2, &hi2))
8860 error (_("unable to determine array bounds"));
8861
8862 /* To make things easier for size comparison, normalize a bit
8863 the case of empty arrays by making sure that the difference
8864 between upper bound and lower bound is always -1. */
8865 if (lo1 > hi1)
8866 hi1 = lo1 - 1;
8867 if (lo2 > hi2)
8868 hi2 = lo2 - 1;
8869
8870 return (hi1 - lo1 == hi2 - lo2);
8871}
8872
8873/* Assuming that VAL is an array of integrals, and TYPE represents
8874 an array with the same number of elements, but with wider integral
8875 elements, return an array "casted" to TYPE. In practice, this
8876 means that the returned array is built by casting each element
8877 of the original array into TYPE's (wider) element type. */
8878
8879static struct value *
8880ada_promote_array_of_integrals (struct type *type, struct value *val)
8881{
8882 struct type *elt_type = TYPE_TARGET_TYPE (type);
8883 LONGEST lo, hi;
8884 struct value *res;
8885 LONGEST i;
8886
8887 /* Verify that both val and type are arrays of scalars, and
8888 that the size of val's elements is smaller than the size
8889 of type's element. */
8890 gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
8891 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
8892 gdb_assert (TYPE_CODE (value_type (val)) == TYPE_CODE_ARRAY);
8893 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
8894 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
8895 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
8896
8897 if (!get_array_bounds (type, &lo, &hi))
8898 error (_("unable to determine array bounds"));
8899
8900 res = allocate_value (type);
8901
8902 /* Promote each array element. */
8903 for (i = 0; i < hi - lo + 1; i++)
8904 {
8905 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
8906
8907 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
8908 value_contents_all (elt), TYPE_LENGTH (elt_type));
8909 }
8910
8911 return res;
8912}
8913
4c4b4cd2
PH
8914/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8915 return the converted value. */
8916
d2e4a39e
AS
8917static struct value *
8918coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 8919{
df407dfe 8920 struct type *type2 = value_type (val);
5b4ee69b 8921
14f9c5c9
AS
8922 if (type == type2)
8923 return val;
8924
61ee279c
PH
8925 type2 = ada_check_typedef (type2);
8926 type = ada_check_typedef (type);
14f9c5c9 8927
d2e4a39e
AS
8928 if (TYPE_CODE (type2) == TYPE_CODE_PTR
8929 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
8930 {
8931 val = ada_value_ind (val);
df407dfe 8932 type2 = value_type (val);
14f9c5c9
AS
8933 }
8934
d2e4a39e 8935 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
8936 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8937 {
d99dcf51
JB
8938 if (!ada_same_array_size_p (type, type2))
8939 error (_("cannot assign arrays of different length"));
8940
8941 if (is_integral_type (TYPE_TARGET_TYPE (type))
8942 && is_integral_type (TYPE_TARGET_TYPE (type2))
8943 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8944 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
8945 {
8946 /* Allow implicit promotion of the array elements to
8947 a wider type. */
8948 return ada_promote_array_of_integrals (type, val);
8949 }
8950
8951 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8952 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 8953 error (_("Incompatible types in assignment"));
04624583 8954 deprecated_set_value_type (val, type);
14f9c5c9 8955 }
d2e4a39e 8956 return val;
14f9c5c9
AS
8957}
8958
4c4b4cd2
PH
8959static struct value *
8960ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8961{
8962 struct value *val;
8963 struct type *type1, *type2;
8964 LONGEST v, v1, v2;
8965
994b9211
AC
8966 arg1 = coerce_ref (arg1);
8967 arg2 = coerce_ref (arg2);
18af8284
JB
8968 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
8969 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 8970
76a01679
JB
8971 if (TYPE_CODE (type1) != TYPE_CODE_INT
8972 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
8973 return value_binop (arg1, arg2, op);
8974
76a01679 8975 switch (op)
4c4b4cd2
PH
8976 {
8977 case BINOP_MOD:
8978 case BINOP_DIV:
8979 case BINOP_REM:
8980 break;
8981 default:
8982 return value_binop (arg1, arg2, op);
8983 }
8984
8985 v2 = value_as_long (arg2);
8986 if (v2 == 0)
323e0a4a 8987 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
8988
8989 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8990 return value_binop (arg1, arg2, op);
8991
8992 v1 = value_as_long (arg1);
8993 switch (op)
8994 {
8995 case BINOP_DIV:
8996 v = v1 / v2;
76a01679
JB
8997 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
8998 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
8999 break;
9000 case BINOP_REM:
9001 v = v1 % v2;
76a01679
JB
9002 if (v * v1 < 0)
9003 v -= v2;
4c4b4cd2
PH
9004 break;
9005 default:
9006 /* Should not reach this point. */
9007 v = 0;
9008 }
9009
9010 val = allocate_value (type1);
990a07ab 9011 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
9012 TYPE_LENGTH (value_type (val)),
9013 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
9014 return val;
9015}
9016
9017static int
9018ada_value_equal (struct value *arg1, struct value *arg2)
9019{
df407dfe
AC
9020 if (ada_is_direct_array_type (value_type (arg1))
9021 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9022 {
f58b38bf
JB
9023 /* Automatically dereference any array reference before
9024 we attempt to perform the comparison. */
9025 arg1 = ada_coerce_ref (arg1);
9026 arg2 = ada_coerce_ref (arg2);
9027
4c4b4cd2
PH
9028 arg1 = ada_coerce_to_simple_array (arg1);
9029 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
9030 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
9031 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 9032 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9033 /* FIXME: The following works only for types whose
76a01679
JB
9034 representations use all bits (no padding or undefined bits)
9035 and do not have user-defined equality. */
9036 return
df407dfe 9037 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 9038 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 9039 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
9040 }
9041 return value_equal (arg1, arg2);
9042}
9043
52ce6436
PH
9044/* Total number of component associations in the aggregate starting at
9045 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9046 OP_AGGREGATE. */
52ce6436
PH
9047
9048static int
9049num_component_specs (struct expression *exp, int pc)
9050{
9051 int n, m, i;
5b4ee69b 9052
52ce6436
PH
9053 m = exp->elts[pc + 1].longconst;
9054 pc += 3;
9055 n = 0;
9056 for (i = 0; i < m; i += 1)
9057 {
9058 switch (exp->elts[pc].opcode)
9059 {
9060 default:
9061 n += 1;
9062 break;
9063 case OP_CHOICES:
9064 n += exp->elts[pc + 1].longconst;
9065 break;
9066 }
9067 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9068 }
9069 return n;
9070}
9071
9072/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9073 component of LHS (a simple array or a record), updating *POS past
9074 the expression, assuming that LHS is contained in CONTAINER. Does
9075 not modify the inferior's memory, nor does it modify LHS (unless
9076 LHS == CONTAINER). */
9077
9078static void
9079assign_component (struct value *container, struct value *lhs, LONGEST index,
9080 struct expression *exp, int *pos)
9081{
9082 struct value *mark = value_mark ();
9083 struct value *elt;
5b4ee69b 9084
52ce6436
PH
9085 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
9086 {
22601c15
UW
9087 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9088 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9089
52ce6436
PH
9090 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9091 }
9092 else
9093 {
9094 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9095 elt = ada_to_fixed_value (elt);
52ce6436
PH
9096 }
9097
9098 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9099 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9100 else
9101 value_assign_to_component (container, elt,
9102 ada_evaluate_subexp (NULL, exp, pos,
9103 EVAL_NORMAL));
9104
9105 value_free_to_mark (mark);
9106}
9107
9108/* Assuming that LHS represents an lvalue having a record or array
9109 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9110 of that aggregate's value to LHS, advancing *POS past the
9111 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9112 lvalue containing LHS (possibly LHS itself). Does not modify
9113 the inferior's memory, nor does it modify the contents of
0963b4bd 9114 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9115
9116static struct value *
9117assign_aggregate (struct value *container,
9118 struct value *lhs, struct expression *exp,
9119 int *pos, enum noside noside)
9120{
9121 struct type *lhs_type;
9122 int n = exp->elts[*pos+1].longconst;
9123 LONGEST low_index, high_index;
9124 int num_specs;
9125 LONGEST *indices;
9126 int max_indices, num_indices;
52ce6436 9127 int i;
52ce6436
PH
9128
9129 *pos += 3;
9130 if (noside != EVAL_NORMAL)
9131 {
52ce6436
PH
9132 for (i = 0; i < n; i += 1)
9133 ada_evaluate_subexp (NULL, exp, pos, noside);
9134 return container;
9135 }
9136
9137 container = ada_coerce_ref (container);
9138 if (ada_is_direct_array_type (value_type (container)))
9139 container = ada_coerce_to_simple_array (container);
9140 lhs = ada_coerce_ref (lhs);
9141 if (!deprecated_value_modifiable (lhs))
9142 error (_("Left operand of assignment is not a modifiable lvalue."));
9143
9144 lhs_type = value_type (lhs);
9145 if (ada_is_direct_array_type (lhs_type))
9146 {
9147 lhs = ada_coerce_to_simple_array (lhs);
9148 lhs_type = value_type (lhs);
9149 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9150 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436
PH
9151 }
9152 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
9153 {
9154 low_index = 0;
9155 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9156 }
9157 else
9158 error (_("Left-hand side must be array or record."));
9159
9160 num_specs = num_component_specs (exp, *pos - 3);
9161 max_indices = 4 * num_specs + 4;
9162 indices = alloca (max_indices * sizeof (indices[0]));
9163 indices[0] = indices[1] = low_index - 1;
9164 indices[2] = indices[3] = high_index + 1;
9165 num_indices = 4;
9166
9167 for (i = 0; i < n; i += 1)
9168 {
9169 switch (exp->elts[*pos].opcode)
9170 {
1fbf5ada
JB
9171 case OP_CHOICES:
9172 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9173 &num_indices, max_indices,
9174 low_index, high_index);
9175 break;
9176 case OP_POSITIONAL:
9177 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
9178 &num_indices, max_indices,
9179 low_index, high_index);
1fbf5ada
JB
9180 break;
9181 case OP_OTHERS:
9182 if (i != n-1)
9183 error (_("Misplaced 'others' clause"));
9184 aggregate_assign_others (container, lhs, exp, pos, indices,
9185 num_indices, low_index, high_index);
9186 break;
9187 default:
9188 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9189 }
9190 }
9191
9192 return container;
9193}
9194
9195/* Assign into the component of LHS indexed by the OP_POSITIONAL
9196 construct at *POS, updating *POS past the construct, given that
9197 the positions are relative to lower bound LOW, where HIGH is the
9198 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9199 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 9200 assign_aggregate. */
52ce6436
PH
9201static void
9202aggregate_assign_positional (struct value *container,
9203 struct value *lhs, struct expression *exp,
9204 int *pos, LONGEST *indices, int *num_indices,
9205 int max_indices, LONGEST low, LONGEST high)
9206{
9207 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9208
9209 if (ind - 1 == high)
e1d5a0d2 9210 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9211 if (ind <= high)
9212 {
9213 add_component_interval (ind, ind, indices, num_indices, max_indices);
9214 *pos += 3;
9215 assign_component (container, lhs, ind, exp, pos);
9216 }
9217 else
9218 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9219}
9220
9221/* Assign into the components of LHS indexed by the OP_CHOICES
9222 construct at *POS, updating *POS past the construct, given that
9223 the allowable indices are LOW..HIGH. Record the indices assigned
9224 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 9225 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9226static void
9227aggregate_assign_from_choices (struct value *container,
9228 struct value *lhs, struct expression *exp,
9229 int *pos, LONGEST *indices, int *num_indices,
9230 int max_indices, LONGEST low, LONGEST high)
9231{
9232 int j;
9233 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9234 int choice_pos, expr_pc;
9235 int is_array = ada_is_direct_array_type (value_type (lhs));
9236
9237 choice_pos = *pos += 3;
9238
9239 for (j = 0; j < n_choices; j += 1)
9240 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9241 expr_pc = *pos;
9242 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9243
9244 for (j = 0; j < n_choices; j += 1)
9245 {
9246 LONGEST lower, upper;
9247 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9248
52ce6436
PH
9249 if (op == OP_DISCRETE_RANGE)
9250 {
9251 choice_pos += 1;
9252 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9253 EVAL_NORMAL));
9254 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9255 EVAL_NORMAL));
9256 }
9257 else if (is_array)
9258 {
9259 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9260 EVAL_NORMAL));
9261 upper = lower;
9262 }
9263 else
9264 {
9265 int ind;
0d5cff50 9266 const char *name;
5b4ee69b 9267
52ce6436
PH
9268 switch (op)
9269 {
9270 case OP_NAME:
9271 name = &exp->elts[choice_pos + 2].string;
9272 break;
9273 case OP_VAR_VALUE:
9274 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
9275 break;
9276 default:
9277 error (_("Invalid record component association."));
9278 }
9279 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9280 ind = 0;
9281 if (! find_struct_field (name, value_type (lhs), 0,
9282 NULL, NULL, NULL, NULL, &ind))
9283 error (_("Unknown component name: %s."), name);
9284 lower = upper = ind;
9285 }
9286
9287 if (lower <= upper && (lower < low || upper > high))
9288 error (_("Index in component association out of bounds."));
9289
9290 add_component_interval (lower, upper, indices, num_indices,
9291 max_indices);
9292 while (lower <= upper)
9293 {
9294 int pos1;
5b4ee69b 9295
52ce6436
PH
9296 pos1 = expr_pc;
9297 assign_component (container, lhs, lower, exp, &pos1);
9298 lower += 1;
9299 }
9300 }
9301}
9302
9303/* Assign the value of the expression in the OP_OTHERS construct in
9304 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9305 have not been previously assigned. The index intervals already assigned
9306 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 9307 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9308static void
9309aggregate_assign_others (struct value *container,
9310 struct value *lhs, struct expression *exp,
9311 int *pos, LONGEST *indices, int num_indices,
9312 LONGEST low, LONGEST high)
9313{
9314 int i;
5ce64950 9315 int expr_pc = *pos + 1;
52ce6436
PH
9316
9317 for (i = 0; i < num_indices - 2; i += 2)
9318 {
9319 LONGEST ind;
5b4ee69b 9320
52ce6436
PH
9321 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9322 {
5ce64950 9323 int localpos;
5b4ee69b 9324
5ce64950
MS
9325 localpos = expr_pc;
9326 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9327 }
9328 }
9329 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9330}
9331
9332/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9333 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9334 modifying *SIZE as needed. It is an error if *SIZE exceeds
9335 MAX_SIZE. The resulting intervals do not overlap. */
9336static void
9337add_component_interval (LONGEST low, LONGEST high,
9338 LONGEST* indices, int *size, int max_size)
9339{
9340 int i, j;
5b4ee69b 9341
52ce6436
PH
9342 for (i = 0; i < *size; i += 2) {
9343 if (high >= indices[i] && low <= indices[i + 1])
9344 {
9345 int kh;
5b4ee69b 9346
52ce6436
PH
9347 for (kh = i + 2; kh < *size; kh += 2)
9348 if (high < indices[kh])
9349 break;
9350 if (low < indices[i])
9351 indices[i] = low;
9352 indices[i + 1] = indices[kh - 1];
9353 if (high > indices[i + 1])
9354 indices[i + 1] = high;
9355 memcpy (indices + i + 2, indices + kh, *size - kh);
9356 *size -= kh - i - 2;
9357 return;
9358 }
9359 else if (high < indices[i])
9360 break;
9361 }
9362
9363 if (*size == max_size)
9364 error (_("Internal error: miscounted aggregate components."));
9365 *size += 2;
9366 for (j = *size-1; j >= i+2; j -= 1)
9367 indices[j] = indices[j - 2];
9368 indices[i] = low;
9369 indices[i + 1] = high;
9370}
9371
6e48bd2c
JB
9372/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9373 is different. */
9374
9375static struct value *
9376ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
9377{
9378 if (type == ada_check_typedef (value_type (arg2)))
9379 return arg2;
9380
9381 if (ada_is_fixed_point_type (type))
9382 return (cast_to_fixed (type, arg2));
9383
9384 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 9385 return cast_from_fixed (type, arg2);
6e48bd2c
JB
9386
9387 return value_cast (type, arg2);
9388}
9389
284614f0
JB
9390/* Evaluating Ada expressions, and printing their result.
9391 ------------------------------------------------------
9392
21649b50
JB
9393 1. Introduction:
9394 ----------------
9395
284614f0
JB
9396 We usually evaluate an Ada expression in order to print its value.
9397 We also evaluate an expression in order to print its type, which
9398 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9399 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9400 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9401 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9402 similar.
9403
9404 Evaluating expressions is a little more complicated for Ada entities
9405 than it is for entities in languages such as C. The main reason for
9406 this is that Ada provides types whose definition might be dynamic.
9407 One example of such types is variant records. Or another example
9408 would be an array whose bounds can only be known at run time.
9409
9410 The following description is a general guide as to what should be
9411 done (and what should NOT be done) in order to evaluate an expression
9412 involving such types, and when. This does not cover how the semantic
9413 information is encoded by GNAT as this is covered separatly. For the
9414 document used as the reference for the GNAT encoding, see exp_dbug.ads
9415 in the GNAT sources.
9416
9417 Ideally, we should embed each part of this description next to its
9418 associated code. Unfortunately, the amount of code is so vast right
9419 now that it's hard to see whether the code handling a particular
9420 situation might be duplicated or not. One day, when the code is
9421 cleaned up, this guide might become redundant with the comments
9422 inserted in the code, and we might want to remove it.
9423
21649b50
JB
9424 2. ``Fixing'' an Entity, the Simple Case:
9425 -----------------------------------------
9426
284614f0
JB
9427 When evaluating Ada expressions, the tricky issue is that they may
9428 reference entities whose type contents and size are not statically
9429 known. Consider for instance a variant record:
9430
9431 type Rec (Empty : Boolean := True) is record
9432 case Empty is
9433 when True => null;
9434 when False => Value : Integer;
9435 end case;
9436 end record;
9437 Yes : Rec := (Empty => False, Value => 1);
9438 No : Rec := (empty => True);
9439
9440 The size and contents of that record depends on the value of the
9441 descriminant (Rec.Empty). At this point, neither the debugging
9442 information nor the associated type structure in GDB are able to
9443 express such dynamic types. So what the debugger does is to create
9444 "fixed" versions of the type that applies to the specific object.
9445 We also informally refer to this opperation as "fixing" an object,
9446 which means creating its associated fixed type.
9447
9448 Example: when printing the value of variable "Yes" above, its fixed
9449 type would look like this:
9450
9451 type Rec is record
9452 Empty : Boolean;
9453 Value : Integer;
9454 end record;
9455
9456 On the other hand, if we printed the value of "No", its fixed type
9457 would become:
9458
9459 type Rec is record
9460 Empty : Boolean;
9461 end record;
9462
9463 Things become a little more complicated when trying to fix an entity
9464 with a dynamic type that directly contains another dynamic type,
9465 such as an array of variant records, for instance. There are
9466 two possible cases: Arrays, and records.
9467
21649b50
JB
9468 3. ``Fixing'' Arrays:
9469 ---------------------
9470
9471 The type structure in GDB describes an array in terms of its bounds,
9472 and the type of its elements. By design, all elements in the array
9473 have the same type and we cannot represent an array of variant elements
9474 using the current type structure in GDB. When fixing an array,
9475 we cannot fix the array element, as we would potentially need one
9476 fixed type per element of the array. As a result, the best we can do
9477 when fixing an array is to produce an array whose bounds and size
9478 are correct (allowing us to read it from memory), but without having
9479 touched its element type. Fixing each element will be done later,
9480 when (if) necessary.
9481
9482 Arrays are a little simpler to handle than records, because the same
9483 amount of memory is allocated for each element of the array, even if
1b536f04 9484 the amount of space actually used by each element differs from element
21649b50 9485 to element. Consider for instance the following array of type Rec:
284614f0
JB
9486
9487 type Rec_Array is array (1 .. 2) of Rec;
9488
1b536f04
JB
9489 The actual amount of memory occupied by each element might be different
9490 from element to element, depending on the value of their discriminant.
21649b50 9491 But the amount of space reserved for each element in the array remains
1b536f04 9492 fixed regardless. So we simply need to compute that size using
21649b50
JB
9493 the debugging information available, from which we can then determine
9494 the array size (we multiply the number of elements of the array by
9495 the size of each element).
9496
9497 The simplest case is when we have an array of a constrained element
9498 type. For instance, consider the following type declarations:
9499
9500 type Bounded_String (Max_Size : Integer) is
9501 Length : Integer;
9502 Buffer : String (1 .. Max_Size);
9503 end record;
9504 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9505
9506 In this case, the compiler describes the array as an array of
9507 variable-size elements (identified by its XVS suffix) for which
9508 the size can be read in the parallel XVZ variable.
9509
9510 In the case of an array of an unconstrained element type, the compiler
9511 wraps the array element inside a private PAD type. This type should not
9512 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9513 that we also use the adjective "aligner" in our code to designate
9514 these wrapper types.
9515
1b536f04 9516 In some cases, the size allocated for each element is statically
21649b50
JB
9517 known. In that case, the PAD type already has the correct size,
9518 and the array element should remain unfixed.
9519
9520 But there are cases when this size is not statically known.
9521 For instance, assuming that "Five" is an integer variable:
284614f0
JB
9522
9523 type Dynamic is array (1 .. Five) of Integer;
9524 type Wrapper (Has_Length : Boolean := False) is record
9525 Data : Dynamic;
9526 case Has_Length is
9527 when True => Length : Integer;
9528 when False => null;
9529 end case;
9530 end record;
9531 type Wrapper_Array is array (1 .. 2) of Wrapper;
9532
9533 Hello : Wrapper_Array := (others => (Has_Length => True,
9534 Data => (others => 17),
9535 Length => 1));
9536
9537
9538 The debugging info would describe variable Hello as being an
9539 array of a PAD type. The size of that PAD type is not statically
9540 known, but can be determined using a parallel XVZ variable.
9541 In that case, a copy of the PAD type with the correct size should
9542 be used for the fixed array.
9543
21649b50
JB
9544 3. ``Fixing'' record type objects:
9545 ----------------------------------
9546
9547 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9548 record types. In this case, in order to compute the associated
9549 fixed type, we need to determine the size and offset of each of
9550 its components. This, in turn, requires us to compute the fixed
9551 type of each of these components.
9552
9553 Consider for instance the example:
9554
9555 type Bounded_String (Max_Size : Natural) is record
9556 Str : String (1 .. Max_Size);
9557 Length : Natural;
9558 end record;
9559 My_String : Bounded_String (Max_Size => 10);
9560
9561 In that case, the position of field "Length" depends on the size
9562 of field Str, which itself depends on the value of the Max_Size
21649b50 9563 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9564 we need to fix the type of field Str. Therefore, fixing a variant
9565 record requires us to fix each of its components.
9566
9567 However, if a component does not have a dynamic size, the component
9568 should not be fixed. In particular, fields that use a PAD type
9569 should not fixed. Here is an example where this might happen
9570 (assuming type Rec above):
9571
9572 type Container (Big : Boolean) is record
9573 First : Rec;
9574 After : Integer;
9575 case Big is
9576 when True => Another : Integer;
9577 when False => null;
9578 end case;
9579 end record;
9580 My_Container : Container := (Big => False,
9581 First => (Empty => True),
9582 After => 42);
9583
9584 In that example, the compiler creates a PAD type for component First,
9585 whose size is constant, and then positions the component After just
9586 right after it. The offset of component After is therefore constant
9587 in this case.
9588
9589 The debugger computes the position of each field based on an algorithm
9590 that uses, among other things, the actual position and size of the field
21649b50
JB
9591 preceding it. Let's now imagine that the user is trying to print
9592 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9593 end up computing the offset of field After based on the size of the
9594 fixed version of field First. And since in our example First has
9595 only one actual field, the size of the fixed type is actually smaller
9596 than the amount of space allocated to that field, and thus we would
9597 compute the wrong offset of field After.
9598
21649b50
JB
9599 To make things more complicated, we need to watch out for dynamic
9600 components of variant records (identified by the ___XVL suffix in
9601 the component name). Even if the target type is a PAD type, the size
9602 of that type might not be statically known. So the PAD type needs
9603 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9604 we might end up with the wrong size for our component. This can be
9605 observed with the following type declarations:
284614f0
JB
9606
9607 type Octal is new Integer range 0 .. 7;
9608 type Octal_Array is array (Positive range <>) of Octal;
9609 pragma Pack (Octal_Array);
9610
9611 type Octal_Buffer (Size : Positive) is record
9612 Buffer : Octal_Array (1 .. Size);
9613 Length : Integer;
9614 end record;
9615
9616 In that case, Buffer is a PAD type whose size is unset and needs
9617 to be computed by fixing the unwrapped type.
9618
21649b50
JB
9619 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9620 ----------------------------------------------------------
9621
9622 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
9623 thus far, be actually fixed?
9624
9625 The answer is: Only when referencing that element. For instance
9626 when selecting one component of a record, this specific component
9627 should be fixed at that point in time. Or when printing the value
9628 of a record, each component should be fixed before its value gets
9629 printed. Similarly for arrays, the element of the array should be
9630 fixed when printing each element of the array, or when extracting
9631 one element out of that array. On the other hand, fixing should
9632 not be performed on the elements when taking a slice of an array!
9633
9634 Note that one of the side-effects of miscomputing the offset and
9635 size of each field is that we end up also miscomputing the size
9636 of the containing type. This can have adverse results when computing
9637 the value of an entity. GDB fetches the value of an entity based
9638 on the size of its type, and thus a wrong size causes GDB to fetch
9639 the wrong amount of memory. In the case where the computed size is
9640 too small, GDB fetches too little data to print the value of our
9641 entiry. Results in this case as unpredicatble, as we usually read
9642 past the buffer containing the data =:-o. */
9643
9644/* Implement the evaluate_exp routine in the exp_descriptor structure
9645 for the Ada language. */
9646
52ce6436 9647static struct value *
ebf56fd3 9648ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 9649 int *pos, enum noside noside)
14f9c5c9
AS
9650{
9651 enum exp_opcode op;
b5385fc0 9652 int tem;
14f9c5c9
AS
9653 int pc;
9654 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9655 struct type *type;
52ce6436 9656 int nargs, oplen;
d2e4a39e 9657 struct value **argvec;
14f9c5c9 9658
d2e4a39e
AS
9659 pc = *pos;
9660 *pos += 1;
14f9c5c9
AS
9661 op = exp->elts[pc].opcode;
9662
d2e4a39e 9663 switch (op)
14f9c5c9
AS
9664 {
9665 default:
9666 *pos -= 1;
6e48bd2c 9667 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
9668
9669 if (noside == EVAL_NORMAL)
9670 arg1 = unwrap_value (arg1);
6e48bd2c
JB
9671
9672 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9673 then we need to perform the conversion manually, because
9674 evaluate_subexp_standard doesn't do it. This conversion is
9675 necessary in Ada because the different kinds of float/fixed
9676 types in Ada have different representations.
9677
9678 Similarly, we need to perform the conversion from OP_LONG
9679 ourselves. */
9680 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9681 arg1 = ada_value_cast (expect_type, arg1, noside);
9682
9683 return arg1;
4c4b4cd2
PH
9684
9685 case OP_STRING:
9686 {
76a01679 9687 struct value *result;
5b4ee69b 9688
76a01679
JB
9689 *pos -= 1;
9690 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9691 /* The result type will have code OP_STRING, bashed there from
9692 OP_ARRAY. Bash it back. */
df407dfe
AC
9693 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9694 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 9695 return result;
4c4b4cd2 9696 }
14f9c5c9
AS
9697
9698 case UNOP_CAST:
9699 (*pos) += 2;
9700 type = exp->elts[pc + 1].type;
9701 arg1 = evaluate_subexp (type, exp, pos, noside);
9702 if (noside == EVAL_SKIP)
4c4b4cd2 9703 goto nosideret;
6e48bd2c 9704 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
9705 return arg1;
9706
4c4b4cd2
PH
9707 case UNOP_QUAL:
9708 (*pos) += 2;
9709 type = exp->elts[pc + 1].type;
9710 return ada_evaluate_subexp (type, exp, pos, noside);
9711
14f9c5c9
AS
9712 case BINOP_ASSIGN:
9713 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
9714 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9715 {
9716 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9717 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9718 return arg1;
9719 return ada_value_assign (arg1, arg1);
9720 }
003f3813
JB
9721 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9722 except if the lhs of our assignment is a convenience variable.
9723 In the case of assigning to a convenience variable, the lhs
9724 should be exactly the result of the evaluation of the rhs. */
9725 type = value_type (arg1);
9726 if (VALUE_LVAL (arg1) == lval_internalvar)
9727 type = NULL;
9728 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 9729 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 9730 return arg1;
df407dfe
AC
9731 if (ada_is_fixed_point_type (value_type (arg1)))
9732 arg2 = cast_to_fixed (value_type (arg1), arg2);
9733 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 9734 error
323e0a4a 9735 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 9736 else
df407dfe 9737 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 9738 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
9739
9740 case BINOP_ADD:
9741 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9742 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9743 if (noside == EVAL_SKIP)
4c4b4cd2 9744 goto nosideret;
2ac8a782
JB
9745 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9746 return (value_from_longest
9747 (value_type (arg1),
9748 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
9749 if ((ada_is_fixed_point_type (value_type (arg1))
9750 || ada_is_fixed_point_type (value_type (arg2)))
9751 && value_type (arg1) != value_type (arg2))
323e0a4a 9752 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
9753 /* Do the addition, and cast the result to the type of the first
9754 argument. We cannot cast the result to a reference type, so if
9755 ARG1 is a reference type, find its underlying type. */
9756 type = value_type (arg1);
9757 while (TYPE_CODE (type) == TYPE_CODE_REF)
9758 type = TYPE_TARGET_TYPE (type);
f44316fa 9759 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 9760 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
9761
9762 case BINOP_SUB:
9763 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9764 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9765 if (noside == EVAL_SKIP)
4c4b4cd2 9766 goto nosideret;
2ac8a782
JB
9767 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9768 return (value_from_longest
9769 (value_type (arg1),
9770 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
9771 if ((ada_is_fixed_point_type (value_type (arg1))
9772 || ada_is_fixed_point_type (value_type (arg2)))
9773 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
9774 error (_("Operands of fixed-point subtraction "
9775 "must have the same type"));
b7789565
JB
9776 /* Do the substraction, and cast the result to the type of the first
9777 argument. We cannot cast the result to a reference type, so if
9778 ARG1 is a reference type, find its underlying type. */
9779 type = value_type (arg1);
9780 while (TYPE_CODE (type) == TYPE_CODE_REF)
9781 type = TYPE_TARGET_TYPE (type);
f44316fa 9782 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 9783 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
9784
9785 case BINOP_MUL:
9786 case BINOP_DIV:
e1578042
JB
9787 case BINOP_REM:
9788 case BINOP_MOD:
14f9c5c9
AS
9789 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9790 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9791 if (noside == EVAL_SKIP)
4c4b4cd2 9792 goto nosideret;
e1578042 9793 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
9794 {
9795 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9796 return value_zero (value_type (arg1), not_lval);
9797 }
14f9c5c9 9798 else
4c4b4cd2 9799 {
a53b7a21 9800 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 9801 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 9802 arg1 = cast_from_fixed (type, arg1);
df407dfe 9803 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 9804 arg2 = cast_from_fixed (type, arg2);
f44316fa 9805 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
9806 return ada_value_binop (arg1, arg2, op);
9807 }
9808
4c4b4cd2
PH
9809 case BINOP_EQUAL:
9810 case BINOP_NOTEQUAL:
14f9c5c9 9811 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 9812 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 9813 if (noside == EVAL_SKIP)
76a01679 9814 goto nosideret;
4c4b4cd2 9815 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 9816 tem = 0;
4c4b4cd2 9817 else
f44316fa
UW
9818 {
9819 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9820 tem = ada_value_equal (arg1, arg2);
9821 }
4c4b4cd2 9822 if (op == BINOP_NOTEQUAL)
76a01679 9823 tem = !tem;
fbb06eb1
UW
9824 type = language_bool_type (exp->language_defn, exp->gdbarch);
9825 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
9826
9827 case UNOP_NEG:
9828 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9829 if (noside == EVAL_SKIP)
9830 goto nosideret;
df407dfe
AC
9831 else if (ada_is_fixed_point_type (value_type (arg1)))
9832 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 9833 else
f44316fa
UW
9834 {
9835 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9836 return value_neg (arg1);
9837 }
4c4b4cd2 9838
2330c6c6
JB
9839 case BINOP_LOGICAL_AND:
9840 case BINOP_LOGICAL_OR:
9841 case UNOP_LOGICAL_NOT:
000d5124
JB
9842 {
9843 struct value *val;
9844
9845 *pos -= 1;
9846 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
9847 type = language_bool_type (exp->language_defn, exp->gdbarch);
9848 return value_cast (type, val);
000d5124 9849 }
2330c6c6
JB
9850
9851 case BINOP_BITWISE_AND:
9852 case BINOP_BITWISE_IOR:
9853 case BINOP_BITWISE_XOR:
000d5124
JB
9854 {
9855 struct value *val;
9856
9857 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9858 *pos = pc;
9859 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
9860
9861 return value_cast (value_type (arg1), val);
9862 }
2330c6c6 9863
14f9c5c9
AS
9864 case OP_VAR_VALUE:
9865 *pos -= 1;
6799def4 9866
14f9c5c9 9867 if (noside == EVAL_SKIP)
4c4b4cd2
PH
9868 {
9869 *pos += 4;
9870 goto nosideret;
9871 }
9872 else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
9873 /* Only encountered when an unresolved symbol occurs in a
9874 context other than a function call, in which case, it is
52ce6436 9875 invalid. */
323e0a4a 9876 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 9877 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
14f9c5c9 9878 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 9879 {
0c1f74cf 9880 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
9881 /* Check to see if this is a tagged type. We also need to handle
9882 the case where the type is a reference to a tagged type, but
9883 we have to be careful to exclude pointers to tagged types.
9884 The latter should be shown as usual (as a pointer), whereas
9885 a reference should mostly be transparent to the user. */
9886 if (ada_is_tagged_type (type, 0)
9887 || (TYPE_CODE(type) == TYPE_CODE_REF
9888 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0c1f74cf
JB
9889 {
9890 /* Tagged types are a little special in the fact that the real
9891 type is dynamic and can only be determined by inspecting the
9892 object's tag. This means that we need to get the object's
9893 value first (EVAL_NORMAL) and then extract the actual object
9894 type from its tag.
9895
9896 Note that we cannot skip the final step where we extract
9897 the object type from its tag, because the EVAL_NORMAL phase
9898 results in dynamic components being resolved into fixed ones.
9899 This can cause problems when trying to print the type
9900 description of tagged types whose parent has a dynamic size:
9901 We use the type name of the "_parent" component in order
9902 to print the name of the ancestor type in the type description.
9903 If that component had a dynamic size, the resolution into
9904 a fixed type would result in the loss of that type name,
9905 thus preventing us from printing the name of the ancestor
9906 type in the type description. */
9907 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
b50d69b5
JG
9908
9909 if (TYPE_CODE (type) != TYPE_CODE_REF)
9910 {
9911 struct type *actual_type;
9912
9913 actual_type = type_from_tag (ada_value_tag (arg1));
9914 if (actual_type == NULL)
9915 /* If, for some reason, we were unable to determine
9916 the actual type from the tag, then use the static
9917 approximation that we just computed as a fallback.
9918 This can happen if the debugging information is
9919 incomplete, for instance. */
9920 actual_type = type;
9921 return value_zero (actual_type, not_lval);
9922 }
9923 else
9924 {
9925 /* In the case of a ref, ada_coerce_ref takes care
9926 of determining the actual type. But the evaluation
9927 should return a ref as it should be valid to ask
9928 for its address; so rebuild a ref after coerce. */
9929 arg1 = ada_coerce_ref (arg1);
9930 return value_ref (arg1);
9931 }
0c1f74cf
JB
9932 }
9933
4c4b4cd2
PH
9934 *pos += 4;
9935 return value_zero
9936 (to_static_fixed_type
9937 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
9938 not_lval);
9939 }
d2e4a39e 9940 else
4c4b4cd2 9941 {
284614f0 9942 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
4c4b4cd2
PH
9943 return ada_to_fixed_value (arg1);
9944 }
9945
9946 case OP_FUNCALL:
9947 (*pos) += 2;
9948
9949 /* Allocate arg vector, including space for the function to be
9950 called in argvec[0] and a terminating NULL. */
9951 nargs = longest_to_int (exp->elts[pc + 1].longconst);
9952 argvec =
9953 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
9954
9955 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 9956 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 9957 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
9958 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
9959 else
9960 {
9961 for (tem = 0; tem <= nargs; tem += 1)
9962 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9963 argvec[tem] = 0;
9964
9965 if (noside == EVAL_SKIP)
9966 goto nosideret;
9967 }
9968
ad82864c
JB
9969 if (ada_is_constrained_packed_array_type
9970 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 9971 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
9972 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
9973 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
9974 /* This is a packed array that has already been fixed, and
9975 therefore already coerced to a simple array. Nothing further
9976 to do. */
9977 ;
df407dfe
AC
9978 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
9979 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
76a01679 9980 && VALUE_LVAL (argvec[0]) == lval_memory))
4c4b4cd2
PH
9981 argvec[0] = value_addr (argvec[0]);
9982
df407dfe 9983 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
9984
9985 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
9986 them. So, if this is an array typedef (encoding use for array
9987 access types encoded as fat pointers), strip it now. */
720d1a40
JB
9988 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
9989 type = ada_typedef_target_type (type);
9990
4c4b4cd2
PH
9991 if (TYPE_CODE (type) == TYPE_CODE_PTR)
9992 {
61ee279c 9993 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
9994 {
9995 case TYPE_CODE_FUNC:
61ee279c 9996 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
9997 break;
9998 case TYPE_CODE_ARRAY:
9999 break;
10000 case TYPE_CODE_STRUCT:
10001 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10002 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10003 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10004 break;
10005 default:
323e0a4a 10006 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10007 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10008 break;
10009 }
10010 }
10011
10012 switch (TYPE_CODE (type))
10013 {
10014 case TYPE_CODE_FUNC:
10015 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972
PH
10016 {
10017 struct type *rtype = TYPE_TARGET_TYPE (type);
10018
10019 if (TYPE_GNU_IFUNC (type))
10020 return allocate_value (TYPE_TARGET_TYPE (rtype));
10021 return allocate_value (rtype);
10022 }
4c4b4cd2 10023 return call_function_by_hand (argvec[0], nargs, argvec + 1);
c8ea1972
PH
10024 case TYPE_CODE_INTERNAL_FUNCTION:
10025 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10026 /* We don't know anything about what the internal
10027 function might return, but we have to return
10028 something. */
10029 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10030 not_lval);
10031 else
10032 return call_internal_function (exp->gdbarch, exp->language_defn,
10033 argvec[0], nargs, argvec + 1);
10034
4c4b4cd2
PH
10035 case TYPE_CODE_STRUCT:
10036 {
10037 int arity;
10038
4c4b4cd2
PH
10039 arity = ada_array_arity (type);
10040 type = ada_array_element_type (type, nargs);
10041 if (type == NULL)
323e0a4a 10042 error (_("cannot subscript or call a record"));
4c4b4cd2 10043 if (arity != nargs)
323e0a4a 10044 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 10045 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 10046 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10047 return
10048 unwrap_value (ada_value_subscript
10049 (argvec[0], nargs, argvec + 1));
10050 }
10051 case TYPE_CODE_ARRAY:
10052 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10053 {
10054 type = ada_array_element_type (type, nargs);
10055 if (type == NULL)
323e0a4a 10056 error (_("element type of array unknown"));
4c4b4cd2 10057 else
0a07e705 10058 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10059 }
10060 return
10061 unwrap_value (ada_value_subscript
10062 (ada_coerce_to_simple_array (argvec[0]),
10063 nargs, argvec + 1));
10064 case TYPE_CODE_PTR: /* Pointer to array */
10065 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
10066 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10067 {
10068 type = ada_array_element_type (type, nargs);
10069 if (type == NULL)
323e0a4a 10070 error (_("element type of array unknown"));
4c4b4cd2 10071 else
0a07e705 10072 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10073 }
10074 return
10075 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
10076 nargs, argvec + 1));
10077
10078 default:
e1d5a0d2
PH
10079 error (_("Attempt to index or call something other than an "
10080 "array or function"));
4c4b4cd2
PH
10081 }
10082
10083 case TERNOP_SLICE:
10084 {
10085 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10086 struct value *low_bound_val =
10087 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
10088 struct value *high_bound_val =
10089 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10090 LONGEST low_bound;
10091 LONGEST high_bound;
5b4ee69b 10092
994b9211
AC
10093 low_bound_val = coerce_ref (low_bound_val);
10094 high_bound_val = coerce_ref (high_bound_val);
714e53ab
PH
10095 low_bound = pos_atr (low_bound_val);
10096 high_bound = pos_atr (high_bound_val);
963a6417 10097
4c4b4cd2
PH
10098 if (noside == EVAL_SKIP)
10099 goto nosideret;
10100
4c4b4cd2
PH
10101 /* If this is a reference to an aligner type, then remove all
10102 the aligners. */
df407dfe
AC
10103 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10104 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10105 TYPE_TARGET_TYPE (value_type (array)) =
10106 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 10107
ad82864c 10108 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 10109 error (_("cannot slice a packed array"));
4c4b4cd2
PH
10110
10111 /* If this is a reference to an array or an array lvalue,
10112 convert to a pointer. */
df407dfe
AC
10113 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
10114 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
10115 && VALUE_LVAL (array) == lval_memory))
10116 array = value_addr (array);
10117
1265e4aa 10118 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 10119 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 10120 (value_type (array))))
0b5d8877 10121 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
10122
10123 array = ada_coerce_to_simple_array_ptr (array);
10124
714e53ab
PH
10125 /* If we have more than one level of pointer indirection,
10126 dereference the value until we get only one level. */
df407dfe
AC
10127 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
10128 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
10129 == TYPE_CODE_PTR))
10130 array = value_ind (array);
10131
10132 /* Make sure we really do have an array type before going further,
10133 to avoid a SEGV when trying to get the index type or the target
10134 type later down the road if the debug info generated by
10135 the compiler is incorrect or incomplete. */
df407dfe 10136 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 10137 error (_("cannot take slice of non-array"));
714e53ab 10138
828292f2
JB
10139 if (TYPE_CODE (ada_check_typedef (value_type (array)))
10140 == TYPE_CODE_PTR)
4c4b4cd2 10141 {
828292f2
JB
10142 struct type *type0 = ada_check_typedef (value_type (array));
10143
0b5d8877 10144 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 10145 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
10146 else
10147 {
10148 struct type *arr_type0 =
828292f2 10149 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 10150
f5938064
JG
10151 return ada_value_slice_from_ptr (array, arr_type0,
10152 longest_to_int (low_bound),
10153 longest_to_int (high_bound));
4c4b4cd2
PH
10154 }
10155 }
10156 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10157 return array;
10158 else if (high_bound < low_bound)
df407dfe 10159 return empty_array (value_type (array), low_bound);
4c4b4cd2 10160 else
529cad9c
PH
10161 return ada_value_slice (array, longest_to_int (low_bound),
10162 longest_to_int (high_bound));
4c4b4cd2 10163 }
14f9c5c9 10164
4c4b4cd2
PH
10165 case UNOP_IN_RANGE:
10166 (*pos) += 2;
10167 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 10168 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 10169
14f9c5c9 10170 if (noside == EVAL_SKIP)
4c4b4cd2 10171 goto nosideret;
14f9c5c9 10172
4c4b4cd2
PH
10173 switch (TYPE_CODE (type))
10174 {
10175 default:
e1d5a0d2
PH
10176 lim_warning (_("Membership test incompletely implemented; "
10177 "always returns true"));
fbb06eb1
UW
10178 type = language_bool_type (exp->language_defn, exp->gdbarch);
10179 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
10180
10181 case TYPE_CODE_RANGE:
030b4912
UW
10182 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10183 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
10184 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10185 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
10186 type = language_bool_type (exp->language_defn, exp->gdbarch);
10187 return
10188 value_from_longest (type,
4c4b4cd2
PH
10189 (value_less (arg1, arg3)
10190 || value_equal (arg1, arg3))
10191 && (value_less (arg2, arg1)
10192 || value_equal (arg2, arg1)));
10193 }
10194
10195 case BINOP_IN_BOUNDS:
14f9c5c9 10196 (*pos) += 2;
4c4b4cd2
PH
10197 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10198 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10199
4c4b4cd2
PH
10200 if (noside == EVAL_SKIP)
10201 goto nosideret;
14f9c5c9 10202
4c4b4cd2 10203 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
10204 {
10205 type = language_bool_type (exp->language_defn, exp->gdbarch);
10206 return value_zero (type, not_lval);
10207 }
14f9c5c9 10208
4c4b4cd2 10209 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10210
1eea4ebd
UW
10211 type = ada_index_type (value_type (arg2), tem, "range");
10212 if (!type)
10213 type = value_type (arg1);
14f9c5c9 10214
1eea4ebd
UW
10215 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10216 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 10217
f44316fa
UW
10218 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10219 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10220 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10221 return
fbb06eb1 10222 value_from_longest (type,
4c4b4cd2
PH
10223 (value_less (arg1, arg3)
10224 || value_equal (arg1, arg3))
10225 && (value_less (arg2, arg1)
10226 || value_equal (arg2, arg1)));
10227
10228 case TERNOP_IN_RANGE:
10229 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10230 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10231 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10232
10233 if (noside == EVAL_SKIP)
10234 goto nosideret;
10235
f44316fa
UW
10236 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10237 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10238 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10239 return
fbb06eb1 10240 value_from_longest (type,
4c4b4cd2
PH
10241 (value_less (arg1, arg3)
10242 || value_equal (arg1, arg3))
10243 && (value_less (arg2, arg1)
10244 || value_equal (arg2, arg1)));
10245
10246 case OP_ATR_FIRST:
10247 case OP_ATR_LAST:
10248 case OP_ATR_LENGTH:
10249 {
76a01679 10250 struct type *type_arg;
5b4ee69b 10251
76a01679
JB
10252 if (exp->elts[*pos].opcode == OP_TYPE)
10253 {
10254 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10255 arg1 = NULL;
5bc23cb3 10256 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
10257 }
10258 else
10259 {
10260 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10261 type_arg = NULL;
10262 }
10263
10264 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 10265 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
10266 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10267 *pos += 4;
10268
10269 if (noside == EVAL_SKIP)
10270 goto nosideret;
10271
10272 if (type_arg == NULL)
10273 {
10274 arg1 = ada_coerce_ref (arg1);
10275
ad82864c 10276 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
10277 arg1 = ada_coerce_to_simple_array (arg1);
10278
1eea4ebd
UW
10279 type = ada_index_type (value_type (arg1), tem,
10280 ada_attribute_name (op));
10281 if (type == NULL)
10282 type = builtin_type (exp->gdbarch)->builtin_int;
76a01679
JB
10283
10284 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 10285 return allocate_value (type);
76a01679
JB
10286
10287 switch (op)
10288 {
10289 default: /* Should never happen. */
323e0a4a 10290 error (_("unexpected attribute encountered"));
76a01679 10291 case OP_ATR_FIRST:
1eea4ebd
UW
10292 return value_from_longest
10293 (type, ada_array_bound (arg1, tem, 0));
76a01679 10294 case OP_ATR_LAST:
1eea4ebd
UW
10295 return value_from_longest
10296 (type, ada_array_bound (arg1, tem, 1));
76a01679 10297 case OP_ATR_LENGTH:
1eea4ebd
UW
10298 return value_from_longest
10299 (type, ada_array_length (arg1, tem));
76a01679
JB
10300 }
10301 }
10302 else if (discrete_type_p (type_arg))
10303 {
10304 struct type *range_type;
0d5cff50 10305 const char *name = ada_type_name (type_arg);
5b4ee69b 10306
76a01679
JB
10307 range_type = NULL;
10308 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 10309 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
10310 if (range_type == NULL)
10311 range_type = type_arg;
10312 switch (op)
10313 {
10314 default:
323e0a4a 10315 error (_("unexpected attribute encountered"));
76a01679 10316 case OP_ATR_FIRST:
690cc4eb 10317 return value_from_longest
43bbcdc2 10318 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 10319 case OP_ATR_LAST:
690cc4eb 10320 return value_from_longest
43bbcdc2 10321 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 10322 case OP_ATR_LENGTH:
323e0a4a 10323 error (_("the 'length attribute applies only to array types"));
76a01679
JB
10324 }
10325 }
10326 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 10327 error (_("unimplemented type attribute"));
76a01679
JB
10328 else
10329 {
10330 LONGEST low, high;
10331
ad82864c
JB
10332 if (ada_is_constrained_packed_array_type (type_arg))
10333 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 10334
1eea4ebd 10335 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
76a01679 10336 if (type == NULL)
1eea4ebd
UW
10337 type = builtin_type (exp->gdbarch)->builtin_int;
10338
76a01679
JB
10339 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10340 return allocate_value (type);
10341
10342 switch (op)
10343 {
10344 default:
323e0a4a 10345 error (_("unexpected attribute encountered"));
76a01679 10346 case OP_ATR_FIRST:
1eea4ebd 10347 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
10348 return value_from_longest (type, low);
10349 case OP_ATR_LAST:
1eea4ebd 10350 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10351 return value_from_longest (type, high);
10352 case OP_ATR_LENGTH:
1eea4ebd
UW
10353 low = ada_array_bound_from_type (type_arg, tem, 0);
10354 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
10355 return value_from_longest (type, high - low + 1);
10356 }
10357 }
14f9c5c9
AS
10358 }
10359
4c4b4cd2
PH
10360 case OP_ATR_TAG:
10361 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10362 if (noside == EVAL_SKIP)
76a01679 10363 goto nosideret;
4c4b4cd2
PH
10364
10365 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10366 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
10367
10368 return ada_value_tag (arg1);
10369
10370 case OP_ATR_MIN:
10371 case OP_ATR_MAX:
10372 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10373 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10374 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10375 if (noside == EVAL_SKIP)
76a01679 10376 goto nosideret;
d2e4a39e 10377 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10378 return value_zero (value_type (arg1), not_lval);
14f9c5c9 10379 else
f44316fa
UW
10380 {
10381 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10382 return value_binop (arg1, arg2,
10383 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10384 }
14f9c5c9 10385
4c4b4cd2
PH
10386 case OP_ATR_MODULUS:
10387 {
31dedfee 10388 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10389
5b4ee69b 10390 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
10391 if (noside == EVAL_SKIP)
10392 goto nosideret;
4c4b4cd2 10393
76a01679 10394 if (!ada_is_modular_type (type_arg))
323e0a4a 10395 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10396
76a01679
JB
10397 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10398 ada_modulus (type_arg));
4c4b4cd2
PH
10399 }
10400
10401
10402 case OP_ATR_POS:
10403 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
10404 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10405 if (noside == EVAL_SKIP)
76a01679 10406 goto nosideret;
3cb382c9
UW
10407 type = builtin_type (exp->gdbarch)->builtin_int;
10408 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10409 return value_zero (type, not_lval);
14f9c5c9 10410 else
3cb382c9 10411 return value_pos_atr (type, arg1);
14f9c5c9 10412
4c4b4cd2
PH
10413 case OP_ATR_SIZE:
10414 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
10415 type = value_type (arg1);
10416
10417 /* If the argument is a reference, then dereference its type, since
10418 the user is really asking for the size of the actual object,
10419 not the size of the pointer. */
10420 if (TYPE_CODE (type) == TYPE_CODE_REF)
10421 type = TYPE_TARGET_TYPE (type);
10422
4c4b4cd2 10423 if (noside == EVAL_SKIP)
76a01679 10424 goto nosideret;
4c4b4cd2 10425 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 10426 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 10427 else
22601c15 10428 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 10429 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
10430
10431 case OP_ATR_VAL:
10432 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 10433 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 10434 type = exp->elts[pc + 2].type;
14f9c5c9 10435 if (noside == EVAL_SKIP)
76a01679 10436 goto nosideret;
4c4b4cd2 10437 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10438 return value_zero (type, not_lval);
4c4b4cd2 10439 else
76a01679 10440 return value_val_atr (type, arg1);
4c4b4cd2
PH
10441
10442 case BINOP_EXP:
10443 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10444 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10445 if (noside == EVAL_SKIP)
10446 goto nosideret;
10447 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10448 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 10449 else
f44316fa
UW
10450 {
10451 /* For integer exponentiation operations,
10452 only promote the first argument. */
10453 if (is_integral_type (value_type (arg2)))
10454 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10455 else
10456 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10457
10458 return value_binop (arg1, arg2, op);
10459 }
4c4b4cd2
PH
10460
10461 case UNOP_PLUS:
10462 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10463 if (noside == EVAL_SKIP)
10464 goto nosideret;
10465 else
10466 return arg1;
10467
10468 case UNOP_ABS:
10469 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10470 if (noside == EVAL_SKIP)
10471 goto nosideret;
f44316fa 10472 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 10473 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 10474 return value_neg (arg1);
14f9c5c9 10475 else
4c4b4cd2 10476 return arg1;
14f9c5c9
AS
10477
10478 case UNOP_IND:
6b0d7253 10479 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10480 if (noside == EVAL_SKIP)
4c4b4cd2 10481 goto nosideret;
df407dfe 10482 type = ada_check_typedef (value_type (arg1));
14f9c5c9 10483 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
10484 {
10485 if (ada_is_array_descriptor_type (type))
10486 /* GDB allows dereferencing GNAT array descriptors. */
10487 {
10488 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 10489
4c4b4cd2 10490 if (arrType == NULL)
323e0a4a 10491 error (_("Attempt to dereference null array pointer."));
00a4c844 10492 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
10493 }
10494 else if (TYPE_CODE (type) == TYPE_CODE_PTR
10495 || TYPE_CODE (type) == TYPE_CODE_REF
10496 /* In C you can dereference an array to get the 1st elt. */
10497 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab
PH
10498 {
10499 type = to_static_fixed_type
10500 (ada_aligned_type
10501 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10502 check_size (type);
10503 return value_zero (type, lval_memory);
10504 }
4c4b4cd2 10505 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
10506 {
10507 /* GDB allows dereferencing an int. */
10508 if (expect_type == NULL)
10509 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10510 lval_memory);
10511 else
10512 {
10513 expect_type =
10514 to_static_fixed_type (ada_aligned_type (expect_type));
10515 return value_zero (expect_type, lval_memory);
10516 }
10517 }
4c4b4cd2 10518 else
323e0a4a 10519 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 10520 }
0963b4bd 10521 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 10522 type = ada_check_typedef (value_type (arg1));
d2e4a39e 10523
96967637
JB
10524 if (TYPE_CODE (type) == TYPE_CODE_INT)
10525 /* GDB allows dereferencing an int. If we were given
10526 the expect_type, then use that as the target type.
10527 Otherwise, assume that the target type is an int. */
10528 {
10529 if (expect_type != NULL)
10530 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10531 arg1));
10532 else
10533 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10534 (CORE_ADDR) value_as_address (arg1));
10535 }
6b0d7253 10536
4c4b4cd2
PH
10537 if (ada_is_array_descriptor_type (type))
10538 /* GDB allows dereferencing GNAT array descriptors. */
10539 return ada_coerce_to_simple_array (arg1);
14f9c5c9 10540 else
4c4b4cd2 10541 return ada_value_ind (arg1);
14f9c5c9
AS
10542
10543 case STRUCTOP_STRUCT:
10544 tem = longest_to_int (exp->elts[pc + 1].longconst);
10545 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10546 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10547 if (noside == EVAL_SKIP)
4c4b4cd2 10548 goto nosideret;
14f9c5c9 10549 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10550 {
df407dfe 10551 struct type *type1 = value_type (arg1);
5b4ee69b 10552
76a01679
JB
10553 if (ada_is_tagged_type (type1, 1))
10554 {
10555 type = ada_lookup_struct_elt_type (type1,
10556 &exp->elts[pc + 2].string,
10557 1, 1, NULL);
10558 if (type == NULL)
10559 /* In this case, we assume that the field COULD exist
10560 in some extension of the type. Return an object of
10561 "type" void, which will match any formal
0963b4bd 10562 (see ada_type_match). */
30b15541
UW
10563 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
10564 lval_memory);
76a01679
JB
10565 }
10566 else
10567 type =
10568 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10569 0, NULL);
10570
10571 return value_zero (ada_aligned_type (type), lval_memory);
10572 }
14f9c5c9 10573 else
284614f0
JB
10574 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10575 arg1 = unwrap_value (arg1);
10576 return ada_to_fixed_value (arg1);
10577
14f9c5c9 10578 case OP_TYPE:
4c4b4cd2
PH
10579 /* The value is not supposed to be used. This is here to make it
10580 easier to accommodate expressions that contain types. */
14f9c5c9
AS
10581 (*pos) += 2;
10582 if (noside == EVAL_SKIP)
4c4b4cd2 10583 goto nosideret;
14f9c5c9 10584 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 10585 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 10586 else
323e0a4a 10587 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
10588
10589 case OP_AGGREGATE:
10590 case OP_CHOICES:
10591 case OP_OTHERS:
10592 case OP_DISCRETE_RANGE:
10593 case OP_POSITIONAL:
10594 case OP_NAME:
10595 if (noside == EVAL_NORMAL)
10596 switch (op)
10597 {
10598 case OP_NAME:
10599 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 10600 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
10601 case OP_AGGREGATE:
10602 error (_("Aggregates only allowed on the right of an assignment"));
10603 default:
0963b4bd
MS
10604 internal_error (__FILE__, __LINE__,
10605 _("aggregate apparently mangled"));
52ce6436
PH
10606 }
10607
10608 ada_forward_operator_length (exp, pc, &oplen, &nargs);
10609 *pos += oplen - 1;
10610 for (tem = 0; tem < nargs; tem += 1)
10611 ada_evaluate_subexp (NULL, exp, pos, noside);
10612 goto nosideret;
14f9c5c9
AS
10613 }
10614
10615nosideret:
22601c15 10616 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 10617}
14f9c5c9 10618\f
d2e4a39e 10619
4c4b4cd2 10620 /* Fixed point */
14f9c5c9
AS
10621
10622/* If TYPE encodes an Ada fixed-point type, return the suffix of the
10623 type name that encodes the 'small and 'delta information.
4c4b4cd2 10624 Otherwise, return NULL. */
14f9c5c9 10625
d2e4a39e 10626static const char *
ebf56fd3 10627fixed_type_info (struct type *type)
14f9c5c9 10628{
d2e4a39e 10629 const char *name = ada_type_name (type);
14f9c5c9
AS
10630 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10631
d2e4a39e
AS
10632 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10633 {
14f9c5c9 10634 const char *tail = strstr (name, "___XF_");
5b4ee69b 10635
14f9c5c9 10636 if (tail == NULL)
4c4b4cd2 10637 return NULL;
d2e4a39e 10638 else
4c4b4cd2 10639 return tail + 5;
14f9c5c9
AS
10640 }
10641 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10642 return fixed_type_info (TYPE_TARGET_TYPE (type));
10643 else
10644 return NULL;
10645}
10646
4c4b4cd2 10647/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
10648
10649int
ebf56fd3 10650ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
10651{
10652 return fixed_type_info (type) != NULL;
10653}
10654
4c4b4cd2
PH
10655/* Return non-zero iff TYPE represents a System.Address type. */
10656
10657int
10658ada_is_system_address_type (struct type *type)
10659{
10660 return (TYPE_NAME (type)
10661 && strcmp (TYPE_NAME (type), "system__address") == 0);
10662}
10663
14f9c5c9
AS
10664/* Assuming that TYPE is the representation of an Ada fixed-point
10665 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 10666 delta cannot be determined. */
14f9c5c9
AS
10667
10668DOUBLEST
ebf56fd3 10669ada_delta (struct type *type)
14f9c5c9
AS
10670{
10671 const char *encoding = fixed_type_info (type);
facc390f 10672 DOUBLEST num, den;
14f9c5c9 10673
facc390f
JB
10674 /* Strictly speaking, num and den are encoded as integer. However,
10675 they may not fit into a long, and they will have to be converted
10676 to DOUBLEST anyway. So scan them as DOUBLEST. */
10677 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10678 &num, &den) < 2)
14f9c5c9 10679 return -1.0;
d2e4a39e 10680 else
facc390f 10681 return num / den;
14f9c5c9
AS
10682}
10683
10684/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 10685 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
10686
10687static DOUBLEST
ebf56fd3 10688scaling_factor (struct type *type)
14f9c5c9
AS
10689{
10690 const char *encoding = fixed_type_info (type);
facc390f 10691 DOUBLEST num0, den0, num1, den1;
14f9c5c9 10692 int n;
d2e4a39e 10693
facc390f
JB
10694 /* Strictly speaking, num's and den's are encoded as integer. However,
10695 they may not fit into a long, and they will have to be converted
10696 to DOUBLEST anyway. So scan them as DOUBLEST. */
10697 n = sscanf (encoding,
10698 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
10699 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10700 &num0, &den0, &num1, &den1);
14f9c5c9
AS
10701
10702 if (n < 2)
10703 return 1.0;
10704 else if (n == 4)
facc390f 10705 return num1 / den1;
d2e4a39e 10706 else
facc390f 10707 return num0 / den0;
14f9c5c9
AS
10708}
10709
10710
10711/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 10712 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
10713
10714DOUBLEST
ebf56fd3 10715ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 10716{
d2e4a39e 10717 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
10718}
10719
4c4b4cd2
PH
10720/* The representation of a fixed-point value of type TYPE
10721 corresponding to the value X. */
14f9c5c9
AS
10722
10723LONGEST
ebf56fd3 10724ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
10725{
10726 return (LONGEST) (x / scaling_factor (type) + 0.5);
10727}
10728
14f9c5c9 10729\f
d2e4a39e 10730
4c4b4cd2 10731 /* Range types */
14f9c5c9
AS
10732
10733/* Scan STR beginning at position K for a discriminant name, and
10734 return the value of that discriminant field of DVAL in *PX. If
10735 PNEW_K is not null, put the position of the character beyond the
10736 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 10737 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
10738
10739static int
07d8f827 10740scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
76a01679 10741 int *pnew_k)
14f9c5c9
AS
10742{
10743 static char *bound_buffer = NULL;
10744 static size_t bound_buffer_len = 0;
10745 char *bound;
10746 char *pend;
d2e4a39e 10747 struct value *bound_val;
14f9c5c9
AS
10748
10749 if (dval == NULL || str == NULL || str[k] == '\0')
10750 return 0;
10751
d2e4a39e 10752 pend = strstr (str + k, "__");
14f9c5c9
AS
10753 if (pend == NULL)
10754 {
d2e4a39e 10755 bound = str + k;
14f9c5c9
AS
10756 k += strlen (bound);
10757 }
d2e4a39e 10758 else
14f9c5c9 10759 {
d2e4a39e 10760 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
14f9c5c9 10761 bound = bound_buffer;
d2e4a39e
AS
10762 strncpy (bound_buffer, str + k, pend - (str + k));
10763 bound[pend - (str + k)] = '\0';
10764 k = pend - str;
14f9c5c9 10765 }
d2e4a39e 10766
df407dfe 10767 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
10768 if (bound_val == NULL)
10769 return 0;
10770
10771 *px = value_as_long (bound_val);
10772 if (pnew_k != NULL)
10773 *pnew_k = k;
10774 return 1;
10775}
10776
10777/* Value of variable named NAME in the current environment. If
10778 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
10779 otherwise causes an error with message ERR_MSG. */
10780
d2e4a39e
AS
10781static struct value *
10782get_var_value (char *name, char *err_msg)
14f9c5c9 10783{
4c4b4cd2 10784 struct ada_symbol_info *syms;
14f9c5c9
AS
10785 int nsyms;
10786
4c4b4cd2 10787 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
4eeaa230 10788 &syms);
14f9c5c9
AS
10789
10790 if (nsyms != 1)
10791 {
10792 if (err_msg == NULL)
4c4b4cd2 10793 return 0;
14f9c5c9 10794 else
8a3fe4f8 10795 error (("%s"), err_msg);
14f9c5c9
AS
10796 }
10797
4c4b4cd2 10798 return value_of_variable (syms[0].sym, syms[0].block);
14f9c5c9 10799}
d2e4a39e 10800
14f9c5c9 10801/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
10802 no such variable found, returns 0, and sets *FLAG to 0. If
10803 successful, sets *FLAG to 1. */
10804
14f9c5c9 10805LONGEST
4c4b4cd2 10806get_int_var_value (char *name, int *flag)
14f9c5c9 10807{
4c4b4cd2 10808 struct value *var_val = get_var_value (name, 0);
d2e4a39e 10809
14f9c5c9
AS
10810 if (var_val == 0)
10811 {
10812 if (flag != NULL)
4c4b4cd2 10813 *flag = 0;
14f9c5c9
AS
10814 return 0;
10815 }
10816 else
10817 {
10818 if (flag != NULL)
4c4b4cd2 10819 *flag = 1;
14f9c5c9
AS
10820 return value_as_long (var_val);
10821 }
10822}
d2e4a39e 10823
14f9c5c9
AS
10824
10825/* Return a range type whose base type is that of the range type named
10826 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 10827 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
10828 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
10829 corresponding range type from debug information; fall back to using it
10830 if symbol lookup fails. If a new type must be created, allocate it
10831 like ORIG_TYPE was. The bounds information, in general, is encoded
10832 in NAME, the base type given in the named range type. */
14f9c5c9 10833
d2e4a39e 10834static struct type *
28c85d6c 10835to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 10836{
0d5cff50 10837 const char *name;
14f9c5c9 10838 struct type *base_type;
d2e4a39e 10839 char *subtype_info;
14f9c5c9 10840
28c85d6c
JB
10841 gdb_assert (raw_type != NULL);
10842 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 10843
1ce677a4 10844 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
10845 base_type = TYPE_TARGET_TYPE (raw_type);
10846 else
10847 base_type = raw_type;
10848
28c85d6c 10849 name = TYPE_NAME (raw_type);
14f9c5c9
AS
10850 subtype_info = strstr (name, "___XD");
10851 if (subtype_info == NULL)
690cc4eb 10852 {
43bbcdc2
PH
10853 LONGEST L = ada_discrete_type_low_bound (raw_type);
10854 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 10855
690cc4eb
PH
10856 if (L < INT_MIN || U > INT_MAX)
10857 return raw_type;
10858 else
28c85d6c 10859 return create_range_type (alloc_type_copy (raw_type), raw_type,
43bbcdc2
PH
10860 ada_discrete_type_low_bound (raw_type),
10861 ada_discrete_type_high_bound (raw_type));
690cc4eb 10862 }
14f9c5c9
AS
10863 else
10864 {
10865 static char *name_buf = NULL;
10866 static size_t name_len = 0;
10867 int prefix_len = subtype_info - name;
10868 LONGEST L, U;
10869 struct type *type;
10870 char *bounds_str;
10871 int n;
10872
10873 GROW_VECT (name_buf, name_len, prefix_len + 5);
10874 strncpy (name_buf, name, prefix_len);
10875 name_buf[prefix_len] = '\0';
10876
10877 subtype_info += 5;
10878 bounds_str = strchr (subtype_info, '_');
10879 n = 1;
10880
d2e4a39e 10881 if (*subtype_info == 'L')
4c4b4cd2
PH
10882 {
10883 if (!ada_scan_number (bounds_str, n, &L, &n)
10884 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
10885 return raw_type;
10886 if (bounds_str[n] == '_')
10887 n += 2;
0963b4bd 10888 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
10889 n += 1;
10890 subtype_info += 1;
10891 }
d2e4a39e 10892 else
4c4b4cd2
PH
10893 {
10894 int ok;
5b4ee69b 10895
4c4b4cd2
PH
10896 strcpy (name_buf + prefix_len, "___L");
10897 L = get_int_var_value (name_buf, &ok);
10898 if (!ok)
10899 {
323e0a4a 10900 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
10901 L = 1;
10902 }
10903 }
14f9c5c9 10904
d2e4a39e 10905 if (*subtype_info == 'U')
4c4b4cd2
PH
10906 {
10907 if (!ada_scan_number (bounds_str, n, &U, &n)
10908 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
10909 return raw_type;
10910 }
d2e4a39e 10911 else
4c4b4cd2
PH
10912 {
10913 int ok;
5b4ee69b 10914
4c4b4cd2
PH
10915 strcpy (name_buf + prefix_len, "___U");
10916 U = get_int_var_value (name_buf, &ok);
10917 if (!ok)
10918 {
323e0a4a 10919 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
10920 U = L;
10921 }
10922 }
14f9c5c9 10923
28c85d6c 10924 type = create_range_type (alloc_type_copy (raw_type), base_type, L, U);
d2e4a39e 10925 TYPE_NAME (type) = name;
14f9c5c9
AS
10926 return type;
10927 }
10928}
10929
4c4b4cd2
PH
10930/* True iff NAME is the name of a range type. */
10931
14f9c5c9 10932int
d2e4a39e 10933ada_is_range_type_name (const char *name)
14f9c5c9
AS
10934{
10935 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 10936}
14f9c5c9 10937\f
d2e4a39e 10938
4c4b4cd2
PH
10939 /* Modular types */
10940
10941/* True iff TYPE is an Ada modular type. */
14f9c5c9 10942
14f9c5c9 10943int
d2e4a39e 10944ada_is_modular_type (struct type *type)
14f9c5c9 10945{
18af8284 10946 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
10947
10948 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 10949 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 10950 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
10951}
10952
4c4b4cd2
PH
10953/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
10954
61ee279c 10955ULONGEST
0056e4d5 10956ada_modulus (struct type *type)
14f9c5c9 10957{
43bbcdc2 10958 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 10959}
d2e4a39e 10960\f
f7f9143b
JB
10961
10962/* Ada exception catchpoint support:
10963 ---------------------------------
10964
10965 We support 3 kinds of exception catchpoints:
10966 . catchpoints on Ada exceptions
10967 . catchpoints on unhandled Ada exceptions
10968 . catchpoints on failed assertions
10969
10970 Exceptions raised during failed assertions, or unhandled exceptions
10971 could perfectly be caught with the general catchpoint on Ada exceptions.
10972 However, we can easily differentiate these two special cases, and having
10973 the option to distinguish these two cases from the rest can be useful
10974 to zero-in on certain situations.
10975
10976 Exception catchpoints are a specialized form of breakpoint,
10977 since they rely on inserting breakpoints inside known routines
10978 of the GNAT runtime. The implementation therefore uses a standard
10979 breakpoint structure of the BP_BREAKPOINT type, but with its own set
10980 of breakpoint_ops.
10981
0259addd
JB
10982 Support in the runtime for exception catchpoints have been changed
10983 a few times already, and these changes affect the implementation
10984 of these catchpoints. In order to be able to support several
10985 variants of the runtime, we use a sniffer that will determine
28010a5d 10986 the runtime variant used by the program being debugged. */
f7f9143b 10987
3d0b0fa3
JB
10988/* Ada's standard exceptions. */
10989
10990static char *standard_exc[] = {
10991 "constraint_error",
10992 "program_error",
10993 "storage_error",
10994 "tasking_error"
10995};
10996
0259addd
JB
10997typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
10998
10999/* A structure that describes how to support exception catchpoints
11000 for a given executable. */
11001
11002struct exception_support_info
11003{
11004 /* The name of the symbol to break on in order to insert
11005 a catchpoint on exceptions. */
11006 const char *catch_exception_sym;
11007
11008 /* The name of the symbol to break on in order to insert
11009 a catchpoint on unhandled exceptions. */
11010 const char *catch_exception_unhandled_sym;
11011
11012 /* The name of the symbol to break on in order to insert
11013 a catchpoint on failed assertions. */
11014 const char *catch_assert_sym;
11015
11016 /* Assuming that the inferior just triggered an unhandled exception
11017 catchpoint, this function is responsible for returning the address
11018 in inferior memory where the name of that exception is stored.
11019 Return zero if the address could not be computed. */
11020 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11021};
11022
11023static CORE_ADDR ada_unhandled_exception_name_addr (void);
11024static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11025
11026/* The following exception support info structure describes how to
11027 implement exception catchpoints with the latest version of the
11028 Ada runtime (as of 2007-03-06). */
11029
11030static const struct exception_support_info default_exception_support_info =
11031{
11032 "__gnat_debug_raise_exception", /* catch_exception_sym */
11033 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11034 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11035 ada_unhandled_exception_name_addr
11036};
11037
11038/* The following exception support info structure describes how to
11039 implement exception catchpoints with a slightly older version
11040 of the Ada runtime. */
11041
11042static const struct exception_support_info exception_support_info_fallback =
11043{
11044 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11045 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11046 "system__assertions__raise_assert_failure", /* catch_assert_sym */
11047 ada_unhandled_exception_name_addr_from_raise
11048};
11049
f17011e0
JB
11050/* Return nonzero if we can detect the exception support routines
11051 described in EINFO.
11052
11053 This function errors out if an abnormal situation is detected
11054 (for instance, if we find the exception support routines, but
11055 that support is found to be incomplete). */
11056
11057static int
11058ada_has_this_exception_support (const struct exception_support_info *einfo)
11059{
11060 struct symbol *sym;
11061
11062 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11063 that should be compiled with debugging information. As a result, we
11064 expect to find that symbol in the symtabs. */
11065
11066 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11067 if (sym == NULL)
a6af7abe
JB
11068 {
11069 /* Perhaps we did not find our symbol because the Ada runtime was
11070 compiled without debugging info, or simply stripped of it.
11071 It happens on some GNU/Linux distributions for instance, where
11072 users have to install a separate debug package in order to get
11073 the runtime's debugging info. In that situation, let the user
11074 know why we cannot insert an Ada exception catchpoint.
11075
11076 Note: Just for the purpose of inserting our Ada exception
11077 catchpoint, we could rely purely on the associated minimal symbol.
11078 But we would be operating in degraded mode anyway, since we are
11079 still lacking the debugging info needed later on to extract
11080 the name of the exception being raised (this name is printed in
11081 the catchpoint message, and is also used when trying to catch
11082 a specific exception). We do not handle this case for now. */
1c8e84b0
JB
11083 struct minimal_symbol *msym
11084 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11085
11086 if (msym && MSYMBOL_TYPE (msym) != mst_solib_trampoline)
a6af7abe
JB
11087 error (_("Your Ada runtime appears to be missing some debugging "
11088 "information.\nCannot insert Ada exception catchpoint "
11089 "in this configuration."));
11090
11091 return 0;
11092 }
f17011e0
JB
11093
11094 /* Make sure that the symbol we found corresponds to a function. */
11095
11096 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11097 error (_("Symbol \"%s\" is not a function (class = %d)"),
11098 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
11099
11100 return 1;
11101}
11102
0259addd
JB
11103/* Inspect the Ada runtime and determine which exception info structure
11104 should be used to provide support for exception catchpoints.
11105
3eecfa55
JB
11106 This function will always set the per-inferior exception_info,
11107 or raise an error. */
0259addd
JB
11108
11109static void
11110ada_exception_support_info_sniffer (void)
11111{
3eecfa55 11112 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11113
11114 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11115 if (data->exception_info != NULL)
0259addd
JB
11116 return;
11117
11118 /* Check the latest (default) exception support info. */
f17011e0 11119 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11120 {
3eecfa55 11121 data->exception_info = &default_exception_support_info;
0259addd
JB
11122 return;
11123 }
11124
11125 /* Try our fallback exception suport info. */
f17011e0 11126 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11127 {
3eecfa55 11128 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11129 return;
11130 }
11131
11132 /* Sometimes, it is normal for us to not be able to find the routine
11133 we are looking for. This happens when the program is linked with
11134 the shared version of the GNAT runtime, and the program has not been
11135 started yet. Inform the user of these two possible causes if
11136 applicable. */
11137
ccefe4c4 11138 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11139 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11140
11141 /* If the symbol does not exist, then check that the program is
11142 already started, to make sure that shared libraries have been
11143 loaded. If it is not started, this may mean that the symbol is
11144 in a shared library. */
11145
11146 if (ptid_get_pid (inferior_ptid) == 0)
11147 error (_("Unable to insert catchpoint. Try to start the program first."));
11148
11149 /* At this point, we know that we are debugging an Ada program and
11150 that the inferior has been started, but we still are not able to
0963b4bd 11151 find the run-time symbols. That can mean that we are in
0259addd
JB
11152 configurable run time mode, or that a-except as been optimized
11153 out by the linker... In any case, at this point it is not worth
11154 supporting this feature. */
11155
7dda8cff 11156 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11157}
11158
f7f9143b
JB
11159/* True iff FRAME is very likely to be that of a function that is
11160 part of the runtime system. This is all very heuristic, but is
11161 intended to be used as advice as to what frames are uninteresting
11162 to most users. */
11163
11164static int
11165is_known_support_routine (struct frame_info *frame)
11166{
4ed6b5be 11167 struct symtab_and_line sal;
55b87a52 11168 char *func_name;
692465f1 11169 enum language func_lang;
f7f9143b 11170 int i;
f35a17b5 11171 const char *fullname;
f7f9143b 11172
4ed6b5be
JB
11173 /* If this code does not have any debugging information (no symtab),
11174 This cannot be any user code. */
f7f9143b 11175
4ed6b5be 11176 find_frame_sal (frame, &sal);
f7f9143b
JB
11177 if (sal.symtab == NULL)
11178 return 1;
11179
4ed6b5be
JB
11180 /* If there is a symtab, but the associated source file cannot be
11181 located, then assume this is not user code: Selecting a frame
11182 for which we cannot display the code would not be very helpful
11183 for the user. This should also take care of case such as VxWorks
11184 where the kernel has some debugging info provided for a few units. */
f7f9143b 11185
f35a17b5
JK
11186 fullname = symtab_to_fullname (sal.symtab);
11187 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11188 return 1;
11189
4ed6b5be
JB
11190 /* Check the unit filename againt the Ada runtime file naming.
11191 We also check the name of the objfile against the name of some
11192 known system libraries that sometimes come with debugging info
11193 too. */
11194
f7f9143b
JB
11195 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11196 {
11197 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11198 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 11199 return 1;
4ed6b5be 11200 if (sal.symtab->objfile != NULL
4262abfb 11201 && re_exec (objfile_name (sal.symtab->objfile)))
4ed6b5be 11202 return 1;
f7f9143b
JB
11203 }
11204
4ed6b5be 11205 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11206
e9e07ba6 11207 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
11208 if (func_name == NULL)
11209 return 1;
11210
11211 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11212 {
11213 re_comp (known_auxiliary_function_name_patterns[i]);
11214 if (re_exec (func_name))
55b87a52
KS
11215 {
11216 xfree (func_name);
11217 return 1;
11218 }
f7f9143b
JB
11219 }
11220
55b87a52 11221 xfree (func_name);
f7f9143b
JB
11222 return 0;
11223}
11224
11225/* Find the first frame that contains debugging information and that is not
11226 part of the Ada run-time, starting from FI and moving upward. */
11227
0ef643c8 11228void
f7f9143b
JB
11229ada_find_printable_frame (struct frame_info *fi)
11230{
11231 for (; fi != NULL; fi = get_prev_frame (fi))
11232 {
11233 if (!is_known_support_routine (fi))
11234 {
11235 select_frame (fi);
11236 break;
11237 }
11238 }
11239
11240}
11241
11242/* Assuming that the inferior just triggered an unhandled exception
11243 catchpoint, return the address in inferior memory where the name
11244 of the exception is stored.
11245
11246 Return zero if the address could not be computed. */
11247
11248static CORE_ADDR
11249ada_unhandled_exception_name_addr (void)
0259addd
JB
11250{
11251 return parse_and_eval_address ("e.full_name");
11252}
11253
11254/* Same as ada_unhandled_exception_name_addr, except that this function
11255 should be used when the inferior uses an older version of the runtime,
11256 where the exception name needs to be extracted from a specific frame
11257 several frames up in the callstack. */
11258
11259static CORE_ADDR
11260ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11261{
11262 int frame_level;
11263 struct frame_info *fi;
3eecfa55 11264 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
55b87a52 11265 struct cleanup *old_chain;
f7f9143b
JB
11266
11267 /* To determine the name of this exception, we need to select
11268 the frame corresponding to RAISE_SYM_NAME. This frame is
11269 at least 3 levels up, so we simply skip the first 3 frames
11270 without checking the name of their associated function. */
11271 fi = get_current_frame ();
11272 for (frame_level = 0; frame_level < 3; frame_level += 1)
11273 if (fi != NULL)
11274 fi = get_prev_frame (fi);
11275
55b87a52 11276 old_chain = make_cleanup (null_cleanup, NULL);
f7f9143b
JB
11277 while (fi != NULL)
11278 {
55b87a52 11279 char *func_name;
692465f1
JB
11280 enum language func_lang;
11281
e9e07ba6 11282 find_frame_funname (fi, &func_name, &func_lang, NULL);
55b87a52
KS
11283 if (func_name != NULL)
11284 {
11285 make_cleanup (xfree, func_name);
11286
11287 if (strcmp (func_name,
11288 data->exception_info->catch_exception_sym) == 0)
11289 break; /* We found the frame we were looking for... */
11290 fi = get_prev_frame (fi);
11291 }
f7f9143b 11292 }
55b87a52 11293 do_cleanups (old_chain);
f7f9143b
JB
11294
11295 if (fi == NULL)
11296 return 0;
11297
11298 select_frame (fi);
11299 return parse_and_eval_address ("id.full_name");
11300}
11301
11302/* Assuming the inferior just triggered an Ada exception catchpoint
11303 (of any type), return the address in inferior memory where the name
11304 of the exception is stored, if applicable.
11305
11306 Return zero if the address could not be computed, or if not relevant. */
11307
11308static CORE_ADDR
761269c8 11309ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11310 struct breakpoint *b)
11311{
3eecfa55
JB
11312 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11313
f7f9143b
JB
11314 switch (ex)
11315 {
761269c8 11316 case ada_catch_exception:
f7f9143b
JB
11317 return (parse_and_eval_address ("e.full_name"));
11318 break;
11319
761269c8 11320 case ada_catch_exception_unhandled:
3eecfa55 11321 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
11322 break;
11323
761269c8 11324 case ada_catch_assert:
f7f9143b
JB
11325 return 0; /* Exception name is not relevant in this case. */
11326 break;
11327
11328 default:
11329 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11330 break;
11331 }
11332
11333 return 0; /* Should never be reached. */
11334}
11335
11336/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11337 any error that ada_exception_name_addr_1 might cause to be thrown.
11338 When an error is intercepted, a warning with the error message is printed,
11339 and zero is returned. */
11340
11341static CORE_ADDR
761269c8 11342ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11343 struct breakpoint *b)
11344{
bfd189b1 11345 volatile struct gdb_exception e;
f7f9143b
JB
11346 CORE_ADDR result = 0;
11347
11348 TRY_CATCH (e, RETURN_MASK_ERROR)
11349 {
11350 result = ada_exception_name_addr_1 (ex, b);
11351 }
11352
11353 if (e.reason < 0)
11354 {
11355 warning (_("failed to get exception name: %s"), e.message);
11356 return 0;
11357 }
11358
11359 return result;
11360}
11361
28010a5d
PA
11362static char *ada_exception_catchpoint_cond_string (const char *excep_string);
11363
11364/* Ada catchpoints.
11365
11366 In the case of catchpoints on Ada exceptions, the catchpoint will
11367 stop the target on every exception the program throws. When a user
11368 specifies the name of a specific exception, we translate this
11369 request into a condition expression (in text form), and then parse
11370 it into an expression stored in each of the catchpoint's locations.
11371 We then use this condition to check whether the exception that was
11372 raised is the one the user is interested in. If not, then the
11373 target is resumed again. We store the name of the requested
11374 exception, in order to be able to re-set the condition expression
11375 when symbols change. */
11376
11377/* An instance of this type is used to represent an Ada catchpoint
11378 breakpoint location. It includes a "struct bp_location" as a kind
11379 of base class; users downcast to "struct bp_location *" when
11380 needed. */
11381
11382struct ada_catchpoint_location
11383{
11384 /* The base class. */
11385 struct bp_location base;
11386
11387 /* The condition that checks whether the exception that was raised
11388 is the specific exception the user specified on catchpoint
11389 creation. */
11390 struct expression *excep_cond_expr;
11391};
11392
11393/* Implement the DTOR method in the bp_location_ops structure for all
11394 Ada exception catchpoint kinds. */
11395
11396static void
11397ada_catchpoint_location_dtor (struct bp_location *bl)
11398{
11399 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11400
11401 xfree (al->excep_cond_expr);
11402}
11403
11404/* The vtable to be used in Ada catchpoint locations. */
11405
11406static const struct bp_location_ops ada_catchpoint_location_ops =
11407{
11408 ada_catchpoint_location_dtor
11409};
11410
11411/* An instance of this type is used to represent an Ada catchpoint.
11412 It includes a "struct breakpoint" as a kind of base class; users
11413 downcast to "struct breakpoint *" when needed. */
11414
11415struct ada_catchpoint
11416{
11417 /* The base class. */
11418 struct breakpoint base;
11419
11420 /* The name of the specific exception the user specified. */
11421 char *excep_string;
11422};
11423
11424/* Parse the exception condition string in the context of each of the
11425 catchpoint's locations, and store them for later evaluation. */
11426
11427static void
11428create_excep_cond_exprs (struct ada_catchpoint *c)
11429{
11430 struct cleanup *old_chain;
11431 struct bp_location *bl;
11432 char *cond_string;
11433
11434 /* Nothing to do if there's no specific exception to catch. */
11435 if (c->excep_string == NULL)
11436 return;
11437
11438 /* Same if there are no locations... */
11439 if (c->base.loc == NULL)
11440 return;
11441
11442 /* Compute the condition expression in text form, from the specific
11443 expection we want to catch. */
11444 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11445 old_chain = make_cleanup (xfree, cond_string);
11446
11447 /* Iterate over all the catchpoint's locations, and parse an
11448 expression for each. */
11449 for (bl = c->base.loc; bl != NULL; bl = bl->next)
11450 {
11451 struct ada_catchpoint_location *ada_loc
11452 = (struct ada_catchpoint_location *) bl;
11453 struct expression *exp = NULL;
11454
11455 if (!bl->shlib_disabled)
11456 {
11457 volatile struct gdb_exception e;
bbc13ae3 11458 const char *s;
28010a5d
PA
11459
11460 s = cond_string;
11461 TRY_CATCH (e, RETURN_MASK_ERROR)
11462 {
1bb9788d
TT
11463 exp = parse_exp_1 (&s, bl->address,
11464 block_for_pc (bl->address), 0);
28010a5d
PA
11465 }
11466 if (e.reason < 0)
849f2b52
JB
11467 {
11468 warning (_("failed to reevaluate internal exception condition "
11469 "for catchpoint %d: %s"),
11470 c->base.number, e.message);
11471 /* There is a bug in GCC on sparc-solaris when building with
11472 optimization which causes EXP to change unexpectedly
11473 (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56982).
11474 The problem should be fixed starting with GCC 4.9.
11475 In the meantime, work around it by forcing EXP back
11476 to NULL. */
11477 exp = NULL;
11478 }
28010a5d
PA
11479 }
11480
11481 ada_loc->excep_cond_expr = exp;
11482 }
11483
11484 do_cleanups (old_chain);
11485}
11486
11487/* Implement the DTOR method in the breakpoint_ops structure for all
11488 exception catchpoint kinds. */
11489
11490static void
761269c8 11491dtor_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11492{
11493 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11494
11495 xfree (c->excep_string);
348d480f 11496
2060206e 11497 bkpt_breakpoint_ops.dtor (b);
28010a5d
PA
11498}
11499
11500/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11501 structure for all exception catchpoint kinds. */
11502
11503static struct bp_location *
761269c8 11504allocate_location_exception (enum ada_exception_catchpoint_kind ex,
28010a5d
PA
11505 struct breakpoint *self)
11506{
11507 struct ada_catchpoint_location *loc;
11508
11509 loc = XNEW (struct ada_catchpoint_location);
11510 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11511 loc->excep_cond_expr = NULL;
11512 return &loc->base;
11513}
11514
11515/* Implement the RE_SET method in the breakpoint_ops structure for all
11516 exception catchpoint kinds. */
11517
11518static void
761269c8 11519re_set_exception (enum ada_exception_catchpoint_kind ex, struct breakpoint *b)
28010a5d
PA
11520{
11521 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11522
11523 /* Call the base class's method. This updates the catchpoint's
11524 locations. */
2060206e 11525 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
11526
11527 /* Reparse the exception conditional expressions. One for each
11528 location. */
11529 create_excep_cond_exprs (c);
11530}
11531
11532/* Returns true if we should stop for this breakpoint hit. If the
11533 user specified a specific exception, we only want to cause a stop
11534 if the program thrown that exception. */
11535
11536static int
11537should_stop_exception (const struct bp_location *bl)
11538{
11539 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11540 const struct ada_catchpoint_location *ada_loc
11541 = (const struct ada_catchpoint_location *) bl;
11542 volatile struct gdb_exception ex;
11543 int stop;
11544
11545 /* With no specific exception, should always stop. */
11546 if (c->excep_string == NULL)
11547 return 1;
11548
11549 if (ada_loc->excep_cond_expr == NULL)
11550 {
11551 /* We will have a NULL expression if back when we were creating
11552 the expressions, this location's had failed to parse. */
11553 return 1;
11554 }
11555
11556 stop = 1;
11557 TRY_CATCH (ex, RETURN_MASK_ALL)
11558 {
11559 struct value *mark;
11560
11561 mark = value_mark ();
11562 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11563 value_free_to_mark (mark);
11564 }
11565 if (ex.reason < 0)
11566 exception_fprintf (gdb_stderr, ex,
11567 _("Error in testing exception condition:\n"));
11568 return stop;
11569}
11570
11571/* Implement the CHECK_STATUS method in the breakpoint_ops structure
11572 for all exception catchpoint kinds. */
11573
11574static void
761269c8 11575check_status_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
28010a5d
PA
11576{
11577 bs->stop = should_stop_exception (bs->bp_location_at);
11578}
11579
f7f9143b
JB
11580/* Implement the PRINT_IT method in the breakpoint_ops structure
11581 for all exception catchpoint kinds. */
11582
11583static enum print_stop_action
761269c8 11584print_it_exception (enum ada_exception_catchpoint_kind ex, bpstat bs)
f7f9143b 11585{
79a45e25 11586 struct ui_out *uiout = current_uiout;
348d480f
PA
11587 struct breakpoint *b = bs->breakpoint_at;
11588
956a9fb9 11589 annotate_catchpoint (b->number);
f7f9143b 11590
956a9fb9 11591 if (ui_out_is_mi_like_p (uiout))
f7f9143b 11592 {
956a9fb9
JB
11593 ui_out_field_string (uiout, "reason",
11594 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11595 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
f7f9143b
JB
11596 }
11597
00eb2c4a
JB
11598 ui_out_text (uiout,
11599 b->disposition == disp_del ? "\nTemporary catchpoint "
11600 : "\nCatchpoint ");
956a9fb9
JB
11601 ui_out_field_int (uiout, "bkptno", b->number);
11602 ui_out_text (uiout, ", ");
f7f9143b 11603
f7f9143b
JB
11604 switch (ex)
11605 {
761269c8
JB
11606 case ada_catch_exception:
11607 case ada_catch_exception_unhandled:
956a9fb9
JB
11608 {
11609 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11610 char exception_name[256];
11611
11612 if (addr != 0)
11613 {
c714b426
PA
11614 read_memory (addr, (gdb_byte *) exception_name,
11615 sizeof (exception_name) - 1);
956a9fb9
JB
11616 exception_name [sizeof (exception_name) - 1] = '\0';
11617 }
11618 else
11619 {
11620 /* For some reason, we were unable to read the exception
11621 name. This could happen if the Runtime was compiled
11622 without debugging info, for instance. In that case,
11623 just replace the exception name by the generic string
11624 "exception" - it will read as "an exception" in the
11625 notification we are about to print. */
967cff16 11626 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
11627 }
11628 /* In the case of unhandled exception breakpoints, we print
11629 the exception name as "unhandled EXCEPTION_NAME", to make
11630 it clearer to the user which kind of catchpoint just got
11631 hit. We used ui_out_text to make sure that this extra
11632 info does not pollute the exception name in the MI case. */
761269c8 11633 if (ex == ada_catch_exception_unhandled)
956a9fb9
JB
11634 ui_out_text (uiout, "unhandled ");
11635 ui_out_field_string (uiout, "exception-name", exception_name);
11636 }
11637 break;
761269c8 11638 case ada_catch_assert:
956a9fb9
JB
11639 /* In this case, the name of the exception is not really
11640 important. Just print "failed assertion" to make it clearer
11641 that his program just hit an assertion-failure catchpoint.
11642 We used ui_out_text because this info does not belong in
11643 the MI output. */
11644 ui_out_text (uiout, "failed assertion");
11645 break;
f7f9143b 11646 }
956a9fb9
JB
11647 ui_out_text (uiout, " at ");
11648 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
11649
11650 return PRINT_SRC_AND_LOC;
11651}
11652
11653/* Implement the PRINT_ONE method in the breakpoint_ops structure
11654 for all exception catchpoint kinds. */
11655
11656static void
761269c8 11657print_one_exception (enum ada_exception_catchpoint_kind ex,
a6d9a66e 11658 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 11659{
79a45e25 11660 struct ui_out *uiout = current_uiout;
28010a5d 11661 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
11662 struct value_print_options opts;
11663
11664 get_user_print_options (&opts);
11665 if (opts.addressprint)
f7f9143b
JB
11666 {
11667 annotate_field (4);
5af949e3 11668 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
11669 }
11670
11671 annotate_field (5);
a6d9a66e 11672 *last_loc = b->loc;
f7f9143b
JB
11673 switch (ex)
11674 {
761269c8 11675 case ada_catch_exception:
28010a5d 11676 if (c->excep_string != NULL)
f7f9143b 11677 {
28010a5d
PA
11678 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11679
f7f9143b
JB
11680 ui_out_field_string (uiout, "what", msg);
11681 xfree (msg);
11682 }
11683 else
11684 ui_out_field_string (uiout, "what", "all Ada exceptions");
11685
11686 break;
11687
761269c8 11688 case ada_catch_exception_unhandled:
f7f9143b
JB
11689 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
11690 break;
11691
761269c8 11692 case ada_catch_assert:
f7f9143b
JB
11693 ui_out_field_string (uiout, "what", "failed Ada assertions");
11694 break;
11695
11696 default:
11697 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11698 break;
11699 }
11700}
11701
11702/* Implement the PRINT_MENTION method in the breakpoint_ops structure
11703 for all exception catchpoint kinds. */
11704
11705static void
761269c8 11706print_mention_exception (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
11707 struct breakpoint *b)
11708{
28010a5d 11709 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 11710 struct ui_out *uiout = current_uiout;
28010a5d 11711
00eb2c4a
JB
11712 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
11713 : _("Catchpoint "));
11714 ui_out_field_int (uiout, "bkptno", b->number);
11715 ui_out_text (uiout, ": ");
11716
f7f9143b
JB
11717 switch (ex)
11718 {
761269c8 11719 case ada_catch_exception:
28010a5d 11720 if (c->excep_string != NULL)
00eb2c4a
JB
11721 {
11722 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11723 struct cleanup *old_chain = make_cleanup (xfree, info);
11724
11725 ui_out_text (uiout, info);
11726 do_cleanups (old_chain);
11727 }
f7f9143b 11728 else
00eb2c4a 11729 ui_out_text (uiout, _("all Ada exceptions"));
f7f9143b
JB
11730 break;
11731
761269c8 11732 case ada_catch_exception_unhandled:
00eb2c4a 11733 ui_out_text (uiout, _("unhandled Ada exceptions"));
f7f9143b
JB
11734 break;
11735
761269c8 11736 case ada_catch_assert:
00eb2c4a 11737 ui_out_text (uiout, _("failed Ada assertions"));
f7f9143b
JB
11738 break;
11739
11740 default:
11741 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11742 break;
11743 }
11744}
11745
6149aea9
PA
11746/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
11747 for all exception catchpoint kinds. */
11748
11749static void
761269c8 11750print_recreate_exception (enum ada_exception_catchpoint_kind ex,
6149aea9
PA
11751 struct breakpoint *b, struct ui_file *fp)
11752{
28010a5d
PA
11753 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11754
6149aea9
PA
11755 switch (ex)
11756 {
761269c8 11757 case ada_catch_exception:
6149aea9 11758 fprintf_filtered (fp, "catch exception");
28010a5d
PA
11759 if (c->excep_string != NULL)
11760 fprintf_filtered (fp, " %s", c->excep_string);
6149aea9
PA
11761 break;
11762
761269c8 11763 case ada_catch_exception_unhandled:
78076abc 11764 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
11765 break;
11766
761269c8 11767 case ada_catch_assert:
6149aea9
PA
11768 fprintf_filtered (fp, "catch assert");
11769 break;
11770
11771 default:
11772 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11773 }
d9b3f62e 11774 print_recreate_thread (b, fp);
6149aea9
PA
11775}
11776
f7f9143b
JB
11777/* Virtual table for "catch exception" breakpoints. */
11778
28010a5d
PA
11779static void
11780dtor_catch_exception (struct breakpoint *b)
11781{
761269c8 11782 dtor_exception (ada_catch_exception, b);
28010a5d
PA
11783}
11784
11785static struct bp_location *
11786allocate_location_catch_exception (struct breakpoint *self)
11787{
761269c8 11788 return allocate_location_exception (ada_catch_exception, self);
28010a5d
PA
11789}
11790
11791static void
11792re_set_catch_exception (struct breakpoint *b)
11793{
761269c8 11794 re_set_exception (ada_catch_exception, b);
28010a5d
PA
11795}
11796
11797static void
11798check_status_catch_exception (bpstat bs)
11799{
761269c8 11800 check_status_exception (ada_catch_exception, bs);
28010a5d
PA
11801}
11802
f7f9143b 11803static enum print_stop_action
348d480f 11804print_it_catch_exception (bpstat bs)
f7f9143b 11805{
761269c8 11806 return print_it_exception (ada_catch_exception, bs);
f7f9143b
JB
11807}
11808
11809static void
a6d9a66e 11810print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 11811{
761269c8 11812 print_one_exception (ada_catch_exception, b, last_loc);
f7f9143b
JB
11813}
11814
11815static void
11816print_mention_catch_exception (struct breakpoint *b)
11817{
761269c8 11818 print_mention_exception (ada_catch_exception, b);
f7f9143b
JB
11819}
11820
6149aea9
PA
11821static void
11822print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
11823{
761269c8 11824 print_recreate_exception (ada_catch_exception, b, fp);
6149aea9
PA
11825}
11826
2060206e 11827static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
11828
11829/* Virtual table for "catch exception unhandled" breakpoints. */
11830
28010a5d
PA
11831static void
11832dtor_catch_exception_unhandled (struct breakpoint *b)
11833{
761269c8 11834 dtor_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
11835}
11836
11837static struct bp_location *
11838allocate_location_catch_exception_unhandled (struct breakpoint *self)
11839{
761269c8 11840 return allocate_location_exception (ada_catch_exception_unhandled, self);
28010a5d
PA
11841}
11842
11843static void
11844re_set_catch_exception_unhandled (struct breakpoint *b)
11845{
761269c8 11846 re_set_exception (ada_catch_exception_unhandled, b);
28010a5d
PA
11847}
11848
11849static void
11850check_status_catch_exception_unhandled (bpstat bs)
11851{
761269c8 11852 check_status_exception (ada_catch_exception_unhandled, bs);
28010a5d
PA
11853}
11854
f7f9143b 11855static enum print_stop_action
348d480f 11856print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 11857{
761269c8 11858 return print_it_exception (ada_catch_exception_unhandled, bs);
f7f9143b
JB
11859}
11860
11861static void
a6d9a66e
UW
11862print_one_catch_exception_unhandled (struct breakpoint *b,
11863 struct bp_location **last_loc)
f7f9143b 11864{
761269c8 11865 print_one_exception (ada_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
11866}
11867
11868static void
11869print_mention_catch_exception_unhandled (struct breakpoint *b)
11870{
761269c8 11871 print_mention_exception (ada_catch_exception_unhandled, b);
f7f9143b
JB
11872}
11873
6149aea9
PA
11874static void
11875print_recreate_catch_exception_unhandled (struct breakpoint *b,
11876 struct ui_file *fp)
11877{
761269c8 11878 print_recreate_exception (ada_catch_exception_unhandled, b, fp);
6149aea9
PA
11879}
11880
2060206e 11881static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
11882
11883/* Virtual table for "catch assert" breakpoints. */
11884
28010a5d
PA
11885static void
11886dtor_catch_assert (struct breakpoint *b)
11887{
761269c8 11888 dtor_exception (ada_catch_assert, b);
28010a5d
PA
11889}
11890
11891static struct bp_location *
11892allocate_location_catch_assert (struct breakpoint *self)
11893{
761269c8 11894 return allocate_location_exception (ada_catch_assert, self);
28010a5d
PA
11895}
11896
11897static void
11898re_set_catch_assert (struct breakpoint *b)
11899{
761269c8 11900 re_set_exception (ada_catch_assert, b);
28010a5d
PA
11901}
11902
11903static void
11904check_status_catch_assert (bpstat bs)
11905{
761269c8 11906 check_status_exception (ada_catch_assert, bs);
28010a5d
PA
11907}
11908
f7f9143b 11909static enum print_stop_action
348d480f 11910print_it_catch_assert (bpstat bs)
f7f9143b 11911{
761269c8 11912 return print_it_exception (ada_catch_assert, bs);
f7f9143b
JB
11913}
11914
11915static void
a6d9a66e 11916print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 11917{
761269c8 11918 print_one_exception (ada_catch_assert, b, last_loc);
f7f9143b
JB
11919}
11920
11921static void
11922print_mention_catch_assert (struct breakpoint *b)
11923{
761269c8 11924 print_mention_exception (ada_catch_assert, b);
f7f9143b
JB
11925}
11926
6149aea9
PA
11927static void
11928print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
11929{
761269c8 11930 print_recreate_exception (ada_catch_assert, b, fp);
6149aea9
PA
11931}
11932
2060206e 11933static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 11934
f7f9143b
JB
11935/* Return a newly allocated copy of the first space-separated token
11936 in ARGSP, and then adjust ARGSP to point immediately after that
11937 token.
11938
11939 Return NULL if ARGPS does not contain any more tokens. */
11940
11941static char *
11942ada_get_next_arg (char **argsp)
11943{
11944 char *args = *argsp;
11945 char *end;
11946 char *result;
11947
0fcd72ba 11948 args = skip_spaces (args);
f7f9143b
JB
11949 if (args[0] == '\0')
11950 return NULL; /* No more arguments. */
11951
11952 /* Find the end of the current argument. */
11953
0fcd72ba 11954 end = skip_to_space (args);
f7f9143b
JB
11955
11956 /* Adjust ARGSP to point to the start of the next argument. */
11957
11958 *argsp = end;
11959
11960 /* Make a copy of the current argument and return it. */
11961
11962 result = xmalloc (end - args + 1);
11963 strncpy (result, args, end - args);
11964 result[end - args] = '\0';
11965
11966 return result;
11967}
11968
11969/* Split the arguments specified in a "catch exception" command.
11970 Set EX to the appropriate catchpoint type.
28010a5d 11971 Set EXCEP_STRING to the name of the specific exception if
5845583d
JB
11972 specified by the user.
11973 If a condition is found at the end of the arguments, the condition
11974 expression is stored in COND_STRING (memory must be deallocated
11975 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
11976
11977static void
11978catch_ada_exception_command_split (char *args,
761269c8 11979 enum ada_exception_catchpoint_kind *ex,
5845583d
JB
11980 char **excep_string,
11981 char **cond_string)
f7f9143b
JB
11982{
11983 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
11984 char *exception_name;
5845583d 11985 char *cond = NULL;
f7f9143b
JB
11986
11987 exception_name = ada_get_next_arg (&args);
5845583d
JB
11988 if (exception_name != NULL && strcmp (exception_name, "if") == 0)
11989 {
11990 /* This is not an exception name; this is the start of a condition
11991 expression for a catchpoint on all exceptions. So, "un-get"
11992 this token, and set exception_name to NULL. */
11993 xfree (exception_name);
11994 exception_name = NULL;
11995 args -= 2;
11996 }
f7f9143b
JB
11997 make_cleanup (xfree, exception_name);
11998
5845583d 11999 /* Check to see if we have a condition. */
f7f9143b 12000
0fcd72ba 12001 args = skip_spaces (args);
5845583d
JB
12002 if (strncmp (args, "if", 2) == 0
12003 && (isspace (args[2]) || args[2] == '\0'))
12004 {
12005 args += 2;
12006 args = skip_spaces (args);
12007
12008 if (args[0] == '\0')
12009 error (_("Condition missing after `if' keyword"));
12010 cond = xstrdup (args);
12011 make_cleanup (xfree, cond);
12012
12013 args += strlen (args);
12014 }
12015
12016 /* Check that we do not have any more arguments. Anything else
12017 is unexpected. */
f7f9143b
JB
12018
12019 if (args[0] != '\0')
12020 error (_("Junk at end of expression"));
12021
12022 discard_cleanups (old_chain);
12023
12024 if (exception_name == NULL)
12025 {
12026 /* Catch all exceptions. */
761269c8 12027 *ex = ada_catch_exception;
28010a5d 12028 *excep_string = NULL;
f7f9143b
JB
12029 }
12030 else if (strcmp (exception_name, "unhandled") == 0)
12031 {
12032 /* Catch unhandled exceptions. */
761269c8 12033 *ex = ada_catch_exception_unhandled;
28010a5d 12034 *excep_string = NULL;
f7f9143b
JB
12035 }
12036 else
12037 {
12038 /* Catch a specific exception. */
761269c8 12039 *ex = ada_catch_exception;
28010a5d 12040 *excep_string = exception_name;
f7f9143b 12041 }
5845583d 12042 *cond_string = cond;
f7f9143b
JB
12043}
12044
12045/* Return the name of the symbol on which we should break in order to
12046 implement a catchpoint of the EX kind. */
12047
12048static const char *
761269c8 12049ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12050{
3eecfa55
JB
12051 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12052
12053 gdb_assert (data->exception_info != NULL);
0259addd 12054
f7f9143b
JB
12055 switch (ex)
12056 {
761269c8 12057 case ada_catch_exception:
3eecfa55 12058 return (data->exception_info->catch_exception_sym);
f7f9143b 12059 break;
761269c8 12060 case ada_catch_exception_unhandled:
3eecfa55 12061 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 12062 break;
761269c8 12063 case ada_catch_assert:
3eecfa55 12064 return (data->exception_info->catch_assert_sym);
f7f9143b
JB
12065 break;
12066 default:
12067 internal_error (__FILE__, __LINE__,
12068 _("unexpected catchpoint kind (%d)"), ex);
12069 }
12070}
12071
12072/* Return the breakpoint ops "virtual table" used for catchpoints
12073 of the EX kind. */
12074
c0a91b2b 12075static const struct breakpoint_ops *
761269c8 12076ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12077{
12078 switch (ex)
12079 {
761269c8 12080 case ada_catch_exception:
f7f9143b
JB
12081 return (&catch_exception_breakpoint_ops);
12082 break;
761269c8 12083 case ada_catch_exception_unhandled:
f7f9143b
JB
12084 return (&catch_exception_unhandled_breakpoint_ops);
12085 break;
761269c8 12086 case ada_catch_assert:
f7f9143b
JB
12087 return (&catch_assert_breakpoint_ops);
12088 break;
12089 default:
12090 internal_error (__FILE__, __LINE__,
12091 _("unexpected catchpoint kind (%d)"), ex);
12092 }
12093}
12094
12095/* Return the condition that will be used to match the current exception
12096 being raised with the exception that the user wants to catch. This
12097 assumes that this condition is used when the inferior just triggered
12098 an exception catchpoint.
12099
12100 The string returned is a newly allocated string that needs to be
12101 deallocated later. */
12102
12103static char *
28010a5d 12104ada_exception_catchpoint_cond_string (const char *excep_string)
f7f9143b 12105{
3d0b0fa3
JB
12106 int i;
12107
0963b4bd 12108 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12109 runtime units that have been compiled without debugging info; if
28010a5d 12110 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12111 exception (e.g. "constraint_error") then, during the evaluation
12112 of the condition expression, the symbol lookup on this name would
0963b4bd 12113 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12114 may then be set only on user-defined exceptions which have the
12115 same not-fully-qualified name (e.g. my_package.constraint_error).
12116
12117 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12118 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12119 exception constraint_error" is rewritten into "catch exception
12120 standard.constraint_error".
12121
12122 If an exception named contraint_error is defined in another package of
12123 the inferior program, then the only way to specify this exception as a
12124 breakpoint condition is to use its fully-qualified named:
12125 e.g. my_package.constraint_error. */
12126
12127 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12128 {
28010a5d 12129 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3
JB
12130 {
12131 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
28010a5d 12132 excep_string);
3d0b0fa3
JB
12133 }
12134 }
28010a5d 12135 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
f7f9143b
JB
12136}
12137
12138/* Return the symtab_and_line that should be used to insert an exception
12139 catchpoint of the TYPE kind.
12140
28010a5d
PA
12141 EXCEP_STRING should contain the name of a specific exception that
12142 the catchpoint should catch, or NULL otherwise.
f7f9143b 12143
28010a5d
PA
12144 ADDR_STRING returns the name of the function where the real
12145 breakpoint that implements the catchpoints is set, depending on the
12146 type of catchpoint we need to create. */
f7f9143b
JB
12147
12148static struct symtab_and_line
761269c8 12149ada_exception_sal (enum ada_exception_catchpoint_kind ex, char *excep_string,
c0a91b2b 12150 char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12151{
12152 const char *sym_name;
12153 struct symbol *sym;
f7f9143b 12154
0259addd
JB
12155 /* First, find out which exception support info to use. */
12156 ada_exception_support_info_sniffer ();
12157
12158 /* Then lookup the function on which we will break in order to catch
f7f9143b 12159 the Ada exceptions requested by the user. */
f7f9143b
JB
12160 sym_name = ada_exception_sym_name (ex);
12161 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12162
f17011e0
JB
12163 /* We can assume that SYM is not NULL at this stage. If the symbol
12164 did not exist, ada_exception_support_info_sniffer would have
12165 raised an exception.
f7f9143b 12166
f17011e0
JB
12167 Also, ada_exception_support_info_sniffer should have already
12168 verified that SYM is a function symbol. */
12169 gdb_assert (sym != NULL);
12170 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
f7f9143b
JB
12171
12172 /* Set ADDR_STRING. */
f7f9143b
JB
12173 *addr_string = xstrdup (sym_name);
12174
f7f9143b 12175 /* Set OPS. */
4b9eee8c 12176 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12177
f17011e0 12178 return find_function_start_sal (sym, 1);
f7f9143b
JB
12179}
12180
b4a5b78b 12181/* Create an Ada exception catchpoint.
f7f9143b 12182
b4a5b78b 12183 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12184
2df4d1d5
JB
12185 If EXCEPT_STRING is NULL, this catchpoint is expected to trigger
12186 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
12187 of the exception to which this catchpoint applies. When not NULL,
12188 the string must be allocated on the heap, and its deallocation
12189 is no longer the responsibility of the caller.
12190
12191 COND_STRING, if not NULL, is the catchpoint condition. This string
12192 must be allocated on the heap, and its deallocation is no longer
12193 the responsibility of the caller.
f7f9143b 12194
b4a5b78b
JB
12195 TEMPFLAG, if nonzero, means that the underlying breakpoint
12196 should be temporary.
28010a5d 12197
b4a5b78b 12198 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12199
349774ef 12200void
28010a5d 12201create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12202 enum ada_exception_catchpoint_kind ex_kind,
28010a5d 12203 char *excep_string,
5845583d 12204 char *cond_string,
28010a5d 12205 int tempflag,
349774ef 12206 int disabled,
28010a5d
PA
12207 int from_tty)
12208{
12209 struct ada_catchpoint *c;
b4a5b78b
JB
12210 char *addr_string = NULL;
12211 const struct breakpoint_ops *ops = NULL;
12212 struct symtab_and_line sal
12213 = ada_exception_sal (ex_kind, excep_string, &addr_string, &ops);
28010a5d
PA
12214
12215 c = XNEW (struct ada_catchpoint);
12216 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
349774ef 12217 ops, tempflag, disabled, from_tty);
28010a5d
PA
12218 c->excep_string = excep_string;
12219 create_excep_cond_exprs (c);
5845583d
JB
12220 if (cond_string != NULL)
12221 set_breakpoint_condition (&c->base, cond_string, from_tty);
3ea46bff 12222 install_breakpoint (0, &c->base, 1);
f7f9143b
JB
12223}
12224
9ac4176b
PA
12225/* Implement the "catch exception" command. */
12226
12227static void
12228catch_ada_exception_command (char *arg, int from_tty,
12229 struct cmd_list_element *command)
12230{
12231 struct gdbarch *gdbarch = get_current_arch ();
12232 int tempflag;
761269c8 12233 enum ada_exception_catchpoint_kind ex_kind;
28010a5d 12234 char *excep_string = NULL;
5845583d 12235 char *cond_string = NULL;
9ac4176b
PA
12236
12237 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12238
12239 if (!arg)
12240 arg = "";
b4a5b78b
JB
12241 catch_ada_exception_command_split (arg, &ex_kind, &excep_string,
12242 &cond_string);
12243 create_ada_exception_catchpoint (gdbarch, ex_kind,
12244 excep_string, cond_string,
349774ef
JB
12245 tempflag, 1 /* enabled */,
12246 from_tty);
9ac4176b
PA
12247}
12248
b4a5b78b 12249/* Split the arguments specified in a "catch assert" command.
5845583d 12250
b4a5b78b
JB
12251 ARGS contains the command's arguments (or the empty string if
12252 no arguments were passed).
5845583d
JB
12253
12254 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12255 (the memory needs to be deallocated after use). */
5845583d 12256
b4a5b78b
JB
12257static void
12258catch_ada_assert_command_split (char *args, char **cond_string)
f7f9143b 12259{
5845583d 12260 args = skip_spaces (args);
f7f9143b 12261
5845583d
JB
12262 /* Check whether a condition was provided. */
12263 if (strncmp (args, "if", 2) == 0
12264 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12265 {
5845583d 12266 args += 2;
0fcd72ba 12267 args = skip_spaces (args);
5845583d
JB
12268 if (args[0] == '\0')
12269 error (_("condition missing after `if' keyword"));
12270 *cond_string = xstrdup (args);
f7f9143b
JB
12271 }
12272
5845583d
JB
12273 /* Otherwise, there should be no other argument at the end of
12274 the command. */
12275 else if (args[0] != '\0')
12276 error (_("Junk at end of arguments."));
f7f9143b
JB
12277}
12278
9ac4176b
PA
12279/* Implement the "catch assert" command. */
12280
12281static void
12282catch_assert_command (char *arg, int from_tty,
12283 struct cmd_list_element *command)
12284{
12285 struct gdbarch *gdbarch = get_current_arch ();
12286 int tempflag;
5845583d 12287 char *cond_string = NULL;
9ac4176b
PA
12288
12289 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12290
12291 if (!arg)
12292 arg = "";
b4a5b78b 12293 catch_ada_assert_command_split (arg, &cond_string);
761269c8 12294 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
b4a5b78b 12295 NULL, cond_string,
349774ef
JB
12296 tempflag, 1 /* enabled */,
12297 from_tty);
9ac4176b 12298}
778865d3
JB
12299
12300/* Return non-zero if the symbol SYM is an Ada exception object. */
12301
12302static int
12303ada_is_exception_sym (struct symbol *sym)
12304{
12305 const char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
12306
12307 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
12308 && SYMBOL_CLASS (sym) != LOC_BLOCK
12309 && SYMBOL_CLASS (sym) != LOC_CONST
12310 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12311 && type_name != NULL && strcmp (type_name, "exception") == 0);
12312}
12313
12314/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12315 Ada exception object. This matches all exceptions except the ones
12316 defined by the Ada language. */
12317
12318static int
12319ada_is_non_standard_exception_sym (struct symbol *sym)
12320{
12321 int i;
12322
12323 if (!ada_is_exception_sym (sym))
12324 return 0;
12325
12326 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12327 if (strcmp (SYMBOL_LINKAGE_NAME (sym), standard_exc[i]) == 0)
12328 return 0; /* A standard exception. */
12329
12330 /* Numeric_Error is also a standard exception, so exclude it.
12331 See the STANDARD_EXC description for more details as to why
12332 this exception is not listed in that array. */
12333 if (strcmp (SYMBOL_LINKAGE_NAME (sym), "numeric_error") == 0)
12334 return 0;
12335
12336 return 1;
12337}
12338
12339/* A helper function for qsort, comparing two struct ada_exc_info
12340 objects.
12341
12342 The comparison is determined first by exception name, and then
12343 by exception address. */
12344
12345static int
12346compare_ada_exception_info (const void *a, const void *b)
12347{
12348 const struct ada_exc_info *exc_a = (struct ada_exc_info *) a;
12349 const struct ada_exc_info *exc_b = (struct ada_exc_info *) b;
12350 int result;
12351
12352 result = strcmp (exc_a->name, exc_b->name);
12353 if (result != 0)
12354 return result;
12355
12356 if (exc_a->addr < exc_b->addr)
12357 return -1;
12358 if (exc_a->addr > exc_b->addr)
12359 return 1;
12360
12361 return 0;
12362}
12363
12364/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12365 routine, but keeping the first SKIP elements untouched.
12366
12367 All duplicates are also removed. */
12368
12369static void
12370sort_remove_dups_ada_exceptions_list (VEC(ada_exc_info) **exceptions,
12371 int skip)
12372{
12373 struct ada_exc_info *to_sort
12374 = VEC_address (ada_exc_info, *exceptions) + skip;
12375 int to_sort_len
12376 = VEC_length (ada_exc_info, *exceptions) - skip;
12377 int i, j;
12378
12379 qsort (to_sort, to_sort_len, sizeof (struct ada_exc_info),
12380 compare_ada_exception_info);
12381
12382 for (i = 1, j = 1; i < to_sort_len; i++)
12383 if (compare_ada_exception_info (&to_sort[i], &to_sort[j - 1]) != 0)
12384 to_sort[j++] = to_sort[i];
12385 to_sort_len = j;
12386 VEC_truncate(ada_exc_info, *exceptions, skip + to_sort_len);
12387}
12388
12389/* A function intended as the "name_matcher" callback in the struct
12390 quick_symbol_functions' expand_symtabs_matching method.
12391
12392 SEARCH_NAME is the symbol's search name.
12393
12394 If USER_DATA is not NULL, it is a pointer to a regext_t object
12395 used to match the symbol (by natural name). Otherwise, when USER_DATA
12396 is null, no filtering is performed, and all symbols are a positive
12397 match. */
12398
12399static int
12400ada_exc_search_name_matches (const char *search_name, void *user_data)
12401{
12402 regex_t *preg = user_data;
12403
12404 if (preg == NULL)
12405 return 1;
12406
12407 /* In Ada, the symbol "search name" is a linkage name, whereas
12408 the regular expression used to do the matching refers to
12409 the natural name. So match against the decoded name. */
12410 return (regexec (preg, ada_decode (search_name), 0, NULL, 0) == 0);
12411}
12412
12413/* Add all exceptions defined by the Ada standard whose name match
12414 a regular expression.
12415
12416 If PREG is not NULL, then this regexp_t object is used to
12417 perform the symbol name matching. Otherwise, no name-based
12418 filtering is performed.
12419
12420 EXCEPTIONS is a vector of exceptions to which matching exceptions
12421 gets pushed. */
12422
12423static void
12424ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12425{
12426 int i;
12427
12428 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12429 {
12430 if (preg == NULL
12431 || regexec (preg, standard_exc[i], 0, NULL, 0) == 0)
12432 {
12433 struct bound_minimal_symbol msymbol
12434 = ada_lookup_simple_minsym (standard_exc[i]);
12435
12436 if (msymbol.minsym != NULL)
12437 {
12438 struct ada_exc_info info
12439 = {standard_exc[i], SYMBOL_VALUE_ADDRESS (msymbol.minsym)};
12440
12441 VEC_safe_push (ada_exc_info, *exceptions, &info);
12442 }
12443 }
12444 }
12445}
12446
12447/* Add all Ada exceptions defined locally and accessible from the given
12448 FRAME.
12449
12450 If PREG is not NULL, then this regexp_t object is used to
12451 perform the symbol name matching. Otherwise, no name-based
12452 filtering is performed.
12453
12454 EXCEPTIONS is a vector of exceptions to which matching exceptions
12455 gets pushed. */
12456
12457static void
12458ada_add_exceptions_from_frame (regex_t *preg, struct frame_info *frame,
12459 VEC(ada_exc_info) **exceptions)
12460{
12461 struct block *block = get_frame_block (frame, 0);
12462
12463 while (block != 0)
12464 {
12465 struct block_iterator iter;
12466 struct symbol *sym;
12467
12468 ALL_BLOCK_SYMBOLS (block, iter, sym)
12469 {
12470 switch (SYMBOL_CLASS (sym))
12471 {
12472 case LOC_TYPEDEF:
12473 case LOC_BLOCK:
12474 case LOC_CONST:
12475 break;
12476 default:
12477 if (ada_is_exception_sym (sym))
12478 {
12479 struct ada_exc_info info = {SYMBOL_PRINT_NAME (sym),
12480 SYMBOL_VALUE_ADDRESS (sym)};
12481
12482 VEC_safe_push (ada_exc_info, *exceptions, &info);
12483 }
12484 }
12485 }
12486 if (BLOCK_FUNCTION (block) != NULL)
12487 break;
12488 block = BLOCK_SUPERBLOCK (block);
12489 }
12490}
12491
12492/* Add all exceptions defined globally whose name name match
12493 a regular expression, excluding standard exceptions.
12494
12495 The reason we exclude standard exceptions is that they need
12496 to be handled separately: Standard exceptions are defined inside
12497 a runtime unit which is normally not compiled with debugging info,
12498 and thus usually do not show up in our symbol search. However,
12499 if the unit was in fact built with debugging info, we need to
12500 exclude them because they would duplicate the entry we found
12501 during the special loop that specifically searches for those
12502 standard exceptions.
12503
12504 If PREG is not NULL, then this regexp_t object is used to
12505 perform the symbol name matching. Otherwise, no name-based
12506 filtering is performed.
12507
12508 EXCEPTIONS is a vector of exceptions to which matching exceptions
12509 gets pushed. */
12510
12511static void
12512ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
12513{
12514 struct objfile *objfile;
12515 struct symtab *s;
12516
12517 ALL_OBJFILES (objfile)
12518 if (objfile->sf)
12519 objfile->sf->qf->expand_symtabs_matching
12520 (objfile, NULL, ada_exc_search_name_matches,
12521 VARIABLES_DOMAIN, preg);
12522
12523 ALL_PRIMARY_SYMTABS (objfile, s)
12524 {
12525 struct blockvector *bv = BLOCKVECTOR (s);
12526 int i;
12527
12528 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12529 {
12530 struct block *b = BLOCKVECTOR_BLOCK (bv, i);
12531 struct block_iterator iter;
12532 struct symbol *sym;
12533
12534 ALL_BLOCK_SYMBOLS (b, iter, sym)
12535 if (ada_is_non_standard_exception_sym (sym)
12536 && (preg == NULL
12537 || regexec (preg, SYMBOL_NATURAL_NAME (sym),
12538 0, NULL, 0) == 0))
12539 {
12540 struct ada_exc_info info
12541 = {SYMBOL_PRINT_NAME (sym), SYMBOL_VALUE_ADDRESS (sym)};
12542
12543 VEC_safe_push (ada_exc_info, *exceptions, &info);
12544 }
12545 }
12546 }
12547}
12548
12549/* Implements ada_exceptions_list with the regular expression passed
12550 as a regex_t, rather than a string.
12551
12552 If not NULL, PREG is used to filter out exceptions whose names
12553 do not match. Otherwise, all exceptions are listed. */
12554
12555static VEC(ada_exc_info) *
12556ada_exceptions_list_1 (regex_t *preg)
12557{
12558 VEC(ada_exc_info) *result = NULL;
12559 struct cleanup *old_chain
12560 = make_cleanup (VEC_cleanup (ada_exc_info), &result);
12561 int prev_len;
12562
12563 /* First, list the known standard exceptions. These exceptions
12564 need to be handled separately, as they are usually defined in
12565 runtime units that have been compiled without debugging info. */
12566
12567 ada_add_standard_exceptions (preg, &result);
12568
12569 /* Next, find all exceptions whose scope is local and accessible
12570 from the currently selected frame. */
12571
12572 if (has_stack_frames ())
12573 {
12574 prev_len = VEC_length (ada_exc_info, result);
12575 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12576 &result);
12577 if (VEC_length (ada_exc_info, result) > prev_len)
12578 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12579 }
12580
12581 /* Add all exceptions whose scope is global. */
12582
12583 prev_len = VEC_length (ada_exc_info, result);
12584 ada_add_global_exceptions (preg, &result);
12585 if (VEC_length (ada_exc_info, result) > prev_len)
12586 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12587
12588 discard_cleanups (old_chain);
12589 return result;
12590}
12591
12592/* Return a vector of ada_exc_info.
12593
12594 If REGEXP is NULL, all exceptions are included in the result.
12595 Otherwise, it should contain a valid regular expression,
12596 and only the exceptions whose names match that regular expression
12597 are included in the result.
12598
12599 The exceptions are sorted in the following order:
12600 - Standard exceptions (defined by the Ada language), in
12601 alphabetical order;
12602 - Exceptions only visible from the current frame, in
12603 alphabetical order;
12604 - Exceptions whose scope is global, in alphabetical order. */
12605
12606VEC(ada_exc_info) *
12607ada_exceptions_list (const char *regexp)
12608{
12609 VEC(ada_exc_info) *result = NULL;
12610 struct cleanup *old_chain = NULL;
12611 regex_t reg;
12612
12613 if (regexp != NULL)
12614 old_chain = compile_rx_or_error (&reg, regexp,
12615 _("invalid regular expression"));
12616
12617 result = ada_exceptions_list_1 (regexp != NULL ? &reg : NULL);
12618
12619 if (old_chain != NULL)
12620 do_cleanups (old_chain);
12621 return result;
12622}
12623
12624/* Implement the "info exceptions" command. */
12625
12626static void
12627info_exceptions_command (char *regexp, int from_tty)
12628{
12629 VEC(ada_exc_info) *exceptions;
12630 struct cleanup *cleanup;
12631 struct gdbarch *gdbarch = get_current_arch ();
12632 int ix;
12633 struct ada_exc_info *info;
12634
12635 exceptions = ada_exceptions_list (regexp);
12636 cleanup = make_cleanup (VEC_cleanup (ada_exc_info), &exceptions);
12637
12638 if (regexp != NULL)
12639 printf_filtered
12640 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
12641 else
12642 printf_filtered (_("All defined Ada exceptions:\n"));
12643
12644 for (ix = 0; VEC_iterate(ada_exc_info, exceptions, ix, info); ix++)
12645 printf_filtered ("%s: %s\n", info->name, paddress (gdbarch, info->addr));
12646
12647 do_cleanups (cleanup);
12648}
12649
4c4b4cd2
PH
12650 /* Operators */
12651/* Information about operators given special treatment in functions
12652 below. */
12653/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
12654
12655#define ADA_OPERATORS \
12656 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
12657 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
12658 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
12659 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
12660 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
12661 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
12662 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
12663 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
12664 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
12665 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
12666 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
12667 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
12668 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
12669 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
12670 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
12671 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
12672 OP_DEFN (OP_OTHERS, 1, 1, 0) \
12673 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
12674 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
12675
12676static void
554794dc
SDJ
12677ada_operator_length (const struct expression *exp, int pc, int *oplenp,
12678 int *argsp)
4c4b4cd2
PH
12679{
12680 switch (exp->elts[pc - 1].opcode)
12681 {
76a01679 12682 default:
4c4b4cd2
PH
12683 operator_length_standard (exp, pc, oplenp, argsp);
12684 break;
12685
12686#define OP_DEFN(op, len, args, binop) \
12687 case op: *oplenp = len; *argsp = args; break;
12688 ADA_OPERATORS;
12689#undef OP_DEFN
52ce6436
PH
12690
12691 case OP_AGGREGATE:
12692 *oplenp = 3;
12693 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
12694 break;
12695
12696 case OP_CHOICES:
12697 *oplenp = 3;
12698 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
12699 break;
4c4b4cd2
PH
12700 }
12701}
12702
c0201579
JK
12703/* Implementation of the exp_descriptor method operator_check. */
12704
12705static int
12706ada_operator_check (struct expression *exp, int pos,
12707 int (*objfile_func) (struct objfile *objfile, void *data),
12708 void *data)
12709{
12710 const union exp_element *const elts = exp->elts;
12711 struct type *type = NULL;
12712
12713 switch (elts[pos].opcode)
12714 {
12715 case UNOP_IN_RANGE:
12716 case UNOP_QUAL:
12717 type = elts[pos + 1].type;
12718 break;
12719
12720 default:
12721 return operator_check_standard (exp, pos, objfile_func, data);
12722 }
12723
12724 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
12725
12726 if (type && TYPE_OBJFILE (type)
12727 && (*objfile_func) (TYPE_OBJFILE (type), data))
12728 return 1;
12729
12730 return 0;
12731}
12732
4c4b4cd2
PH
12733static char *
12734ada_op_name (enum exp_opcode opcode)
12735{
12736 switch (opcode)
12737 {
76a01679 12738 default:
4c4b4cd2 12739 return op_name_standard (opcode);
52ce6436 12740
4c4b4cd2
PH
12741#define OP_DEFN(op, len, args, binop) case op: return #op;
12742 ADA_OPERATORS;
12743#undef OP_DEFN
52ce6436
PH
12744
12745 case OP_AGGREGATE:
12746 return "OP_AGGREGATE";
12747 case OP_CHOICES:
12748 return "OP_CHOICES";
12749 case OP_NAME:
12750 return "OP_NAME";
4c4b4cd2
PH
12751 }
12752}
12753
12754/* As for operator_length, but assumes PC is pointing at the first
12755 element of the operator, and gives meaningful results only for the
52ce6436 12756 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
12757
12758static void
76a01679
JB
12759ada_forward_operator_length (struct expression *exp, int pc,
12760 int *oplenp, int *argsp)
4c4b4cd2 12761{
76a01679 12762 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
12763 {
12764 default:
12765 *oplenp = *argsp = 0;
12766 break;
52ce6436 12767
4c4b4cd2
PH
12768#define OP_DEFN(op, len, args, binop) \
12769 case op: *oplenp = len; *argsp = args; break;
12770 ADA_OPERATORS;
12771#undef OP_DEFN
52ce6436
PH
12772
12773 case OP_AGGREGATE:
12774 *oplenp = 3;
12775 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
12776 break;
12777
12778 case OP_CHOICES:
12779 *oplenp = 3;
12780 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
12781 break;
12782
12783 case OP_STRING:
12784 case OP_NAME:
12785 {
12786 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 12787
52ce6436
PH
12788 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
12789 *argsp = 0;
12790 break;
12791 }
4c4b4cd2
PH
12792 }
12793}
12794
12795static int
12796ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
12797{
12798 enum exp_opcode op = exp->elts[elt].opcode;
12799 int oplen, nargs;
12800 int pc = elt;
12801 int i;
76a01679 12802
4c4b4cd2
PH
12803 ada_forward_operator_length (exp, elt, &oplen, &nargs);
12804
76a01679 12805 switch (op)
4c4b4cd2 12806 {
76a01679 12807 /* Ada attributes ('Foo). */
4c4b4cd2
PH
12808 case OP_ATR_FIRST:
12809 case OP_ATR_LAST:
12810 case OP_ATR_LENGTH:
12811 case OP_ATR_IMAGE:
12812 case OP_ATR_MAX:
12813 case OP_ATR_MIN:
12814 case OP_ATR_MODULUS:
12815 case OP_ATR_POS:
12816 case OP_ATR_SIZE:
12817 case OP_ATR_TAG:
12818 case OP_ATR_VAL:
12819 break;
12820
12821 case UNOP_IN_RANGE:
12822 case UNOP_QUAL:
323e0a4a
AC
12823 /* XXX: gdb_sprint_host_address, type_sprint */
12824 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
12825 gdb_print_host_address (exp->elts[pc + 1].type, stream);
12826 fprintf_filtered (stream, " (");
12827 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
12828 fprintf_filtered (stream, ")");
12829 break;
12830 case BINOP_IN_BOUNDS:
52ce6436
PH
12831 fprintf_filtered (stream, " (%d)",
12832 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
12833 break;
12834 case TERNOP_IN_RANGE:
12835 break;
12836
52ce6436
PH
12837 case OP_AGGREGATE:
12838 case OP_OTHERS:
12839 case OP_DISCRETE_RANGE:
12840 case OP_POSITIONAL:
12841 case OP_CHOICES:
12842 break;
12843
12844 case OP_NAME:
12845 case OP_STRING:
12846 {
12847 char *name = &exp->elts[elt + 2].string;
12848 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 12849
52ce6436
PH
12850 fprintf_filtered (stream, "Text: `%.*s'", len, name);
12851 break;
12852 }
12853
4c4b4cd2
PH
12854 default:
12855 return dump_subexp_body_standard (exp, stream, elt);
12856 }
12857
12858 elt += oplen;
12859 for (i = 0; i < nargs; i += 1)
12860 elt = dump_subexp (exp, stream, elt);
12861
12862 return elt;
12863}
12864
12865/* The Ada extension of print_subexp (q.v.). */
12866
76a01679
JB
12867static void
12868ada_print_subexp (struct expression *exp, int *pos,
12869 struct ui_file *stream, enum precedence prec)
4c4b4cd2 12870{
52ce6436 12871 int oplen, nargs, i;
4c4b4cd2
PH
12872 int pc = *pos;
12873 enum exp_opcode op = exp->elts[pc].opcode;
12874
12875 ada_forward_operator_length (exp, pc, &oplen, &nargs);
12876
52ce6436 12877 *pos += oplen;
4c4b4cd2
PH
12878 switch (op)
12879 {
12880 default:
52ce6436 12881 *pos -= oplen;
4c4b4cd2
PH
12882 print_subexp_standard (exp, pos, stream, prec);
12883 return;
12884
12885 case OP_VAR_VALUE:
4c4b4cd2
PH
12886 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
12887 return;
12888
12889 case BINOP_IN_BOUNDS:
323e0a4a 12890 /* XXX: sprint_subexp */
4c4b4cd2 12891 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12892 fputs_filtered (" in ", stream);
4c4b4cd2 12893 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12894 fputs_filtered ("'range", stream);
4c4b4cd2 12895 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
12896 fprintf_filtered (stream, "(%ld)",
12897 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
12898 return;
12899
12900 case TERNOP_IN_RANGE:
4c4b4cd2 12901 if (prec >= PREC_EQUAL)
76a01679 12902 fputs_filtered ("(", stream);
323e0a4a 12903 /* XXX: sprint_subexp */
4c4b4cd2 12904 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12905 fputs_filtered (" in ", stream);
4c4b4cd2
PH
12906 print_subexp (exp, pos, stream, PREC_EQUAL);
12907 fputs_filtered (" .. ", stream);
12908 print_subexp (exp, pos, stream, PREC_EQUAL);
12909 if (prec >= PREC_EQUAL)
76a01679
JB
12910 fputs_filtered (")", stream);
12911 return;
4c4b4cd2
PH
12912
12913 case OP_ATR_FIRST:
12914 case OP_ATR_LAST:
12915 case OP_ATR_LENGTH:
12916 case OP_ATR_IMAGE:
12917 case OP_ATR_MAX:
12918 case OP_ATR_MIN:
12919 case OP_ATR_MODULUS:
12920 case OP_ATR_POS:
12921 case OP_ATR_SIZE:
12922 case OP_ATR_TAG:
12923 case OP_ATR_VAL:
4c4b4cd2 12924 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
12925 {
12926 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
79d43c61
TT
12927 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
12928 &type_print_raw_options);
76a01679
JB
12929 *pos += 3;
12930 }
4c4b4cd2 12931 else
76a01679 12932 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
12933 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
12934 if (nargs > 1)
76a01679
JB
12935 {
12936 int tem;
5b4ee69b 12937
76a01679
JB
12938 for (tem = 1; tem < nargs; tem += 1)
12939 {
12940 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
12941 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
12942 }
12943 fputs_filtered (")", stream);
12944 }
4c4b4cd2 12945 return;
14f9c5c9 12946
4c4b4cd2 12947 case UNOP_QUAL:
4c4b4cd2
PH
12948 type_print (exp->elts[pc + 1].type, "", stream, 0);
12949 fputs_filtered ("'(", stream);
12950 print_subexp (exp, pos, stream, PREC_PREFIX);
12951 fputs_filtered (")", stream);
12952 return;
14f9c5c9 12953
4c4b4cd2 12954 case UNOP_IN_RANGE:
323e0a4a 12955 /* XXX: sprint_subexp */
4c4b4cd2 12956 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12957 fputs_filtered (" in ", stream);
79d43c61
TT
12958 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
12959 &type_print_raw_options);
4c4b4cd2 12960 return;
52ce6436
PH
12961
12962 case OP_DISCRETE_RANGE:
12963 print_subexp (exp, pos, stream, PREC_SUFFIX);
12964 fputs_filtered ("..", stream);
12965 print_subexp (exp, pos, stream, PREC_SUFFIX);
12966 return;
12967
12968 case OP_OTHERS:
12969 fputs_filtered ("others => ", stream);
12970 print_subexp (exp, pos, stream, PREC_SUFFIX);
12971 return;
12972
12973 case OP_CHOICES:
12974 for (i = 0; i < nargs-1; i += 1)
12975 {
12976 if (i > 0)
12977 fputs_filtered ("|", stream);
12978 print_subexp (exp, pos, stream, PREC_SUFFIX);
12979 }
12980 fputs_filtered (" => ", stream);
12981 print_subexp (exp, pos, stream, PREC_SUFFIX);
12982 return;
12983
12984 case OP_POSITIONAL:
12985 print_subexp (exp, pos, stream, PREC_SUFFIX);
12986 return;
12987
12988 case OP_AGGREGATE:
12989 fputs_filtered ("(", stream);
12990 for (i = 0; i < nargs; i += 1)
12991 {
12992 if (i > 0)
12993 fputs_filtered (", ", stream);
12994 print_subexp (exp, pos, stream, PREC_SUFFIX);
12995 }
12996 fputs_filtered (")", stream);
12997 return;
4c4b4cd2
PH
12998 }
12999}
14f9c5c9
AS
13000
13001/* Table mapping opcodes into strings for printing operators
13002 and precedences of the operators. */
13003
d2e4a39e
AS
13004static const struct op_print ada_op_print_tab[] = {
13005 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13006 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13007 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13008 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13009 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13010 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13011 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13012 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13013 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13014 {">=", BINOP_GEQ, PREC_ORDER, 0},
13015 {">", BINOP_GTR, PREC_ORDER, 0},
13016 {"<", BINOP_LESS, PREC_ORDER, 0},
13017 {">>", BINOP_RSH, PREC_SHIFT, 0},
13018 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13019 {"+", BINOP_ADD, PREC_ADD, 0},
13020 {"-", BINOP_SUB, PREC_ADD, 0},
13021 {"&", BINOP_CONCAT, PREC_ADD, 0},
13022 {"*", BINOP_MUL, PREC_MUL, 0},
13023 {"/", BINOP_DIV, PREC_MUL, 0},
13024 {"rem", BINOP_REM, PREC_MUL, 0},
13025 {"mod", BINOP_MOD, PREC_MUL, 0},
13026 {"**", BINOP_EXP, PREC_REPEAT, 0},
13027 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13028 {"-", UNOP_NEG, PREC_PREFIX, 0},
13029 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13030 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13031 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13032 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13033 {".all", UNOP_IND, PREC_SUFFIX, 1},
13034 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13035 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
d2e4a39e 13036 {NULL, 0, 0, 0}
14f9c5c9
AS
13037};
13038\f
72d5681a
PH
13039enum ada_primitive_types {
13040 ada_primitive_type_int,
13041 ada_primitive_type_long,
13042 ada_primitive_type_short,
13043 ada_primitive_type_char,
13044 ada_primitive_type_float,
13045 ada_primitive_type_double,
13046 ada_primitive_type_void,
13047 ada_primitive_type_long_long,
13048 ada_primitive_type_long_double,
13049 ada_primitive_type_natural,
13050 ada_primitive_type_positive,
13051 ada_primitive_type_system_address,
13052 nr_ada_primitive_types
13053};
6c038f32
PH
13054
13055static void
d4a9a881 13056ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
13057 struct language_arch_info *lai)
13058{
d4a9a881 13059 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 13060
72d5681a 13061 lai->primitive_type_vector
d4a9a881 13062 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 13063 struct type *);
e9bb382b
UW
13064
13065 lai->primitive_type_vector [ada_primitive_type_int]
13066 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13067 0, "integer");
13068 lai->primitive_type_vector [ada_primitive_type_long]
13069 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13070 0, "long_integer");
13071 lai->primitive_type_vector [ada_primitive_type_short]
13072 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13073 0, "short_integer");
13074 lai->string_char_type
13075 = lai->primitive_type_vector [ada_primitive_type_char]
13076 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
13077 lai->primitive_type_vector [ada_primitive_type_float]
13078 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13079 "float", NULL);
13080 lai->primitive_type_vector [ada_primitive_type_double]
13081 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13082 "long_float", NULL);
13083 lai->primitive_type_vector [ada_primitive_type_long_long]
13084 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13085 0, "long_long_integer");
13086 lai->primitive_type_vector [ada_primitive_type_long_double]
13087 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13088 "long_long_float", NULL);
13089 lai->primitive_type_vector [ada_primitive_type_natural]
13090 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13091 0, "natural");
13092 lai->primitive_type_vector [ada_primitive_type_positive]
13093 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13094 0, "positive");
13095 lai->primitive_type_vector [ada_primitive_type_void]
13096 = builtin->builtin_void;
13097
13098 lai->primitive_type_vector [ada_primitive_type_system_address]
13099 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
13100 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
13101 = "system__address";
fbb06eb1 13102
47e729a8 13103 lai->bool_type_symbol = NULL;
fbb06eb1 13104 lai->bool_type_default = builtin->builtin_bool;
6c038f32 13105}
6c038f32
PH
13106\f
13107 /* Language vector */
13108
13109/* Not really used, but needed in the ada_language_defn. */
13110
13111static void
6c7a06a3 13112emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 13113{
6c7a06a3 13114 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
13115}
13116
13117static int
13118parse (void)
13119{
13120 warnings_issued = 0;
13121 return ada_parse ();
13122}
13123
13124static const struct exp_descriptor ada_exp_descriptor = {
13125 ada_print_subexp,
13126 ada_operator_length,
c0201579 13127 ada_operator_check,
6c038f32
PH
13128 ada_op_name,
13129 ada_dump_subexp_body,
13130 ada_evaluate_subexp
13131};
13132
1a119f36 13133/* Implement the "la_get_symbol_name_cmp" language_defn method
74ccd7f5
JB
13134 for Ada. */
13135
1a119f36
JB
13136static symbol_name_cmp_ftype
13137ada_get_symbol_name_cmp (const char *lookup_name)
74ccd7f5
JB
13138{
13139 if (should_use_wild_match (lookup_name))
13140 return wild_match;
13141 else
13142 return compare_names;
13143}
13144
a5ee536b
JB
13145/* Implement the "la_read_var_value" language_defn method for Ada. */
13146
13147static struct value *
13148ada_read_var_value (struct symbol *var, struct frame_info *frame)
13149{
13150 struct block *frame_block = NULL;
13151 struct symbol *renaming_sym = NULL;
13152
13153 /* The only case where default_read_var_value is not sufficient
13154 is when VAR is a renaming... */
13155 if (frame)
13156 frame_block = get_frame_block (frame, NULL);
13157 if (frame_block)
13158 renaming_sym = ada_find_renaming_symbol (var, frame_block);
13159 if (renaming_sym != NULL)
13160 return ada_read_renaming_var_value (renaming_sym, frame_block);
13161
13162 /* This is a typical case where we expect the default_read_var_value
13163 function to work. */
13164 return default_read_var_value (var, frame);
13165}
13166
6c038f32
PH
13167const struct language_defn ada_language_defn = {
13168 "ada", /* Language name */
6abde28f 13169 "Ada",
6c038f32 13170 language_ada,
6c038f32 13171 range_check_off,
6c038f32
PH
13172 case_sensitive_on, /* Yes, Ada is case-insensitive, but
13173 that's not quite what this means. */
6c038f32 13174 array_row_major,
9a044a89 13175 macro_expansion_no,
6c038f32
PH
13176 &ada_exp_descriptor,
13177 parse,
13178 ada_error,
13179 resolve,
13180 ada_printchar, /* Print a character constant */
13181 ada_printstr, /* Function to print string constant */
13182 emit_char, /* Function to print single char (not used) */
6c038f32 13183 ada_print_type, /* Print a type using appropriate syntax */
be942545 13184 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
13185 ada_val_print, /* Print a value using appropriate syntax */
13186 ada_value_print, /* Print a top-level value */
a5ee536b 13187 ada_read_var_value, /* la_read_var_value */
6c038f32 13188 NULL, /* Language specific skip_trampoline */
2b2d9e11 13189 NULL, /* name_of_this */
6c038f32
PH
13190 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
13191 basic_lookup_transparent_type, /* lookup_transparent_type */
13192 ada_la_decode, /* Language specific symbol demangler */
0963b4bd
MS
13193 NULL, /* Language specific
13194 class_name_from_physname */
6c038f32
PH
13195 ada_op_print_tab, /* expression operators for printing */
13196 0, /* c-style arrays */
13197 1, /* String lower bound */
6c038f32 13198 ada_get_gdb_completer_word_break_characters,
41d27058 13199 ada_make_symbol_completion_list,
72d5681a 13200 ada_language_arch_info,
e79af960 13201 ada_print_array_index,
41f1b697 13202 default_pass_by_reference,
ae6a3a4c 13203 c_get_string,
1a119f36 13204 ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */
f8eba3c6 13205 ada_iterate_over_symbols,
a53b64ea 13206 &ada_varobj_ops,
6c038f32
PH
13207 LANG_MAGIC
13208};
13209
2c0b251b
PA
13210/* Provide a prototype to silence -Wmissing-prototypes. */
13211extern initialize_file_ftype _initialize_ada_language;
13212
5bf03f13
JB
13213/* Command-list for the "set/show ada" prefix command. */
13214static struct cmd_list_element *set_ada_list;
13215static struct cmd_list_element *show_ada_list;
13216
13217/* Implement the "set ada" prefix command. */
13218
13219static void
13220set_ada_command (char *arg, int from_tty)
13221{
13222 printf_unfiltered (_(\
13223"\"set ada\" must be followed by the name of a setting.\n"));
13224 help_list (set_ada_list, "set ada ", -1, gdb_stdout);
13225}
13226
13227/* Implement the "show ada" prefix command. */
13228
13229static void
13230show_ada_command (char *args, int from_tty)
13231{
13232 cmd_show_list (show_ada_list, from_tty, "");
13233}
13234
2060206e
PA
13235static void
13236initialize_ada_catchpoint_ops (void)
13237{
13238 struct breakpoint_ops *ops;
13239
13240 initialize_breakpoint_ops ();
13241
13242 ops = &catch_exception_breakpoint_ops;
13243 *ops = bkpt_breakpoint_ops;
13244 ops->dtor = dtor_catch_exception;
13245 ops->allocate_location = allocate_location_catch_exception;
13246 ops->re_set = re_set_catch_exception;
13247 ops->check_status = check_status_catch_exception;
13248 ops->print_it = print_it_catch_exception;
13249 ops->print_one = print_one_catch_exception;
13250 ops->print_mention = print_mention_catch_exception;
13251 ops->print_recreate = print_recreate_catch_exception;
13252
13253 ops = &catch_exception_unhandled_breakpoint_ops;
13254 *ops = bkpt_breakpoint_ops;
13255 ops->dtor = dtor_catch_exception_unhandled;
13256 ops->allocate_location = allocate_location_catch_exception_unhandled;
13257 ops->re_set = re_set_catch_exception_unhandled;
13258 ops->check_status = check_status_catch_exception_unhandled;
13259 ops->print_it = print_it_catch_exception_unhandled;
13260 ops->print_one = print_one_catch_exception_unhandled;
13261 ops->print_mention = print_mention_catch_exception_unhandled;
13262 ops->print_recreate = print_recreate_catch_exception_unhandled;
13263
13264 ops = &catch_assert_breakpoint_ops;
13265 *ops = bkpt_breakpoint_ops;
13266 ops->dtor = dtor_catch_assert;
13267 ops->allocate_location = allocate_location_catch_assert;
13268 ops->re_set = re_set_catch_assert;
13269 ops->check_status = check_status_catch_assert;
13270 ops->print_it = print_it_catch_assert;
13271 ops->print_one = print_one_catch_assert;
13272 ops->print_mention = print_mention_catch_assert;
13273 ops->print_recreate = print_recreate_catch_assert;
13274}
13275
d2e4a39e 13276void
6c038f32 13277_initialize_ada_language (void)
14f9c5c9 13278{
6c038f32
PH
13279 add_language (&ada_language_defn);
13280
2060206e
PA
13281 initialize_ada_catchpoint_ops ();
13282
5bf03f13
JB
13283 add_prefix_cmd ("ada", no_class, set_ada_command,
13284 _("Prefix command for changing Ada-specfic settings"),
13285 &set_ada_list, "set ada ", 0, &setlist);
13286
13287 add_prefix_cmd ("ada", no_class, show_ada_command,
13288 _("Generic command for showing Ada-specific settings."),
13289 &show_ada_list, "show ada ", 0, &showlist);
13290
13291 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
13292 &trust_pad_over_xvs, _("\
13293Enable or disable an optimization trusting PAD types over XVS types"), _("\
13294Show whether an optimization trusting PAD types over XVS types is activated"),
13295 _("\
13296This is related to the encoding used by the GNAT compiler. The debugger\n\
13297should normally trust the contents of PAD types, but certain older versions\n\
13298of GNAT have a bug that sometimes causes the information in the PAD type\n\
13299to be incorrect. Turning this setting \"off\" allows the debugger to\n\
13300work around this bug. It is always safe to turn this option \"off\", but\n\
13301this incurs a slight performance penalty, so it is recommended to NOT change\n\
13302this option to \"off\" unless necessary."),
13303 NULL, NULL, &set_ada_list, &show_ada_list);
13304
9ac4176b
PA
13305 add_catch_command ("exception", _("\
13306Catch Ada exceptions, when raised.\n\
13307With an argument, catch only exceptions with the given name."),
13308 catch_ada_exception_command,
13309 NULL,
13310 CATCH_PERMANENT,
13311 CATCH_TEMPORARY);
13312 add_catch_command ("assert", _("\
13313Catch failed Ada assertions, when raised.\n\
13314With an argument, catch only exceptions with the given name."),
13315 catch_assert_command,
13316 NULL,
13317 CATCH_PERMANENT,
13318 CATCH_TEMPORARY);
13319
6c038f32 13320 varsize_limit = 65536;
6c038f32 13321
778865d3
JB
13322 add_info ("exceptions", info_exceptions_command,
13323 _("\
13324List all Ada exception names.\n\
13325If a regular expression is passed as an argument, only those matching\n\
13326the regular expression are listed."));
13327
6c038f32
PH
13328 obstack_init (&symbol_list_obstack);
13329
13330 decoded_names_store = htab_create_alloc
13331 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
13332 NULL, xcalloc, xfree);
6b69afc4 13333
e802dbe0
JB
13334 /* Setup per-inferior data. */
13335 observer_attach_inferior_exit (ada_inferior_exit);
13336 ada_inferior_data
8e260fc0 13337 = register_inferior_data_with_cleanup (NULL, ada_inferior_data_cleanup);
14f9c5c9 13338}
This page took 1.942485 seconds and 4 git commands to generate.