*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
0b302171
JB
3 Copyright (C) 1992-1994, 1997-2000, 2003-2005, 2007-2012 Free
4 Software Foundation, Inc.
14f9c5c9 5
a9762ec7 6 This file is part of GDB.
14f9c5c9 7
a9762ec7
JB
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
14f9c5c9 12
a9762ec7
JB
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
14f9c5c9 17
a9762ec7
JB
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
14f9c5c9 20
96d887e8 21
4c4b4cd2 22#include "defs.h"
14f9c5c9 23#include <stdio.h>
0c30c098 24#include "gdb_string.h"
14f9c5c9
AS
25#include <ctype.h>
26#include <stdarg.h>
27#include "demangle.h"
4c4b4cd2
PH
28#include "gdb_regex.h"
29#include "frame.h"
14f9c5c9
AS
30#include "symtab.h"
31#include "gdbtypes.h"
32#include "gdbcmd.h"
33#include "expression.h"
34#include "parser-defs.h"
35#include "language.h"
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
PH
45#include "completer.h"
46#include "gdb_stat.h"
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"
14f9c5c9 61
ccefe4c4 62#include "psymtab.h"
40bc484c 63#include "value.h"
956a9fb9 64#include "mi/mi-common.h"
9ac4176b 65#include "arch-utils.h"
28010a5d 66#include "exceptions.h"
0fcd72ba 67#include "cli/cli-utils.h"
ccefe4c4 68
4c4b4cd2 69/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 70 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
71 Copied from valarith.c. */
72
73#ifndef TRUNCATION_TOWARDS_ZERO
74#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
75#endif
76
d2e4a39e 77static struct type *desc_base_type (struct type *);
14f9c5c9 78
d2e4a39e 79static struct type *desc_bounds_type (struct type *);
14f9c5c9 80
d2e4a39e 81static struct value *desc_bounds (struct value *);
14f9c5c9 82
d2e4a39e 83static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 84
d2e4a39e 85static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 86
556bdfd4 87static struct type *desc_data_target_type (struct type *);
14f9c5c9 88
d2e4a39e 89static struct value *desc_data (struct value *);
14f9c5c9 90
d2e4a39e 91static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 92
d2e4a39e 93static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 94
d2e4a39e 95static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 96
d2e4a39e 97static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 98
d2e4a39e 99static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 100
d2e4a39e 101static struct type *desc_index_type (struct type *, int);
14f9c5c9 102
d2e4a39e 103static int desc_arity (struct type *);
14f9c5c9 104
d2e4a39e 105static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 106
d2e4a39e 107static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 108
40658b94
PH
109static int full_match (const char *, const char *);
110
40bc484c 111static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 112
4c4b4cd2 113static void ada_add_block_symbols (struct obstack *,
76a01679 114 struct block *, const char *,
2570f2b7 115 domain_enum, struct objfile *, int);
14f9c5c9 116
4c4b4cd2 117static int is_nonfunction (struct ada_symbol_info *, int);
14f9c5c9 118
76a01679 119static void add_defn_to_vec (struct obstack *, struct symbol *,
2570f2b7 120 struct block *);
14f9c5c9 121
4c4b4cd2
PH
122static int num_defns_collected (struct obstack *);
123
124static struct ada_symbol_info *defns_collected (struct obstack *, int);
14f9c5c9 125
4c4b4cd2 126static struct value *resolve_subexp (struct expression **, int *, int,
76a01679 127 struct type *);
14f9c5c9 128
d2e4a39e 129static void replace_operator_with_call (struct expression **, int, int, int,
4c4b4cd2 130 struct symbol *, struct block *);
14f9c5c9 131
d2e4a39e 132static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 133
4c4b4cd2
PH
134static char *ada_op_name (enum exp_opcode);
135
136static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 137
d2e4a39e 138static int numeric_type_p (struct type *);
14f9c5c9 139
d2e4a39e 140static int integer_type_p (struct type *);
14f9c5c9 141
d2e4a39e 142static int scalar_type_p (struct type *);
14f9c5c9 143
d2e4a39e 144static int discrete_type_p (struct type *);
14f9c5c9 145
aeb5907d
JB
146static enum ada_renaming_category parse_old_style_renaming (struct type *,
147 const char **,
148 int *,
149 const char **);
150
151static struct symbol *find_old_style_renaming_symbol (const char *,
152 struct block *);
153
4c4b4cd2 154static struct type *ada_lookup_struct_elt_type (struct type *, char *,
76a01679 155 int, int, int *);
4c4b4cd2 156
d2e4a39e 157static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 158
b4ba55a1
JB
159static struct type *ada_find_parallel_type_with_name (struct type *,
160 const char *);
161
d2e4a39e 162static int is_dynamic_field (struct type *, int);
14f9c5c9 163
10a2c479 164static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 165 const gdb_byte *,
4c4b4cd2
PH
166 CORE_ADDR, struct value *);
167
168static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 169
28c85d6c 170static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 171
d2e4a39e 172static struct type *to_static_fixed_type (struct type *);
f192137b 173static struct type *static_unwrap_type (struct type *type);
14f9c5c9 174
d2e4a39e 175static struct value *unwrap_value (struct value *);
14f9c5c9 176
ad82864c 177static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 178
ad82864c 179static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 180
ad82864c
JB
181static long decode_packed_array_bitsize (struct type *);
182
183static struct value *decode_constrained_packed_array (struct value *);
184
185static int ada_is_packed_array_type (struct type *);
186
187static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 188
d2e4a39e 189static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 190 struct value **);
14f9c5c9 191
50810684 192static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
52ce6436 193
4c4b4cd2
PH
194static struct value *coerce_unspec_val_to_type (struct value *,
195 struct type *);
14f9c5c9 196
d2e4a39e 197static struct value *get_var_value (char *, char *);
14f9c5c9 198
d2e4a39e 199static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 200
d2e4a39e 201static int equiv_types (struct type *, struct type *);
14f9c5c9 202
d2e4a39e 203static int is_name_suffix (const char *);
14f9c5c9 204
73589123
PH
205static int advance_wild_match (const char **, const char *, int);
206
207static int wild_match (const char *, const char *);
14f9c5c9 208
d2e4a39e 209static struct value *ada_coerce_ref (struct value *);
14f9c5c9 210
4c4b4cd2
PH
211static LONGEST pos_atr (struct value *);
212
3cb382c9 213static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 214
d2e4a39e 215static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 216
4c4b4cd2
PH
217static struct symbol *standard_lookup (const char *, const struct block *,
218 domain_enum);
14f9c5c9 219
4c4b4cd2
PH
220static struct value *ada_search_struct_field (char *, struct value *, int,
221 struct type *);
222
223static struct value *ada_value_primitive_field (struct value *, int, int,
224 struct type *);
225
76a01679 226static int find_struct_field (char *, struct type *, int,
52ce6436 227 struct type **, int *, int *, int *, int *);
4c4b4cd2
PH
228
229static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
230 struct value *);
231
4c4b4cd2
PH
232static int ada_resolve_function (struct ada_symbol_info *, int,
233 struct value **, int, const char *,
234 struct type *);
235
4c4b4cd2
PH
236static int ada_is_direct_array_type (struct type *);
237
72d5681a
PH
238static void ada_language_arch_info (struct gdbarch *,
239 struct language_arch_info *);
714e53ab
PH
240
241static void check_size (const struct type *);
52ce6436
PH
242
243static struct value *ada_index_struct_field (int, struct value *, int,
244 struct type *);
245
246static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
247 struct expression *,
248 int *, enum noside);
52ce6436
PH
249
250static void aggregate_assign_from_choices (struct value *, struct value *,
251 struct expression *,
252 int *, LONGEST *, int *,
253 int, LONGEST, LONGEST);
254
255static void aggregate_assign_positional (struct value *, struct value *,
256 struct expression *,
257 int *, LONGEST *, int *, int,
258 LONGEST, LONGEST);
259
260
261static void aggregate_assign_others (struct value *, struct value *,
262 struct expression *,
263 int *, LONGEST *, int, LONGEST, LONGEST);
264
265
266static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
267
268
269static struct value *ada_evaluate_subexp (struct type *, struct expression *,
270 int *, enum noside);
271
272static void ada_forward_operator_length (struct expression *, int, int *,
273 int *);
4c4b4cd2
PH
274\f
275
76a01679 276
4c4b4cd2 277/* Maximum-sized dynamic type. */
14f9c5c9
AS
278static unsigned int varsize_limit;
279
4c4b4cd2
PH
280/* FIXME: brobecker/2003-09-17: No longer a const because it is
281 returned by a function that does not return a const char *. */
282static char *ada_completer_word_break_characters =
283#ifdef VMS
284 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
285#else
14f9c5c9 286 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 287#endif
14f9c5c9 288
4c4b4cd2 289/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 290static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 291 = "__gnat_ada_main_program_name";
14f9c5c9 292
4c4b4cd2
PH
293/* Limit on the number of warnings to raise per expression evaluation. */
294static int warning_limit = 2;
295
296/* Number of warning messages issued; reset to 0 by cleanups after
297 expression evaluation. */
298static int warnings_issued = 0;
299
300static const char *known_runtime_file_name_patterns[] = {
301 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
302};
303
304static const char *known_auxiliary_function_name_patterns[] = {
305 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
306};
307
308/* Space for allocating results of ada_lookup_symbol_list. */
309static struct obstack symbol_list_obstack;
310
e802dbe0
JB
311 /* Inferior-specific data. */
312
313/* Per-inferior data for this module. */
314
315struct ada_inferior_data
316{
317 /* The ada__tags__type_specific_data type, which is used when decoding
318 tagged types. With older versions of GNAT, this type was directly
319 accessible through a component ("tsd") in the object tag. But this
320 is no longer the case, so we cache it for each inferior. */
321 struct type *tsd_type;
3eecfa55
JB
322
323 /* The exception_support_info data. This data is used to determine
324 how to implement support for Ada exception catchpoints in a given
325 inferior. */
326 const struct exception_support_info *exception_info;
e802dbe0
JB
327};
328
329/* Our key to this module's inferior data. */
330static const struct inferior_data *ada_inferior_data;
331
332/* A cleanup routine for our inferior data. */
333static void
334ada_inferior_data_cleanup (struct inferior *inf, void *arg)
335{
336 struct ada_inferior_data *data;
337
338 data = inferior_data (inf, ada_inferior_data);
339 if (data != NULL)
340 xfree (data);
341}
342
343/* Return our inferior data for the given inferior (INF).
344
345 This function always returns a valid pointer to an allocated
346 ada_inferior_data structure. If INF's inferior data has not
347 been previously set, this functions creates a new one with all
348 fields set to zero, sets INF's inferior to it, and then returns
349 a pointer to that newly allocated ada_inferior_data. */
350
351static struct ada_inferior_data *
352get_ada_inferior_data (struct inferior *inf)
353{
354 struct ada_inferior_data *data;
355
356 data = inferior_data (inf, ada_inferior_data);
357 if (data == NULL)
358 {
359 data = XZALLOC (struct ada_inferior_data);
360 set_inferior_data (inf, ada_inferior_data, data);
361 }
362
363 return data;
364}
365
366/* Perform all necessary cleanups regarding our module's inferior data
367 that is required after the inferior INF just exited. */
368
369static void
370ada_inferior_exit (struct inferior *inf)
371{
372 ada_inferior_data_cleanup (inf, NULL);
373 set_inferior_data (inf, ada_inferior_data, NULL);
374}
375
4c4b4cd2
PH
376 /* Utilities */
377
720d1a40 378/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 379 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
380
381 Normally, we really expect a typedef type to only have 1 typedef layer.
382 In other words, we really expect the target type of a typedef type to be
383 a non-typedef type. This is particularly true for Ada units, because
384 the language does not have a typedef vs not-typedef distinction.
385 In that respect, the Ada compiler has been trying to eliminate as many
386 typedef definitions in the debugging information, since they generally
387 do not bring any extra information (we still use typedef under certain
388 circumstances related mostly to the GNAT encoding).
389
390 Unfortunately, we have seen situations where the debugging information
391 generated by the compiler leads to such multiple typedef layers. For
392 instance, consider the following example with stabs:
393
394 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
395 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
396
397 This is an error in the debugging information which causes type
398 pck__float_array___XUP to be defined twice, and the second time,
399 it is defined as a typedef of a typedef.
400
401 This is on the fringe of legality as far as debugging information is
402 concerned, and certainly unexpected. But it is easy to handle these
403 situations correctly, so we can afford to be lenient in this case. */
404
405static struct type *
406ada_typedef_target_type (struct type *type)
407{
408 while (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
409 type = TYPE_TARGET_TYPE (type);
410 return type;
411}
412
41d27058
JB
413/* Given DECODED_NAME a string holding a symbol name in its
414 decoded form (ie using the Ada dotted notation), returns
415 its unqualified name. */
416
417static const char *
418ada_unqualified_name (const char *decoded_name)
419{
420 const char *result = strrchr (decoded_name, '.');
421
422 if (result != NULL)
423 result++; /* Skip the dot... */
424 else
425 result = decoded_name;
426
427 return result;
428}
429
430/* Return a string starting with '<', followed by STR, and '>'.
431 The result is good until the next call. */
432
433static char *
434add_angle_brackets (const char *str)
435{
436 static char *result = NULL;
437
438 xfree (result);
88c15c34 439 result = xstrprintf ("<%s>", str);
41d27058
JB
440 return result;
441}
96d887e8 442
4c4b4cd2
PH
443static char *
444ada_get_gdb_completer_word_break_characters (void)
445{
446 return ada_completer_word_break_characters;
447}
448
e79af960
JB
449/* Print an array element index using the Ada syntax. */
450
451static void
452ada_print_array_index (struct value *index_value, struct ui_file *stream,
79a45b7d 453 const struct value_print_options *options)
e79af960 454{
79a45b7d 455 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
456 fprintf_filtered (stream, " => ");
457}
458
f27cf670 459/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 460 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 461 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 462
f27cf670
AS
463void *
464grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 465{
d2e4a39e
AS
466 if (*size < min_size)
467 {
468 *size *= 2;
469 if (*size < min_size)
4c4b4cd2 470 *size = min_size;
f27cf670 471 vect = xrealloc (vect, *size * element_size);
d2e4a39e 472 }
f27cf670 473 return vect;
14f9c5c9
AS
474}
475
476/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 477 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
478
479static int
ebf56fd3 480field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
481{
482 int len = strlen (target);
5b4ee69b 483
d2e4a39e 484 return
4c4b4cd2
PH
485 (strncmp (field_name, target, len) == 0
486 && (field_name[len] == '\0'
487 || (strncmp (field_name + len, "___", 3) == 0
76a01679
JB
488 && strcmp (field_name + strlen (field_name) - 6,
489 "___XVN") != 0)));
14f9c5c9
AS
490}
491
492
872c8b51
JB
493/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
494 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
495 and return its index. This function also handles fields whose name
496 have ___ suffixes because the compiler sometimes alters their name
497 by adding such a suffix to represent fields with certain constraints.
498 If the field could not be found, return a negative number if
499 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
500
501int
502ada_get_field_index (const struct type *type, const char *field_name,
503 int maybe_missing)
504{
505 int fieldno;
872c8b51
JB
506 struct type *struct_type = check_typedef ((struct type *) type);
507
508 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
509 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
510 return fieldno;
511
512 if (!maybe_missing)
323e0a4a 513 error (_("Unable to find field %s in struct %s. Aborting"),
872c8b51 514 field_name, TYPE_NAME (struct_type));
4c4b4cd2
PH
515
516 return -1;
517}
518
519/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
520
521int
d2e4a39e 522ada_name_prefix_len (const char *name)
14f9c5c9
AS
523{
524 if (name == NULL)
525 return 0;
d2e4a39e 526 else
14f9c5c9 527 {
d2e4a39e 528 const char *p = strstr (name, "___");
5b4ee69b 529
14f9c5c9 530 if (p == NULL)
4c4b4cd2 531 return strlen (name);
14f9c5c9 532 else
4c4b4cd2 533 return p - name;
14f9c5c9
AS
534 }
535}
536
4c4b4cd2
PH
537/* Return non-zero if SUFFIX is a suffix of STR.
538 Return zero if STR is null. */
539
14f9c5c9 540static int
d2e4a39e 541is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
542{
543 int len1, len2;
5b4ee69b 544
14f9c5c9
AS
545 if (str == NULL)
546 return 0;
547 len1 = strlen (str);
548 len2 = strlen (suffix);
4c4b4cd2 549 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
550}
551
4c4b4cd2
PH
552/* The contents of value VAL, treated as a value of type TYPE. The
553 result is an lval in memory if VAL is. */
14f9c5c9 554
d2e4a39e 555static struct value *
4c4b4cd2 556coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 557{
61ee279c 558 type = ada_check_typedef (type);
df407dfe 559 if (value_type (val) == type)
4c4b4cd2 560 return val;
d2e4a39e 561 else
14f9c5c9 562 {
4c4b4cd2
PH
563 struct value *result;
564
565 /* Make sure that the object size is not unreasonable before
566 trying to allocate some memory for it. */
714e53ab 567 check_size (type);
4c4b4cd2 568
41e8491f
JK
569 if (value_lazy (val)
570 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
571 result = allocate_value_lazy (type);
572 else
573 {
574 result = allocate_value (type);
575 memcpy (value_contents_raw (result), value_contents (val),
576 TYPE_LENGTH (type));
577 }
74bcbdf3 578 set_value_component_location (result, val);
9bbda503
AC
579 set_value_bitsize (result, value_bitsize (val));
580 set_value_bitpos (result, value_bitpos (val));
42ae5230 581 set_value_address (result, value_address (val));
14f9c5c9
AS
582 return result;
583 }
584}
585
fc1a4b47
AC
586static const gdb_byte *
587cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
588{
589 if (valaddr == NULL)
590 return NULL;
591 else
592 return valaddr + offset;
593}
594
595static CORE_ADDR
ebf56fd3 596cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
597{
598 if (address == 0)
599 return 0;
d2e4a39e 600 else
14f9c5c9
AS
601 return address + offset;
602}
603
4c4b4cd2
PH
604/* Issue a warning (as for the definition of warning in utils.c, but
605 with exactly one argument rather than ...), unless the limit on the
606 number of warnings has passed during the evaluation of the current
607 expression. */
a2249542 608
77109804
AC
609/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
610 provided by "complaint". */
a0b31db1 611static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 612
14f9c5c9 613static void
a2249542 614lim_warning (const char *format, ...)
14f9c5c9 615{
a2249542 616 va_list args;
a2249542 617
5b4ee69b 618 va_start (args, format);
4c4b4cd2
PH
619 warnings_issued += 1;
620 if (warnings_issued <= warning_limit)
a2249542
MK
621 vwarning (format, args);
622
623 va_end (args);
4c4b4cd2
PH
624}
625
714e53ab
PH
626/* Issue an error if the size of an object of type T is unreasonable,
627 i.e. if it would be a bad idea to allocate a value of this type in
628 GDB. */
629
630static void
631check_size (const struct type *type)
632{
633 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 634 error (_("object size is larger than varsize-limit"));
714e53ab
PH
635}
636
0963b4bd 637/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 638static LONGEST
c3e5cd34 639max_of_size (int size)
4c4b4cd2 640{
76a01679 641 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 642
76a01679 643 return top_bit | (top_bit - 1);
4c4b4cd2
PH
644}
645
0963b4bd 646/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 647static LONGEST
c3e5cd34 648min_of_size (int size)
4c4b4cd2 649{
c3e5cd34 650 return -max_of_size (size) - 1;
4c4b4cd2
PH
651}
652
0963b4bd 653/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 654static ULONGEST
c3e5cd34 655umax_of_size (int size)
4c4b4cd2 656{
76a01679 657 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 658
76a01679 659 return top_bit | (top_bit - 1);
4c4b4cd2
PH
660}
661
0963b4bd 662/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
663static LONGEST
664max_of_type (struct type *t)
4c4b4cd2 665{
c3e5cd34
PH
666 if (TYPE_UNSIGNED (t))
667 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
668 else
669 return max_of_size (TYPE_LENGTH (t));
670}
671
0963b4bd 672/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
673static LONGEST
674min_of_type (struct type *t)
675{
676 if (TYPE_UNSIGNED (t))
677 return 0;
678 else
679 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
680}
681
682/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
683LONGEST
684ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 685{
76a01679 686 switch (TYPE_CODE (type))
4c4b4cd2
PH
687 {
688 case TYPE_CODE_RANGE:
690cc4eb 689 return TYPE_HIGH_BOUND (type);
4c4b4cd2 690 case TYPE_CODE_ENUM:
690cc4eb
PH
691 return TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type) - 1);
692 case TYPE_CODE_BOOL:
693 return 1;
694 case TYPE_CODE_CHAR:
76a01679 695 case TYPE_CODE_INT:
690cc4eb 696 return max_of_type (type);
4c4b4cd2 697 default:
43bbcdc2 698 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
699 }
700}
701
702/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
703LONGEST
704ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 705{
76a01679 706 switch (TYPE_CODE (type))
4c4b4cd2
PH
707 {
708 case TYPE_CODE_RANGE:
690cc4eb 709 return TYPE_LOW_BOUND (type);
4c4b4cd2 710 case TYPE_CODE_ENUM:
690cc4eb
PH
711 return TYPE_FIELD_BITPOS (type, 0);
712 case TYPE_CODE_BOOL:
713 return 0;
714 case TYPE_CODE_CHAR:
76a01679 715 case TYPE_CODE_INT:
690cc4eb 716 return min_of_type (type);
4c4b4cd2 717 default:
43bbcdc2 718 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
719 }
720}
721
722/* The identity on non-range types. For range types, the underlying
76a01679 723 non-range scalar type. */
4c4b4cd2
PH
724
725static struct type *
18af8284 726get_base_type (struct type *type)
4c4b4cd2
PH
727{
728 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
729 {
76a01679
JB
730 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
731 return type;
4c4b4cd2
PH
732 type = TYPE_TARGET_TYPE (type);
733 }
734 return type;
14f9c5c9 735}
4c4b4cd2 736\f
76a01679 737
4c4b4cd2 738 /* Language Selection */
14f9c5c9
AS
739
740/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 741 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 742
14f9c5c9 743enum language
ccefe4c4 744ada_update_initial_language (enum language lang)
14f9c5c9 745{
d2e4a39e 746 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
4c4b4cd2
PH
747 (struct objfile *) NULL) != NULL)
748 return language_ada;
14f9c5c9
AS
749
750 return lang;
751}
96d887e8
PH
752
753/* If the main procedure is written in Ada, then return its name.
754 The result is good until the next call. Return NULL if the main
755 procedure doesn't appear to be in Ada. */
756
757char *
758ada_main_name (void)
759{
760 struct minimal_symbol *msym;
f9bc20b9 761 static char *main_program_name = NULL;
6c038f32 762
96d887e8
PH
763 /* For Ada, the name of the main procedure is stored in a specific
764 string constant, generated by the binder. Look for that symbol,
765 extract its address, and then read that string. If we didn't find
766 that string, then most probably the main procedure is not written
767 in Ada. */
768 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
769
770 if (msym != NULL)
771 {
f9bc20b9
JB
772 CORE_ADDR main_program_name_addr;
773 int err_code;
774
96d887e8
PH
775 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
776 if (main_program_name_addr == 0)
323e0a4a 777 error (_("Invalid address for Ada main program name."));
96d887e8 778
f9bc20b9
JB
779 xfree (main_program_name);
780 target_read_string (main_program_name_addr, &main_program_name,
781 1024, &err_code);
782
783 if (err_code != 0)
784 return NULL;
96d887e8
PH
785 return main_program_name;
786 }
787
788 /* The main procedure doesn't seem to be in Ada. */
789 return NULL;
790}
14f9c5c9 791\f
4c4b4cd2 792 /* Symbols */
d2e4a39e 793
4c4b4cd2
PH
794/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
795 of NULLs. */
14f9c5c9 796
d2e4a39e
AS
797const struct ada_opname_map ada_opname_table[] = {
798 {"Oadd", "\"+\"", BINOP_ADD},
799 {"Osubtract", "\"-\"", BINOP_SUB},
800 {"Omultiply", "\"*\"", BINOP_MUL},
801 {"Odivide", "\"/\"", BINOP_DIV},
802 {"Omod", "\"mod\"", BINOP_MOD},
803 {"Orem", "\"rem\"", BINOP_REM},
804 {"Oexpon", "\"**\"", BINOP_EXP},
805 {"Olt", "\"<\"", BINOP_LESS},
806 {"Ole", "\"<=\"", BINOP_LEQ},
807 {"Ogt", "\">\"", BINOP_GTR},
808 {"Oge", "\">=\"", BINOP_GEQ},
809 {"Oeq", "\"=\"", BINOP_EQUAL},
810 {"One", "\"/=\"", BINOP_NOTEQUAL},
811 {"Oand", "\"and\"", BINOP_BITWISE_AND},
812 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
813 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
814 {"Oconcat", "\"&\"", BINOP_CONCAT},
815 {"Oabs", "\"abs\"", UNOP_ABS},
816 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
817 {"Oadd", "\"+\"", UNOP_PLUS},
818 {"Osubtract", "\"-\"", UNOP_NEG},
819 {NULL, NULL}
14f9c5c9
AS
820};
821
4c4b4cd2
PH
822/* The "encoded" form of DECODED, according to GNAT conventions.
823 The result is valid until the next call to ada_encode. */
824
14f9c5c9 825char *
4c4b4cd2 826ada_encode (const char *decoded)
14f9c5c9 827{
4c4b4cd2
PH
828 static char *encoding_buffer = NULL;
829 static size_t encoding_buffer_size = 0;
d2e4a39e 830 const char *p;
14f9c5c9 831 int k;
d2e4a39e 832
4c4b4cd2 833 if (decoded == NULL)
14f9c5c9
AS
834 return NULL;
835
4c4b4cd2
PH
836 GROW_VECT (encoding_buffer, encoding_buffer_size,
837 2 * strlen (decoded) + 10);
14f9c5c9
AS
838
839 k = 0;
4c4b4cd2 840 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 841 {
cdc7bb92 842 if (*p == '.')
4c4b4cd2
PH
843 {
844 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
845 k += 2;
846 }
14f9c5c9 847 else if (*p == '"')
4c4b4cd2
PH
848 {
849 const struct ada_opname_map *mapping;
850
851 for (mapping = ada_opname_table;
1265e4aa
JB
852 mapping->encoded != NULL
853 && strncmp (mapping->decoded, p,
854 strlen (mapping->decoded)) != 0; mapping += 1)
4c4b4cd2
PH
855 ;
856 if (mapping->encoded == NULL)
323e0a4a 857 error (_("invalid Ada operator name: %s"), p);
4c4b4cd2
PH
858 strcpy (encoding_buffer + k, mapping->encoded);
859 k += strlen (mapping->encoded);
860 break;
861 }
d2e4a39e 862 else
4c4b4cd2
PH
863 {
864 encoding_buffer[k] = *p;
865 k += 1;
866 }
14f9c5c9
AS
867 }
868
4c4b4cd2
PH
869 encoding_buffer[k] = '\0';
870 return encoding_buffer;
14f9c5c9
AS
871}
872
873/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
874 quotes, unfolded, but with the quotes stripped away. Result good
875 to next call. */
876
d2e4a39e
AS
877char *
878ada_fold_name (const char *name)
14f9c5c9 879{
d2e4a39e 880 static char *fold_buffer = NULL;
14f9c5c9
AS
881 static size_t fold_buffer_size = 0;
882
883 int len = strlen (name);
d2e4a39e 884 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
885
886 if (name[0] == '\'')
887 {
d2e4a39e
AS
888 strncpy (fold_buffer, name + 1, len - 2);
889 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
890 }
891 else
892 {
893 int i;
5b4ee69b 894
14f9c5c9 895 for (i = 0; i <= len; i += 1)
4c4b4cd2 896 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
897 }
898
899 return fold_buffer;
900}
901
529cad9c
PH
902/* Return nonzero if C is either a digit or a lowercase alphabet character. */
903
904static int
905is_lower_alphanum (const char c)
906{
907 return (isdigit (c) || (isalpha (c) && islower (c)));
908}
909
c90092fe
JB
910/* ENCODED is the linkage name of a symbol and LEN contains its length.
911 This function saves in LEN the length of that same symbol name but
912 without either of these suffixes:
29480c32
JB
913 . .{DIGIT}+
914 . ${DIGIT}+
915 . ___{DIGIT}+
916 . __{DIGIT}+.
c90092fe 917
29480c32
JB
918 These are suffixes introduced by the compiler for entities such as
919 nested subprogram for instance, in order to avoid name clashes.
920 They do not serve any purpose for the debugger. */
921
922static void
923ada_remove_trailing_digits (const char *encoded, int *len)
924{
925 if (*len > 1 && isdigit (encoded[*len - 1]))
926 {
927 int i = *len - 2;
5b4ee69b 928
29480c32
JB
929 while (i > 0 && isdigit (encoded[i]))
930 i--;
931 if (i >= 0 && encoded[i] == '.')
932 *len = i;
933 else if (i >= 0 && encoded[i] == '$')
934 *len = i;
935 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
936 *len = i - 2;
937 else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
938 *len = i - 1;
939 }
940}
941
942/* Remove the suffix introduced by the compiler for protected object
943 subprograms. */
944
945static void
946ada_remove_po_subprogram_suffix (const char *encoded, int *len)
947{
948 /* Remove trailing N. */
949
950 /* Protected entry subprograms are broken into two
951 separate subprograms: The first one is unprotected, and has
952 a 'N' suffix; the second is the protected version, and has
0963b4bd 953 the 'P' suffix. The second calls the first one after handling
29480c32
JB
954 the protection. Since the P subprograms are internally generated,
955 we leave these names undecoded, giving the user a clue that this
956 entity is internal. */
957
958 if (*len > 1
959 && encoded[*len - 1] == 'N'
960 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
961 *len = *len - 1;
962}
963
69fadcdf
JB
964/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
965
966static void
967ada_remove_Xbn_suffix (const char *encoded, int *len)
968{
969 int i = *len - 1;
970
971 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
972 i--;
973
974 if (encoded[i] != 'X')
975 return;
976
977 if (i == 0)
978 return;
979
980 if (isalnum (encoded[i-1]))
981 *len = i;
982}
983
29480c32
JB
984/* If ENCODED follows the GNAT entity encoding conventions, then return
985 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
986 replaced by ENCODED.
14f9c5c9 987
4c4b4cd2 988 The resulting string is valid until the next call of ada_decode.
29480c32 989 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
990 is returned. */
991
992const char *
993ada_decode (const char *encoded)
14f9c5c9
AS
994{
995 int i, j;
996 int len0;
d2e4a39e 997 const char *p;
4c4b4cd2 998 char *decoded;
14f9c5c9 999 int at_start_name;
4c4b4cd2
PH
1000 static char *decoding_buffer = NULL;
1001 static size_t decoding_buffer_size = 0;
d2e4a39e 1002
29480c32
JB
1003 /* The name of the Ada main procedure starts with "_ada_".
1004 This prefix is not part of the decoded name, so skip this part
1005 if we see this prefix. */
4c4b4cd2
PH
1006 if (strncmp (encoded, "_ada_", 5) == 0)
1007 encoded += 5;
14f9c5c9 1008
29480c32
JB
1009 /* If the name starts with '_', then it is not a properly encoded
1010 name, so do not attempt to decode it. Similarly, if the name
1011 starts with '<', the name should not be decoded. */
4c4b4cd2 1012 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1013 goto Suppress;
1014
4c4b4cd2 1015 len0 = strlen (encoded);
4c4b4cd2 1016
29480c32
JB
1017 ada_remove_trailing_digits (encoded, &len0);
1018 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1019
4c4b4cd2
PH
1020 /* Remove the ___X.* suffix if present. Do not forget to verify that
1021 the suffix is located before the current "end" of ENCODED. We want
1022 to avoid re-matching parts of ENCODED that have previously been
1023 marked as discarded (by decrementing LEN0). */
1024 p = strstr (encoded, "___");
1025 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1026 {
1027 if (p[3] == 'X')
4c4b4cd2 1028 len0 = p - encoded;
14f9c5c9 1029 else
4c4b4cd2 1030 goto Suppress;
14f9c5c9 1031 }
4c4b4cd2 1032
29480c32
JB
1033 /* Remove any trailing TKB suffix. It tells us that this symbol
1034 is for the body of a task, but that information does not actually
1035 appear in the decoded name. */
1036
4c4b4cd2 1037 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
14f9c5c9 1038 len0 -= 3;
76a01679 1039
a10967fa
JB
1040 /* Remove any trailing TB suffix. The TB suffix is slightly different
1041 from the TKB suffix because it is used for non-anonymous task
1042 bodies. */
1043
1044 if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
1045 len0 -= 2;
1046
29480c32
JB
1047 /* Remove trailing "B" suffixes. */
1048 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1049
4c4b4cd2 1050 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
14f9c5c9
AS
1051 len0 -= 1;
1052
4c4b4cd2 1053 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1054
4c4b4cd2
PH
1055 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1056 decoded = decoding_buffer;
14f9c5c9 1057
29480c32
JB
1058 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1059
4c4b4cd2 1060 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1061 {
4c4b4cd2
PH
1062 i = len0 - 2;
1063 while ((i >= 0 && isdigit (encoded[i]))
1064 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1065 i -= 1;
1066 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1067 len0 = i - 1;
1068 else if (encoded[i] == '$')
1069 len0 = i;
d2e4a39e 1070 }
14f9c5c9 1071
29480c32
JB
1072 /* The first few characters that are not alphabetic are not part
1073 of any encoding we use, so we can copy them over verbatim. */
1074
4c4b4cd2
PH
1075 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1076 decoded[j] = encoded[i];
14f9c5c9
AS
1077
1078 at_start_name = 1;
1079 while (i < len0)
1080 {
29480c32 1081 /* Is this a symbol function? */
4c4b4cd2
PH
1082 if (at_start_name && encoded[i] == 'O')
1083 {
1084 int k;
5b4ee69b 1085
4c4b4cd2
PH
1086 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1087 {
1088 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1089 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1090 op_len - 1) == 0)
1091 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1092 {
1093 strcpy (decoded + j, ada_opname_table[k].decoded);
1094 at_start_name = 0;
1095 i += op_len;
1096 j += strlen (ada_opname_table[k].decoded);
1097 break;
1098 }
1099 }
1100 if (ada_opname_table[k].encoded != NULL)
1101 continue;
1102 }
14f9c5c9
AS
1103 at_start_name = 0;
1104
529cad9c
PH
1105 /* Replace "TK__" with "__", which will eventually be translated
1106 into "." (just below). */
1107
4c4b4cd2
PH
1108 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1109 i += 2;
529cad9c 1110
29480c32
JB
1111 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1112 be translated into "." (just below). These are internal names
1113 generated for anonymous blocks inside which our symbol is nested. */
1114
1115 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1116 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1117 && isdigit (encoded [i+4]))
1118 {
1119 int k = i + 5;
1120
1121 while (k < len0 && isdigit (encoded[k]))
1122 k++; /* Skip any extra digit. */
1123
1124 /* Double-check that the "__B_{DIGITS}+" sequence we found
1125 is indeed followed by "__". */
1126 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1127 i = k;
1128 }
1129
529cad9c
PH
1130 /* Remove _E{DIGITS}+[sb] */
1131
1132 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1133 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1134 one implements the actual entry code, and has a suffix following
1135 the convention above; the second one implements the barrier and
1136 uses the same convention as above, except that the 'E' is replaced
1137 by a 'B'.
1138
1139 Just as above, we do not decode the name of barrier functions
1140 to give the user a clue that the code he is debugging has been
1141 internally generated. */
1142
1143 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1144 && isdigit (encoded[i+2]))
1145 {
1146 int k = i + 3;
1147
1148 while (k < len0 && isdigit (encoded[k]))
1149 k++;
1150
1151 if (k < len0
1152 && (encoded[k] == 'b' || encoded[k] == 's'))
1153 {
1154 k++;
1155 /* Just as an extra precaution, make sure that if this
1156 suffix is followed by anything else, it is a '_'.
1157 Otherwise, we matched this sequence by accident. */
1158 if (k == len0
1159 || (k < len0 && encoded[k] == '_'))
1160 i = k;
1161 }
1162 }
1163
1164 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1165 the GNAT front-end in protected object subprograms. */
1166
1167 if (i < len0 + 3
1168 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1169 {
1170 /* Backtrack a bit up until we reach either the begining of
1171 the encoded name, or "__". Make sure that we only find
1172 digits or lowercase characters. */
1173 const char *ptr = encoded + i - 1;
1174
1175 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1176 ptr--;
1177 if (ptr < encoded
1178 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1179 i++;
1180 }
1181
4c4b4cd2
PH
1182 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1183 {
29480c32
JB
1184 /* This is a X[bn]* sequence not separated from the previous
1185 part of the name with a non-alpha-numeric character (in other
1186 words, immediately following an alpha-numeric character), then
1187 verify that it is placed at the end of the encoded name. If
1188 not, then the encoding is not valid and we should abort the
1189 decoding. Otherwise, just skip it, it is used in body-nested
1190 package names. */
4c4b4cd2
PH
1191 do
1192 i += 1;
1193 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1194 if (i < len0)
1195 goto Suppress;
1196 }
cdc7bb92 1197 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1198 {
29480c32 1199 /* Replace '__' by '.'. */
4c4b4cd2
PH
1200 decoded[j] = '.';
1201 at_start_name = 1;
1202 i += 2;
1203 j += 1;
1204 }
14f9c5c9 1205 else
4c4b4cd2 1206 {
29480c32
JB
1207 /* It's a character part of the decoded name, so just copy it
1208 over. */
4c4b4cd2
PH
1209 decoded[j] = encoded[i];
1210 i += 1;
1211 j += 1;
1212 }
14f9c5c9 1213 }
4c4b4cd2 1214 decoded[j] = '\000';
14f9c5c9 1215
29480c32
JB
1216 /* Decoded names should never contain any uppercase character.
1217 Double-check this, and abort the decoding if we find one. */
1218
4c4b4cd2
PH
1219 for (i = 0; decoded[i] != '\0'; i += 1)
1220 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1221 goto Suppress;
1222
4c4b4cd2
PH
1223 if (strcmp (decoded, encoded) == 0)
1224 return encoded;
1225 else
1226 return decoded;
14f9c5c9
AS
1227
1228Suppress:
4c4b4cd2
PH
1229 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1230 decoded = decoding_buffer;
1231 if (encoded[0] == '<')
1232 strcpy (decoded, encoded);
14f9c5c9 1233 else
88c15c34 1234 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1235 return decoded;
1236
1237}
1238
1239/* Table for keeping permanent unique copies of decoded names. Once
1240 allocated, names in this table are never released. While this is a
1241 storage leak, it should not be significant unless there are massive
1242 changes in the set of decoded names in successive versions of a
1243 symbol table loaded during a single session. */
1244static struct htab *decoded_names_store;
1245
1246/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1247 in the language-specific part of GSYMBOL, if it has not been
1248 previously computed. Tries to save the decoded name in the same
1249 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1250 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1251 GSYMBOL).
4c4b4cd2
PH
1252 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1253 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1254 when a decoded name is cached in it. */
4c4b4cd2 1255
76a01679
JB
1256char *
1257ada_decode_symbol (const struct general_symbol_info *gsymbol)
4c4b4cd2 1258{
76a01679 1259 char **resultp =
afa16725 1260 (char **) &gsymbol->language_specific.mangled_lang.demangled_name;
5b4ee69b 1261
4c4b4cd2
PH
1262 if (*resultp == NULL)
1263 {
1264 const char *decoded = ada_decode (gsymbol->name);
5b4ee69b 1265
714835d5 1266 if (gsymbol->obj_section != NULL)
76a01679 1267 {
714835d5 1268 struct objfile *objf = gsymbol->obj_section->objfile;
5b4ee69b 1269
714835d5
UW
1270 *resultp = obsavestring (decoded, strlen (decoded),
1271 &objf->objfile_obstack);
76a01679 1272 }
4c4b4cd2 1273 /* Sometimes, we can't find a corresponding objfile, in which
76a01679
JB
1274 case, we put the result on the heap. Since we only decode
1275 when needed, we hope this usually does not cause a
1276 significant memory leak (FIXME). */
4c4b4cd2 1277 if (*resultp == NULL)
76a01679
JB
1278 {
1279 char **slot = (char **) htab_find_slot (decoded_names_store,
1280 decoded, INSERT);
5b4ee69b 1281
76a01679
JB
1282 if (*slot == NULL)
1283 *slot = xstrdup (decoded);
1284 *resultp = *slot;
1285 }
4c4b4cd2 1286 }
14f9c5c9 1287
4c4b4cd2
PH
1288 return *resultp;
1289}
76a01679 1290
2c0b251b 1291static char *
76a01679 1292ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1293{
1294 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1295}
1296
1297/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
4c4b4cd2
PH
1298 suffixes that encode debugging information or leading _ada_ on
1299 SYM_NAME (see is_name_suffix commentary for the debugging
1300 information that is ignored). If WILD, then NAME need only match a
1301 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1302 either argument is NULL. */
14f9c5c9 1303
2c0b251b 1304static int
40658b94 1305match_name (const char *sym_name, const char *name, int wild)
14f9c5c9
AS
1306{
1307 if (sym_name == NULL || name == NULL)
1308 return 0;
1309 else if (wild)
73589123 1310 return wild_match (sym_name, name) == 0;
d2e4a39e
AS
1311 else
1312 {
1313 int len_name = strlen (name);
5b4ee69b 1314
4c4b4cd2
PH
1315 return (strncmp (sym_name, name, len_name) == 0
1316 && is_name_suffix (sym_name + len_name))
1317 || (strncmp (sym_name, "_ada_", 5) == 0
1318 && strncmp (sym_name + 5, name, len_name) == 0
1319 && is_name_suffix (sym_name + len_name + 5));
d2e4a39e 1320 }
14f9c5c9 1321}
14f9c5c9 1322\f
d2e4a39e 1323
4c4b4cd2 1324 /* Arrays */
14f9c5c9 1325
28c85d6c
JB
1326/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1327 generated by the GNAT compiler to describe the index type used
1328 for each dimension of an array, check whether it follows the latest
1329 known encoding. If not, fix it up to conform to the latest encoding.
1330 Otherwise, do nothing. This function also does nothing if
1331 INDEX_DESC_TYPE is NULL.
1332
1333 The GNAT encoding used to describle the array index type evolved a bit.
1334 Initially, the information would be provided through the name of each
1335 field of the structure type only, while the type of these fields was
1336 described as unspecified and irrelevant. The debugger was then expected
1337 to perform a global type lookup using the name of that field in order
1338 to get access to the full index type description. Because these global
1339 lookups can be very expensive, the encoding was later enhanced to make
1340 the global lookup unnecessary by defining the field type as being
1341 the full index type description.
1342
1343 The purpose of this routine is to allow us to support older versions
1344 of the compiler by detecting the use of the older encoding, and by
1345 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1346 we essentially replace each field's meaningless type by the associated
1347 index subtype). */
1348
1349void
1350ada_fixup_array_indexes_type (struct type *index_desc_type)
1351{
1352 int i;
1353
1354 if (index_desc_type == NULL)
1355 return;
1356 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1357
1358 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1359 to check one field only, no need to check them all). If not, return
1360 now.
1361
1362 If our INDEX_DESC_TYPE was generated using the older encoding,
1363 the field type should be a meaningless integer type whose name
1364 is not equal to the field name. */
1365 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1366 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1367 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1368 return;
1369
1370 /* Fixup each field of INDEX_DESC_TYPE. */
1371 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1372 {
1373 char *name = TYPE_FIELD_NAME (index_desc_type, i);
1374 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1375
1376 if (raw_type)
1377 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1378 }
1379}
1380
4c4b4cd2 1381/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1382
d2e4a39e
AS
1383static char *bound_name[] = {
1384 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1385 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1386};
1387
1388/* Maximum number of array dimensions we are prepared to handle. */
1389
4c4b4cd2 1390#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1391
14f9c5c9 1392
4c4b4cd2
PH
1393/* The desc_* routines return primitive portions of array descriptors
1394 (fat pointers). */
14f9c5c9
AS
1395
1396/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1397 level of indirection, if needed. */
1398
d2e4a39e
AS
1399static struct type *
1400desc_base_type (struct type *type)
14f9c5c9
AS
1401{
1402 if (type == NULL)
1403 return NULL;
61ee279c 1404 type = ada_check_typedef (type);
720d1a40
JB
1405 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1406 type = ada_typedef_target_type (type);
1407
1265e4aa
JB
1408 if (type != NULL
1409 && (TYPE_CODE (type) == TYPE_CODE_PTR
1410 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1411 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1412 else
1413 return type;
1414}
1415
4c4b4cd2
PH
1416/* True iff TYPE indicates a "thin" array pointer type. */
1417
14f9c5c9 1418static int
d2e4a39e 1419is_thin_pntr (struct type *type)
14f9c5c9 1420{
d2e4a39e 1421 return
14f9c5c9
AS
1422 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1423 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1424}
1425
4c4b4cd2
PH
1426/* The descriptor type for thin pointer type TYPE. */
1427
d2e4a39e
AS
1428static struct type *
1429thin_descriptor_type (struct type *type)
14f9c5c9 1430{
d2e4a39e 1431 struct type *base_type = desc_base_type (type);
5b4ee69b 1432
14f9c5c9
AS
1433 if (base_type == NULL)
1434 return NULL;
1435 if (is_suffix (ada_type_name (base_type), "___XVE"))
1436 return base_type;
d2e4a39e 1437 else
14f9c5c9 1438 {
d2e4a39e 1439 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1440
14f9c5c9 1441 if (alt_type == NULL)
4c4b4cd2 1442 return base_type;
14f9c5c9 1443 else
4c4b4cd2 1444 return alt_type;
14f9c5c9
AS
1445 }
1446}
1447
4c4b4cd2
PH
1448/* A pointer to the array data for thin-pointer value VAL. */
1449
d2e4a39e
AS
1450static struct value *
1451thin_data_pntr (struct value *val)
14f9c5c9 1452{
828292f2 1453 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1454 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1455
556bdfd4
UW
1456 data_type = lookup_pointer_type (data_type);
1457
14f9c5c9 1458 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1459 return value_cast (data_type, value_copy (val));
d2e4a39e 1460 else
42ae5230 1461 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1462}
1463
4c4b4cd2
PH
1464/* True iff TYPE indicates a "thick" array pointer type. */
1465
14f9c5c9 1466static int
d2e4a39e 1467is_thick_pntr (struct type *type)
14f9c5c9
AS
1468{
1469 type = desc_base_type (type);
1470 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1471 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1472}
1473
4c4b4cd2
PH
1474/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1475 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1476
d2e4a39e
AS
1477static struct type *
1478desc_bounds_type (struct type *type)
14f9c5c9 1479{
d2e4a39e 1480 struct type *r;
14f9c5c9
AS
1481
1482 type = desc_base_type (type);
1483
1484 if (type == NULL)
1485 return NULL;
1486 else if (is_thin_pntr (type))
1487 {
1488 type = thin_descriptor_type (type);
1489 if (type == NULL)
4c4b4cd2 1490 return NULL;
14f9c5c9
AS
1491 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1492 if (r != NULL)
61ee279c 1493 return ada_check_typedef (r);
14f9c5c9
AS
1494 }
1495 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1496 {
1497 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1498 if (r != NULL)
61ee279c 1499 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1500 }
1501 return NULL;
1502}
1503
1504/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1505 one, a pointer to its bounds data. Otherwise NULL. */
1506
d2e4a39e
AS
1507static struct value *
1508desc_bounds (struct value *arr)
14f9c5c9 1509{
df407dfe 1510 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1511
d2e4a39e 1512 if (is_thin_pntr (type))
14f9c5c9 1513 {
d2e4a39e 1514 struct type *bounds_type =
4c4b4cd2 1515 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1516 LONGEST addr;
1517
4cdfadb1 1518 if (bounds_type == NULL)
323e0a4a 1519 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1520
1521 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1522 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1523 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1524 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1525 addr = value_as_long (arr);
d2e4a39e 1526 else
42ae5230 1527 addr = value_address (arr);
14f9c5c9 1528
d2e4a39e 1529 return
4c4b4cd2
PH
1530 value_from_longest (lookup_pointer_type (bounds_type),
1531 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1532 }
1533
1534 else if (is_thick_pntr (type))
05e522ef
JB
1535 {
1536 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1537 _("Bad GNAT array descriptor"));
1538 struct type *p_bounds_type = value_type (p_bounds);
1539
1540 if (p_bounds_type
1541 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1542 {
1543 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1544
1545 if (TYPE_STUB (target_type))
1546 p_bounds = value_cast (lookup_pointer_type
1547 (ada_check_typedef (target_type)),
1548 p_bounds);
1549 }
1550 else
1551 error (_("Bad GNAT array descriptor"));
1552
1553 return p_bounds;
1554 }
14f9c5c9
AS
1555 else
1556 return NULL;
1557}
1558
4c4b4cd2
PH
1559/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1560 position of the field containing the address of the bounds data. */
1561
14f9c5c9 1562static int
d2e4a39e 1563fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1564{
1565 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1566}
1567
1568/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1569 size of the field containing the address of the bounds data. */
1570
14f9c5c9 1571static int
d2e4a39e 1572fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1573{
1574 type = desc_base_type (type);
1575
d2e4a39e 1576 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1577 return TYPE_FIELD_BITSIZE (type, 1);
1578 else
61ee279c 1579 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1580}
1581
4c4b4cd2 1582/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1583 pointer to one, the type of its array data (a array-with-no-bounds type);
1584 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1585 data. */
4c4b4cd2 1586
d2e4a39e 1587static struct type *
556bdfd4 1588desc_data_target_type (struct type *type)
14f9c5c9
AS
1589{
1590 type = desc_base_type (type);
1591
4c4b4cd2 1592 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1593 if (is_thin_pntr (type))
556bdfd4 1594 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1595 else if (is_thick_pntr (type))
556bdfd4
UW
1596 {
1597 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1598
1599 if (data_type
1600 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1601 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1602 }
1603
1604 return NULL;
14f9c5c9
AS
1605}
1606
1607/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1608 its array data. */
4c4b4cd2 1609
d2e4a39e
AS
1610static struct value *
1611desc_data (struct value *arr)
14f9c5c9 1612{
df407dfe 1613 struct type *type = value_type (arr);
5b4ee69b 1614
14f9c5c9
AS
1615 if (is_thin_pntr (type))
1616 return thin_data_pntr (arr);
1617 else if (is_thick_pntr (type))
d2e4a39e 1618 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1619 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1620 else
1621 return NULL;
1622}
1623
1624
1625/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1626 position of the field containing the address of the data. */
1627
14f9c5c9 1628static int
d2e4a39e 1629fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1630{
1631 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1632}
1633
1634/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1635 size of the field containing the address of the data. */
1636
14f9c5c9 1637static int
d2e4a39e 1638fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1639{
1640 type = desc_base_type (type);
1641
1642 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1643 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1644 else
14f9c5c9
AS
1645 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1646}
1647
4c4b4cd2 1648/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1649 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1650 bound, if WHICH is 1. The first bound is I=1. */
1651
d2e4a39e
AS
1652static struct value *
1653desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1654{
d2e4a39e 1655 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1656 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1657}
1658
1659/* If BOUNDS is an array-bounds structure type, return the bit position
1660 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1661 bound, if WHICH is 1. The first bound is I=1. */
1662
14f9c5c9 1663static int
d2e4a39e 1664desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1665{
d2e4a39e 1666 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1667}
1668
1669/* If BOUNDS is an array-bounds structure type, return the bit field size
1670 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1671 bound, if WHICH is 1. The first bound is I=1. */
1672
76a01679 1673static int
d2e4a39e 1674desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1675{
1676 type = desc_base_type (type);
1677
d2e4a39e
AS
1678 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1679 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1680 else
1681 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1682}
1683
1684/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1685 Ith bound (numbering from 1). Otherwise, NULL. */
1686
d2e4a39e
AS
1687static struct type *
1688desc_index_type (struct type *type, int i)
14f9c5c9
AS
1689{
1690 type = desc_base_type (type);
1691
1692 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1693 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1694 else
14f9c5c9
AS
1695 return NULL;
1696}
1697
4c4b4cd2
PH
1698/* The number of index positions in the array-bounds type TYPE.
1699 Return 0 if TYPE is NULL. */
1700
14f9c5c9 1701static int
d2e4a39e 1702desc_arity (struct type *type)
14f9c5c9
AS
1703{
1704 type = desc_base_type (type);
1705
1706 if (type != NULL)
1707 return TYPE_NFIELDS (type) / 2;
1708 return 0;
1709}
1710
4c4b4cd2
PH
1711/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1712 an array descriptor type (representing an unconstrained array
1713 type). */
1714
76a01679
JB
1715static int
1716ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1717{
1718 if (type == NULL)
1719 return 0;
61ee279c 1720 type = ada_check_typedef (type);
4c4b4cd2 1721 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1722 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1723}
1724
52ce6436 1725/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1726 * to one. */
52ce6436 1727
2c0b251b 1728static int
52ce6436
PH
1729ada_is_array_type (struct type *type)
1730{
1731 while (type != NULL
1732 && (TYPE_CODE (type) == TYPE_CODE_PTR
1733 || TYPE_CODE (type) == TYPE_CODE_REF))
1734 type = TYPE_TARGET_TYPE (type);
1735 return ada_is_direct_array_type (type);
1736}
1737
4c4b4cd2 1738/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1739
14f9c5c9 1740int
4c4b4cd2 1741ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1742{
1743 if (type == NULL)
1744 return 0;
61ee279c 1745 type = ada_check_typedef (type);
14f9c5c9 1746 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2 1747 || (TYPE_CODE (type) == TYPE_CODE_PTR
b0dd7688
JB
1748 && TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type)))
1749 == TYPE_CODE_ARRAY));
14f9c5c9
AS
1750}
1751
4c4b4cd2
PH
1752/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1753
14f9c5c9 1754int
4c4b4cd2 1755ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1756{
556bdfd4 1757 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1758
1759 if (type == NULL)
1760 return 0;
61ee279c 1761 type = ada_check_typedef (type);
556bdfd4
UW
1762 return (data_type != NULL
1763 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1764 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1765}
1766
1767/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1768 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1769 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1770 is still needed. */
1771
14f9c5c9 1772int
ebf56fd3 1773ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1774{
d2e4a39e 1775 return
14f9c5c9
AS
1776 type != NULL
1777 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1778 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1779 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1780 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1781}
1782
1783
4c4b4cd2 1784/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1785 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1786 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1787 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1788 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1789 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1790 a descriptor. */
d2e4a39e
AS
1791struct type *
1792ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1793{
ad82864c
JB
1794 if (ada_is_constrained_packed_array_type (value_type (arr)))
1795 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1796
df407dfe
AC
1797 if (!ada_is_array_descriptor_type (value_type (arr)))
1798 return value_type (arr);
d2e4a39e
AS
1799
1800 if (!bounds)
ad82864c
JB
1801 {
1802 struct type *array_type =
1803 ada_check_typedef (desc_data_target_type (value_type (arr)));
1804
1805 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1806 TYPE_FIELD_BITSIZE (array_type, 0) =
1807 decode_packed_array_bitsize (value_type (arr));
1808
1809 return array_type;
1810 }
14f9c5c9
AS
1811 else
1812 {
d2e4a39e 1813 struct type *elt_type;
14f9c5c9 1814 int arity;
d2e4a39e 1815 struct value *descriptor;
14f9c5c9 1816
df407dfe
AC
1817 elt_type = ada_array_element_type (value_type (arr), -1);
1818 arity = ada_array_arity (value_type (arr));
14f9c5c9 1819
d2e4a39e 1820 if (elt_type == NULL || arity == 0)
df407dfe 1821 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1822
1823 descriptor = desc_bounds (arr);
d2e4a39e 1824 if (value_as_long (descriptor) == 0)
4c4b4cd2 1825 return NULL;
d2e4a39e 1826 while (arity > 0)
4c4b4cd2 1827 {
e9bb382b
UW
1828 struct type *range_type = alloc_type_copy (value_type (arr));
1829 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1830 struct value *low = desc_one_bound (descriptor, arity, 0);
1831 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1832
5b4ee69b 1833 arity -= 1;
df407dfe 1834 create_range_type (range_type, value_type (low),
529cad9c
PH
1835 longest_to_int (value_as_long (low)),
1836 longest_to_int (value_as_long (high)));
4c4b4cd2 1837 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1838
1839 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1840 {
1841 /* We need to store the element packed bitsize, as well as
1842 recompute the array size, because it was previously
1843 computed based on the unpacked element size. */
1844 LONGEST lo = value_as_long (low);
1845 LONGEST hi = value_as_long (high);
1846
1847 TYPE_FIELD_BITSIZE (elt_type, 0) =
1848 decode_packed_array_bitsize (value_type (arr));
1849 /* If the array has no element, then the size is already
1850 zero, and does not need to be recomputed. */
1851 if (lo < hi)
1852 {
1853 int array_bitsize =
1854 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
1855
1856 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1857 }
1858 }
4c4b4cd2 1859 }
14f9c5c9
AS
1860
1861 return lookup_pointer_type (elt_type);
1862 }
1863}
1864
1865/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
1866 Otherwise, returns either a standard GDB array with bounds set
1867 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1868 GDB array. Returns NULL if ARR is a null fat pointer. */
1869
d2e4a39e
AS
1870struct value *
1871ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 1872{
df407dfe 1873 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1874 {
d2e4a39e 1875 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 1876
14f9c5c9 1877 if (arrType == NULL)
4c4b4cd2 1878 return NULL;
14f9c5c9
AS
1879 return value_cast (arrType, value_copy (desc_data (arr)));
1880 }
ad82864c
JB
1881 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1882 return decode_constrained_packed_array (arr);
14f9c5c9
AS
1883 else
1884 return arr;
1885}
1886
1887/* If ARR does not represent an array, returns ARR unchanged.
1888 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
1889 be ARR itself if it already is in the proper form). */
1890
720d1a40 1891struct value *
d2e4a39e 1892ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 1893{
df407dfe 1894 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1895 {
d2e4a39e 1896 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 1897
14f9c5c9 1898 if (arrVal == NULL)
323e0a4a 1899 error (_("Bounds unavailable for null array pointer."));
529cad9c 1900 check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
1901 return value_ind (arrVal);
1902 }
ad82864c
JB
1903 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1904 return decode_constrained_packed_array (arr);
d2e4a39e 1905 else
14f9c5c9
AS
1906 return arr;
1907}
1908
1909/* If TYPE represents a GNAT array type, return it translated to an
1910 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
1911 packing). For other types, is the identity. */
1912
d2e4a39e
AS
1913struct type *
1914ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 1915{
ad82864c
JB
1916 if (ada_is_constrained_packed_array_type (type))
1917 return decode_constrained_packed_array_type (type);
17280b9f
UW
1918
1919 if (ada_is_array_descriptor_type (type))
556bdfd4 1920 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
1921
1922 return type;
14f9c5c9
AS
1923}
1924
4c4b4cd2
PH
1925/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1926
ad82864c
JB
1927static int
1928ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
1929{
1930 if (type == NULL)
1931 return 0;
4c4b4cd2 1932 type = desc_base_type (type);
61ee279c 1933 type = ada_check_typedef (type);
d2e4a39e 1934 return
14f9c5c9
AS
1935 ada_type_name (type) != NULL
1936 && strstr (ada_type_name (type), "___XP") != NULL;
1937}
1938
ad82864c
JB
1939/* Non-zero iff TYPE represents a standard GNAT constrained
1940 packed-array type. */
1941
1942int
1943ada_is_constrained_packed_array_type (struct type *type)
1944{
1945 return ada_is_packed_array_type (type)
1946 && !ada_is_array_descriptor_type (type);
1947}
1948
1949/* Non-zero iff TYPE represents an array descriptor for a
1950 unconstrained packed-array type. */
1951
1952static int
1953ada_is_unconstrained_packed_array_type (struct type *type)
1954{
1955 return ada_is_packed_array_type (type)
1956 && ada_is_array_descriptor_type (type);
1957}
1958
1959/* Given that TYPE encodes a packed array type (constrained or unconstrained),
1960 return the size of its elements in bits. */
1961
1962static long
1963decode_packed_array_bitsize (struct type *type)
1964{
720d1a40 1965 char *raw_name;
ad82864c
JB
1966 char *tail;
1967 long bits;
1968
720d1a40
JB
1969 /* Access to arrays implemented as fat pointers are encoded as a typedef
1970 of the fat pointer type. We need the name of the fat pointer type
1971 to do the decoding, so strip the typedef layer. */
1972 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
1973 type = ada_typedef_target_type (type);
1974
1975 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
1976 if (!raw_name)
1977 raw_name = ada_type_name (desc_base_type (type));
1978
1979 if (!raw_name)
1980 return 0;
1981
1982 tail = strstr (raw_name, "___XP");
720d1a40 1983 gdb_assert (tail != NULL);
ad82864c
JB
1984
1985 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1986 {
1987 lim_warning
1988 (_("could not understand bit size information on packed array"));
1989 return 0;
1990 }
1991
1992 return bits;
1993}
1994
14f9c5c9
AS
1995/* Given that TYPE is a standard GDB array type with all bounds filled
1996 in, and that the element size of its ultimate scalar constituents
1997 (that is, either its elements, or, if it is an array of arrays, its
1998 elements' elements, etc.) is *ELT_BITS, return an identical type,
1999 but with the bit sizes of its elements (and those of any
2000 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2
PH
2001 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
2002 in bits. */
2003
d2e4a39e 2004static struct type *
ad82864c 2005constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2006{
d2e4a39e
AS
2007 struct type *new_elt_type;
2008 struct type *new_type;
14f9c5c9
AS
2009 LONGEST low_bound, high_bound;
2010
61ee279c 2011 type = ada_check_typedef (type);
14f9c5c9
AS
2012 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
2013 return type;
2014
e9bb382b 2015 new_type = alloc_type_copy (type);
ad82864c
JB
2016 new_elt_type =
2017 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2018 elt_bits);
262452ec 2019 create_array_type (new_type, new_elt_type, TYPE_INDEX_TYPE (type));
14f9c5c9
AS
2020 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
2021 TYPE_NAME (new_type) = ada_type_name (type);
2022
262452ec 2023 if (get_discrete_bounds (TYPE_INDEX_TYPE (type),
4c4b4cd2 2024 &low_bound, &high_bound) < 0)
14f9c5c9
AS
2025 low_bound = high_bound = 0;
2026 if (high_bound < low_bound)
2027 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2028 else
14f9c5c9
AS
2029 {
2030 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2031 TYPE_LENGTH (new_type) =
4c4b4cd2 2032 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2033 }
2034
876cecd0 2035 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2036 return new_type;
2037}
2038
ad82864c
JB
2039/* The array type encoded by TYPE, where
2040 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2041
d2e4a39e 2042static struct type *
ad82864c 2043decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2044{
727e3d2e
JB
2045 char *raw_name = ada_type_name (ada_check_typedef (type));
2046 char *name;
2047 char *tail;
d2e4a39e 2048 struct type *shadow_type;
14f9c5c9 2049 long bits;
14f9c5c9 2050
727e3d2e
JB
2051 if (!raw_name)
2052 raw_name = ada_type_name (desc_base_type (type));
2053
2054 if (!raw_name)
2055 return NULL;
2056
2057 name = (char *) alloca (strlen (raw_name) + 1);
2058 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2059 type = desc_base_type (type);
2060
14f9c5c9
AS
2061 memcpy (name, raw_name, tail - raw_name);
2062 name[tail - raw_name] = '\000';
2063
b4ba55a1
JB
2064 shadow_type = ada_find_parallel_type_with_name (type, name);
2065
2066 if (shadow_type == NULL)
14f9c5c9 2067 {
323e0a4a 2068 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2069 return NULL;
2070 }
cb249c71 2071 CHECK_TYPEDEF (shadow_type);
14f9c5c9
AS
2072
2073 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2074 {
0963b4bd
MS
2075 lim_warning (_("could not understand bounds "
2076 "information on packed array"));
14f9c5c9
AS
2077 return NULL;
2078 }
d2e4a39e 2079
ad82864c
JB
2080 bits = decode_packed_array_bitsize (type);
2081 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2082}
2083
ad82864c
JB
2084/* Given that ARR is a struct value *indicating a GNAT constrained packed
2085 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2086 standard GDB array type except that the BITSIZEs of the array
2087 target types are set to the number of bits in each element, and the
4c4b4cd2 2088 type length is set appropriately. */
14f9c5c9 2089
d2e4a39e 2090static struct value *
ad82864c 2091decode_constrained_packed_array (struct value *arr)
14f9c5c9 2092{
4c4b4cd2 2093 struct type *type;
14f9c5c9 2094
4c4b4cd2 2095 arr = ada_coerce_ref (arr);
284614f0
JB
2096
2097 /* If our value is a pointer, then dererence it. Make sure that
2098 this operation does not cause the target type to be fixed, as
2099 this would indirectly cause this array to be decoded. The rest
2100 of the routine assumes that the array hasn't been decoded yet,
2101 so we use the basic "value_ind" routine to perform the dereferencing,
2102 as opposed to using "ada_value_ind". */
828292f2 2103 if (TYPE_CODE (ada_check_typedef (value_type (arr))) == TYPE_CODE_PTR)
284614f0 2104 arr = value_ind (arr);
4c4b4cd2 2105
ad82864c 2106 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2107 if (type == NULL)
2108 {
323e0a4a 2109 error (_("can't unpack array"));
14f9c5c9
AS
2110 return NULL;
2111 }
61ee279c 2112
50810684 2113 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2114 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2115 {
2116 /* This is a (right-justified) modular type representing a packed
2117 array with no wrapper. In order to interpret the value through
2118 the (left-justified) packed array type we just built, we must
2119 first left-justify it. */
2120 int bit_size, bit_pos;
2121 ULONGEST mod;
2122
df407dfe 2123 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2124 bit_size = 0;
2125 while (mod > 0)
2126 {
2127 bit_size += 1;
2128 mod >>= 1;
2129 }
df407dfe 2130 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2131 arr = ada_value_primitive_packed_val (arr, NULL,
2132 bit_pos / HOST_CHAR_BIT,
2133 bit_pos % HOST_CHAR_BIT,
2134 bit_size,
2135 type);
2136 }
2137
4c4b4cd2 2138 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2139}
2140
2141
2142/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2143 given in IND. ARR must be a simple array. */
14f9c5c9 2144
d2e4a39e
AS
2145static struct value *
2146value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2147{
2148 int i;
2149 int bits, elt_off, bit_off;
2150 long elt_total_bit_offset;
d2e4a39e
AS
2151 struct type *elt_type;
2152 struct value *v;
14f9c5c9
AS
2153
2154 bits = 0;
2155 elt_total_bit_offset = 0;
df407dfe 2156 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2157 for (i = 0; i < arity; i += 1)
14f9c5c9 2158 {
d2e4a39e 2159 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2160 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2161 error
0963b4bd
MS
2162 (_("attempt to do packed indexing of "
2163 "something other than a packed array"));
14f9c5c9 2164 else
4c4b4cd2
PH
2165 {
2166 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2167 LONGEST lowerbound, upperbound;
2168 LONGEST idx;
2169
2170 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2171 {
323e0a4a 2172 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2173 lowerbound = upperbound = 0;
2174 }
2175
3cb382c9 2176 idx = pos_atr (ind[i]);
4c4b4cd2 2177 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2178 lim_warning (_("packed array index %ld out of bounds"),
2179 (long) idx);
4c4b4cd2
PH
2180 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2181 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2182 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2183 }
14f9c5c9
AS
2184 }
2185 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2186 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2187
2188 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2189 bits, elt_type);
14f9c5c9
AS
2190 return v;
2191}
2192
4c4b4cd2 2193/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2194
2195static int
d2e4a39e 2196has_negatives (struct type *type)
14f9c5c9 2197{
d2e4a39e
AS
2198 switch (TYPE_CODE (type))
2199 {
2200 default:
2201 return 0;
2202 case TYPE_CODE_INT:
2203 return !TYPE_UNSIGNED (type);
2204 case TYPE_CODE_RANGE:
2205 return TYPE_LOW_BOUND (type) < 0;
2206 }
14f9c5c9 2207}
d2e4a39e 2208
14f9c5c9
AS
2209
2210/* Create a new value of type TYPE from the contents of OBJ starting
2211 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2212 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
0963b4bd 2213 assigning through the result will set the field fetched from.
4c4b4cd2
PH
2214 VALADDR is ignored unless OBJ is NULL, in which case,
2215 VALADDR+OFFSET must address the start of storage containing the
2216 packed value. The value returned in this case is never an lval.
2217 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
14f9c5c9 2218
d2e4a39e 2219struct value *
fc1a4b47 2220ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
a2bd3dcd 2221 long offset, int bit_offset, int bit_size,
4c4b4cd2 2222 struct type *type)
14f9c5c9 2223{
d2e4a39e 2224 struct value *v;
4c4b4cd2
PH
2225 int src, /* Index into the source area */
2226 targ, /* Index into the target area */
2227 srcBitsLeft, /* Number of source bits left to move */
2228 nsrc, ntarg, /* Number of source and target bytes */
2229 unusedLS, /* Number of bits in next significant
2230 byte of source that are unused */
2231 accumSize; /* Number of meaningful bits in accum */
2232 unsigned char *bytes; /* First byte containing data to unpack */
d2e4a39e 2233 unsigned char *unpacked;
4c4b4cd2 2234 unsigned long accum; /* Staging area for bits being transferred */
14f9c5c9
AS
2235 unsigned char sign;
2236 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
4c4b4cd2
PH
2237 /* Transmit bytes from least to most significant; delta is the direction
2238 the indices move. */
50810684 2239 int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
14f9c5c9 2240
61ee279c 2241 type = ada_check_typedef (type);
14f9c5c9
AS
2242
2243 if (obj == NULL)
2244 {
2245 v = allocate_value (type);
d2e4a39e 2246 bytes = (unsigned char *) (valaddr + offset);
14f9c5c9 2247 }
9214ee5f 2248 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
14f9c5c9
AS
2249 {
2250 v = value_at (type,
42ae5230 2251 value_address (obj) + offset);
d2e4a39e 2252 bytes = (unsigned char *) alloca (len);
42ae5230 2253 read_memory (value_address (v), bytes, len);
14f9c5c9 2254 }
d2e4a39e 2255 else
14f9c5c9
AS
2256 {
2257 v = allocate_value (type);
0fd88904 2258 bytes = (unsigned char *) value_contents (obj) + offset;
14f9c5c9 2259 }
d2e4a39e
AS
2260
2261 if (obj != NULL)
14f9c5c9 2262 {
42ae5230 2263 CORE_ADDR new_addr;
5b4ee69b 2264
74bcbdf3 2265 set_value_component_location (v, obj);
42ae5230 2266 new_addr = value_address (obj) + offset;
9bbda503
AC
2267 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2268 set_value_bitsize (v, bit_size);
df407dfe 2269 if (value_bitpos (v) >= HOST_CHAR_BIT)
4c4b4cd2 2270 {
42ae5230 2271 ++new_addr;
9bbda503 2272 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
4c4b4cd2 2273 }
42ae5230 2274 set_value_address (v, new_addr);
14f9c5c9
AS
2275 }
2276 else
9bbda503 2277 set_value_bitsize (v, bit_size);
0fd88904 2278 unpacked = (unsigned char *) value_contents (v);
14f9c5c9
AS
2279
2280 srcBitsLeft = bit_size;
2281 nsrc = len;
2282 ntarg = TYPE_LENGTH (type);
2283 sign = 0;
2284 if (bit_size == 0)
2285 {
2286 memset (unpacked, 0, TYPE_LENGTH (type));
2287 return v;
2288 }
50810684 2289 else if (gdbarch_bits_big_endian (get_type_arch (type)))
14f9c5c9 2290 {
d2e4a39e 2291 src = len - 1;
1265e4aa
JB
2292 if (has_negatives (type)
2293 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2294 sign = ~0;
d2e4a39e
AS
2295
2296 unusedLS =
4c4b4cd2
PH
2297 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2298 % HOST_CHAR_BIT;
14f9c5c9
AS
2299
2300 switch (TYPE_CODE (type))
4c4b4cd2
PH
2301 {
2302 case TYPE_CODE_ARRAY:
2303 case TYPE_CODE_UNION:
2304 case TYPE_CODE_STRUCT:
2305 /* Non-scalar values must be aligned at a byte boundary... */
2306 accumSize =
2307 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2308 /* ... And are placed at the beginning (most-significant) bytes
2309 of the target. */
529cad9c 2310 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
0056e4d5 2311 ntarg = targ + 1;
4c4b4cd2
PH
2312 break;
2313 default:
2314 accumSize = 0;
2315 targ = TYPE_LENGTH (type) - 1;
2316 break;
2317 }
14f9c5c9 2318 }
d2e4a39e 2319 else
14f9c5c9
AS
2320 {
2321 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2322
2323 src = targ = 0;
2324 unusedLS = bit_offset;
2325 accumSize = 0;
2326
d2e4a39e 2327 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2328 sign = ~0;
14f9c5c9 2329 }
d2e4a39e 2330
14f9c5c9
AS
2331 accum = 0;
2332 while (nsrc > 0)
2333 {
2334 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2335 part of the value. */
d2e4a39e 2336 unsigned int unusedMSMask =
4c4b4cd2
PH
2337 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2338 1;
2339 /* Sign-extend bits for this byte. */
14f9c5c9 2340 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2341
d2e4a39e 2342 accum |=
4c4b4cd2 2343 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2344 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2345 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2
PH
2346 {
2347 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2348 accumSize -= HOST_CHAR_BIT;
2349 accum >>= HOST_CHAR_BIT;
2350 ntarg -= 1;
2351 targ += delta;
2352 }
14f9c5c9
AS
2353 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2354 unusedLS = 0;
2355 nsrc -= 1;
2356 src += delta;
2357 }
2358 while (ntarg > 0)
2359 {
2360 accum |= sign << accumSize;
2361 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2362 accumSize -= HOST_CHAR_BIT;
2363 accum >>= HOST_CHAR_BIT;
2364 ntarg -= 1;
2365 targ += delta;
2366 }
2367
2368 return v;
2369}
d2e4a39e 2370
14f9c5c9
AS
2371/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2372 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2373 not overlap. */
14f9c5c9 2374static void
fc1a4b47 2375move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2376 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2377{
2378 unsigned int accum, mask;
2379 int accum_bits, chunk_size;
2380
2381 target += targ_offset / HOST_CHAR_BIT;
2382 targ_offset %= HOST_CHAR_BIT;
2383 source += src_offset / HOST_CHAR_BIT;
2384 src_offset %= HOST_CHAR_BIT;
50810684 2385 if (bits_big_endian_p)
14f9c5c9
AS
2386 {
2387 accum = (unsigned char) *source;
2388 source += 1;
2389 accum_bits = HOST_CHAR_BIT - src_offset;
2390
d2e4a39e 2391 while (n > 0)
4c4b4cd2
PH
2392 {
2393 int unused_right;
5b4ee69b 2394
4c4b4cd2
PH
2395 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2396 accum_bits += HOST_CHAR_BIT;
2397 source += 1;
2398 chunk_size = HOST_CHAR_BIT - targ_offset;
2399 if (chunk_size > n)
2400 chunk_size = n;
2401 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2402 mask = ((1 << chunk_size) - 1) << unused_right;
2403 *target =
2404 (*target & ~mask)
2405 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2406 n -= chunk_size;
2407 accum_bits -= chunk_size;
2408 target += 1;
2409 targ_offset = 0;
2410 }
14f9c5c9
AS
2411 }
2412 else
2413 {
2414 accum = (unsigned char) *source >> src_offset;
2415 source += 1;
2416 accum_bits = HOST_CHAR_BIT - src_offset;
2417
d2e4a39e 2418 while (n > 0)
4c4b4cd2
PH
2419 {
2420 accum = accum + ((unsigned char) *source << accum_bits);
2421 accum_bits += HOST_CHAR_BIT;
2422 source += 1;
2423 chunk_size = HOST_CHAR_BIT - targ_offset;
2424 if (chunk_size > n)
2425 chunk_size = n;
2426 mask = ((1 << chunk_size) - 1) << targ_offset;
2427 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2428 n -= chunk_size;
2429 accum_bits -= chunk_size;
2430 accum >>= chunk_size;
2431 target += 1;
2432 targ_offset = 0;
2433 }
14f9c5c9
AS
2434 }
2435}
2436
14f9c5c9
AS
2437/* Store the contents of FROMVAL into the location of TOVAL.
2438 Return a new value with the location of TOVAL and contents of
2439 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2440 floating-point or non-scalar types. */
14f9c5c9 2441
d2e4a39e
AS
2442static struct value *
2443ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2444{
df407dfe
AC
2445 struct type *type = value_type (toval);
2446 int bits = value_bitsize (toval);
14f9c5c9 2447
52ce6436
PH
2448 toval = ada_coerce_ref (toval);
2449 fromval = ada_coerce_ref (fromval);
2450
2451 if (ada_is_direct_array_type (value_type (toval)))
2452 toval = ada_coerce_to_simple_array (toval);
2453 if (ada_is_direct_array_type (value_type (fromval)))
2454 fromval = ada_coerce_to_simple_array (fromval);
2455
88e3b34b 2456 if (!deprecated_value_modifiable (toval))
323e0a4a 2457 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2458
d2e4a39e 2459 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2460 && bits > 0
d2e4a39e 2461 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2462 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2463 {
df407dfe
AC
2464 int len = (value_bitpos (toval)
2465 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2466 int from_size;
d2e4a39e
AS
2467 char *buffer = (char *) alloca (len);
2468 struct value *val;
42ae5230 2469 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2470
2471 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2472 fromval = value_cast (type, fromval);
14f9c5c9 2473
52ce6436 2474 read_memory (to_addr, buffer, len);
aced2898
PH
2475 from_size = value_bitsize (fromval);
2476 if (from_size == 0)
2477 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2478 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2479 move_bits (buffer, value_bitpos (toval),
50810684 2480 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2481 else
50810684
UW
2482 move_bits (buffer, value_bitpos (toval),
2483 value_contents (fromval), 0, bits, 0);
52ce6436 2484 write_memory (to_addr, buffer, len);
8cebebb9
PP
2485 observer_notify_memory_changed (to_addr, len, buffer);
2486
14f9c5c9 2487 val = value_copy (toval);
0fd88904 2488 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2489 TYPE_LENGTH (type));
04624583 2490 deprecated_set_value_type (val, type);
d2e4a39e 2491
14f9c5c9
AS
2492 return val;
2493 }
2494
2495 return value_assign (toval, fromval);
2496}
2497
2498
52ce6436
PH
2499/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2500 * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2501 * CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2502 * COMPONENT, and not the inferior's memory. The current contents
2503 * of COMPONENT are ignored. */
2504static void
2505value_assign_to_component (struct value *container, struct value *component,
2506 struct value *val)
2507{
2508 LONGEST offset_in_container =
42ae5230 2509 (LONGEST) (value_address (component) - value_address (container));
52ce6436
PH
2510 int bit_offset_in_container =
2511 value_bitpos (component) - value_bitpos (container);
2512 int bits;
2513
2514 val = value_cast (value_type (component), val);
2515
2516 if (value_bitsize (component) == 0)
2517 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2518 else
2519 bits = value_bitsize (component);
2520
50810684 2521 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
52ce6436
PH
2522 move_bits (value_contents_writeable (container) + offset_in_container,
2523 value_bitpos (container) + bit_offset_in_container,
2524 value_contents (val),
2525 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
50810684 2526 bits, 1);
52ce6436
PH
2527 else
2528 move_bits (value_contents_writeable (container) + offset_in_container,
2529 value_bitpos (container) + bit_offset_in_container,
50810684 2530 value_contents (val), 0, bits, 0);
52ce6436
PH
2531}
2532
4c4b4cd2
PH
2533/* The value of the element of array ARR at the ARITY indices given in IND.
2534 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2535 thereto. */
2536
d2e4a39e
AS
2537struct value *
2538ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2539{
2540 int k;
d2e4a39e
AS
2541 struct value *elt;
2542 struct type *elt_type;
14f9c5c9
AS
2543
2544 elt = ada_coerce_to_simple_array (arr);
2545
df407dfe 2546 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2547 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2548 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2549 return value_subscript_packed (elt, arity, ind);
2550
2551 for (k = 0; k < arity; k += 1)
2552 {
2553 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2554 error (_("too many subscripts (%d expected)"), k);
2497b498 2555 elt = value_subscript (elt, pos_atr (ind[k]));
14f9c5c9
AS
2556 }
2557 return elt;
2558}
2559
2560/* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2561 value of the element of *ARR at the ARITY indices given in
4c4b4cd2 2562 IND. Does not read the entire array into memory. */
14f9c5c9 2563
2c0b251b 2564static struct value *
d2e4a39e 2565ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
4c4b4cd2 2566 struct value **ind)
14f9c5c9
AS
2567{
2568 int k;
2569
2570 for (k = 0; k < arity; k += 1)
2571 {
2572 LONGEST lwb, upb;
14f9c5c9
AS
2573
2574 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2575 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2576 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2577 value_copy (arr));
14f9c5c9 2578 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2497b498 2579 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2580 type = TYPE_TARGET_TYPE (type);
2581 }
2582
2583 return value_ind (arr);
2584}
2585
0b5d8877 2586/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
f5938064
JG
2587 actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2588 elements starting at index LOW. The lower bound of this array is LOW, as
0963b4bd 2589 per Ada rules. */
0b5d8877 2590static struct value *
f5938064
JG
2591ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2592 int low, int high)
0b5d8877 2593{
b0dd7688 2594 struct type *type0 = ada_check_typedef (type);
6c038f32 2595 CORE_ADDR base = value_as_address (array_ptr)
b0dd7688
JB
2596 + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0)))
2597 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
6c038f32 2598 struct type *index_type =
b0dd7688 2599 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0)),
0b5d8877 2600 low, high);
6c038f32 2601 struct type *slice_type =
b0dd7688 2602 create_array_type (NULL, TYPE_TARGET_TYPE (type0), index_type);
5b4ee69b 2603
f5938064 2604 return value_at_lazy (slice_type, base);
0b5d8877
PH
2605}
2606
2607
2608static struct value *
2609ada_value_slice (struct value *array, int low, int high)
2610{
b0dd7688 2611 struct type *type = ada_check_typedef (value_type (array));
6c038f32 2612 struct type *index_type =
0b5d8877 2613 create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
6c038f32 2614 struct type *slice_type =
0b5d8877 2615 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
5b4ee69b 2616
6c038f32 2617 return value_cast (slice_type, value_slice (array, low, high - low + 1));
0b5d8877
PH
2618}
2619
14f9c5c9
AS
2620/* If type is a record type in the form of a standard GNAT array
2621 descriptor, returns the number of dimensions for type. If arr is a
2622 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2623 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2624
2625int
d2e4a39e 2626ada_array_arity (struct type *type)
14f9c5c9
AS
2627{
2628 int arity;
2629
2630 if (type == NULL)
2631 return 0;
2632
2633 type = desc_base_type (type);
2634
2635 arity = 0;
d2e4a39e 2636 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2637 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2638 else
2639 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2640 {
4c4b4cd2 2641 arity += 1;
61ee279c 2642 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2643 }
d2e4a39e 2644
14f9c5c9
AS
2645 return arity;
2646}
2647
2648/* If TYPE is a record type in the form of a standard GNAT array
2649 descriptor or a simple array type, returns the element type for
2650 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2651 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2652
d2e4a39e
AS
2653struct type *
2654ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2655{
2656 type = desc_base_type (type);
2657
d2e4a39e 2658 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2659 {
2660 int k;
d2e4a39e 2661 struct type *p_array_type;
14f9c5c9 2662
556bdfd4 2663 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2664
2665 k = ada_array_arity (type);
2666 if (k == 0)
4c4b4cd2 2667 return NULL;
d2e4a39e 2668
4c4b4cd2 2669 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2670 if (nindices >= 0 && k > nindices)
4c4b4cd2 2671 k = nindices;
d2e4a39e 2672 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2673 {
61ee279c 2674 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2675 k -= 1;
2676 }
14f9c5c9
AS
2677 return p_array_type;
2678 }
2679 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2680 {
2681 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2682 {
2683 type = TYPE_TARGET_TYPE (type);
2684 nindices -= 1;
2685 }
14f9c5c9
AS
2686 return type;
2687 }
2688
2689 return NULL;
2690}
2691
4c4b4cd2 2692/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2693 Does not examine memory. Throws an error if N is invalid or TYPE
2694 is not an array type. NAME is the name of the Ada attribute being
2695 evaluated ('range, 'first, 'last, or 'length); it is used in building
2696 the error message. */
14f9c5c9 2697
1eea4ebd
UW
2698static struct type *
2699ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2700{
4c4b4cd2
PH
2701 struct type *result_type;
2702
14f9c5c9
AS
2703 type = desc_base_type (type);
2704
1eea4ebd
UW
2705 if (n < 0 || n > ada_array_arity (type))
2706 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2707
4c4b4cd2 2708 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2709 {
2710 int i;
2711
2712 for (i = 1; i < n; i += 1)
4c4b4cd2 2713 type = TYPE_TARGET_TYPE (type);
262452ec 2714 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
2715 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2716 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 2717 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
2718 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2719 result_type = NULL;
14f9c5c9 2720 }
d2e4a39e 2721 else
1eea4ebd
UW
2722 {
2723 result_type = desc_index_type (desc_bounds_type (type), n);
2724 if (result_type == NULL)
2725 error (_("attempt to take bound of something that is not an array"));
2726 }
2727
2728 return result_type;
14f9c5c9
AS
2729}
2730
2731/* Given that arr is an array type, returns the lower bound of the
2732 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2733 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2734 array-descriptor type. It works for other arrays with bounds supplied
2735 by run-time quantities other than discriminants. */
14f9c5c9 2736
abb68b3e 2737static LONGEST
1eea4ebd 2738ada_array_bound_from_type (struct type * arr_type, int n, int which)
14f9c5c9 2739{
1ce677a4 2740 struct type *type, *elt_type, *index_type_desc, *index_type;
1ce677a4 2741 int i;
262452ec
JK
2742
2743 gdb_assert (which == 0 || which == 1);
14f9c5c9 2744
ad82864c
JB
2745 if (ada_is_constrained_packed_array_type (arr_type))
2746 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2747
4c4b4cd2 2748 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2749 return (LONGEST) - which;
14f9c5c9
AS
2750
2751 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2752 type = TYPE_TARGET_TYPE (arr_type);
2753 else
2754 type = arr_type;
2755
1ce677a4
UW
2756 elt_type = type;
2757 for (i = n; i > 1; i--)
2758 elt_type = TYPE_TARGET_TYPE (type);
2759
14f9c5c9 2760 index_type_desc = ada_find_parallel_type (type, "___XA");
28c85d6c 2761 ada_fixup_array_indexes_type (index_type_desc);
262452ec 2762 if (index_type_desc != NULL)
28c85d6c
JB
2763 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2764 NULL);
262452ec 2765 else
1ce677a4 2766 index_type = TYPE_INDEX_TYPE (elt_type);
262452ec 2767
43bbcdc2
PH
2768 return
2769 (LONGEST) (which == 0
2770 ? ada_discrete_type_low_bound (index_type)
2771 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2772}
2773
2774/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
2775 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2776 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 2777 supplied by run-time quantities other than discriminants. */
14f9c5c9 2778
1eea4ebd 2779static LONGEST
4dc81987 2780ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 2781{
df407dfe 2782 struct type *arr_type = value_type (arr);
14f9c5c9 2783
ad82864c
JB
2784 if (ada_is_constrained_packed_array_type (arr_type))
2785 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 2786 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 2787 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 2788 else
1eea4ebd 2789 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
2790}
2791
2792/* Given that arr is an array value, returns the length of the
2793 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
2794 supplied by run-time quantities other than discriminants.
2795 Does not work for arrays indexed by enumeration types with representation
2796 clauses at the moment. */
14f9c5c9 2797
1eea4ebd 2798static LONGEST
d2e4a39e 2799ada_array_length (struct value *arr, int n)
14f9c5c9 2800{
df407dfe 2801 struct type *arr_type = ada_check_typedef (value_type (arr));
14f9c5c9 2802
ad82864c
JB
2803 if (ada_is_constrained_packed_array_type (arr_type))
2804 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 2805
4c4b4cd2 2806 if (ada_is_simple_array_type (arr_type))
1eea4ebd
UW
2807 return (ada_array_bound_from_type (arr_type, n, 1)
2808 - ada_array_bound_from_type (arr_type, n, 0) + 1);
14f9c5c9 2809 else
1eea4ebd
UW
2810 return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2811 - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
4c4b4cd2
PH
2812}
2813
2814/* An empty array whose type is that of ARR_TYPE (an array type),
2815 with bounds LOW to LOW-1. */
2816
2817static struct value *
2818empty_array (struct type *arr_type, int low)
2819{
b0dd7688 2820 struct type *arr_type0 = ada_check_typedef (arr_type);
6c038f32 2821 struct type *index_type =
b0dd7688 2822 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)),
0b5d8877 2823 low, low - 1);
b0dd7688 2824 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 2825
0b5d8877 2826 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 2827}
14f9c5c9 2828\f
d2e4a39e 2829
4c4b4cd2 2830 /* Name resolution */
14f9c5c9 2831
4c4b4cd2
PH
2832/* The "decoded" name for the user-definable Ada operator corresponding
2833 to OP. */
14f9c5c9 2834
d2e4a39e 2835static const char *
4c4b4cd2 2836ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
2837{
2838 int i;
2839
4c4b4cd2 2840 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
2841 {
2842 if (ada_opname_table[i].op == op)
4c4b4cd2 2843 return ada_opname_table[i].decoded;
14f9c5c9 2844 }
323e0a4a 2845 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
2846}
2847
2848
4c4b4cd2
PH
2849/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2850 references (marked by OP_VAR_VALUE nodes in which the symbol has an
2851 undefined namespace) and converts operators that are
2852 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
2853 non-null, it provides a preferred result type [at the moment, only
2854 type void has any effect---causing procedures to be preferred over
2855 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 2856 return type is preferred. May change (expand) *EXP. */
14f9c5c9 2857
4c4b4cd2
PH
2858static void
2859resolve (struct expression **expp, int void_context_p)
14f9c5c9 2860{
30b15541
UW
2861 struct type *context_type = NULL;
2862 int pc = 0;
2863
2864 if (void_context_p)
2865 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
2866
2867 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
2868}
2869
4c4b4cd2
PH
2870/* Resolve the operator of the subexpression beginning at
2871 position *POS of *EXPP. "Resolving" consists of replacing
2872 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2873 with their resolutions, replacing built-in operators with
2874 function calls to user-defined operators, where appropriate, and,
2875 when DEPROCEDURE_P is non-zero, converting function-valued variables
2876 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
2877 are as in ada_resolve, above. */
14f9c5c9 2878
d2e4a39e 2879static struct value *
4c4b4cd2 2880resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 2881 struct type *context_type)
14f9c5c9
AS
2882{
2883 int pc = *pos;
2884 int i;
4c4b4cd2 2885 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 2886 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
2887 struct value **argvec; /* Vector of operand types (alloca'ed). */
2888 int nargs; /* Number of operands. */
52ce6436 2889 int oplen;
14f9c5c9
AS
2890
2891 argvec = NULL;
2892 nargs = 0;
2893 exp = *expp;
2894
52ce6436
PH
2895 /* Pass one: resolve operands, saving their types and updating *pos,
2896 if needed. */
14f9c5c9
AS
2897 switch (op)
2898 {
4c4b4cd2
PH
2899 case OP_FUNCALL:
2900 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
2901 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2902 *pos += 7;
4c4b4cd2
PH
2903 else
2904 {
2905 *pos += 3;
2906 resolve_subexp (expp, pos, 0, NULL);
2907 }
2908 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
2909 break;
2910
14f9c5c9 2911 case UNOP_ADDR:
4c4b4cd2
PH
2912 *pos += 1;
2913 resolve_subexp (expp, pos, 0, NULL);
2914 break;
2915
52ce6436
PH
2916 case UNOP_QUAL:
2917 *pos += 3;
17466c1a 2918 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
2919 break;
2920
52ce6436 2921 case OP_ATR_MODULUS:
4c4b4cd2
PH
2922 case OP_ATR_SIZE:
2923 case OP_ATR_TAG:
4c4b4cd2
PH
2924 case OP_ATR_FIRST:
2925 case OP_ATR_LAST:
2926 case OP_ATR_LENGTH:
2927 case OP_ATR_POS:
2928 case OP_ATR_VAL:
4c4b4cd2
PH
2929 case OP_ATR_MIN:
2930 case OP_ATR_MAX:
52ce6436
PH
2931 case TERNOP_IN_RANGE:
2932 case BINOP_IN_BOUNDS:
2933 case UNOP_IN_RANGE:
2934 case OP_AGGREGATE:
2935 case OP_OTHERS:
2936 case OP_CHOICES:
2937 case OP_POSITIONAL:
2938 case OP_DISCRETE_RANGE:
2939 case OP_NAME:
2940 ada_forward_operator_length (exp, pc, &oplen, &nargs);
2941 *pos += oplen;
14f9c5c9
AS
2942 break;
2943
2944 case BINOP_ASSIGN:
2945 {
4c4b4cd2
PH
2946 struct value *arg1;
2947
2948 *pos += 1;
2949 arg1 = resolve_subexp (expp, pos, 0, NULL);
2950 if (arg1 == NULL)
2951 resolve_subexp (expp, pos, 1, NULL);
2952 else
df407dfe 2953 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 2954 break;
14f9c5c9
AS
2955 }
2956
4c4b4cd2 2957 case UNOP_CAST:
4c4b4cd2
PH
2958 *pos += 3;
2959 nargs = 1;
2960 break;
14f9c5c9 2961
4c4b4cd2
PH
2962 case BINOP_ADD:
2963 case BINOP_SUB:
2964 case BINOP_MUL:
2965 case BINOP_DIV:
2966 case BINOP_REM:
2967 case BINOP_MOD:
2968 case BINOP_EXP:
2969 case BINOP_CONCAT:
2970 case BINOP_LOGICAL_AND:
2971 case BINOP_LOGICAL_OR:
2972 case BINOP_BITWISE_AND:
2973 case BINOP_BITWISE_IOR:
2974 case BINOP_BITWISE_XOR:
14f9c5c9 2975
4c4b4cd2
PH
2976 case BINOP_EQUAL:
2977 case BINOP_NOTEQUAL:
2978 case BINOP_LESS:
2979 case BINOP_GTR:
2980 case BINOP_LEQ:
2981 case BINOP_GEQ:
14f9c5c9 2982
4c4b4cd2
PH
2983 case BINOP_REPEAT:
2984 case BINOP_SUBSCRIPT:
2985 case BINOP_COMMA:
40c8aaa9
JB
2986 *pos += 1;
2987 nargs = 2;
2988 break;
14f9c5c9 2989
4c4b4cd2
PH
2990 case UNOP_NEG:
2991 case UNOP_PLUS:
2992 case UNOP_LOGICAL_NOT:
2993 case UNOP_ABS:
2994 case UNOP_IND:
2995 *pos += 1;
2996 nargs = 1;
2997 break;
14f9c5c9 2998
4c4b4cd2
PH
2999 case OP_LONG:
3000 case OP_DOUBLE:
3001 case OP_VAR_VALUE:
3002 *pos += 4;
3003 break;
14f9c5c9 3004
4c4b4cd2
PH
3005 case OP_TYPE:
3006 case OP_BOOL:
3007 case OP_LAST:
4c4b4cd2
PH
3008 case OP_INTERNALVAR:
3009 *pos += 3;
3010 break;
14f9c5c9 3011
4c4b4cd2
PH
3012 case UNOP_MEMVAL:
3013 *pos += 3;
3014 nargs = 1;
3015 break;
3016
67f3407f
DJ
3017 case OP_REGISTER:
3018 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3019 break;
3020
4c4b4cd2
PH
3021 case STRUCTOP_STRUCT:
3022 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3023 nargs = 1;
3024 break;
3025
4c4b4cd2 3026 case TERNOP_SLICE:
4c4b4cd2
PH
3027 *pos += 1;
3028 nargs = 3;
3029 break;
3030
52ce6436 3031 case OP_STRING:
14f9c5c9 3032 break;
4c4b4cd2
PH
3033
3034 default:
323e0a4a 3035 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
3036 }
3037
76a01679 3038 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
4c4b4cd2
PH
3039 for (i = 0; i < nargs; i += 1)
3040 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
3041 argvec[i] = NULL;
3042 exp = *expp;
3043
3044 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
3045 switch (op)
3046 {
3047 default:
3048 break;
3049
14f9c5c9 3050 case OP_VAR_VALUE:
4c4b4cd2 3051 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
3052 {
3053 struct ada_symbol_info *candidates;
3054 int n_candidates;
3055
3056 n_candidates =
3057 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3058 (exp->elts[pc + 2].symbol),
3059 exp->elts[pc + 1].block, VAR_DOMAIN,
3060 &candidates);
3061
3062 if (n_candidates > 1)
3063 {
3064 /* Types tend to get re-introduced locally, so if there
3065 are any local symbols that are not types, first filter
3066 out all types. */
3067 int j;
3068 for (j = 0; j < n_candidates; j += 1)
3069 switch (SYMBOL_CLASS (candidates[j].sym))
3070 {
3071 case LOC_REGISTER:
3072 case LOC_ARG:
3073 case LOC_REF_ARG:
76a01679
JB
3074 case LOC_REGPARM_ADDR:
3075 case LOC_LOCAL:
76a01679 3076 case LOC_COMPUTED:
76a01679
JB
3077 goto FoundNonType;
3078 default:
3079 break;
3080 }
3081 FoundNonType:
3082 if (j < n_candidates)
3083 {
3084 j = 0;
3085 while (j < n_candidates)
3086 {
3087 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3088 {
3089 candidates[j] = candidates[n_candidates - 1];
3090 n_candidates -= 1;
3091 }
3092 else
3093 j += 1;
3094 }
3095 }
3096 }
3097
3098 if (n_candidates == 0)
323e0a4a 3099 error (_("No definition found for %s"),
76a01679
JB
3100 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3101 else if (n_candidates == 1)
3102 i = 0;
3103 else if (deprocedure_p
3104 && !is_nonfunction (candidates, n_candidates))
3105 {
06d5cf63
JB
3106 i = ada_resolve_function
3107 (candidates, n_candidates, NULL, 0,
3108 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3109 context_type);
76a01679 3110 if (i < 0)
323e0a4a 3111 error (_("Could not find a match for %s"),
76a01679
JB
3112 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3113 }
3114 else
3115 {
323e0a4a 3116 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3117 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3118 user_select_syms (candidates, n_candidates, 1);
3119 i = 0;
3120 }
3121
3122 exp->elts[pc + 1].block = candidates[i].block;
3123 exp->elts[pc + 2].symbol = candidates[i].sym;
1265e4aa
JB
3124 if (innermost_block == NULL
3125 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3126 innermost_block = candidates[i].block;
3127 }
3128
3129 if (deprocedure_p
3130 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3131 == TYPE_CODE_FUNC))
3132 {
3133 replace_operator_with_call (expp, pc, 0, 0,
3134 exp->elts[pc + 2].symbol,
3135 exp->elts[pc + 1].block);
3136 exp = *expp;
3137 }
14f9c5c9
AS
3138 break;
3139
3140 case OP_FUNCALL:
3141 {
4c4b4cd2 3142 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3143 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2
PH
3144 {
3145 struct ada_symbol_info *candidates;
3146 int n_candidates;
3147
3148 n_candidates =
76a01679
JB
3149 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3150 (exp->elts[pc + 5].symbol),
3151 exp->elts[pc + 4].block, VAR_DOMAIN,
3152 &candidates);
4c4b4cd2
PH
3153 if (n_candidates == 1)
3154 i = 0;
3155 else
3156 {
06d5cf63
JB
3157 i = ada_resolve_function
3158 (candidates, n_candidates,
3159 argvec, nargs,
3160 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3161 context_type);
4c4b4cd2 3162 if (i < 0)
323e0a4a 3163 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3164 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3165 }
3166
3167 exp->elts[pc + 4].block = candidates[i].block;
3168 exp->elts[pc + 5].symbol = candidates[i].sym;
1265e4aa
JB
3169 if (innermost_block == NULL
3170 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3171 innermost_block = candidates[i].block;
3172 }
14f9c5c9
AS
3173 }
3174 break;
3175 case BINOP_ADD:
3176 case BINOP_SUB:
3177 case BINOP_MUL:
3178 case BINOP_DIV:
3179 case BINOP_REM:
3180 case BINOP_MOD:
3181 case BINOP_CONCAT:
3182 case BINOP_BITWISE_AND:
3183 case BINOP_BITWISE_IOR:
3184 case BINOP_BITWISE_XOR:
3185 case BINOP_EQUAL:
3186 case BINOP_NOTEQUAL:
3187 case BINOP_LESS:
3188 case BINOP_GTR:
3189 case BINOP_LEQ:
3190 case BINOP_GEQ:
3191 case BINOP_EXP:
3192 case UNOP_NEG:
3193 case UNOP_PLUS:
3194 case UNOP_LOGICAL_NOT:
3195 case UNOP_ABS:
3196 if (possible_user_operator_p (op, argvec))
4c4b4cd2
PH
3197 {
3198 struct ada_symbol_info *candidates;
3199 int n_candidates;
3200
3201 n_candidates =
3202 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3203 (struct block *) NULL, VAR_DOMAIN,
3204 &candidates);
3205 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3206 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3207 if (i < 0)
3208 break;
3209
76a01679
JB
3210 replace_operator_with_call (expp, pc, nargs, 1,
3211 candidates[i].sym, candidates[i].block);
4c4b4cd2
PH
3212 exp = *expp;
3213 }
14f9c5c9 3214 break;
4c4b4cd2
PH
3215
3216 case OP_TYPE:
b3dbf008 3217 case OP_REGISTER:
4c4b4cd2 3218 return NULL;
14f9c5c9
AS
3219 }
3220
3221 *pos = pc;
3222 return evaluate_subexp_type (exp, pos);
3223}
3224
3225/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3226 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3227 a non-pointer. */
14f9c5c9 3228/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3229 liberal. */
14f9c5c9
AS
3230
3231static int
4dc81987 3232ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3233{
61ee279c
PH
3234 ftype = ada_check_typedef (ftype);
3235 atype = ada_check_typedef (atype);
14f9c5c9
AS
3236
3237 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3238 ftype = TYPE_TARGET_TYPE (ftype);
3239 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3240 atype = TYPE_TARGET_TYPE (atype);
3241
d2e4a39e 3242 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3243 {
3244 default:
5b3d5b7d 3245 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3246 case TYPE_CODE_PTR:
3247 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3248 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3249 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3250 else
1265e4aa
JB
3251 return (may_deref
3252 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3253 case TYPE_CODE_INT:
3254 case TYPE_CODE_ENUM:
3255 case TYPE_CODE_RANGE:
3256 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3257 {
3258 case TYPE_CODE_INT:
3259 case TYPE_CODE_ENUM:
3260 case TYPE_CODE_RANGE:
3261 return 1;
3262 default:
3263 return 0;
3264 }
14f9c5c9
AS
3265
3266 case TYPE_CODE_ARRAY:
d2e4a39e 3267 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3268 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3269
3270 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3271 if (ada_is_array_descriptor_type (ftype))
3272 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3273 || ada_is_array_descriptor_type (atype));
14f9c5c9 3274 else
4c4b4cd2
PH
3275 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3276 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3277
3278 case TYPE_CODE_UNION:
3279 case TYPE_CODE_FLT:
3280 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3281 }
3282}
3283
3284/* Return non-zero if the formals of FUNC "sufficiently match" the
3285 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3286 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3287 argument function. */
14f9c5c9
AS
3288
3289static int
d2e4a39e 3290ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3291{
3292 int i;
d2e4a39e 3293 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3294
1265e4aa
JB
3295 if (SYMBOL_CLASS (func) == LOC_CONST
3296 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3297 return (n_actuals == 0);
3298 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3299 return 0;
3300
3301 if (TYPE_NFIELDS (func_type) != n_actuals)
3302 return 0;
3303
3304 for (i = 0; i < n_actuals; i += 1)
3305 {
4c4b4cd2 3306 if (actuals[i] == NULL)
76a01679
JB
3307 return 0;
3308 else
3309 {
5b4ee69b
MS
3310 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3311 i));
df407dfe 3312 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3313
76a01679
JB
3314 if (!ada_type_match (ftype, atype, 1))
3315 return 0;
3316 }
14f9c5c9
AS
3317 }
3318 return 1;
3319}
3320
3321/* False iff function type FUNC_TYPE definitely does not produce a value
3322 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3323 FUNC_TYPE is not a valid function type with a non-null return type
3324 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3325
3326static int
d2e4a39e 3327return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3328{
d2e4a39e 3329 struct type *return_type;
14f9c5c9
AS
3330
3331 if (func_type == NULL)
3332 return 1;
3333
4c4b4cd2 3334 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
18af8284 3335 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
4c4b4cd2 3336 else
18af8284 3337 return_type = get_base_type (func_type);
14f9c5c9
AS
3338 if (return_type == NULL)
3339 return 1;
3340
18af8284 3341 context_type = get_base_type (context_type);
14f9c5c9
AS
3342
3343 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3344 return context_type == NULL || return_type == context_type;
3345 else if (context_type == NULL)
3346 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3347 else
3348 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3349}
3350
3351
4c4b4cd2 3352/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3353 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3354 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3355 that returns that type, then eliminate matches that don't. If
3356 CONTEXT_TYPE is void and there is at least one match that does not
3357 return void, eliminate all matches that do.
3358
14f9c5c9
AS
3359 Asks the user if there is more than one match remaining. Returns -1
3360 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3361 solely for messages. May re-arrange and modify SYMS in
3362 the process; the index returned is for the modified vector. */
14f9c5c9 3363
4c4b4cd2
PH
3364static int
3365ada_resolve_function (struct ada_symbol_info syms[],
3366 int nsyms, struct value **args, int nargs,
3367 const char *name, struct type *context_type)
14f9c5c9 3368{
30b15541 3369 int fallback;
14f9c5c9 3370 int k;
4c4b4cd2 3371 int m; /* Number of hits */
14f9c5c9 3372
d2e4a39e 3373 m = 0;
30b15541
UW
3374 /* In the first pass of the loop, we only accept functions matching
3375 context_type. If none are found, we add a second pass of the loop
3376 where every function is accepted. */
3377 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3378 {
3379 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3380 {
61ee279c 3381 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
4c4b4cd2
PH
3382
3383 if (ada_args_match (syms[k].sym, args, nargs)
30b15541 3384 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3385 {
3386 syms[m] = syms[k];
3387 m += 1;
3388 }
3389 }
14f9c5c9
AS
3390 }
3391
3392 if (m == 0)
3393 return -1;
3394 else if (m > 1)
3395 {
323e0a4a 3396 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3397 user_select_syms (syms, m, 1);
14f9c5c9
AS
3398 return 0;
3399 }
3400 return 0;
3401}
3402
4c4b4cd2
PH
3403/* Returns true (non-zero) iff decoded name N0 should appear before N1
3404 in a listing of choices during disambiguation (see sort_choices, below).
3405 The idea is that overloadings of a subprogram name from the
3406 same package should sort in their source order. We settle for ordering
3407 such symbols by their trailing number (__N or $N). */
3408
14f9c5c9 3409static int
4c4b4cd2 3410encoded_ordered_before (char *N0, char *N1)
14f9c5c9
AS
3411{
3412 if (N1 == NULL)
3413 return 0;
3414 else if (N0 == NULL)
3415 return 1;
3416 else
3417 {
3418 int k0, k1;
5b4ee69b 3419
d2e4a39e 3420 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3421 ;
d2e4a39e 3422 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3423 ;
d2e4a39e 3424 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3425 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3426 {
3427 int n0, n1;
5b4ee69b 3428
4c4b4cd2
PH
3429 n0 = k0;
3430 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3431 n0 -= 1;
3432 n1 = k1;
3433 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3434 n1 -= 1;
3435 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3436 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3437 }
14f9c5c9
AS
3438 return (strcmp (N0, N1) < 0);
3439 }
3440}
d2e4a39e 3441
4c4b4cd2
PH
3442/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3443 encoded names. */
3444
d2e4a39e 3445static void
4c4b4cd2 3446sort_choices (struct ada_symbol_info syms[], int nsyms)
14f9c5c9 3447{
4c4b4cd2 3448 int i;
5b4ee69b 3449
d2e4a39e 3450 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3451 {
4c4b4cd2 3452 struct ada_symbol_info sym = syms[i];
14f9c5c9
AS
3453 int j;
3454
d2e4a39e 3455 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2
PH
3456 {
3457 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3458 SYMBOL_LINKAGE_NAME (sym.sym)))
3459 break;
3460 syms[j + 1] = syms[j];
3461 }
d2e4a39e 3462 syms[j + 1] = sym;
14f9c5c9
AS
3463 }
3464}
3465
4c4b4cd2
PH
3466/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3467 by asking the user (if necessary), returning the number selected,
3468 and setting the first elements of SYMS items. Error if no symbols
3469 selected. */
14f9c5c9
AS
3470
3471/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3472 to be re-integrated one of these days. */
14f9c5c9
AS
3473
3474int
4c4b4cd2 3475user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
14f9c5c9
AS
3476{
3477 int i;
d2e4a39e 3478 int *chosen = (int *) alloca (sizeof (int) * nsyms);
14f9c5c9
AS
3479 int n_chosen;
3480 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3481 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3482
3483 if (max_results < 1)
323e0a4a 3484 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3485 if (nsyms <= 1)
3486 return nsyms;
3487
717d2f5a
JB
3488 if (select_mode == multiple_symbols_cancel)
3489 error (_("\
3490canceled because the command is ambiguous\n\
3491See set/show multiple-symbol."));
3492
3493 /* If select_mode is "all", then return all possible symbols.
3494 Only do that if more than one symbol can be selected, of course.
3495 Otherwise, display the menu as usual. */
3496 if (select_mode == multiple_symbols_all && max_results > 1)
3497 return nsyms;
3498
323e0a4a 3499 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3500 if (max_results > 1)
323e0a4a 3501 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3502
4c4b4cd2 3503 sort_choices (syms, nsyms);
14f9c5c9
AS
3504
3505 for (i = 0; i < nsyms; i += 1)
3506 {
4c4b4cd2
PH
3507 if (syms[i].sym == NULL)
3508 continue;
3509
3510 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3511 {
76a01679
JB
3512 struct symtab_and_line sal =
3513 find_function_start_sal (syms[i].sym, 1);
5b4ee69b 3514
323e0a4a
AC
3515 if (sal.symtab == NULL)
3516 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3517 i + first_choice,
3518 SYMBOL_PRINT_NAME (syms[i].sym),
3519 sal.line);
3520 else
3521 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3522 SYMBOL_PRINT_NAME (syms[i].sym),
3523 sal.symtab->filename, sal.line);
4c4b4cd2
PH
3524 continue;
3525 }
d2e4a39e 3526 else
4c4b4cd2
PH
3527 {
3528 int is_enumeral =
3529 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3530 && SYMBOL_TYPE (syms[i].sym) != NULL
3531 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
6f38eac8 3532 struct symtab *symtab = syms[i].sym->symtab;
4c4b4cd2
PH
3533
3534 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
323e0a4a 3535 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2
PH
3536 i + first_choice,
3537 SYMBOL_PRINT_NAME (syms[i].sym),
3538 symtab->filename, SYMBOL_LINE (syms[i].sym));
76a01679
JB
3539 else if (is_enumeral
3540 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
4c4b4cd2 3541 {
a3f17187 3542 printf_unfiltered (("[%d] "), i + first_choice);
76a01679
JB
3543 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3544 gdb_stdout, -1, 0);
323e0a4a 3545 printf_unfiltered (_("'(%s) (enumeral)\n"),
4c4b4cd2
PH
3546 SYMBOL_PRINT_NAME (syms[i].sym));
3547 }
3548 else if (symtab != NULL)
3549 printf_unfiltered (is_enumeral
323e0a4a
AC
3550 ? _("[%d] %s in %s (enumeral)\n")
3551 : _("[%d] %s at %s:?\n"),
4c4b4cd2
PH
3552 i + first_choice,
3553 SYMBOL_PRINT_NAME (syms[i].sym),
3554 symtab->filename);
3555 else
3556 printf_unfiltered (is_enumeral
323e0a4a
AC
3557 ? _("[%d] %s (enumeral)\n")
3558 : _("[%d] %s at ?\n"),
4c4b4cd2
PH
3559 i + first_choice,
3560 SYMBOL_PRINT_NAME (syms[i].sym));
3561 }
14f9c5c9 3562 }
d2e4a39e 3563
14f9c5c9 3564 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3565 "overload-choice");
14f9c5c9
AS
3566
3567 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3568 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3569
3570 return n_chosen;
3571}
3572
3573/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3574 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3575 order in CHOICES[0 .. N-1], and return N.
3576
3577 The user types choices as a sequence of numbers on one line
3578 separated by blanks, encoding them as follows:
3579
4c4b4cd2 3580 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3581 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3582 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3583
4c4b4cd2 3584 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3585
3586 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3587 prompts (for use with the -f switch). */
14f9c5c9
AS
3588
3589int
d2e4a39e 3590get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3591 int is_all_choice, char *annotation_suffix)
14f9c5c9 3592{
d2e4a39e 3593 char *args;
0bcd0149 3594 char *prompt;
14f9c5c9
AS
3595 int n_chosen;
3596 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3597
14f9c5c9
AS
3598 prompt = getenv ("PS2");
3599 if (prompt == NULL)
0bcd0149 3600 prompt = "> ";
14f9c5c9 3601
0bcd0149 3602 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3603
14f9c5c9 3604 if (args == NULL)
323e0a4a 3605 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3606
3607 n_chosen = 0;
76a01679 3608
4c4b4cd2
PH
3609 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3610 order, as given in args. Choices are validated. */
14f9c5c9
AS
3611 while (1)
3612 {
d2e4a39e 3613 char *args2;
14f9c5c9
AS
3614 int choice, j;
3615
0fcd72ba 3616 args = skip_spaces (args);
14f9c5c9 3617 if (*args == '\0' && n_chosen == 0)
323e0a4a 3618 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3619 else if (*args == '\0')
4c4b4cd2 3620 break;
14f9c5c9
AS
3621
3622 choice = strtol (args, &args2, 10);
d2e4a39e 3623 if (args == args2 || choice < 0
4c4b4cd2 3624 || choice > n_choices + first_choice - 1)
323e0a4a 3625 error (_("Argument must be choice number"));
14f9c5c9
AS
3626 args = args2;
3627
d2e4a39e 3628 if (choice == 0)
323e0a4a 3629 error (_("cancelled"));
14f9c5c9
AS
3630
3631 if (choice < first_choice)
4c4b4cd2
PH
3632 {
3633 n_chosen = n_choices;
3634 for (j = 0; j < n_choices; j += 1)
3635 choices[j] = j;
3636 break;
3637 }
14f9c5c9
AS
3638 choice -= first_choice;
3639
d2e4a39e 3640 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3641 {
3642 }
14f9c5c9
AS
3643
3644 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3645 {
3646 int k;
5b4ee69b 3647
4c4b4cd2
PH
3648 for (k = n_chosen - 1; k > j; k -= 1)
3649 choices[k + 1] = choices[k];
3650 choices[j + 1] = choice;
3651 n_chosen += 1;
3652 }
14f9c5c9
AS
3653 }
3654
3655 if (n_chosen > max_results)
323e0a4a 3656 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3657
14f9c5c9
AS
3658 return n_chosen;
3659}
3660
4c4b4cd2
PH
3661/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3662 on the function identified by SYM and BLOCK, and taking NARGS
3663 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3664
3665static void
d2e4a39e 3666replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2
PH
3667 int oplen, struct symbol *sym,
3668 struct block *block)
14f9c5c9
AS
3669{
3670 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 3671 symbol, -oplen for operator being replaced). */
d2e4a39e 3672 struct expression *newexp = (struct expression *)
8c1a34e7 3673 xzalloc (sizeof (struct expression)
4c4b4cd2 3674 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 3675 struct expression *exp = *expp;
14f9c5c9
AS
3676
3677 newexp->nelts = exp->nelts + 7 - oplen;
3678 newexp->language_defn = exp->language_defn;
3489610d 3679 newexp->gdbarch = exp->gdbarch;
14f9c5c9 3680 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 3681 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 3682 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
3683
3684 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3685 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3686
3687 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3688 newexp->elts[pc + 4].block = block;
3689 newexp->elts[pc + 5].symbol = sym;
3690
3691 *expp = newexp;
aacb1f0a 3692 xfree (exp);
d2e4a39e 3693}
14f9c5c9
AS
3694
3695/* Type-class predicates */
3696
4c4b4cd2
PH
3697/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3698 or FLOAT). */
14f9c5c9
AS
3699
3700static int
d2e4a39e 3701numeric_type_p (struct type *type)
14f9c5c9
AS
3702{
3703 if (type == NULL)
3704 return 0;
d2e4a39e
AS
3705 else
3706 {
3707 switch (TYPE_CODE (type))
4c4b4cd2
PH
3708 {
3709 case TYPE_CODE_INT:
3710 case TYPE_CODE_FLT:
3711 return 1;
3712 case TYPE_CODE_RANGE:
3713 return (type == TYPE_TARGET_TYPE (type)
3714 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3715 default:
3716 return 0;
3717 }
d2e4a39e 3718 }
14f9c5c9
AS
3719}
3720
4c4b4cd2 3721/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
3722
3723static int
d2e4a39e 3724integer_type_p (struct type *type)
14f9c5c9
AS
3725{
3726 if (type == NULL)
3727 return 0;
d2e4a39e
AS
3728 else
3729 {
3730 switch (TYPE_CODE (type))
4c4b4cd2
PH
3731 {
3732 case TYPE_CODE_INT:
3733 return 1;
3734 case TYPE_CODE_RANGE:
3735 return (type == TYPE_TARGET_TYPE (type)
3736 || integer_type_p (TYPE_TARGET_TYPE (type)));
3737 default:
3738 return 0;
3739 }
d2e4a39e 3740 }
14f9c5c9
AS
3741}
3742
4c4b4cd2 3743/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
3744
3745static int
d2e4a39e 3746scalar_type_p (struct type *type)
14f9c5c9
AS
3747{
3748 if (type == NULL)
3749 return 0;
d2e4a39e
AS
3750 else
3751 {
3752 switch (TYPE_CODE (type))
4c4b4cd2
PH
3753 {
3754 case TYPE_CODE_INT:
3755 case TYPE_CODE_RANGE:
3756 case TYPE_CODE_ENUM:
3757 case TYPE_CODE_FLT:
3758 return 1;
3759 default:
3760 return 0;
3761 }
d2e4a39e 3762 }
14f9c5c9
AS
3763}
3764
4c4b4cd2 3765/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
3766
3767static int
d2e4a39e 3768discrete_type_p (struct type *type)
14f9c5c9
AS
3769{
3770 if (type == NULL)
3771 return 0;
d2e4a39e
AS
3772 else
3773 {
3774 switch (TYPE_CODE (type))
4c4b4cd2
PH
3775 {
3776 case TYPE_CODE_INT:
3777 case TYPE_CODE_RANGE:
3778 case TYPE_CODE_ENUM:
872f0337 3779 case TYPE_CODE_BOOL:
4c4b4cd2
PH
3780 return 1;
3781 default:
3782 return 0;
3783 }
d2e4a39e 3784 }
14f9c5c9
AS
3785}
3786
4c4b4cd2
PH
3787/* Returns non-zero if OP with operands in the vector ARGS could be
3788 a user-defined function. Errs on the side of pre-defined operators
3789 (i.e., result 0). */
14f9c5c9
AS
3790
3791static int
d2e4a39e 3792possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 3793{
76a01679 3794 struct type *type0 =
df407dfe 3795 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 3796 struct type *type1 =
df407dfe 3797 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 3798
4c4b4cd2
PH
3799 if (type0 == NULL)
3800 return 0;
3801
14f9c5c9
AS
3802 switch (op)
3803 {
3804 default:
3805 return 0;
3806
3807 case BINOP_ADD:
3808 case BINOP_SUB:
3809 case BINOP_MUL:
3810 case BINOP_DIV:
d2e4a39e 3811 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
3812
3813 case BINOP_REM:
3814 case BINOP_MOD:
3815 case BINOP_BITWISE_AND:
3816 case BINOP_BITWISE_IOR:
3817 case BINOP_BITWISE_XOR:
d2e4a39e 3818 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
3819
3820 case BINOP_EQUAL:
3821 case BINOP_NOTEQUAL:
3822 case BINOP_LESS:
3823 case BINOP_GTR:
3824 case BINOP_LEQ:
3825 case BINOP_GEQ:
d2e4a39e 3826 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
3827
3828 case BINOP_CONCAT:
ee90b9ab 3829 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
3830
3831 case BINOP_EXP:
d2e4a39e 3832 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
3833
3834 case UNOP_NEG:
3835 case UNOP_PLUS:
3836 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
3837 case UNOP_ABS:
3838 return (!numeric_type_p (type0));
14f9c5c9
AS
3839
3840 }
3841}
3842\f
4c4b4cd2 3843 /* Renaming */
14f9c5c9 3844
aeb5907d
JB
3845/* NOTES:
3846
3847 1. In the following, we assume that a renaming type's name may
3848 have an ___XD suffix. It would be nice if this went away at some
3849 point.
3850 2. We handle both the (old) purely type-based representation of
3851 renamings and the (new) variable-based encoding. At some point,
3852 it is devoutly to be hoped that the former goes away
3853 (FIXME: hilfinger-2007-07-09).
3854 3. Subprogram renamings are not implemented, although the XRS
3855 suffix is recognized (FIXME: hilfinger-2007-07-09). */
3856
3857/* If SYM encodes a renaming,
3858
3859 <renaming> renames <renamed entity>,
3860
3861 sets *LEN to the length of the renamed entity's name,
3862 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3863 the string describing the subcomponent selected from the renamed
0963b4bd 3864 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
3865 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3866 are undefined). Otherwise, returns a value indicating the category
3867 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3868 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3869 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
3870 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3871 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3872 may be NULL, in which case they are not assigned.
3873
3874 [Currently, however, GCC does not generate subprogram renamings.] */
3875
3876enum ada_renaming_category
3877ada_parse_renaming (struct symbol *sym,
3878 const char **renamed_entity, int *len,
3879 const char **renaming_expr)
3880{
3881 enum ada_renaming_category kind;
3882 const char *info;
3883 const char *suffix;
3884
3885 if (sym == NULL)
3886 return ADA_NOT_RENAMING;
3887 switch (SYMBOL_CLASS (sym))
14f9c5c9 3888 {
aeb5907d
JB
3889 default:
3890 return ADA_NOT_RENAMING;
3891 case LOC_TYPEDEF:
3892 return parse_old_style_renaming (SYMBOL_TYPE (sym),
3893 renamed_entity, len, renaming_expr);
3894 case LOC_LOCAL:
3895 case LOC_STATIC:
3896 case LOC_COMPUTED:
3897 case LOC_OPTIMIZED_OUT:
3898 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3899 if (info == NULL)
3900 return ADA_NOT_RENAMING;
3901 switch (info[5])
3902 {
3903 case '_':
3904 kind = ADA_OBJECT_RENAMING;
3905 info += 6;
3906 break;
3907 case 'E':
3908 kind = ADA_EXCEPTION_RENAMING;
3909 info += 7;
3910 break;
3911 case 'P':
3912 kind = ADA_PACKAGE_RENAMING;
3913 info += 7;
3914 break;
3915 case 'S':
3916 kind = ADA_SUBPROGRAM_RENAMING;
3917 info += 7;
3918 break;
3919 default:
3920 return ADA_NOT_RENAMING;
3921 }
14f9c5c9 3922 }
4c4b4cd2 3923
aeb5907d
JB
3924 if (renamed_entity != NULL)
3925 *renamed_entity = info;
3926 suffix = strstr (info, "___XE");
3927 if (suffix == NULL || suffix == info)
3928 return ADA_NOT_RENAMING;
3929 if (len != NULL)
3930 *len = strlen (info) - strlen (suffix);
3931 suffix += 5;
3932 if (renaming_expr != NULL)
3933 *renaming_expr = suffix;
3934 return kind;
3935}
3936
3937/* Assuming TYPE encodes a renaming according to the old encoding in
3938 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3939 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
3940 ADA_NOT_RENAMING otherwise. */
3941static enum ada_renaming_category
3942parse_old_style_renaming (struct type *type,
3943 const char **renamed_entity, int *len,
3944 const char **renaming_expr)
3945{
3946 enum ada_renaming_category kind;
3947 const char *name;
3948 const char *info;
3949 const char *suffix;
14f9c5c9 3950
aeb5907d
JB
3951 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
3952 || TYPE_NFIELDS (type) != 1)
3953 return ADA_NOT_RENAMING;
14f9c5c9 3954
aeb5907d
JB
3955 name = type_name_no_tag (type);
3956 if (name == NULL)
3957 return ADA_NOT_RENAMING;
3958
3959 name = strstr (name, "___XR");
3960 if (name == NULL)
3961 return ADA_NOT_RENAMING;
3962 switch (name[5])
3963 {
3964 case '\0':
3965 case '_':
3966 kind = ADA_OBJECT_RENAMING;
3967 break;
3968 case 'E':
3969 kind = ADA_EXCEPTION_RENAMING;
3970 break;
3971 case 'P':
3972 kind = ADA_PACKAGE_RENAMING;
3973 break;
3974 case 'S':
3975 kind = ADA_SUBPROGRAM_RENAMING;
3976 break;
3977 default:
3978 return ADA_NOT_RENAMING;
3979 }
14f9c5c9 3980
aeb5907d
JB
3981 info = TYPE_FIELD_NAME (type, 0);
3982 if (info == NULL)
3983 return ADA_NOT_RENAMING;
3984 if (renamed_entity != NULL)
3985 *renamed_entity = info;
3986 suffix = strstr (info, "___XE");
3987 if (renaming_expr != NULL)
3988 *renaming_expr = suffix + 5;
3989 if (suffix == NULL || suffix == info)
3990 return ADA_NOT_RENAMING;
3991 if (len != NULL)
3992 *len = suffix - info;
3993 return kind;
3994}
52ce6436 3995
14f9c5c9 3996\f
d2e4a39e 3997
4c4b4cd2 3998 /* Evaluation: Function Calls */
14f9c5c9 3999
4c4b4cd2 4000/* Return an lvalue containing the value VAL. This is the identity on
40bc484c
JB
4001 lvalues, and otherwise has the side-effect of allocating memory
4002 in the inferior where a copy of the value contents is copied. */
14f9c5c9 4003
d2e4a39e 4004static struct value *
40bc484c 4005ensure_lval (struct value *val)
14f9c5c9 4006{
40bc484c
JB
4007 if (VALUE_LVAL (val) == not_lval
4008 || VALUE_LVAL (val) == lval_internalvar)
c3e5cd34 4009 {
df407dfe 4010 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
40bc484c
JB
4011 const CORE_ADDR addr =
4012 value_as_long (value_allocate_space_in_inferior (len));
c3e5cd34 4013
40bc484c 4014 set_value_address (val, addr);
a84a8a0d 4015 VALUE_LVAL (val) = lval_memory;
40bc484c 4016 write_memory (addr, value_contents (val), len);
c3e5cd34 4017 }
14f9c5c9
AS
4018
4019 return val;
4020}
4021
4022/* Return the value ACTUAL, converted to be an appropriate value for a
4023 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4024 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4025 values not residing in memory, updating it as needed. */
14f9c5c9 4026
a93c0eb6 4027struct value *
40bc484c 4028ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4029{
df407dfe 4030 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4031 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
4032 struct type *formal_target =
4033 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 4034 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
4035 struct type *actual_target =
4036 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 4037 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4038
4c4b4cd2 4039 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 4040 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
40bc484c 4041 return make_array_descriptor (formal_type, actual);
a84a8a0d
JB
4042 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
4043 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 4044 {
a84a8a0d 4045 struct value *result;
5b4ee69b 4046
14f9c5c9 4047 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 4048 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4049 result = desc_data (actual);
14f9c5c9 4050 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4051 {
4052 if (VALUE_LVAL (actual) != lval_memory)
4053 {
4054 struct value *val;
5b4ee69b 4055
df407dfe 4056 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4057 val = allocate_value (actual_type);
990a07ab 4058 memcpy ((char *) value_contents_raw (val),
0fd88904 4059 (char *) value_contents (actual),
4c4b4cd2 4060 TYPE_LENGTH (actual_type));
40bc484c 4061 actual = ensure_lval (val);
4c4b4cd2 4062 }
a84a8a0d 4063 result = value_addr (actual);
4c4b4cd2 4064 }
a84a8a0d
JB
4065 else
4066 return actual;
4067 return value_cast_pointers (formal_type, result);
14f9c5c9
AS
4068 }
4069 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4070 return ada_value_ind (actual);
4071
4072 return actual;
4073}
4074
438c98a1
JB
4075/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4076 type TYPE. This is usually an inefficient no-op except on some targets
4077 (such as AVR) where the representation of a pointer and an address
4078 differs. */
4079
4080static CORE_ADDR
4081value_pointer (struct value *value, struct type *type)
4082{
4083 struct gdbarch *gdbarch = get_type_arch (type);
4084 unsigned len = TYPE_LENGTH (type);
4085 gdb_byte *buf = alloca (len);
4086 CORE_ADDR addr;
4087
4088 addr = value_address (value);
4089 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4090 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4091 return addr;
4092}
4093
14f9c5c9 4094
4c4b4cd2
PH
4095/* Push a descriptor of type TYPE for array value ARR on the stack at
4096 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4097 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4098 to-descriptor type rather than a descriptor type), a struct value *
4099 representing a pointer to this descriptor. */
14f9c5c9 4100
d2e4a39e 4101static struct value *
40bc484c 4102make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4103{
d2e4a39e
AS
4104 struct type *bounds_type = desc_bounds_type (type);
4105 struct type *desc_type = desc_base_type (type);
4106 struct value *descriptor = allocate_value (desc_type);
4107 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4108 int i;
d2e4a39e 4109
0963b4bd
MS
4110 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4111 i > 0; i -= 1)
14f9c5c9 4112 {
19f220c3
JK
4113 modify_field (value_type (bounds), value_contents_writeable (bounds),
4114 ada_array_bound (arr, i, 0),
4115 desc_bound_bitpos (bounds_type, i, 0),
4116 desc_bound_bitsize (bounds_type, i, 0));
4117 modify_field (value_type (bounds), value_contents_writeable (bounds),
4118 ada_array_bound (arr, i, 1),
4119 desc_bound_bitpos (bounds_type, i, 1),
4120 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4121 }
d2e4a39e 4122
40bc484c 4123 bounds = ensure_lval (bounds);
d2e4a39e 4124
19f220c3
JK
4125 modify_field (value_type (descriptor),
4126 value_contents_writeable (descriptor),
4127 value_pointer (ensure_lval (arr),
4128 TYPE_FIELD_TYPE (desc_type, 0)),
4129 fat_pntr_data_bitpos (desc_type),
4130 fat_pntr_data_bitsize (desc_type));
4131
4132 modify_field (value_type (descriptor),
4133 value_contents_writeable (descriptor),
4134 value_pointer (bounds,
4135 TYPE_FIELD_TYPE (desc_type, 1)),
4136 fat_pntr_bounds_bitpos (desc_type),
4137 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4138
40bc484c 4139 descriptor = ensure_lval (descriptor);
14f9c5c9
AS
4140
4141 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4142 return value_addr (descriptor);
4143 else
4144 return descriptor;
4145}
14f9c5c9 4146\f
963a6417 4147/* Dummy definitions for an experimental caching module that is not
0963b4bd 4148 * used in the public sources. */
96d887e8 4149
96d887e8
PH
4150static int
4151lookup_cached_symbol (const char *name, domain_enum namespace,
2570f2b7 4152 struct symbol **sym, struct block **block)
96d887e8
PH
4153{
4154 return 0;
4155}
4156
4157static void
4158cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
2570f2b7 4159 struct block *block)
96d887e8
PH
4160{
4161}
4c4b4cd2
PH
4162\f
4163 /* Symbol Lookup */
4164
c0431670
JB
4165/* Return nonzero if wild matching should be used when searching for
4166 all symbols matching LOOKUP_NAME.
4167
4168 LOOKUP_NAME is expected to be a symbol name after transformation
4169 for Ada lookups (see ada_name_for_lookup). */
4170
4171static int
4172should_use_wild_match (const char *lookup_name)
4173{
4174 return (strstr (lookup_name, "__") == NULL);
4175}
4176
4c4b4cd2
PH
4177/* Return the result of a standard (literal, C-like) lookup of NAME in
4178 given DOMAIN, visible from lexical block BLOCK. */
4179
4180static struct symbol *
4181standard_lookup (const char *name, const struct block *block,
4182 domain_enum domain)
4183{
4184 struct symbol *sym;
4c4b4cd2 4185
2570f2b7 4186 if (lookup_cached_symbol (name, domain, &sym, NULL))
4c4b4cd2 4187 return sym;
2570f2b7
UW
4188 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4189 cache_symbol (name, domain, sym, block_found);
4c4b4cd2
PH
4190 return sym;
4191}
4192
4193
4194/* Non-zero iff there is at least one non-function/non-enumeral symbol
4195 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4196 since they contend in overloading in the same way. */
4197static int
4198is_nonfunction (struct ada_symbol_info syms[], int n)
4199{
4200 int i;
4201
4202 for (i = 0; i < n; i += 1)
4203 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4204 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4205 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
14f9c5c9
AS
4206 return 1;
4207
4208 return 0;
4209}
4210
4211/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4212 struct types. Otherwise, they may not. */
14f9c5c9
AS
4213
4214static int
d2e4a39e 4215equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4216{
d2e4a39e 4217 if (type0 == type1)
14f9c5c9 4218 return 1;
d2e4a39e 4219 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4220 || TYPE_CODE (type0) != TYPE_CODE (type1))
4221 return 0;
d2e4a39e 4222 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4223 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4224 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4225 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4226 return 1;
d2e4a39e 4227
14f9c5c9
AS
4228 return 0;
4229}
4230
4231/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4232 no more defined than that of SYM1. */
14f9c5c9
AS
4233
4234static int
d2e4a39e 4235lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4236{
4237 if (sym0 == sym1)
4238 return 1;
176620f1 4239 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4240 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4241 return 0;
4242
d2e4a39e 4243 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4244 {
4245 case LOC_UNDEF:
4246 return 1;
4247 case LOC_TYPEDEF:
4248 {
4c4b4cd2
PH
4249 struct type *type0 = SYMBOL_TYPE (sym0);
4250 struct type *type1 = SYMBOL_TYPE (sym1);
4251 char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4252 char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4253 int len0 = strlen (name0);
5b4ee69b 4254
4c4b4cd2
PH
4255 return
4256 TYPE_CODE (type0) == TYPE_CODE (type1)
4257 && (equiv_types (type0, type1)
4258 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4259 && strncmp (name1 + len0, "___XV", 5) == 0));
14f9c5c9
AS
4260 }
4261 case LOC_CONST:
4262 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4263 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4264 default:
4265 return 0;
14f9c5c9
AS
4266 }
4267}
4268
4c4b4cd2
PH
4269/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4270 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4271
4272static void
76a01679
JB
4273add_defn_to_vec (struct obstack *obstackp,
4274 struct symbol *sym,
2570f2b7 4275 struct block *block)
14f9c5c9
AS
4276{
4277 int i;
4c4b4cd2 4278 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4279
529cad9c
PH
4280 /* Do not try to complete stub types, as the debugger is probably
4281 already scanning all symbols matching a certain name at the
4282 time when this function is called. Trying to replace the stub
4283 type by its associated full type will cause us to restart a scan
4284 which may lead to an infinite recursion. Instead, the client
4285 collecting the matching symbols will end up collecting several
4286 matches, with at least one of them complete. It can then filter
4287 out the stub ones if needed. */
4288
4c4b4cd2
PH
4289 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4290 {
4291 if (lesseq_defined_than (sym, prevDefns[i].sym))
4292 return;
4293 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4294 {
4295 prevDefns[i].sym = sym;
4296 prevDefns[i].block = block;
4c4b4cd2 4297 return;
76a01679 4298 }
4c4b4cd2
PH
4299 }
4300
4301 {
4302 struct ada_symbol_info info;
4303
4304 info.sym = sym;
4305 info.block = block;
4c4b4cd2
PH
4306 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4307 }
4308}
4309
4310/* Number of ada_symbol_info structures currently collected in
4311 current vector in *OBSTACKP. */
4312
76a01679
JB
4313static int
4314num_defns_collected (struct obstack *obstackp)
4c4b4cd2
PH
4315{
4316 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4317}
4318
4319/* Vector of ada_symbol_info structures currently collected in current
4320 vector in *OBSTACKP. If FINISH, close off the vector and return
4321 its final address. */
4322
76a01679 4323static struct ada_symbol_info *
4c4b4cd2
PH
4324defns_collected (struct obstack *obstackp, int finish)
4325{
4326 if (finish)
4327 return obstack_finish (obstackp);
4328 else
4329 return (struct ada_symbol_info *) obstack_base (obstackp);
4330}
4331
96d887e8
PH
4332/* Return a minimal symbol matching NAME according to Ada decoding
4333 rules. Returns NULL if there is no such minimal symbol. Names
4334 prefixed with "standard__" are handled specially: "standard__" is
4335 first stripped off, and only static and global symbols are searched. */
4c4b4cd2 4336
96d887e8
PH
4337struct minimal_symbol *
4338ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4339{
4c4b4cd2 4340 struct objfile *objfile;
96d887e8 4341 struct minimal_symbol *msymbol;
c0431670 4342 const int wild_match = should_use_wild_match (name);
4c4b4cd2 4343
c0431670
JB
4344 /* Special case: If the user specifies a symbol name inside package
4345 Standard, do a non-wild matching of the symbol name without
4346 the "standard__" prefix. This was primarily introduced in order
4347 to allow the user to specifically access the standard exceptions
4348 using, for instance, Standard.Constraint_Error when Constraint_Error
4349 is ambiguous (due to the user defining its own Constraint_Error
4350 entity inside its program). */
96d887e8 4351 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
c0431670 4352 name += sizeof ("standard__") - 1;
4c4b4cd2 4353
96d887e8
PH
4354 ALL_MSYMBOLS (objfile, msymbol)
4355 {
40658b94 4356 if (match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
96d887e8
PH
4357 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4358 return msymbol;
4359 }
4c4b4cd2 4360
96d887e8
PH
4361 return NULL;
4362}
4c4b4cd2 4363
96d887e8
PH
4364/* For all subprograms that statically enclose the subprogram of the
4365 selected frame, add symbols matching identifier NAME in DOMAIN
4366 and their blocks to the list of data in OBSTACKP, as for
4367 ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
4368 wildcard prefix. */
4c4b4cd2 4369
96d887e8
PH
4370static void
4371add_symbols_from_enclosing_procs (struct obstack *obstackp,
76a01679 4372 const char *name, domain_enum namespace,
96d887e8
PH
4373 int wild_match)
4374{
96d887e8 4375}
14f9c5c9 4376
96d887e8
PH
4377/* True if TYPE is definitely an artificial type supplied to a symbol
4378 for which no debugging information was given in the symbol file. */
14f9c5c9 4379
96d887e8
PH
4380static int
4381is_nondebugging_type (struct type *type)
4382{
4383 char *name = ada_type_name (type);
5b4ee69b 4384
96d887e8
PH
4385 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4386}
4c4b4cd2 4387
8f17729f
JB
4388/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4389 that are deemed "identical" for practical purposes.
4390
4391 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4392 types and that their number of enumerals is identical (in other
4393 words, TYPE_NFIELDS (type1) == TYPE_NFIELDS (type2)). */
4394
4395static int
4396ada_identical_enum_types_p (struct type *type1, struct type *type2)
4397{
4398 int i;
4399
4400 /* The heuristic we use here is fairly conservative. We consider
4401 that 2 enumerate types are identical if they have the same
4402 number of enumerals and that all enumerals have the same
4403 underlying value and name. */
4404
4405 /* All enums in the type should have an identical underlying value. */
4406 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4407 if (TYPE_FIELD_BITPOS (type1, i) != TYPE_FIELD_BITPOS (type2, i))
4408 return 0;
4409
4410 /* All enumerals should also have the same name (modulo any numerical
4411 suffix). */
4412 for (i = 0; i < TYPE_NFIELDS (type1); i++)
4413 {
4414 char *name_1 = TYPE_FIELD_NAME (type1, i);
4415 char *name_2 = TYPE_FIELD_NAME (type2, i);
4416 int len_1 = strlen (name_1);
4417 int len_2 = strlen (name_2);
4418
4419 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4420 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4421 if (len_1 != len_2
4422 || strncmp (TYPE_FIELD_NAME (type1, i),
4423 TYPE_FIELD_NAME (type2, i),
4424 len_1) != 0)
4425 return 0;
4426 }
4427
4428 return 1;
4429}
4430
4431/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4432 that are deemed "identical" for practical purposes. Sometimes,
4433 enumerals are not strictly identical, but their types are so similar
4434 that they can be considered identical.
4435
4436 For instance, consider the following code:
4437
4438 type Color is (Black, Red, Green, Blue, White);
4439 type RGB_Color is new Color range Red .. Blue;
4440
4441 Type RGB_Color is a subrange of an implicit type which is a copy
4442 of type Color. If we call that implicit type RGB_ColorB ("B" is
4443 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4444 As a result, when an expression references any of the enumeral
4445 by name (Eg. "print green"), the expression is technically
4446 ambiguous and the user should be asked to disambiguate. But
4447 doing so would only hinder the user, since it wouldn't matter
4448 what choice he makes, the outcome would always be the same.
4449 So, for practical purposes, we consider them as the same. */
4450
4451static int
4452symbols_are_identical_enums (struct ada_symbol_info *syms, int nsyms)
4453{
4454 int i;
4455
4456 /* Before performing a thorough comparison check of each type,
4457 we perform a series of inexpensive checks. We expect that these
4458 checks will quickly fail in the vast majority of cases, and thus
4459 help prevent the unnecessary use of a more expensive comparison.
4460 Said comparison also expects us to make some of these checks
4461 (see ada_identical_enum_types_p). */
4462
4463 /* Quick check: All symbols should have an enum type. */
4464 for (i = 0; i < nsyms; i++)
4465 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM)
4466 return 0;
4467
4468 /* Quick check: They should all have the same value. */
4469 for (i = 1; i < nsyms; i++)
4470 if (SYMBOL_VALUE (syms[i].sym) != SYMBOL_VALUE (syms[0].sym))
4471 return 0;
4472
4473 /* Quick check: They should all have the same number of enumerals. */
4474 for (i = 1; i < nsyms; i++)
4475 if (TYPE_NFIELDS (SYMBOL_TYPE (syms[i].sym))
4476 != TYPE_NFIELDS (SYMBOL_TYPE (syms[0].sym)))
4477 return 0;
4478
4479 /* All the sanity checks passed, so we might have a set of
4480 identical enumeration types. Perform a more complete
4481 comparison of the type of each symbol. */
4482 for (i = 1; i < nsyms; i++)
4483 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].sym),
4484 SYMBOL_TYPE (syms[0].sym)))
4485 return 0;
4486
4487 return 1;
4488}
4489
96d887e8
PH
4490/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4491 duplicate other symbols in the list (The only case I know of where
4492 this happens is when object files containing stabs-in-ecoff are
4493 linked with files containing ordinary ecoff debugging symbols (or no
4494 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4495 Returns the number of items in the modified list. */
4c4b4cd2 4496
96d887e8
PH
4497static int
4498remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4499{
4500 int i, j;
4c4b4cd2 4501
8f17729f
JB
4502 /* We should never be called with less than 2 symbols, as there
4503 cannot be any extra symbol in that case. But it's easy to
4504 handle, since we have nothing to do in that case. */
4505 if (nsyms < 2)
4506 return nsyms;
4507
96d887e8
PH
4508 i = 0;
4509 while (i < nsyms)
4510 {
a35ddb44 4511 int remove_p = 0;
339c13b6
JB
4512
4513 /* If two symbols have the same name and one of them is a stub type,
4514 the get rid of the stub. */
4515
4516 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4517 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4518 {
4519 for (j = 0; j < nsyms; j++)
4520 {
4521 if (j != i
4522 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4523 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4524 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4525 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
a35ddb44 4526 remove_p = 1;
339c13b6
JB
4527 }
4528 }
4529
4530 /* Two symbols with the same name, same class and same address
4531 should be identical. */
4532
4533 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
96d887e8
PH
4534 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4535 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4536 {
4537 for (j = 0; j < nsyms; j += 1)
4538 {
4539 if (i != j
4540 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4541 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
76a01679 4542 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
96d887e8
PH
4543 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4544 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4545 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
a35ddb44 4546 remove_p = 1;
4c4b4cd2 4547 }
4c4b4cd2 4548 }
339c13b6 4549
a35ddb44 4550 if (remove_p)
339c13b6
JB
4551 {
4552 for (j = i + 1; j < nsyms; j += 1)
4553 syms[j - 1] = syms[j];
4554 nsyms -= 1;
4555 }
4556
96d887e8 4557 i += 1;
14f9c5c9 4558 }
8f17729f
JB
4559
4560 /* If all the remaining symbols are identical enumerals, then
4561 just keep the first one and discard the rest.
4562
4563 Unlike what we did previously, we do not discard any entry
4564 unless they are ALL identical. This is because the symbol
4565 comparison is not a strict comparison, but rather a practical
4566 comparison. If all symbols are considered identical, then
4567 we can just go ahead and use the first one and discard the rest.
4568 But if we cannot reduce the list to a single element, we have
4569 to ask the user to disambiguate anyways. And if we have to
4570 present a multiple-choice menu, it's less confusing if the list
4571 isn't missing some choices that were identical and yet distinct. */
4572 if (symbols_are_identical_enums (syms, nsyms))
4573 nsyms = 1;
4574
96d887e8 4575 return nsyms;
14f9c5c9
AS
4576}
4577
96d887e8
PH
4578/* Given a type that corresponds to a renaming entity, use the type name
4579 to extract the scope (package name or function name, fully qualified,
4580 and following the GNAT encoding convention) where this renaming has been
4581 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 4582
96d887e8
PH
4583static char *
4584xget_renaming_scope (struct type *renaming_type)
14f9c5c9 4585{
96d887e8 4586 /* The renaming types adhere to the following convention:
0963b4bd 4587 <scope>__<rename>___<XR extension>.
96d887e8
PH
4588 So, to extract the scope, we search for the "___XR" extension,
4589 and then backtrack until we find the first "__". */
76a01679 4590
96d887e8
PH
4591 const char *name = type_name_no_tag (renaming_type);
4592 char *suffix = strstr (name, "___XR");
4593 char *last;
4594 int scope_len;
4595 char *scope;
14f9c5c9 4596
96d887e8
PH
4597 /* Now, backtrack a bit until we find the first "__". Start looking
4598 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 4599
96d887e8
PH
4600 for (last = suffix - 3; last > name; last--)
4601 if (last[0] == '_' && last[1] == '_')
4602 break;
76a01679 4603
96d887e8 4604 /* Make a copy of scope and return it. */
14f9c5c9 4605
96d887e8
PH
4606 scope_len = last - name;
4607 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 4608
96d887e8
PH
4609 strncpy (scope, name, scope_len);
4610 scope[scope_len] = '\0';
4c4b4cd2 4611
96d887e8 4612 return scope;
4c4b4cd2
PH
4613}
4614
96d887e8 4615/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 4616
96d887e8
PH
4617static int
4618is_package_name (const char *name)
4c4b4cd2 4619{
96d887e8
PH
4620 /* Here, We take advantage of the fact that no symbols are generated
4621 for packages, while symbols are generated for each function.
4622 So the condition for NAME represent a package becomes equivalent
4623 to NAME not existing in our list of symbols. There is only one
4624 small complication with library-level functions (see below). */
4c4b4cd2 4625
96d887e8 4626 char *fun_name;
76a01679 4627
96d887e8
PH
4628 /* If it is a function that has not been defined at library level,
4629 then we should be able to look it up in the symbols. */
4630 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4631 return 0;
14f9c5c9 4632
96d887e8
PH
4633 /* Library-level function names start with "_ada_". See if function
4634 "_ada_" followed by NAME can be found. */
14f9c5c9 4635
96d887e8 4636 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 4637 functions names cannot contain "__" in them. */
96d887e8
PH
4638 if (strstr (name, "__") != NULL)
4639 return 0;
4c4b4cd2 4640
b435e160 4641 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 4642
96d887e8
PH
4643 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4644}
14f9c5c9 4645
96d887e8 4646/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 4647 not visible from FUNCTION_NAME. */
14f9c5c9 4648
96d887e8 4649static int
aeb5907d 4650old_renaming_is_invisible (const struct symbol *sym, char *function_name)
96d887e8 4651{
aeb5907d
JB
4652 char *scope;
4653
4654 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4655 return 0;
4656
4657 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
d2e4a39e 4658
96d887e8 4659 make_cleanup (xfree, scope);
14f9c5c9 4660
96d887e8
PH
4661 /* If the rename has been defined in a package, then it is visible. */
4662 if (is_package_name (scope))
aeb5907d 4663 return 0;
14f9c5c9 4664
96d887e8
PH
4665 /* Check that the rename is in the current function scope by checking
4666 that its name starts with SCOPE. */
76a01679 4667
96d887e8
PH
4668 /* If the function name starts with "_ada_", it means that it is
4669 a library-level function. Strip this prefix before doing the
4670 comparison, as the encoding for the renaming does not contain
4671 this prefix. */
4672 if (strncmp (function_name, "_ada_", 5) == 0)
4673 function_name += 5;
f26caa11 4674
aeb5907d 4675 return (strncmp (function_name, scope, strlen (scope)) != 0);
f26caa11
PH
4676}
4677
aeb5907d
JB
4678/* Remove entries from SYMS that corresponds to a renaming entity that
4679 is not visible from the function associated with CURRENT_BLOCK or
4680 that is superfluous due to the presence of more specific renaming
4681 information. Places surviving symbols in the initial entries of
4682 SYMS and returns the number of surviving symbols.
96d887e8
PH
4683
4684 Rationale:
aeb5907d
JB
4685 First, in cases where an object renaming is implemented as a
4686 reference variable, GNAT may produce both the actual reference
4687 variable and the renaming encoding. In this case, we discard the
4688 latter.
4689
4690 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
4691 entity. Unfortunately, STABS currently does not support the definition
4692 of types that are local to a given lexical block, so all renamings types
4693 are emitted at library level. As a consequence, if an application
4694 contains two renaming entities using the same name, and a user tries to
4695 print the value of one of these entities, the result of the ada symbol
4696 lookup will also contain the wrong renaming type.
f26caa11 4697
96d887e8
PH
4698 This function partially covers for this limitation by attempting to
4699 remove from the SYMS list renaming symbols that should be visible
4700 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
4701 method with the current information available. The implementation
4702 below has a couple of limitations (FIXME: brobecker-2003-05-12):
4703
4704 - When the user tries to print a rename in a function while there
4705 is another rename entity defined in a package: Normally, the
4706 rename in the function has precedence over the rename in the
4707 package, so the latter should be removed from the list. This is
4708 currently not the case.
4709
4710 - This function will incorrectly remove valid renames if
4711 the CURRENT_BLOCK corresponds to a function which symbol name
4712 has been changed by an "Export" pragma. As a consequence,
4713 the user will be unable to print such rename entities. */
4c4b4cd2 4714
14f9c5c9 4715static int
aeb5907d
JB
4716remove_irrelevant_renamings (struct ada_symbol_info *syms,
4717 int nsyms, const struct block *current_block)
4c4b4cd2
PH
4718{
4719 struct symbol *current_function;
4720 char *current_function_name;
4721 int i;
aeb5907d
JB
4722 int is_new_style_renaming;
4723
4724 /* If there is both a renaming foo___XR... encoded as a variable and
4725 a simple variable foo in the same block, discard the latter.
0963b4bd 4726 First, zero out such symbols, then compress. */
aeb5907d
JB
4727 is_new_style_renaming = 0;
4728 for (i = 0; i < nsyms; i += 1)
4729 {
4730 struct symbol *sym = syms[i].sym;
4731 struct block *block = syms[i].block;
4732 const char *name;
4733 const char *suffix;
4734
4735 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4736 continue;
4737 name = SYMBOL_LINKAGE_NAME (sym);
4738 suffix = strstr (name, "___XR");
4739
4740 if (suffix != NULL)
4741 {
4742 int name_len = suffix - name;
4743 int j;
5b4ee69b 4744
aeb5907d
JB
4745 is_new_style_renaming = 1;
4746 for (j = 0; j < nsyms; j += 1)
4747 if (i != j && syms[j].sym != NULL
4748 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4749 name_len) == 0
4750 && block == syms[j].block)
4751 syms[j].sym = NULL;
4752 }
4753 }
4754 if (is_new_style_renaming)
4755 {
4756 int j, k;
4757
4758 for (j = k = 0; j < nsyms; j += 1)
4759 if (syms[j].sym != NULL)
4760 {
4761 syms[k] = syms[j];
4762 k += 1;
4763 }
4764 return k;
4765 }
4c4b4cd2
PH
4766
4767 /* Extract the function name associated to CURRENT_BLOCK.
4768 Abort if unable to do so. */
76a01679 4769
4c4b4cd2
PH
4770 if (current_block == NULL)
4771 return nsyms;
76a01679 4772
7f0df278 4773 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
4774 if (current_function == NULL)
4775 return nsyms;
4776
4777 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4778 if (current_function_name == NULL)
4779 return nsyms;
4780
4781 /* Check each of the symbols, and remove it from the list if it is
4782 a type corresponding to a renaming that is out of the scope of
4783 the current block. */
4784
4785 i = 0;
4786 while (i < nsyms)
4787 {
aeb5907d
JB
4788 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4789 == ADA_OBJECT_RENAMING
4790 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4c4b4cd2
PH
4791 {
4792 int j;
5b4ee69b 4793
aeb5907d 4794 for (j = i + 1; j < nsyms; j += 1)
76a01679 4795 syms[j - 1] = syms[j];
4c4b4cd2
PH
4796 nsyms -= 1;
4797 }
4798 else
4799 i += 1;
4800 }
4801
4802 return nsyms;
4803}
4804
339c13b6
JB
4805/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4806 whose name and domain match NAME and DOMAIN respectively.
4807 If no match was found, then extend the search to "enclosing"
4808 routines (in other words, if we're inside a nested function,
4809 search the symbols defined inside the enclosing functions).
4810
4811 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
4812
4813static void
4814ada_add_local_symbols (struct obstack *obstackp, const char *name,
4815 struct block *block, domain_enum domain,
4816 int wild_match)
4817{
4818 int block_depth = 0;
4819
4820 while (block != NULL)
4821 {
4822 block_depth += 1;
4823 ada_add_block_symbols (obstackp, block, name, domain, NULL, wild_match);
4824
4825 /* If we found a non-function match, assume that's the one. */
4826 if (is_nonfunction (defns_collected (obstackp, 0),
4827 num_defns_collected (obstackp)))
4828 return;
4829
4830 block = BLOCK_SUPERBLOCK (block);
4831 }
4832
4833 /* If no luck so far, try to find NAME as a local symbol in some lexically
4834 enclosing subprogram. */
4835 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
4836 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match);
4837}
4838
ccefe4c4 4839/* An object of this type is used as the user_data argument when
40658b94 4840 calling the map_matching_symbols method. */
ccefe4c4 4841
40658b94 4842struct match_data
ccefe4c4 4843{
40658b94 4844 struct objfile *objfile;
ccefe4c4 4845 struct obstack *obstackp;
40658b94
PH
4846 struct symbol *arg_sym;
4847 int found_sym;
ccefe4c4
TT
4848};
4849
40658b94
PH
4850/* A callback for add_matching_symbols that adds SYM, found in BLOCK,
4851 to a list of symbols. DATA0 is a pointer to a struct match_data *
4852 containing the obstack that collects the symbol list, the file that SYM
4853 must come from, a flag indicating whether a non-argument symbol has
4854 been found in the current block, and the last argument symbol
4855 passed in SYM within the current block (if any). When SYM is null,
4856 marking the end of a block, the argument symbol is added if no
4857 other has been found. */
ccefe4c4 4858
40658b94
PH
4859static int
4860aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
ccefe4c4 4861{
40658b94
PH
4862 struct match_data *data = (struct match_data *) data0;
4863
4864 if (sym == NULL)
4865 {
4866 if (!data->found_sym && data->arg_sym != NULL)
4867 add_defn_to_vec (data->obstackp,
4868 fixup_symbol_section (data->arg_sym, data->objfile),
4869 block);
4870 data->found_sym = 0;
4871 data->arg_sym = NULL;
4872 }
4873 else
4874 {
4875 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
4876 return 0;
4877 else if (SYMBOL_IS_ARGUMENT (sym))
4878 data->arg_sym = sym;
4879 else
4880 {
4881 data->found_sym = 1;
4882 add_defn_to_vec (data->obstackp,
4883 fixup_symbol_section (sym, data->objfile),
4884 block);
4885 }
4886 }
4887 return 0;
4888}
4889
4890/* Compare STRING1 to STRING2, with results as for strcmp.
4891 Compatible with strcmp_iw in that strcmp_iw (STRING1, STRING2) <= 0
4892 implies compare_names (STRING1, STRING2) (they may differ as to
4893 what symbols compare equal). */
5b4ee69b 4894
40658b94
PH
4895static int
4896compare_names (const char *string1, const char *string2)
4897{
4898 while (*string1 != '\0' && *string2 != '\0')
4899 {
4900 if (isspace (*string1) || isspace (*string2))
4901 return strcmp_iw_ordered (string1, string2);
4902 if (*string1 != *string2)
4903 break;
4904 string1 += 1;
4905 string2 += 1;
4906 }
4907 switch (*string1)
4908 {
4909 case '(':
4910 return strcmp_iw_ordered (string1, string2);
4911 case '_':
4912 if (*string2 == '\0')
4913 {
052874e8 4914 if (is_name_suffix (string1))
40658b94
PH
4915 return 0;
4916 else
1a1d5513 4917 return 1;
40658b94 4918 }
dbb8534f 4919 /* FALLTHROUGH */
40658b94
PH
4920 default:
4921 if (*string2 == '(')
4922 return strcmp_iw_ordered (string1, string2);
4923 else
4924 return *string1 - *string2;
4925 }
ccefe4c4
TT
4926}
4927
339c13b6
JB
4928/* Add to OBSTACKP all non-local symbols whose name and domain match
4929 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
4930 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
4931
4932static void
40658b94
PH
4933add_nonlocal_symbols (struct obstack *obstackp, const char *name,
4934 domain_enum domain, int global,
4935 int is_wild_match)
339c13b6
JB
4936{
4937 struct objfile *objfile;
40658b94 4938 struct match_data data;
339c13b6 4939
6475f2fe 4940 memset (&data, 0, sizeof data);
ccefe4c4 4941 data.obstackp = obstackp;
339c13b6 4942
ccefe4c4 4943 ALL_OBJFILES (objfile)
40658b94
PH
4944 {
4945 data.objfile = objfile;
4946
4947 if (is_wild_match)
4948 objfile->sf->qf->map_matching_symbols (name, domain, objfile, global,
4949 aux_add_nonlocal_symbols, &data,
4950 wild_match, NULL);
4951 else
4952 objfile->sf->qf->map_matching_symbols (name, domain, objfile, global,
4953 aux_add_nonlocal_symbols, &data,
4954 full_match, compare_names);
4955 }
4956
4957 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
4958 {
4959 ALL_OBJFILES (objfile)
4960 {
4961 char *name1 = alloca (strlen (name) + sizeof ("_ada_"));
4962 strcpy (name1, "_ada_");
4963 strcpy (name1 + sizeof ("_ada_") - 1, name);
4964 data.objfile = objfile;
0963b4bd
MS
4965 objfile->sf->qf->map_matching_symbols (name1, domain,
4966 objfile, global,
4967 aux_add_nonlocal_symbols,
4968 &data,
40658b94
PH
4969 full_match, compare_names);
4970 }
4971 }
339c13b6
JB
4972}
4973
4c4b4cd2
PH
4974/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4975 scope and in global scopes, returning the number of matches. Sets
6c9353d3 4976 *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4c4b4cd2
PH
4977 indicating the symbols found and the blocks and symbol tables (if
4978 any) in which they were found. This vector are transient---good only to
4979 the next call of ada_lookup_symbol_list. Any non-function/non-enumeral
4980 symbol match within the nest of blocks whose innermost member is BLOCK0,
4981 is the one match returned (no other matches in that or
4982 enclosing blocks is returned). If there are any matches in or
4983 surrounding BLOCK0, then these alone are returned. Otherwise, the
4984 search extends to global and file-scope (static) symbol tables.
4985 Names prefixed with "standard__" are handled specially: "standard__"
4986 is first stripped off, and only static and global symbols are searched. */
14f9c5c9
AS
4987
4988int
4c4b4cd2 4989ada_lookup_symbol_list (const char *name0, const struct block *block0,
76a01679
JB
4990 domain_enum namespace,
4991 struct ada_symbol_info **results)
14f9c5c9
AS
4992{
4993 struct symbol *sym;
14f9c5c9 4994 struct block *block;
4c4b4cd2 4995 const char *name;
c0431670 4996 const int wild_match = should_use_wild_match (name0);
14f9c5c9 4997 int cacheIfUnique;
4c4b4cd2 4998 int ndefns;
14f9c5c9 4999
4c4b4cd2
PH
5000 obstack_free (&symbol_list_obstack, NULL);
5001 obstack_init (&symbol_list_obstack);
14f9c5c9 5002
14f9c5c9
AS
5003 cacheIfUnique = 0;
5004
5005 /* Search specified block and its superiors. */
5006
4c4b4cd2 5007 name = name0;
76a01679
JB
5008 block = (struct block *) block0; /* FIXME: No cast ought to be
5009 needed, but adding const will
5010 have a cascade effect. */
339c13b6
JB
5011
5012 /* Special case: If the user specifies a symbol name inside package
5013 Standard, do a non-wild matching of the symbol name without
5014 the "standard__" prefix. This was primarily introduced in order
5015 to allow the user to specifically access the standard exceptions
5016 using, for instance, Standard.Constraint_Error when Constraint_Error
5017 is ambiguous (due to the user defining its own Constraint_Error
5018 entity inside its program). */
4c4b4cd2
PH
5019 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
5020 {
4c4b4cd2
PH
5021 block = NULL;
5022 name = name0 + sizeof ("standard__") - 1;
5023 }
5024
339c13b6 5025 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5026
339c13b6
JB
5027 ada_add_local_symbols (&symbol_list_obstack, name, block, namespace,
5028 wild_match);
4c4b4cd2 5029 if (num_defns_collected (&symbol_list_obstack) > 0)
14f9c5c9 5030 goto done;
d2e4a39e 5031
339c13b6
JB
5032 /* No non-global symbols found. Check our cache to see if we have
5033 already performed this search before. If we have, then return
5034 the same result. */
5035
14f9c5c9 5036 cacheIfUnique = 1;
2570f2b7 5037 if (lookup_cached_symbol (name0, namespace, &sym, &block))
4c4b4cd2
PH
5038 {
5039 if (sym != NULL)
2570f2b7 5040 add_defn_to_vec (&symbol_list_obstack, sym, block);
4c4b4cd2
PH
5041 goto done;
5042 }
14f9c5c9 5043
339c13b6
JB
5044 /* Search symbols from all global blocks. */
5045
40658b94
PH
5046 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 1,
5047 wild_match);
d2e4a39e 5048
4c4b4cd2 5049 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5050 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5051
4c4b4cd2 5052 if (num_defns_collected (&symbol_list_obstack) == 0)
40658b94
PH
5053 add_nonlocal_symbols (&symbol_list_obstack, name, namespace, 0,
5054 wild_match);
14f9c5c9 5055
4c4b4cd2
PH
5056done:
5057 ndefns = num_defns_collected (&symbol_list_obstack);
5058 *results = defns_collected (&symbol_list_obstack, 1);
5059
5060 ndefns = remove_extra_symbols (*results, ndefns);
5061
d2e4a39e 5062 if (ndefns == 0)
2570f2b7 5063 cache_symbol (name0, namespace, NULL, NULL);
14f9c5c9 5064
4c4b4cd2 5065 if (ndefns == 1 && cacheIfUnique)
2570f2b7 5066 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
14f9c5c9 5067
aeb5907d 5068 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
14f9c5c9 5069
14f9c5c9
AS
5070 return ndefns;
5071}
5072
f8eba3c6
TT
5073/* If NAME is the name of an entity, return a string that should
5074 be used to look that entity up in Ada units. This string should
5075 be deallocated after use using xfree.
5076
5077 NAME can have any form that the "break" or "print" commands might
5078 recognize. In other words, it does not have to be the "natural"
5079 name, or the "encoded" name. */
5080
5081char *
5082ada_name_for_lookup (const char *name)
5083{
5084 char *canon;
5085 int nlen = strlen (name);
5086
5087 if (name[0] == '<' && name[nlen - 1] == '>')
5088 {
5089 canon = xmalloc (nlen - 1);
5090 memcpy (canon, name + 1, nlen - 2);
5091 canon[nlen - 2] = '\0';
5092 }
5093 else
5094 canon = xstrdup (ada_encode (ada_fold_name (name)));
5095 return canon;
5096}
5097
5098/* Implementation of the la_iterate_over_symbols method. */
5099
5100static void
5101ada_iterate_over_symbols (const struct block *block,
5102 const char *name, domain_enum domain,
5103 int (*callback) (struct symbol *, void *),
5104 void *data)
5105{
5106 int ndefs, i;
5107 struct ada_symbol_info *results;
5108
5109 ndefs = ada_lookup_symbol_list (name, block, domain, &results);
5110 for (i = 0; i < ndefs; ++i)
5111 {
5112 if (! (*callback) (results[i].sym, data))
5113 break;
5114 }
5115}
5116
d2e4a39e 5117struct symbol *
aeb5907d 5118ada_lookup_encoded_symbol (const char *name, const struct block *block0,
21b556f4 5119 domain_enum namespace, struct block **block_found)
14f9c5c9 5120{
4c4b4cd2 5121 struct ada_symbol_info *candidates;
14f9c5c9
AS
5122 int n_candidates;
5123
aeb5907d 5124 n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
14f9c5c9
AS
5125
5126 if (n_candidates == 0)
5127 return NULL;
4c4b4cd2 5128
aeb5907d
JB
5129 if (block_found != NULL)
5130 *block_found = candidates[0].block;
4c4b4cd2 5131
21b556f4 5132 return fixup_symbol_section (candidates[0].sym, NULL);
aeb5907d
JB
5133}
5134
5135/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5136 scope and in global scopes, or NULL if none. NAME is folded and
5137 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
0963b4bd 5138 choosing the first symbol if there are multiple choices.
aeb5907d
JB
5139 *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
5140 table in which the symbol was found (in both cases, these
5141 assignments occur only if the pointers are non-null). */
5142struct symbol *
5143ada_lookup_symbol (const char *name, const struct block *block0,
21b556f4 5144 domain_enum namespace, int *is_a_field_of_this)
aeb5907d
JB
5145{
5146 if (is_a_field_of_this != NULL)
5147 *is_a_field_of_this = 0;
5148
5149 return
5150 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
21b556f4 5151 block0, namespace, NULL);
4c4b4cd2 5152}
14f9c5c9 5153
4c4b4cd2
PH
5154static struct symbol *
5155ada_lookup_symbol_nonlocal (const char *name,
76a01679 5156 const struct block *block,
21b556f4 5157 const domain_enum domain)
4c4b4cd2 5158{
94af9270 5159 return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
14f9c5c9
AS
5160}
5161
5162
4c4b4cd2
PH
5163/* True iff STR is a possible encoded suffix of a normal Ada name
5164 that is to be ignored for matching purposes. Suffixes of parallel
5165 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5166 are given by any of the regular expressions:
4c4b4cd2 5167
babe1480
JB
5168 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5169 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5170 TKB [subprogram suffix for task bodies]
babe1480 5171 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5172 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5173
5174 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5175 match is performed. This sequence is used to differentiate homonyms,
5176 is an optional part of a valid name suffix. */
4c4b4cd2 5177
14f9c5c9 5178static int
d2e4a39e 5179is_name_suffix (const char *str)
14f9c5c9
AS
5180{
5181 int k;
4c4b4cd2
PH
5182 const char *matching;
5183 const int len = strlen (str);
5184
babe1480
JB
5185 /* Skip optional leading __[0-9]+. */
5186
4c4b4cd2
PH
5187 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5188 {
babe1480
JB
5189 str += 3;
5190 while (isdigit (str[0]))
5191 str += 1;
4c4b4cd2 5192 }
babe1480
JB
5193
5194 /* [.$][0-9]+ */
4c4b4cd2 5195
babe1480 5196 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5197 {
babe1480 5198 matching = str + 1;
4c4b4cd2
PH
5199 while (isdigit (matching[0]))
5200 matching += 1;
5201 if (matching[0] == '\0')
5202 return 1;
5203 }
5204
5205 /* ___[0-9]+ */
babe1480 5206
4c4b4cd2
PH
5207 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5208 {
5209 matching = str + 3;
5210 while (isdigit (matching[0]))
5211 matching += 1;
5212 if (matching[0] == '\0')
5213 return 1;
5214 }
5215
9ac7f98e
JB
5216 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5217
5218 if (strcmp (str, "TKB") == 0)
5219 return 1;
5220
529cad9c
PH
5221#if 0
5222 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5223 with a N at the end. Unfortunately, the compiler uses the same
5224 convention for other internal types it creates. So treating
529cad9c 5225 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5226 some regressions. For instance, consider the case of an enumerated
5227 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5228 name ends with N.
5229 Having a single character like this as a suffix carrying some
0963b4bd 5230 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5231 to be something like "_N" instead. In the meantime, do not do
5232 the following check. */
5233 /* Protected Object Subprograms */
5234 if (len == 1 && str [0] == 'N')
5235 return 1;
5236#endif
5237
5238 /* _E[0-9]+[bs]$ */
5239 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5240 {
5241 matching = str + 3;
5242 while (isdigit (matching[0]))
5243 matching += 1;
5244 if ((matching[0] == 'b' || matching[0] == 's')
5245 && matching [1] == '\0')
5246 return 1;
5247 }
5248
4c4b4cd2
PH
5249 /* ??? We should not modify STR directly, as we are doing below. This
5250 is fine in this case, but may become problematic later if we find
5251 that this alternative did not work, and want to try matching
5252 another one from the begining of STR. Since we modified it, we
5253 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5254 if (str[0] == 'X')
5255 {
5256 str += 1;
d2e4a39e 5257 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
5258 {
5259 if (str[0] != 'n' && str[0] != 'b')
5260 return 0;
5261 str += 1;
5262 }
14f9c5c9 5263 }
babe1480 5264
14f9c5c9
AS
5265 if (str[0] == '\000')
5266 return 1;
babe1480 5267
d2e4a39e 5268 if (str[0] == '_')
14f9c5c9
AS
5269 {
5270 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 5271 return 0;
d2e4a39e 5272 if (str[2] == '_')
4c4b4cd2 5273 {
61ee279c
PH
5274 if (strcmp (str + 3, "JM") == 0)
5275 return 1;
5276 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5277 the LJM suffix in favor of the JM one. But we will
5278 still accept LJM as a valid suffix for a reasonable
5279 amount of time, just to allow ourselves to debug programs
5280 compiled using an older version of GNAT. */
4c4b4cd2
PH
5281 if (strcmp (str + 3, "LJM") == 0)
5282 return 1;
5283 if (str[3] != 'X')
5284 return 0;
1265e4aa
JB
5285 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5286 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
5287 return 1;
5288 if (str[4] == 'R' && str[5] != 'T')
5289 return 1;
5290 return 0;
5291 }
5292 if (!isdigit (str[2]))
5293 return 0;
5294 for (k = 3; str[k] != '\0'; k += 1)
5295 if (!isdigit (str[k]) && str[k] != '_')
5296 return 0;
14f9c5c9
AS
5297 return 1;
5298 }
4c4b4cd2 5299 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5300 {
4c4b4cd2
PH
5301 for (k = 2; str[k] != '\0'; k += 1)
5302 if (!isdigit (str[k]) && str[k] != '_')
5303 return 0;
14f9c5c9
AS
5304 return 1;
5305 }
5306 return 0;
5307}
d2e4a39e 5308
aeb5907d
JB
5309/* Return non-zero if the string starting at NAME and ending before
5310 NAME_END contains no capital letters. */
529cad9c
PH
5311
5312static int
5313is_valid_name_for_wild_match (const char *name0)
5314{
5315 const char *decoded_name = ada_decode (name0);
5316 int i;
5317
5823c3ef
JB
5318 /* If the decoded name starts with an angle bracket, it means that
5319 NAME0 does not follow the GNAT encoding format. It should then
5320 not be allowed as a possible wild match. */
5321 if (decoded_name[0] == '<')
5322 return 0;
5323
529cad9c
PH
5324 for (i=0; decoded_name[i] != '\0'; i++)
5325 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5326 return 0;
5327
5328 return 1;
5329}
5330
73589123
PH
5331/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
5332 that could start a simple name. Assumes that *NAMEP points into
5333 the string beginning at NAME0. */
4c4b4cd2 5334
14f9c5c9 5335static int
73589123 5336advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 5337{
73589123 5338 const char *name = *namep;
5b4ee69b 5339
5823c3ef 5340 while (1)
14f9c5c9 5341 {
aa27d0b3 5342 int t0, t1;
73589123
PH
5343
5344 t0 = *name;
5345 if (t0 == '_')
5346 {
5347 t1 = name[1];
5348 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5349 {
5350 name += 1;
5351 if (name == name0 + 5 && strncmp (name0, "_ada", 4) == 0)
5352 break;
5353 else
5354 name += 1;
5355 }
aa27d0b3
JB
5356 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5357 || name[2] == target0))
73589123
PH
5358 {
5359 name += 2;
5360 break;
5361 }
5362 else
5363 return 0;
5364 }
5365 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5366 name += 1;
5367 else
5823c3ef 5368 return 0;
73589123
PH
5369 }
5370
5371 *namep = name;
5372 return 1;
5373}
5374
5375/* Return 0 iff NAME encodes a name of the form prefix.PATN. Ignores any
5376 informational suffixes of NAME (i.e., for which is_name_suffix is
5377 true). Assumes that PATN is a lower-cased Ada simple name. */
5378
5379static int
5380wild_match (const char *name, const char *patn)
5381{
5382 const char *p, *n;
5383 const char *name0 = name;
5384
5385 while (1)
5386 {
5387 const char *match = name;
5388
5389 if (*name == *patn)
5390 {
5391 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5392 if (*p != *name)
5393 break;
5394 if (*p == '\0' && is_name_suffix (name))
5395 return match != name0 && !is_valid_name_for_wild_match (name0);
5396
5397 if (name[-1] == '_')
5398 name -= 1;
5399 }
5400 if (!advance_wild_match (&name, name0, *patn))
5401 return 1;
96d887e8 5402 }
96d887e8
PH
5403}
5404
40658b94
PH
5405/* Returns 0 iff symbol name SYM_NAME matches SEARCH_NAME, apart from
5406 informational suffix. */
5407
c4d840bd
PH
5408static int
5409full_match (const char *sym_name, const char *search_name)
5410{
40658b94 5411 return !match_name (sym_name, search_name, 0);
c4d840bd
PH
5412}
5413
5414
96d887e8
PH
5415/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5416 vector *defn_symbols, updating the list of symbols in OBSTACKP
0963b4bd 5417 (if necessary). If WILD, treat as NAME with a wildcard prefix.
96d887e8
PH
5418 OBJFILE is the section containing BLOCK.
5419 SYMTAB is recorded with each symbol added. */
5420
5421static void
5422ada_add_block_symbols (struct obstack *obstackp,
76a01679 5423 struct block *block, const char *name,
96d887e8 5424 domain_enum domain, struct objfile *objfile,
2570f2b7 5425 int wild)
96d887e8
PH
5426{
5427 struct dict_iterator iter;
5428 int name_len = strlen (name);
5429 /* A matching argument symbol, if any. */
5430 struct symbol *arg_sym;
5431 /* Set true when we find a matching non-argument symbol. */
5432 int found_sym;
5433 struct symbol *sym;
5434
5435 arg_sym = NULL;
5436 found_sym = 0;
5437 if (wild)
5438 {
c4d840bd
PH
5439 for (sym = dict_iter_match_first (BLOCK_DICT (block), name,
5440 wild_match, &iter);
5441 sym != NULL; sym = dict_iter_match_next (name, wild_match, &iter))
76a01679 5442 {
5eeb2539
AR
5443 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5444 SYMBOL_DOMAIN (sym), domain)
73589123 5445 && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
76a01679 5446 {
2a2d4dc3
AS
5447 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5448 continue;
5449 else if (SYMBOL_IS_ARGUMENT (sym))
5450 arg_sym = sym;
5451 else
5452 {
76a01679
JB
5453 found_sym = 1;
5454 add_defn_to_vec (obstackp,
5455 fixup_symbol_section (sym, objfile),
2570f2b7 5456 block);
76a01679
JB
5457 }
5458 }
5459 }
96d887e8
PH
5460 }
5461 else
5462 {
c4d840bd 5463 for (sym = dict_iter_match_first (BLOCK_DICT (block), name,
40658b94 5464 full_match, &iter);
c4d840bd 5465 sym != NULL; sym = dict_iter_match_next (name, full_match, &iter))
76a01679 5466 {
5eeb2539
AR
5467 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5468 SYMBOL_DOMAIN (sym), domain))
76a01679 5469 {
c4d840bd
PH
5470 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5471 {
5472 if (SYMBOL_IS_ARGUMENT (sym))
5473 arg_sym = sym;
5474 else
2a2d4dc3 5475 {
c4d840bd
PH
5476 found_sym = 1;
5477 add_defn_to_vec (obstackp,
5478 fixup_symbol_section (sym, objfile),
5479 block);
2a2d4dc3 5480 }
c4d840bd 5481 }
76a01679
JB
5482 }
5483 }
96d887e8
PH
5484 }
5485
5486 if (!found_sym && arg_sym != NULL)
5487 {
76a01679
JB
5488 add_defn_to_vec (obstackp,
5489 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5490 block);
96d887e8
PH
5491 }
5492
5493 if (!wild)
5494 {
5495 arg_sym = NULL;
5496 found_sym = 0;
5497
5498 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5499 {
5eeb2539
AR
5500 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5501 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
5502 {
5503 int cmp;
5504
5505 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5506 if (cmp == 0)
5507 {
5508 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5509 if (cmp == 0)
5510 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5511 name_len);
5512 }
5513
5514 if (cmp == 0
5515 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5516 {
2a2d4dc3
AS
5517 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5518 {
5519 if (SYMBOL_IS_ARGUMENT (sym))
5520 arg_sym = sym;
5521 else
5522 {
5523 found_sym = 1;
5524 add_defn_to_vec (obstackp,
5525 fixup_symbol_section (sym, objfile),
5526 block);
5527 }
5528 }
76a01679
JB
5529 }
5530 }
76a01679 5531 }
96d887e8
PH
5532
5533 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5534 They aren't parameters, right? */
5535 if (!found_sym && arg_sym != NULL)
5536 {
5537 add_defn_to_vec (obstackp,
76a01679 5538 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5539 block);
96d887e8
PH
5540 }
5541 }
5542}
5543\f
41d27058
JB
5544
5545 /* Symbol Completion */
5546
5547/* If SYM_NAME is a completion candidate for TEXT, return this symbol
5548 name in a form that's appropriate for the completion. The result
5549 does not need to be deallocated, but is only good until the next call.
5550
5551 TEXT_LEN is equal to the length of TEXT.
5552 Perform a wild match if WILD_MATCH is set.
5553 ENCODED should be set if TEXT represents the start of a symbol name
5554 in its encoded form. */
5555
5556static const char *
5557symbol_completion_match (const char *sym_name,
5558 const char *text, int text_len,
5559 int wild_match, int encoded)
5560{
41d27058
JB
5561 const int verbatim_match = (text[0] == '<');
5562 int match = 0;
5563
5564 if (verbatim_match)
5565 {
5566 /* Strip the leading angle bracket. */
5567 text = text + 1;
5568 text_len--;
5569 }
5570
5571 /* First, test against the fully qualified name of the symbol. */
5572
5573 if (strncmp (sym_name, text, text_len) == 0)
5574 match = 1;
5575
5576 if (match && !encoded)
5577 {
5578 /* One needed check before declaring a positive match is to verify
5579 that iff we are doing a verbatim match, the decoded version
5580 of the symbol name starts with '<'. Otherwise, this symbol name
5581 is not a suitable completion. */
5582 const char *sym_name_copy = sym_name;
5583 int has_angle_bracket;
5584
5585 sym_name = ada_decode (sym_name);
5586 has_angle_bracket = (sym_name[0] == '<');
5587 match = (has_angle_bracket == verbatim_match);
5588 sym_name = sym_name_copy;
5589 }
5590
5591 if (match && !verbatim_match)
5592 {
5593 /* When doing non-verbatim match, another check that needs to
5594 be done is to verify that the potentially matching symbol name
5595 does not include capital letters, because the ada-mode would
5596 not be able to understand these symbol names without the
5597 angle bracket notation. */
5598 const char *tmp;
5599
5600 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5601 if (*tmp != '\0')
5602 match = 0;
5603 }
5604
5605 /* Second: Try wild matching... */
5606
5607 if (!match && wild_match)
5608 {
5609 /* Since we are doing wild matching, this means that TEXT
5610 may represent an unqualified symbol name. We therefore must
5611 also compare TEXT against the unqualified name of the symbol. */
5612 sym_name = ada_unqualified_name (ada_decode (sym_name));
5613
5614 if (strncmp (sym_name, text, text_len) == 0)
5615 match = 1;
5616 }
5617
5618 /* Finally: If we found a mach, prepare the result to return. */
5619
5620 if (!match)
5621 return NULL;
5622
5623 if (verbatim_match)
5624 sym_name = add_angle_brackets (sym_name);
5625
5626 if (!encoded)
5627 sym_name = ada_decode (sym_name);
5628
5629 return sym_name;
5630}
5631
5632/* A companion function to ada_make_symbol_completion_list().
5633 Check if SYM_NAME represents a symbol which name would be suitable
5634 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5635 it is appended at the end of the given string vector SV.
5636
5637 ORIG_TEXT is the string original string from the user command
5638 that needs to be completed. WORD is the entire command on which
5639 completion should be performed. These two parameters are used to
5640 determine which part of the symbol name should be added to the
5641 completion vector.
5642 if WILD_MATCH is set, then wild matching is performed.
5643 ENCODED should be set if TEXT represents a symbol name in its
5644 encoded formed (in which case the completion should also be
5645 encoded). */
5646
5647static void
d6565258 5648symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
5649 const char *sym_name,
5650 const char *text, int text_len,
5651 const char *orig_text, const char *word,
5652 int wild_match, int encoded)
5653{
5654 const char *match = symbol_completion_match (sym_name, text, text_len,
5655 wild_match, encoded);
5656 char *completion;
5657
5658 if (match == NULL)
5659 return;
5660
5661 /* We found a match, so add the appropriate completion to the given
5662 string vector. */
5663
5664 if (word == orig_text)
5665 {
5666 completion = xmalloc (strlen (match) + 5);
5667 strcpy (completion, match);
5668 }
5669 else if (word > orig_text)
5670 {
5671 /* Return some portion of sym_name. */
5672 completion = xmalloc (strlen (match) + 5);
5673 strcpy (completion, match + (word - orig_text));
5674 }
5675 else
5676 {
5677 /* Return some of ORIG_TEXT plus sym_name. */
5678 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5679 strncpy (completion, word, orig_text - word);
5680 completion[orig_text - word] = '\0';
5681 strcat (completion, match);
5682 }
5683
d6565258 5684 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
5685}
5686
ccefe4c4 5687/* An object of this type is passed as the user_data argument to the
7b08b9eb 5688 expand_partial_symbol_names method. */
ccefe4c4
TT
5689struct add_partial_datum
5690{
5691 VEC(char_ptr) **completions;
5692 char *text;
5693 int text_len;
5694 char *text0;
5695 char *word;
5696 int wild_match;
5697 int encoded;
5698};
5699
7b08b9eb
JK
5700/* A callback for expand_partial_symbol_names. */
5701static int
f8eba3c6
TT
5702ada_expand_partial_symbol_name (const struct language_defn *language,
5703 const char *name, void *user_data)
ccefe4c4
TT
5704{
5705 struct add_partial_datum *data = user_data;
7b08b9eb
JK
5706
5707 return symbol_completion_match (name, data->text, data->text_len,
5708 data->wild_match, data->encoded) != NULL;
ccefe4c4
TT
5709}
5710
41d27058
JB
5711/* Return a list of possible symbol names completing TEXT0. The list
5712 is NULL terminated. WORD is the entire command on which completion
5713 is made. */
5714
5715static char **
5716ada_make_symbol_completion_list (char *text0, char *word)
5717{
5718 char *text;
5719 int text_len;
5720 int wild_match;
5721 int encoded;
2ba95b9b 5722 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058
JB
5723 struct symbol *sym;
5724 struct symtab *s;
41d27058
JB
5725 struct minimal_symbol *msymbol;
5726 struct objfile *objfile;
5727 struct block *b, *surrounding_static_block = 0;
5728 int i;
5729 struct dict_iterator iter;
5730
5731 if (text0[0] == '<')
5732 {
5733 text = xstrdup (text0);
5734 make_cleanup (xfree, text);
5735 text_len = strlen (text);
5736 wild_match = 0;
5737 encoded = 1;
5738 }
5739 else
5740 {
5741 text = xstrdup (ada_encode (text0));
5742 make_cleanup (xfree, text);
5743 text_len = strlen (text);
5744 for (i = 0; i < text_len; i++)
5745 text[i] = tolower (text[i]);
5746
5747 encoded = (strstr (text0, "__") != NULL);
5748 /* If the name contains a ".", then the user is entering a fully
5749 qualified entity name, and the match must not be done in wild
5750 mode. Similarly, if the user wants to complete what looks like
5751 an encoded name, the match must not be done in wild mode. */
5752 wild_match = (strchr (text0, '.') == NULL && !encoded);
5753 }
5754
5755 /* First, look at the partial symtab symbols. */
41d27058 5756 {
ccefe4c4
TT
5757 struct add_partial_datum data;
5758
5759 data.completions = &completions;
5760 data.text = text;
5761 data.text_len = text_len;
5762 data.text0 = text0;
5763 data.word = word;
5764 data.wild_match = wild_match;
5765 data.encoded = encoded;
7b08b9eb 5766 expand_partial_symbol_names (ada_expand_partial_symbol_name, &data);
41d27058
JB
5767 }
5768
5769 /* At this point scan through the misc symbol vectors and add each
5770 symbol you find to the list. Eventually we want to ignore
5771 anything that isn't a text symbol (everything else will be
5772 handled by the psymtab code above). */
5773
5774 ALL_MSYMBOLS (objfile, msymbol)
5775 {
5776 QUIT;
d6565258 5777 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
41d27058
JB
5778 text, text_len, text0, word, wild_match, encoded);
5779 }
5780
5781 /* Search upwards from currently selected frame (so that we can
5782 complete on local vars. */
5783
5784 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5785 {
5786 if (!BLOCK_SUPERBLOCK (b))
5787 surrounding_static_block = b; /* For elmin of dups */
5788
5789 ALL_BLOCK_SYMBOLS (b, iter, sym)
5790 {
d6565258 5791 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058
JB
5792 text, text_len, text0, word,
5793 wild_match, encoded);
5794 }
5795 }
5796
5797 /* Go through the symtabs and check the externs and statics for
5798 symbols which match. */
5799
5800 ALL_SYMTABS (objfile, s)
5801 {
5802 QUIT;
5803 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5804 ALL_BLOCK_SYMBOLS (b, iter, sym)
5805 {
d6565258 5806 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058
JB
5807 text, text_len, text0, word,
5808 wild_match, encoded);
5809 }
5810 }
5811
5812 ALL_SYMTABS (objfile, s)
5813 {
5814 QUIT;
5815 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5816 /* Don't do this block twice. */
5817 if (b == surrounding_static_block)
5818 continue;
5819 ALL_BLOCK_SYMBOLS (b, iter, sym)
5820 {
d6565258 5821 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058
JB
5822 text, text_len, text0, word,
5823 wild_match, encoded);
5824 }
5825 }
5826
5827 /* Append the closing NULL entry. */
2ba95b9b 5828 VEC_safe_push (char_ptr, completions, NULL);
41d27058 5829
2ba95b9b
JB
5830 /* Make a copy of the COMPLETIONS VEC before we free it, and then
5831 return the copy. It's unfortunate that we have to make a copy
5832 of an array that we're about to destroy, but there is nothing much
5833 we can do about it. Fortunately, it's typically not a very large
5834 array. */
5835 {
5836 const size_t completions_size =
5837 VEC_length (char_ptr, completions) * sizeof (char *);
dc19db01 5838 char **result = xmalloc (completions_size);
2ba95b9b
JB
5839
5840 memcpy (result, VEC_address (char_ptr, completions), completions_size);
5841
5842 VEC_free (char_ptr, completions);
5843 return result;
5844 }
41d27058
JB
5845}
5846
963a6417 5847 /* Field Access */
96d887e8 5848
73fb9985
JB
5849/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5850 for tagged types. */
5851
5852static int
5853ada_is_dispatch_table_ptr_type (struct type *type)
5854{
5855 char *name;
5856
5857 if (TYPE_CODE (type) != TYPE_CODE_PTR)
5858 return 0;
5859
5860 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5861 if (name == NULL)
5862 return 0;
5863
5864 return (strcmp (name, "ada__tags__dispatch_table") == 0);
5865}
5866
963a6417
PH
5867/* True if field number FIELD_NUM in struct or union type TYPE is supposed
5868 to be invisible to users. */
96d887e8 5869
963a6417
PH
5870int
5871ada_is_ignored_field (struct type *type, int field_num)
96d887e8 5872{
963a6417
PH
5873 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5874 return 1;
73fb9985
JB
5875
5876 /* Check the name of that field. */
5877 {
5878 const char *name = TYPE_FIELD_NAME (type, field_num);
5879
5880 /* Anonymous field names should not be printed.
5881 brobecker/2007-02-20: I don't think this can actually happen
5882 but we don't want to print the value of annonymous fields anyway. */
5883 if (name == NULL)
5884 return 1;
5885
5886 /* A field named "_parent" is internally generated by GNAT for
5887 tagged types, and should not be printed either. */
5888 if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5889 return 1;
5890 }
5891
5892 /* If this is the dispatch table of a tagged type, then ignore. */
5893 if (ada_is_tagged_type (type, 1)
5894 && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5895 return 1;
5896
5897 /* Not a special field, so it should not be ignored. */
5898 return 0;
963a6417 5899}
96d887e8 5900
963a6417 5901/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 5902 pointer or reference type whose ultimate target has a tag field. */
96d887e8 5903
963a6417
PH
5904int
5905ada_is_tagged_type (struct type *type, int refok)
5906{
5907 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5908}
96d887e8 5909
963a6417 5910/* True iff TYPE represents the type of X'Tag */
96d887e8 5911
963a6417
PH
5912int
5913ada_is_tag_type (struct type *type)
5914{
5915 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5916 return 0;
5917 else
96d887e8 5918 {
963a6417 5919 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 5920
963a6417
PH
5921 return (name != NULL
5922 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 5923 }
96d887e8
PH
5924}
5925
963a6417 5926/* The type of the tag on VAL. */
76a01679 5927
963a6417
PH
5928struct type *
5929ada_tag_type (struct value *val)
96d887e8 5930{
df407dfe 5931 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 5932}
96d887e8 5933
963a6417 5934/* The value of the tag on VAL. */
96d887e8 5935
963a6417
PH
5936struct value *
5937ada_value_tag (struct value *val)
5938{
03ee6b2e 5939 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
5940}
5941
963a6417
PH
5942/* The value of the tag on the object of type TYPE whose contents are
5943 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 5944 ADDRESS. */
96d887e8 5945
963a6417 5946static struct value *
10a2c479 5947value_tag_from_contents_and_address (struct type *type,
fc1a4b47 5948 const gdb_byte *valaddr,
963a6417 5949 CORE_ADDR address)
96d887e8 5950{
b5385fc0 5951 int tag_byte_offset;
963a6417 5952 struct type *tag_type;
5b4ee69b 5953
963a6417 5954 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 5955 NULL, NULL, NULL))
96d887e8 5956 {
fc1a4b47 5957 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
5958 ? NULL
5959 : valaddr + tag_byte_offset);
963a6417 5960 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 5961
963a6417 5962 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 5963 }
963a6417
PH
5964 return NULL;
5965}
96d887e8 5966
963a6417
PH
5967static struct type *
5968type_from_tag (struct value *tag)
5969{
5970 const char *type_name = ada_tag_name (tag);
5b4ee69b 5971
963a6417
PH
5972 if (type_name != NULL)
5973 return ada_find_any_type (ada_encode (type_name));
5974 return NULL;
5975}
96d887e8 5976
963a6417
PH
5977struct tag_args
5978{
5979 struct value *tag;
5980 char *name;
5981};
4c4b4cd2 5982
529cad9c
PH
5983
5984static int ada_tag_name_1 (void *);
5985static int ada_tag_name_2 (struct tag_args *);
5986
4c4b4cd2 5987/* Wrapper function used by ada_tag_name. Given a struct tag_args*
0963b4bd 5988 value ARGS, sets ARGS->name to the tag name of ARGS->tag.
4c4b4cd2
PH
5989 The value stored in ARGS->name is valid until the next call to
5990 ada_tag_name_1. */
5991
5992static int
5993ada_tag_name_1 (void *args0)
5994{
5995 struct tag_args *args = (struct tag_args *) args0;
5996 static char name[1024];
76a01679 5997 char *p;
4c4b4cd2 5998 struct value *val;
5b4ee69b 5999
4c4b4cd2 6000 args->name = NULL;
03ee6b2e 6001 val = ada_value_struct_elt (args->tag, "tsd", 1);
529cad9c
PH
6002 if (val == NULL)
6003 return ada_tag_name_2 (args);
03ee6b2e 6004 val = ada_value_struct_elt (val, "expanded_name", 1);
529cad9c
PH
6005 if (val == NULL)
6006 return 0;
6007 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6008 for (p = name; *p != '\0'; p += 1)
6009 if (isalpha (*p))
6010 *p = tolower (*p);
6011 args->name = name;
6012 return 0;
6013}
6014
e802dbe0
JB
6015/* Return the "ada__tags__type_specific_data" type. */
6016
6017static struct type *
6018ada_get_tsd_type (struct inferior *inf)
6019{
6020 struct ada_inferior_data *data = get_ada_inferior_data (inf);
6021
6022 if (data->tsd_type == 0)
6023 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6024 return data->tsd_type;
6025}
6026
529cad9c
PH
6027/* Utility function for ada_tag_name_1 that tries the second
6028 representation for the dispatch table (in which there is no
6029 explicit 'tsd' field in the referent of the tag pointer, and instead
0963b4bd 6030 the tsd pointer is stored just before the dispatch table. */
529cad9c
PH
6031
6032static int
6033ada_tag_name_2 (struct tag_args *args)
6034{
6035 struct type *info_type;
6036 static char name[1024];
6037 char *p;
6038 struct value *val, *valp;
6039
6040 args->name = NULL;
e802dbe0 6041 info_type = ada_get_tsd_type (current_inferior());
529cad9c
PH
6042 if (info_type == NULL)
6043 return 0;
6044 info_type = lookup_pointer_type (lookup_pointer_type (info_type));
6045 valp = value_cast (info_type, args->tag);
6046 if (valp == NULL)
6047 return 0;
2497b498 6048 val = value_ind (value_ptradd (valp, -1));
4c4b4cd2
PH
6049 if (val == NULL)
6050 return 0;
03ee6b2e 6051 val = ada_value_struct_elt (val, "expanded_name", 1);
4c4b4cd2
PH
6052 if (val == NULL)
6053 return 0;
6054 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6055 for (p = name; *p != '\0'; p += 1)
6056 if (isalpha (*p))
6057 *p = tolower (*p);
6058 args->name = name;
6059 return 0;
6060}
6061
6062/* The type name of the dynamic type denoted by the 'tag value TAG, as
e802dbe0 6063 a C string. */
4c4b4cd2
PH
6064
6065const char *
6066ada_tag_name (struct value *tag)
6067{
6068 struct tag_args args;
5b4ee69b 6069
df407dfe 6070 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6071 return NULL;
76a01679 6072 args.tag = tag;
4c4b4cd2
PH
6073 args.name = NULL;
6074 catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
6075 return args.name;
6076}
6077
6078/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6079
d2e4a39e 6080struct type *
ebf56fd3 6081ada_parent_type (struct type *type)
14f9c5c9
AS
6082{
6083 int i;
6084
61ee279c 6085 type = ada_check_typedef (type);
14f9c5c9
AS
6086
6087 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6088 return NULL;
6089
6090 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6091 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6092 {
6093 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6094
6095 /* If the _parent field is a pointer, then dereference it. */
6096 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
6097 parent_type = TYPE_TARGET_TYPE (parent_type);
6098 /* If there is a parallel XVS type, get the actual base type. */
6099 parent_type = ada_get_base_type (parent_type);
6100
6101 return ada_check_typedef (parent_type);
6102 }
14f9c5c9
AS
6103
6104 return NULL;
6105}
6106
4c4b4cd2
PH
6107/* True iff field number FIELD_NUM of structure type TYPE contains the
6108 parent-type (inherited) fields of a derived type. Assumes TYPE is
6109 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6110
6111int
ebf56fd3 6112ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6113{
61ee279c 6114 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6115
4c4b4cd2
PH
6116 return (name != NULL
6117 && (strncmp (name, "PARENT", 6) == 0
6118 || strncmp (name, "_parent", 7) == 0));
14f9c5c9
AS
6119}
6120
4c4b4cd2 6121/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6122 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6123 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6124 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6125 structures. */
14f9c5c9
AS
6126
6127int
ebf56fd3 6128ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6129{
d2e4a39e 6130 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6131
d2e4a39e 6132 return (name != NULL
4c4b4cd2
PH
6133 && (strncmp (name, "PARENT", 6) == 0
6134 || strcmp (name, "REP") == 0
6135 || strncmp (name, "_parent", 7) == 0
6136 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6137}
6138
4c4b4cd2
PH
6139/* True iff field number FIELD_NUM of structure or union type TYPE
6140 is a variant wrapper. Assumes TYPE is a structure type with at least
6141 FIELD_NUM+1 fields. */
14f9c5c9
AS
6142
6143int
ebf56fd3 6144ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6145{
d2e4a39e 6146 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6147
14f9c5c9 6148 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 6149 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
6150 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
6151 == TYPE_CODE_UNION)));
14f9c5c9
AS
6152}
6153
6154/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6155 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6156 returns the type of the controlling discriminant for the variant.
6157 May return NULL if the type could not be found. */
14f9c5c9 6158
d2e4a39e 6159struct type *
ebf56fd3 6160ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6161{
d2e4a39e 6162 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6163
7c964f07 6164 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
6165}
6166
4c4b4cd2 6167/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6168 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6169 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
6170
6171int
ebf56fd3 6172ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6173{
d2e4a39e 6174 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6175
14f9c5c9
AS
6176 return (name != NULL && name[0] == 'O');
6177}
6178
6179/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6180 returns the name of the discriminant controlling the variant.
6181 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6182
d2e4a39e 6183char *
ebf56fd3 6184ada_variant_discrim_name (struct type *type0)
14f9c5c9 6185{
d2e4a39e 6186 static char *result = NULL;
14f9c5c9 6187 static size_t result_len = 0;
d2e4a39e
AS
6188 struct type *type;
6189 const char *name;
6190 const char *discrim_end;
6191 const char *discrim_start;
14f9c5c9
AS
6192
6193 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
6194 type = TYPE_TARGET_TYPE (type0);
6195 else
6196 type = type0;
6197
6198 name = ada_type_name (type);
6199
6200 if (name == NULL || name[0] == '\000')
6201 return "";
6202
6203 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6204 discrim_end -= 1)
6205 {
4c4b4cd2
PH
6206 if (strncmp (discrim_end, "___XVN", 6) == 0)
6207 break;
14f9c5c9
AS
6208 }
6209 if (discrim_end == name)
6210 return "";
6211
d2e4a39e 6212 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6213 discrim_start -= 1)
6214 {
d2e4a39e 6215 if (discrim_start == name + 1)
4c4b4cd2 6216 return "";
76a01679 6217 if ((discrim_start > name + 3
4c4b4cd2
PH
6218 && strncmp (discrim_start - 3, "___", 3) == 0)
6219 || discrim_start[-1] == '.')
6220 break;
14f9c5c9
AS
6221 }
6222
6223 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
6224 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 6225 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
6226 return result;
6227}
6228
4c4b4cd2
PH
6229/* Scan STR for a subtype-encoded number, beginning at position K.
6230 Put the position of the character just past the number scanned in
6231 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6232 Return 1 if there was a valid number at the given position, and 0
6233 otherwise. A "subtype-encoded" number consists of the absolute value
6234 in decimal, followed by the letter 'm' to indicate a negative number.
6235 Assumes 0m does not occur. */
14f9c5c9
AS
6236
6237int
d2e4a39e 6238ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6239{
6240 ULONGEST RU;
6241
d2e4a39e 6242 if (!isdigit (str[k]))
14f9c5c9
AS
6243 return 0;
6244
4c4b4cd2 6245 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6246 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6247 LONGEST. */
14f9c5c9
AS
6248 RU = 0;
6249 while (isdigit (str[k]))
6250 {
d2e4a39e 6251 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6252 k += 1;
6253 }
6254
d2e4a39e 6255 if (str[k] == 'm')
14f9c5c9
AS
6256 {
6257 if (R != NULL)
4c4b4cd2 6258 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6259 k += 1;
6260 }
6261 else if (R != NULL)
6262 *R = (LONGEST) RU;
6263
4c4b4cd2 6264 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6265 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6266 number representable as a LONGEST (although either would probably work
6267 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6268 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6269
6270 if (new_k != NULL)
6271 *new_k = k;
6272 return 1;
6273}
6274
4c4b4cd2
PH
6275/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6276 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6277 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6278
d2e4a39e 6279int
ebf56fd3 6280ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6281{
d2e4a39e 6282 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6283 int p;
6284
6285 p = 0;
6286 while (1)
6287 {
d2e4a39e 6288 switch (name[p])
4c4b4cd2
PH
6289 {
6290 case '\0':
6291 return 0;
6292 case 'S':
6293 {
6294 LONGEST W;
5b4ee69b 6295
4c4b4cd2
PH
6296 if (!ada_scan_number (name, p + 1, &W, &p))
6297 return 0;
6298 if (val == W)
6299 return 1;
6300 break;
6301 }
6302 case 'R':
6303 {
6304 LONGEST L, U;
5b4ee69b 6305
4c4b4cd2
PH
6306 if (!ada_scan_number (name, p + 1, &L, &p)
6307 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6308 return 0;
6309 if (val >= L && val <= U)
6310 return 1;
6311 break;
6312 }
6313 case 'O':
6314 return 1;
6315 default:
6316 return 0;
6317 }
6318 }
6319}
6320
0963b4bd 6321/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6322
6323/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6324 ARG_TYPE, extract and return the value of one of its (non-static)
6325 fields. FIELDNO says which field. Differs from value_primitive_field
6326 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6327
4c4b4cd2 6328static struct value *
d2e4a39e 6329ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 6330 struct type *arg_type)
14f9c5c9 6331{
14f9c5c9
AS
6332 struct type *type;
6333
61ee279c 6334 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
6335 type = TYPE_FIELD_TYPE (arg_type, fieldno);
6336
4c4b4cd2 6337 /* Handle packed fields. */
14f9c5c9
AS
6338
6339 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
6340 {
6341 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6342 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6343
0fd88904 6344 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
6345 offset + bit_pos / 8,
6346 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6347 }
6348 else
6349 return value_primitive_field (arg1, offset, fieldno, arg_type);
6350}
6351
52ce6436
PH
6352/* Find field with name NAME in object of type TYPE. If found,
6353 set the following for each argument that is non-null:
6354 - *FIELD_TYPE_P to the field's type;
6355 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6356 an object of that type;
6357 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6358 - *BIT_SIZE_P to its size in bits if the field is packed, and
6359 0 otherwise;
6360 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6361 fields up to but not including the desired field, or by the total
6362 number of fields if not found. A NULL value of NAME never
6363 matches; the function just counts visible fields in this case.
6364
0963b4bd 6365 Returns 1 if found, 0 otherwise. */
52ce6436 6366
4c4b4cd2 6367static int
76a01679
JB
6368find_struct_field (char *name, struct type *type, int offset,
6369 struct type **field_type_p,
52ce6436
PH
6370 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6371 int *index_p)
4c4b4cd2
PH
6372{
6373 int i;
6374
61ee279c 6375 type = ada_check_typedef (type);
76a01679 6376
52ce6436
PH
6377 if (field_type_p != NULL)
6378 *field_type_p = NULL;
6379 if (byte_offset_p != NULL)
d5d6fca5 6380 *byte_offset_p = 0;
52ce6436
PH
6381 if (bit_offset_p != NULL)
6382 *bit_offset_p = 0;
6383 if (bit_size_p != NULL)
6384 *bit_size_p = 0;
6385
6386 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
6387 {
6388 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6389 int fld_offset = offset + bit_pos / 8;
6390 char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6391
4c4b4cd2
PH
6392 if (t_field_name == NULL)
6393 continue;
6394
52ce6436 6395 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
6396 {
6397 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6398
52ce6436
PH
6399 if (field_type_p != NULL)
6400 *field_type_p = TYPE_FIELD_TYPE (type, i);
6401 if (byte_offset_p != NULL)
6402 *byte_offset_p = fld_offset;
6403 if (bit_offset_p != NULL)
6404 *bit_offset_p = bit_pos % 8;
6405 if (bit_size_p != NULL)
6406 *bit_size_p = bit_size;
76a01679
JB
6407 return 1;
6408 }
4c4b4cd2
PH
6409 else if (ada_is_wrapper_field (type, i))
6410 {
52ce6436
PH
6411 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6412 field_type_p, byte_offset_p, bit_offset_p,
6413 bit_size_p, index_p))
76a01679
JB
6414 return 1;
6415 }
4c4b4cd2
PH
6416 else if (ada_is_variant_part (type, i))
6417 {
52ce6436
PH
6418 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6419 fixed type?? */
4c4b4cd2 6420 int j;
52ce6436
PH
6421 struct type *field_type
6422 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 6423
52ce6436 6424 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 6425 {
76a01679
JB
6426 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6427 fld_offset
6428 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6429 field_type_p, byte_offset_p,
52ce6436 6430 bit_offset_p, bit_size_p, index_p))
76a01679 6431 return 1;
4c4b4cd2
PH
6432 }
6433 }
52ce6436
PH
6434 else if (index_p != NULL)
6435 *index_p += 1;
4c4b4cd2
PH
6436 }
6437 return 0;
6438}
6439
0963b4bd 6440/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 6441
52ce6436
PH
6442static int
6443num_visible_fields (struct type *type)
6444{
6445 int n;
5b4ee69b 6446
52ce6436
PH
6447 n = 0;
6448 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6449 return n;
6450}
14f9c5c9 6451
4c4b4cd2 6452/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
6453 and search in it assuming it has (class) type TYPE.
6454 If found, return value, else return NULL.
6455
4c4b4cd2 6456 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 6457
4c4b4cd2 6458static struct value *
d2e4a39e 6459ada_search_struct_field (char *name, struct value *arg, int offset,
4c4b4cd2 6460 struct type *type)
14f9c5c9
AS
6461{
6462 int i;
14f9c5c9 6463
5b4ee69b 6464 type = ada_check_typedef (type);
52ce6436 6465 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9
AS
6466 {
6467 char *t_field_name = TYPE_FIELD_NAME (type, i);
6468
6469 if (t_field_name == NULL)
4c4b4cd2 6470 continue;
14f9c5c9
AS
6471
6472 else if (field_name_match (t_field_name, name))
4c4b4cd2 6473 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
6474
6475 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 6476 {
0963b4bd 6477 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
6478 ada_search_struct_field (name, arg,
6479 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6480 TYPE_FIELD_TYPE (type, i));
5b4ee69b 6481
4c4b4cd2
PH
6482 if (v != NULL)
6483 return v;
6484 }
14f9c5c9
AS
6485
6486 else if (ada_is_variant_part (type, i))
4c4b4cd2 6487 {
0963b4bd 6488 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 6489 int j;
5b4ee69b
MS
6490 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6491 i));
4c4b4cd2
PH
6492 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6493
52ce6436 6494 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 6495 {
0963b4bd
MS
6496 struct value *v = ada_search_struct_field /* Force line
6497 break. */
06d5cf63
JB
6498 (name, arg,
6499 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6500 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 6501
4c4b4cd2
PH
6502 if (v != NULL)
6503 return v;
6504 }
6505 }
14f9c5c9
AS
6506 }
6507 return NULL;
6508}
d2e4a39e 6509
52ce6436
PH
6510static struct value *ada_index_struct_field_1 (int *, struct value *,
6511 int, struct type *);
6512
6513
6514/* Return field #INDEX in ARG, where the index is that returned by
6515 * find_struct_field through its INDEX_P argument. Adjust the address
6516 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 6517 * If found, return value, else return NULL. */
52ce6436
PH
6518
6519static struct value *
6520ada_index_struct_field (int index, struct value *arg, int offset,
6521 struct type *type)
6522{
6523 return ada_index_struct_field_1 (&index, arg, offset, type);
6524}
6525
6526
6527/* Auxiliary function for ada_index_struct_field. Like
6528 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 6529 * *INDEX_P. */
52ce6436
PH
6530
6531static struct value *
6532ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6533 struct type *type)
6534{
6535 int i;
6536 type = ada_check_typedef (type);
6537
6538 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6539 {
6540 if (TYPE_FIELD_NAME (type, i) == NULL)
6541 continue;
6542 else if (ada_is_wrapper_field (type, i))
6543 {
0963b4bd 6544 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
6545 ada_index_struct_field_1 (index_p, arg,
6546 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6547 TYPE_FIELD_TYPE (type, i));
5b4ee69b 6548
52ce6436
PH
6549 if (v != NULL)
6550 return v;
6551 }
6552
6553 else if (ada_is_variant_part (type, i))
6554 {
6555 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 6556 find_struct_field. */
52ce6436
PH
6557 error (_("Cannot assign this kind of variant record"));
6558 }
6559 else if (*index_p == 0)
6560 return ada_value_primitive_field (arg, offset, i, type);
6561 else
6562 *index_p -= 1;
6563 }
6564 return NULL;
6565}
6566
4c4b4cd2
PH
6567/* Given ARG, a value of type (pointer or reference to a)*
6568 structure/union, extract the component named NAME from the ultimate
6569 target structure/union and return it as a value with its
f5938064 6570 appropriate type.
14f9c5c9 6571
4c4b4cd2
PH
6572 The routine searches for NAME among all members of the structure itself
6573 and (recursively) among all members of any wrapper members
14f9c5c9
AS
6574 (e.g., '_parent').
6575
03ee6b2e
PH
6576 If NO_ERR, then simply return NULL in case of error, rather than
6577 calling error. */
14f9c5c9 6578
d2e4a39e 6579struct value *
03ee6b2e 6580ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 6581{
4c4b4cd2 6582 struct type *t, *t1;
d2e4a39e 6583 struct value *v;
14f9c5c9 6584
4c4b4cd2 6585 v = NULL;
df407dfe 6586 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
6587 if (TYPE_CODE (t) == TYPE_CODE_REF)
6588 {
6589 t1 = TYPE_TARGET_TYPE (t);
6590 if (t1 == NULL)
03ee6b2e 6591 goto BadValue;
61ee279c 6592 t1 = ada_check_typedef (t1);
4c4b4cd2 6593 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 6594 {
994b9211 6595 arg = coerce_ref (arg);
76a01679
JB
6596 t = t1;
6597 }
4c4b4cd2 6598 }
14f9c5c9 6599
4c4b4cd2
PH
6600 while (TYPE_CODE (t) == TYPE_CODE_PTR)
6601 {
6602 t1 = TYPE_TARGET_TYPE (t);
6603 if (t1 == NULL)
03ee6b2e 6604 goto BadValue;
61ee279c 6605 t1 = ada_check_typedef (t1);
4c4b4cd2 6606 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
6607 {
6608 arg = value_ind (arg);
6609 t = t1;
6610 }
4c4b4cd2 6611 else
76a01679 6612 break;
4c4b4cd2 6613 }
14f9c5c9 6614
4c4b4cd2 6615 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 6616 goto BadValue;
14f9c5c9 6617
4c4b4cd2
PH
6618 if (t1 == t)
6619 v = ada_search_struct_field (name, arg, 0, t);
6620 else
6621 {
6622 int bit_offset, bit_size, byte_offset;
6623 struct type *field_type;
6624 CORE_ADDR address;
6625
76a01679
JB
6626 if (TYPE_CODE (t) == TYPE_CODE_PTR)
6627 address = value_as_address (arg);
4c4b4cd2 6628 else
0fd88904 6629 address = unpack_pointer (t, value_contents (arg));
14f9c5c9 6630
1ed6ede0 6631 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
6632 if (find_struct_field (name, t1, 0,
6633 &field_type, &byte_offset, &bit_offset,
52ce6436 6634 &bit_size, NULL))
76a01679
JB
6635 {
6636 if (bit_size != 0)
6637 {
714e53ab
PH
6638 if (TYPE_CODE (t) == TYPE_CODE_REF)
6639 arg = ada_coerce_ref (arg);
6640 else
6641 arg = ada_value_ind (arg);
76a01679
JB
6642 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6643 bit_offset, bit_size,
6644 field_type);
6645 }
6646 else
f5938064 6647 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
6648 }
6649 }
6650
03ee6b2e
PH
6651 if (v != NULL || no_err)
6652 return v;
6653 else
323e0a4a 6654 error (_("There is no member named %s."), name);
14f9c5c9 6655
03ee6b2e
PH
6656 BadValue:
6657 if (no_err)
6658 return NULL;
6659 else
0963b4bd
MS
6660 error (_("Attempt to extract a component of "
6661 "a value that is not a record."));
14f9c5c9
AS
6662}
6663
6664/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
6665 If DISPP is non-null, add its byte displacement from the beginning of a
6666 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
6667 work for packed fields).
6668
6669 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 6670 followed by "___".
14f9c5c9 6671
0963b4bd 6672 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
6673 be a (pointer or reference)+ to a struct or union, and the
6674 ultimate target type will be searched.
14f9c5c9
AS
6675
6676 Looks recursively into variant clauses and parent types.
6677
4c4b4cd2
PH
6678 If NOERR is nonzero, return NULL if NAME is not suitably defined or
6679 TYPE is not a type of the right kind. */
14f9c5c9 6680
4c4b4cd2 6681static struct type *
76a01679
JB
6682ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6683 int noerr, int *dispp)
14f9c5c9
AS
6684{
6685 int i;
6686
6687 if (name == NULL)
6688 goto BadName;
6689
76a01679 6690 if (refok && type != NULL)
4c4b4cd2
PH
6691 while (1)
6692 {
61ee279c 6693 type = ada_check_typedef (type);
76a01679
JB
6694 if (TYPE_CODE (type) != TYPE_CODE_PTR
6695 && TYPE_CODE (type) != TYPE_CODE_REF)
6696 break;
6697 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 6698 }
14f9c5c9 6699
76a01679 6700 if (type == NULL
1265e4aa
JB
6701 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6702 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 6703 {
4c4b4cd2 6704 if (noerr)
76a01679 6705 return NULL;
4c4b4cd2 6706 else
76a01679
JB
6707 {
6708 target_terminal_ours ();
6709 gdb_flush (gdb_stdout);
323e0a4a
AC
6710 if (type == NULL)
6711 error (_("Type (null) is not a structure or union type"));
6712 else
6713 {
6714 /* XXX: type_sprint */
6715 fprintf_unfiltered (gdb_stderr, _("Type "));
6716 type_print (type, "", gdb_stderr, -1);
6717 error (_(" is not a structure or union type"));
6718 }
76a01679 6719 }
14f9c5c9
AS
6720 }
6721
6722 type = to_static_fixed_type (type);
6723
6724 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6725 {
6726 char *t_field_name = TYPE_FIELD_NAME (type, i);
6727 struct type *t;
6728 int disp;
d2e4a39e 6729
14f9c5c9 6730 if (t_field_name == NULL)
4c4b4cd2 6731 continue;
14f9c5c9
AS
6732
6733 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
6734 {
6735 if (dispp != NULL)
6736 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
61ee279c 6737 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 6738 }
14f9c5c9
AS
6739
6740 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
6741 {
6742 disp = 0;
6743 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6744 0, 1, &disp);
6745 if (t != NULL)
6746 {
6747 if (dispp != NULL)
6748 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6749 return t;
6750 }
6751 }
14f9c5c9
AS
6752
6753 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
6754 {
6755 int j;
5b4ee69b
MS
6756 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6757 i));
4c4b4cd2
PH
6758
6759 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6760 {
b1f33ddd
JB
6761 /* FIXME pnh 2008/01/26: We check for a field that is
6762 NOT wrapped in a struct, since the compiler sometimes
6763 generates these for unchecked variant types. Revisit
0963b4bd 6764 if the compiler changes this practice. */
b1f33ddd 6765 char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 6766 disp = 0;
b1f33ddd
JB
6767 if (v_field_name != NULL
6768 && field_name_match (v_field_name, name))
6769 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
6770 else
0963b4bd
MS
6771 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
6772 j),
b1f33ddd
JB
6773 name, 0, 1, &disp);
6774
4c4b4cd2
PH
6775 if (t != NULL)
6776 {
6777 if (dispp != NULL)
6778 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6779 return t;
6780 }
6781 }
6782 }
14f9c5c9
AS
6783
6784 }
6785
6786BadName:
d2e4a39e 6787 if (!noerr)
14f9c5c9
AS
6788 {
6789 target_terminal_ours ();
6790 gdb_flush (gdb_stdout);
323e0a4a
AC
6791 if (name == NULL)
6792 {
6793 /* XXX: type_sprint */
6794 fprintf_unfiltered (gdb_stderr, _("Type "));
6795 type_print (type, "", gdb_stderr, -1);
6796 error (_(" has no component named <null>"));
6797 }
6798 else
6799 {
6800 /* XXX: type_sprint */
6801 fprintf_unfiltered (gdb_stderr, _("Type "));
6802 type_print (type, "", gdb_stderr, -1);
6803 error (_(" has no component named %s"), name);
6804 }
14f9c5c9
AS
6805 }
6806
6807 return NULL;
6808}
6809
b1f33ddd
JB
6810/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6811 within a value of type OUTER_TYPE, return true iff VAR_TYPE
6812 represents an unchecked union (that is, the variant part of a
0963b4bd 6813 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
6814
6815static int
6816is_unchecked_variant (struct type *var_type, struct type *outer_type)
6817{
6818 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 6819
b1f33ddd
JB
6820 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
6821 == NULL);
6822}
6823
6824
14f9c5c9
AS
6825/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6826 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
6827 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6828 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 6829
d2e4a39e 6830int
ebf56fd3 6831ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 6832 const gdb_byte *outer_valaddr)
14f9c5c9
AS
6833{
6834 int others_clause;
6835 int i;
d2e4a39e 6836 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
6837 struct value *outer;
6838 struct value *discrim;
14f9c5c9
AS
6839 LONGEST discrim_val;
6840
0c281816
JB
6841 outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6842 discrim = ada_value_struct_elt (outer, discrim_name, 1);
6843 if (discrim == NULL)
14f9c5c9 6844 return -1;
0c281816 6845 discrim_val = value_as_long (discrim);
14f9c5c9
AS
6846
6847 others_clause = -1;
6848 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6849 {
6850 if (ada_is_others_clause (var_type, i))
4c4b4cd2 6851 others_clause = i;
14f9c5c9 6852 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 6853 return i;
14f9c5c9
AS
6854 }
6855
6856 return others_clause;
6857}
d2e4a39e 6858\f
14f9c5c9
AS
6859
6860
4c4b4cd2 6861 /* Dynamic-Sized Records */
14f9c5c9
AS
6862
6863/* Strategy: The type ostensibly attached to a value with dynamic size
6864 (i.e., a size that is not statically recorded in the debugging
6865 data) does not accurately reflect the size or layout of the value.
6866 Our strategy is to convert these values to values with accurate,
4c4b4cd2 6867 conventional types that are constructed on the fly. */
14f9c5c9
AS
6868
6869/* There is a subtle and tricky problem here. In general, we cannot
6870 determine the size of dynamic records without its data. However,
6871 the 'struct value' data structure, which GDB uses to represent
6872 quantities in the inferior process (the target), requires the size
6873 of the type at the time of its allocation in order to reserve space
6874 for GDB's internal copy of the data. That's why the
6875 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 6876 rather than struct value*s.
14f9c5c9
AS
6877
6878 However, GDB's internal history variables ($1, $2, etc.) are
6879 struct value*s containing internal copies of the data that are not, in
6880 general, the same as the data at their corresponding addresses in
6881 the target. Fortunately, the types we give to these values are all
6882 conventional, fixed-size types (as per the strategy described
6883 above), so that we don't usually have to perform the
6884 'to_fixed_xxx_type' conversions to look at their values.
6885 Unfortunately, there is one exception: if one of the internal
6886 history variables is an array whose elements are unconstrained
6887 records, then we will need to create distinct fixed types for each
6888 element selected. */
6889
6890/* The upshot of all of this is that many routines take a (type, host
6891 address, target address) triple as arguments to represent a value.
6892 The host address, if non-null, is supposed to contain an internal
6893 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 6894 target at the target address. */
14f9c5c9
AS
6895
6896/* Assuming that VAL0 represents a pointer value, the result of
6897 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 6898 dynamic-sized types. */
14f9c5c9 6899
d2e4a39e
AS
6900struct value *
6901ada_value_ind (struct value *val0)
14f9c5c9 6902{
d2e4a39e 6903 struct value *val = unwrap_value (value_ind (val0));
5b4ee69b 6904
4c4b4cd2 6905 return ada_to_fixed_value (val);
14f9c5c9
AS
6906}
6907
6908/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
6909 qualifiers on VAL0. */
6910
d2e4a39e
AS
6911static struct value *
6912ada_coerce_ref (struct value *val0)
6913{
df407dfe 6914 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
6915 {
6916 struct value *val = val0;
5b4ee69b 6917
994b9211 6918 val = coerce_ref (val);
d2e4a39e 6919 val = unwrap_value (val);
4c4b4cd2 6920 return ada_to_fixed_value (val);
d2e4a39e
AS
6921 }
6922 else
14f9c5c9
AS
6923 return val0;
6924}
6925
6926/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 6927 ALIGNMENT (a power of 2). */
14f9c5c9
AS
6928
6929static unsigned int
ebf56fd3 6930align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
6931{
6932 return (off + alignment - 1) & ~(alignment - 1);
6933}
6934
4c4b4cd2 6935/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
6936
6937static unsigned int
ebf56fd3 6938field_alignment (struct type *type, int f)
14f9c5c9 6939{
d2e4a39e 6940 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 6941 int len;
14f9c5c9
AS
6942 int align_offset;
6943
64a1bf19
JB
6944 /* The field name should never be null, unless the debugging information
6945 is somehow malformed. In this case, we assume the field does not
6946 require any alignment. */
6947 if (name == NULL)
6948 return 1;
6949
6950 len = strlen (name);
6951
4c4b4cd2
PH
6952 if (!isdigit (name[len - 1]))
6953 return 1;
14f9c5c9 6954
d2e4a39e 6955 if (isdigit (name[len - 2]))
14f9c5c9
AS
6956 align_offset = len - 2;
6957 else
6958 align_offset = len - 1;
6959
4c4b4cd2 6960 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
14f9c5c9
AS
6961 return TARGET_CHAR_BIT;
6962
4c4b4cd2
PH
6963 return atoi (name + align_offset) * TARGET_CHAR_BIT;
6964}
6965
6966/* Find a symbol named NAME. Ignores ambiguity. */
6967
6968struct symbol *
6969ada_find_any_symbol (const char *name)
6970{
6971 struct symbol *sym;
6972
6973 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6974 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6975 return sym;
6976
6977 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6978 return sym;
14f9c5c9
AS
6979}
6980
dddfab26
UW
6981/* Find a type named NAME. Ignores ambiguity. This routine will look
6982 solely for types defined by debug info, it will not search the GDB
6983 primitive types. */
4c4b4cd2 6984
d2e4a39e 6985struct type *
ebf56fd3 6986ada_find_any_type (const char *name)
14f9c5c9 6987{
4c4b4cd2 6988 struct symbol *sym = ada_find_any_symbol (name);
14f9c5c9 6989
14f9c5c9 6990 if (sym != NULL)
dddfab26 6991 return SYMBOL_TYPE (sym);
14f9c5c9 6992
dddfab26 6993 return NULL;
14f9c5c9
AS
6994}
6995
aeb5907d
JB
6996/* Given NAME and an associated BLOCK, search all symbols for
6997 NAME suffixed with "___XR", which is the ``renaming'' symbol
4c4b4cd2
PH
6998 associated to NAME. Return this symbol if found, return
6999 NULL otherwise. */
7000
7001struct symbol *
7002ada_find_renaming_symbol (const char *name, struct block *block)
aeb5907d
JB
7003{
7004 struct symbol *sym;
7005
7006 sym = find_old_style_renaming_symbol (name, block);
7007
7008 if (sym != NULL)
7009 return sym;
7010
0963b4bd 7011 /* Not right yet. FIXME pnh 7/20/2007. */
aeb5907d
JB
7012 sym = ada_find_any_symbol (name);
7013 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
7014 return sym;
7015 else
7016 return NULL;
7017}
7018
7019static struct symbol *
7020find_old_style_renaming_symbol (const char *name, struct block *block)
4c4b4cd2 7021{
7f0df278 7022 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
7023 char *rename;
7024
7025 if (function_sym != NULL)
7026 {
7027 /* If the symbol is defined inside a function, NAME is not fully
7028 qualified. This means we need to prepend the function name
7029 as well as adding the ``___XR'' suffix to build the name of
7030 the associated renaming symbol. */
7031 char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
7032 /* Function names sometimes contain suffixes used
7033 for instance to qualify nested subprograms. When building
7034 the XR type name, we need to make sure that this suffix is
7035 not included. So do not include any suffix in the function
7036 name length below. */
69fadcdf 7037 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
7038 const int rename_len = function_name_len + 2 /* "__" */
7039 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 7040
529cad9c 7041 /* Strip the suffix if necessary. */
69fadcdf
JB
7042 ada_remove_trailing_digits (function_name, &function_name_len);
7043 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
7044 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 7045
4c4b4cd2
PH
7046 /* Library-level functions are a special case, as GNAT adds
7047 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 7048 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
7049 have this prefix, so we need to skip this prefix if present. */
7050 if (function_name_len > 5 /* "_ada_" */
7051 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
7052 {
7053 function_name += 5;
7054 function_name_len -= 5;
7055 }
4c4b4cd2
PH
7056
7057 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
7058 strncpy (rename, function_name, function_name_len);
7059 xsnprintf (rename + function_name_len, rename_len - function_name_len,
7060 "__%s___XR", name);
4c4b4cd2
PH
7061 }
7062 else
7063 {
7064 const int rename_len = strlen (name) + 6;
5b4ee69b 7065
4c4b4cd2 7066 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 7067 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
7068 }
7069
7070 return ada_find_any_symbol (rename);
7071}
7072
14f9c5c9 7073/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7074 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7075 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7076 otherwise return 0. */
7077
14f9c5c9 7078int
d2e4a39e 7079ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7080{
7081 if (type1 == NULL)
7082 return 1;
7083 else if (type0 == NULL)
7084 return 0;
7085 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
7086 return 1;
7087 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
7088 return 0;
4c4b4cd2
PH
7089 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
7090 return 1;
ad82864c 7091 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7092 return 1;
4c4b4cd2
PH
7093 else if (ada_is_array_descriptor_type (type0)
7094 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7095 return 1;
aeb5907d
JB
7096 else
7097 {
7098 const char *type0_name = type_name_no_tag (type0);
7099 const char *type1_name = type_name_no_tag (type1);
7100
7101 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7102 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7103 return 1;
7104 }
14f9c5c9
AS
7105 return 0;
7106}
7107
7108/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
7109 null, its TYPE_TAG_NAME. Null if TYPE is null. */
7110
d2e4a39e
AS
7111char *
7112ada_type_name (struct type *type)
14f9c5c9 7113{
d2e4a39e 7114 if (type == NULL)
14f9c5c9
AS
7115 return NULL;
7116 else if (TYPE_NAME (type) != NULL)
7117 return TYPE_NAME (type);
7118 else
7119 return TYPE_TAG_NAME (type);
7120}
7121
b4ba55a1
JB
7122/* Search the list of "descriptive" types associated to TYPE for a type
7123 whose name is NAME. */
7124
7125static struct type *
7126find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7127{
7128 struct type *result;
7129
7130 /* If there no descriptive-type info, then there is no parallel type
7131 to be found. */
7132 if (!HAVE_GNAT_AUX_INFO (type))
7133 return NULL;
7134
7135 result = TYPE_DESCRIPTIVE_TYPE (type);
7136 while (result != NULL)
7137 {
7138 char *result_name = ada_type_name (result);
7139
7140 if (result_name == NULL)
7141 {
7142 warning (_("unexpected null name on descriptive type"));
7143 return NULL;
7144 }
7145
7146 /* If the names match, stop. */
7147 if (strcmp (result_name, name) == 0)
7148 break;
7149
7150 /* Otherwise, look at the next item on the list, if any. */
7151 if (HAVE_GNAT_AUX_INFO (result))
7152 result = TYPE_DESCRIPTIVE_TYPE (result);
7153 else
7154 result = NULL;
7155 }
7156
7157 /* If we didn't find a match, see whether this is a packed array. With
7158 older compilers, the descriptive type information is either absent or
7159 irrelevant when it comes to packed arrays so the above lookup fails.
7160 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7161 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7162 return ada_find_any_type (name);
7163
7164 return result;
7165}
7166
7167/* Find a parallel type to TYPE with the specified NAME, using the
7168 descriptive type taken from the debugging information, if available,
7169 and otherwise using the (slower) name-based method. */
7170
7171static struct type *
7172ada_find_parallel_type_with_name (struct type *type, const char *name)
7173{
7174 struct type *result = NULL;
7175
7176 if (HAVE_GNAT_AUX_INFO (type))
7177 result = find_parallel_type_by_descriptive_type (type, name);
7178 else
7179 result = ada_find_any_type (name);
7180
7181 return result;
7182}
7183
7184/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7185 SUFFIX to the name of TYPE. */
14f9c5c9 7186
d2e4a39e 7187struct type *
ebf56fd3 7188ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7189{
b4ba55a1 7190 char *name, *typename = ada_type_name (type);
14f9c5c9 7191 int len;
d2e4a39e 7192
14f9c5c9
AS
7193 if (typename == NULL)
7194 return NULL;
7195
7196 len = strlen (typename);
7197
b4ba55a1 7198 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9
AS
7199
7200 strcpy (name, typename);
7201 strcpy (name + len, suffix);
7202
b4ba55a1 7203 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7204}
7205
14f9c5c9 7206/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7207 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7208
d2e4a39e
AS
7209static struct type *
7210dynamic_template_type (struct type *type)
14f9c5c9 7211{
61ee279c 7212 type = ada_check_typedef (type);
14f9c5c9
AS
7213
7214 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 7215 || ada_type_name (type) == NULL)
14f9c5c9 7216 return NULL;
d2e4a39e 7217 else
14f9c5c9
AS
7218 {
7219 int len = strlen (ada_type_name (type));
5b4ee69b 7220
4c4b4cd2
PH
7221 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7222 return type;
14f9c5c9 7223 else
4c4b4cd2 7224 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7225 }
7226}
7227
7228/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7229 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7230
d2e4a39e
AS
7231static int
7232is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7233{
7234 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7235
d2e4a39e 7236 return name != NULL
14f9c5c9
AS
7237 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
7238 && strstr (name, "___XVL") != NULL;
7239}
7240
4c4b4cd2
PH
7241/* The index of the variant field of TYPE, or -1 if TYPE does not
7242 represent a variant record type. */
14f9c5c9 7243
d2e4a39e 7244static int
4c4b4cd2 7245variant_field_index (struct type *type)
14f9c5c9
AS
7246{
7247 int f;
7248
4c4b4cd2
PH
7249 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
7250 return -1;
7251
7252 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
7253 {
7254 if (ada_is_variant_part (type, f))
7255 return f;
7256 }
7257 return -1;
14f9c5c9
AS
7258}
7259
4c4b4cd2
PH
7260/* A record type with no fields. */
7261
d2e4a39e 7262static struct type *
e9bb382b 7263empty_record (struct type *template)
14f9c5c9 7264{
e9bb382b 7265 struct type *type = alloc_type_copy (template);
5b4ee69b 7266
14f9c5c9
AS
7267 TYPE_CODE (type) = TYPE_CODE_STRUCT;
7268 TYPE_NFIELDS (type) = 0;
7269 TYPE_FIELDS (type) = NULL;
b1f33ddd 7270 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
7271 TYPE_NAME (type) = "<empty>";
7272 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
7273 TYPE_LENGTH (type) = 0;
7274 return type;
7275}
7276
7277/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7278 the value of type TYPE at VALADDR or ADDRESS (see comments at
7279 the beginning of this section) VAL according to GNAT conventions.
7280 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7281 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7282 an outer-level type (i.e., as opposed to a branch of a variant.) A
7283 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7284 of the variant.
14f9c5c9 7285
4c4b4cd2
PH
7286 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7287 length are not statically known are discarded. As a consequence,
7288 VALADDR, ADDRESS and DVAL0 are ignored.
7289
7290 NOTE: Limitations: For now, we assume that dynamic fields and
7291 variants occupy whole numbers of bytes. However, they need not be
7292 byte-aligned. */
7293
7294struct type *
10a2c479 7295ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7296 const gdb_byte *valaddr,
4c4b4cd2
PH
7297 CORE_ADDR address, struct value *dval0,
7298 int keep_dynamic_fields)
14f9c5c9 7299{
d2e4a39e
AS
7300 struct value *mark = value_mark ();
7301 struct value *dval;
7302 struct type *rtype;
14f9c5c9 7303 int nfields, bit_len;
4c4b4cd2 7304 int variant_field;
14f9c5c9 7305 long off;
d94e4f4f 7306 int fld_bit_len;
14f9c5c9
AS
7307 int f;
7308
4c4b4cd2
PH
7309 /* Compute the number of fields in this record type that are going
7310 to be processed: unless keep_dynamic_fields, this includes only
7311 fields whose position and length are static will be processed. */
7312 if (keep_dynamic_fields)
7313 nfields = TYPE_NFIELDS (type);
7314 else
7315 {
7316 nfields = 0;
76a01679 7317 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
7318 && !ada_is_variant_part (type, nfields)
7319 && !is_dynamic_field (type, nfields))
7320 nfields++;
7321 }
7322
e9bb382b 7323 rtype = alloc_type_copy (type);
14f9c5c9
AS
7324 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
7325 INIT_CPLUS_SPECIFIC (rtype);
7326 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 7327 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
7328 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7329 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
7330 TYPE_NAME (rtype) = ada_type_name (type);
7331 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7332 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 7333
d2e4a39e
AS
7334 off = 0;
7335 bit_len = 0;
4c4b4cd2
PH
7336 variant_field = -1;
7337
14f9c5c9
AS
7338 for (f = 0; f < nfields; f += 1)
7339 {
6c038f32
PH
7340 off = align_value (off, field_alignment (type, f))
7341 + TYPE_FIELD_BITPOS (type, f);
14f9c5c9 7342 TYPE_FIELD_BITPOS (rtype, f) = off;
d2e4a39e 7343 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7344
d2e4a39e 7345 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
7346 {
7347 variant_field = f;
d94e4f4f 7348 fld_bit_len = 0;
4c4b4cd2 7349 }
14f9c5c9 7350 else if (is_dynamic_field (type, f))
4c4b4cd2 7351 {
284614f0
JB
7352 const gdb_byte *field_valaddr = valaddr;
7353 CORE_ADDR field_address = address;
7354 struct type *field_type =
7355 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
7356
4c4b4cd2 7357 if (dval0 == NULL)
b5304971
JG
7358 {
7359 /* rtype's length is computed based on the run-time
7360 value of discriminants. If the discriminants are not
7361 initialized, the type size may be completely bogus and
0963b4bd 7362 GDB may fail to allocate a value for it. So check the
b5304971
JG
7363 size first before creating the value. */
7364 check_size (rtype);
7365 dval = value_from_contents_and_address (rtype, valaddr, address);
7366 }
4c4b4cd2
PH
7367 else
7368 dval = dval0;
7369
284614f0
JB
7370 /* If the type referenced by this field is an aligner type, we need
7371 to unwrap that aligner type, because its size might not be set.
7372 Keeping the aligner type would cause us to compute the wrong
7373 size for this field, impacting the offset of the all the fields
7374 that follow this one. */
7375 if (ada_is_aligner_type (field_type))
7376 {
7377 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7378
7379 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7380 field_address = cond_offset_target (field_address, field_offset);
7381 field_type = ada_aligned_type (field_type);
7382 }
7383
7384 field_valaddr = cond_offset_host (field_valaddr,
7385 off / TARGET_CHAR_BIT);
7386 field_address = cond_offset_target (field_address,
7387 off / TARGET_CHAR_BIT);
7388
7389 /* Get the fixed type of the field. Note that, in this case,
7390 we do not want to get the real type out of the tag: if
7391 the current field is the parent part of a tagged record,
7392 we will get the tag of the object. Clearly wrong: the real
7393 type of the parent is not the real type of the child. We
7394 would end up in an infinite loop. */
7395 field_type = ada_get_base_type (field_type);
7396 field_type = ada_to_fixed_type (field_type, field_valaddr,
7397 field_address, dval, 0);
27f2a97b
JB
7398 /* If the field size is already larger than the maximum
7399 object size, then the record itself will necessarily
7400 be larger than the maximum object size. We need to make
7401 this check now, because the size might be so ridiculously
7402 large (due to an uninitialized variable in the inferior)
7403 that it would cause an overflow when adding it to the
7404 record size. */
7405 check_size (field_type);
284614f0
JB
7406
7407 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 7408 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
7409 /* The multiplication can potentially overflow. But because
7410 the field length has been size-checked just above, and
7411 assuming that the maximum size is a reasonable value,
7412 an overflow should not happen in practice. So rather than
7413 adding overflow recovery code to this already complex code,
7414 we just assume that it's not going to happen. */
d94e4f4f 7415 fld_bit_len =
4c4b4cd2
PH
7416 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7417 }
14f9c5c9 7418 else
4c4b4cd2 7419 {
9f0dec2d
JB
7420 struct type *field_type = TYPE_FIELD_TYPE (type, f);
7421
720d1a40
JB
7422 /* If our field is a typedef type (most likely a typedef of
7423 a fat pointer, encoding an array access), then we need to
7424 look at its target type to determine its characteristics.
7425 In particular, we would miscompute the field size if we took
7426 the size of the typedef (zero), instead of the size of
7427 the target type. */
7428 if (TYPE_CODE (field_type) == TYPE_CODE_TYPEDEF)
7429 field_type = ada_typedef_target_type (field_type);
7430
9f0dec2d 7431 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2
PH
7432 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7433 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 7434 fld_bit_len =
4c4b4cd2
PH
7435 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7436 else
d94e4f4f 7437 fld_bit_len =
9f0dec2d 7438 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
4c4b4cd2 7439 }
14f9c5c9 7440 if (off + fld_bit_len > bit_len)
4c4b4cd2 7441 bit_len = off + fld_bit_len;
d94e4f4f 7442 off += fld_bit_len;
4c4b4cd2
PH
7443 TYPE_LENGTH (rtype) =
7444 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7445 }
4c4b4cd2
PH
7446
7447 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7448 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7449 the record. This can happen in the presence of representation
7450 clauses. */
7451 if (variant_field >= 0)
7452 {
7453 struct type *branch_type;
7454
7455 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7456
7457 if (dval0 == NULL)
7458 dval = value_from_contents_and_address (rtype, valaddr, address);
7459 else
7460 dval = dval0;
7461
7462 branch_type =
7463 to_fixed_variant_branch_type
7464 (TYPE_FIELD_TYPE (type, variant_field),
7465 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7466 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7467 if (branch_type == NULL)
7468 {
7469 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
7470 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7471 TYPE_NFIELDS (rtype) -= 1;
7472 }
7473 else
7474 {
7475 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7476 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7477 fld_bit_len =
7478 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7479 TARGET_CHAR_BIT;
7480 if (off + fld_bit_len > bit_len)
7481 bit_len = off + fld_bit_len;
7482 TYPE_LENGTH (rtype) =
7483 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7484 }
7485 }
7486
714e53ab
PH
7487 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7488 should contain the alignment of that record, which should be a strictly
7489 positive value. If null or negative, then something is wrong, most
7490 probably in the debug info. In that case, we don't round up the size
0963b4bd 7491 of the resulting type. If this record is not part of another structure,
714e53ab
PH
7492 the current RTYPE length might be good enough for our purposes. */
7493 if (TYPE_LENGTH (type) <= 0)
7494 {
323e0a4a
AC
7495 if (TYPE_NAME (rtype))
7496 warning (_("Invalid type size for `%s' detected: %d."),
7497 TYPE_NAME (rtype), TYPE_LENGTH (type));
7498 else
7499 warning (_("Invalid type size for <unnamed> detected: %d."),
7500 TYPE_LENGTH (type));
714e53ab
PH
7501 }
7502 else
7503 {
7504 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7505 TYPE_LENGTH (type));
7506 }
14f9c5c9
AS
7507
7508 value_free_to_mark (mark);
d2e4a39e 7509 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 7510 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7511 return rtype;
7512}
7513
4c4b4cd2
PH
7514/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7515 of 1. */
14f9c5c9 7516
d2e4a39e 7517static struct type *
fc1a4b47 7518template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
7519 CORE_ADDR address, struct value *dval0)
7520{
7521 return ada_template_to_fixed_record_type_1 (type, valaddr,
7522 address, dval0, 1);
7523}
7524
7525/* An ordinary record type in which ___XVL-convention fields and
7526 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7527 static approximations, containing all possible fields. Uses
7528 no runtime values. Useless for use in values, but that's OK,
7529 since the results are used only for type determinations. Works on both
7530 structs and unions. Representation note: to save space, we memorize
7531 the result of this function in the TYPE_TARGET_TYPE of the
7532 template type. */
7533
7534static struct type *
7535template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
7536{
7537 struct type *type;
7538 int nfields;
7539 int f;
7540
4c4b4cd2
PH
7541 if (TYPE_TARGET_TYPE (type0) != NULL)
7542 return TYPE_TARGET_TYPE (type0);
7543
7544 nfields = TYPE_NFIELDS (type0);
7545 type = type0;
14f9c5c9
AS
7546
7547 for (f = 0; f < nfields; f += 1)
7548 {
61ee279c 7549 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
4c4b4cd2 7550 struct type *new_type;
14f9c5c9 7551
4c4b4cd2
PH
7552 if (is_dynamic_field (type0, f))
7553 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
14f9c5c9 7554 else
f192137b 7555 new_type = static_unwrap_type (field_type);
4c4b4cd2
PH
7556 if (type == type0 && new_type != field_type)
7557 {
e9bb382b 7558 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
4c4b4cd2
PH
7559 TYPE_CODE (type) = TYPE_CODE (type0);
7560 INIT_CPLUS_SPECIFIC (type);
7561 TYPE_NFIELDS (type) = nfields;
7562 TYPE_FIELDS (type) = (struct field *)
7563 TYPE_ALLOC (type, nfields * sizeof (struct field));
7564 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7565 sizeof (struct field) * nfields);
7566 TYPE_NAME (type) = ada_type_name (type0);
7567 TYPE_TAG_NAME (type) = NULL;
876cecd0 7568 TYPE_FIXED_INSTANCE (type) = 1;
4c4b4cd2
PH
7569 TYPE_LENGTH (type) = 0;
7570 }
7571 TYPE_FIELD_TYPE (type, f) = new_type;
7572 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
14f9c5c9 7573 }
14f9c5c9
AS
7574 return type;
7575}
7576
4c4b4cd2 7577/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
7578 whose address in memory is ADDRESS, returns a revision of TYPE,
7579 which should be a non-dynamic-sized record, in which the variant
7580 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
7581 for discriminant values in DVAL0, which can be NULL if the record
7582 contains the necessary discriminant values. */
7583
d2e4a39e 7584static struct type *
fc1a4b47 7585to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 7586 CORE_ADDR address, struct value *dval0)
14f9c5c9 7587{
d2e4a39e 7588 struct value *mark = value_mark ();
4c4b4cd2 7589 struct value *dval;
d2e4a39e 7590 struct type *rtype;
14f9c5c9
AS
7591 struct type *branch_type;
7592 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 7593 int variant_field = variant_field_index (type);
14f9c5c9 7594
4c4b4cd2 7595 if (variant_field == -1)
14f9c5c9
AS
7596 return type;
7597
4c4b4cd2
PH
7598 if (dval0 == NULL)
7599 dval = value_from_contents_and_address (type, valaddr, address);
7600 else
7601 dval = dval0;
7602
e9bb382b 7603 rtype = alloc_type_copy (type);
14f9c5c9 7604 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
7605 INIT_CPLUS_SPECIFIC (rtype);
7606 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
7607 TYPE_FIELDS (rtype) =
7608 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7609 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 7610 sizeof (struct field) * nfields);
14f9c5c9
AS
7611 TYPE_NAME (rtype) = ada_type_name (type);
7612 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7613 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
7614 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7615
4c4b4cd2
PH
7616 branch_type = to_fixed_variant_branch_type
7617 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 7618 cond_offset_host (valaddr,
4c4b4cd2
PH
7619 TYPE_FIELD_BITPOS (type, variant_field)
7620 / TARGET_CHAR_BIT),
d2e4a39e 7621 cond_offset_target (address,
4c4b4cd2
PH
7622 TYPE_FIELD_BITPOS (type, variant_field)
7623 / TARGET_CHAR_BIT), dval);
d2e4a39e 7624 if (branch_type == NULL)
14f9c5c9 7625 {
4c4b4cd2 7626 int f;
5b4ee69b 7627
4c4b4cd2
PH
7628 for (f = variant_field + 1; f < nfields; f += 1)
7629 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 7630 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
7631 }
7632 else
7633 {
4c4b4cd2
PH
7634 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7635 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7636 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 7637 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 7638 }
4c4b4cd2 7639 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 7640
4c4b4cd2 7641 value_free_to_mark (mark);
14f9c5c9
AS
7642 return rtype;
7643}
7644
7645/* An ordinary record type (with fixed-length fields) that describes
7646 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7647 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
7648 should be in DVAL, a record value; it may be NULL if the object
7649 at ADDR itself contains any necessary discriminant values.
7650 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7651 values from the record are needed. Except in the case that DVAL,
7652 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7653 unchecked) is replaced by a particular branch of the variant.
7654
7655 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7656 is questionable and may be removed. It can arise during the
7657 processing of an unconstrained-array-of-record type where all the
7658 variant branches have exactly the same size. This is because in
7659 such cases, the compiler does not bother to use the XVS convention
7660 when encoding the record. I am currently dubious of this
7661 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 7662
d2e4a39e 7663static struct type *
fc1a4b47 7664to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 7665 CORE_ADDR address, struct value *dval)
14f9c5c9 7666{
d2e4a39e 7667 struct type *templ_type;
14f9c5c9 7668
876cecd0 7669 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
7670 return type0;
7671
d2e4a39e 7672 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
7673
7674 if (templ_type != NULL)
7675 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
7676 else if (variant_field_index (type0) >= 0)
7677 {
7678 if (dval == NULL && valaddr == NULL && address == 0)
7679 return type0;
7680 return to_record_with_fixed_variant_part (type0, valaddr, address,
7681 dval);
7682 }
14f9c5c9
AS
7683 else
7684 {
876cecd0 7685 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
7686 return type0;
7687 }
7688
7689}
7690
7691/* An ordinary record type (with fixed-length fields) that describes
7692 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7693 union type. Any necessary discriminants' values should be in DVAL,
7694 a record value. That is, this routine selects the appropriate
7695 branch of the union at ADDR according to the discriminant value
b1f33ddd 7696 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 7697 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 7698
d2e4a39e 7699static struct type *
fc1a4b47 7700to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 7701 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
7702{
7703 int which;
d2e4a39e
AS
7704 struct type *templ_type;
7705 struct type *var_type;
14f9c5c9
AS
7706
7707 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7708 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 7709 else
14f9c5c9
AS
7710 var_type = var_type0;
7711
7712 templ_type = ada_find_parallel_type (var_type, "___XVU");
7713
7714 if (templ_type != NULL)
7715 var_type = templ_type;
7716
b1f33ddd
JB
7717 if (is_unchecked_variant (var_type, value_type (dval)))
7718 return var_type0;
d2e4a39e
AS
7719 which =
7720 ada_which_variant_applies (var_type,
0fd88904 7721 value_type (dval), value_contents (dval));
14f9c5c9
AS
7722
7723 if (which < 0)
e9bb382b 7724 return empty_record (var_type);
14f9c5c9 7725 else if (is_dynamic_field (var_type, which))
4c4b4cd2 7726 return to_fixed_record_type
d2e4a39e
AS
7727 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7728 valaddr, address, dval);
4c4b4cd2 7729 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
7730 return
7731 to_fixed_record_type
7732 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
7733 else
7734 return TYPE_FIELD_TYPE (var_type, which);
7735}
7736
7737/* Assuming that TYPE0 is an array type describing the type of a value
7738 at ADDR, and that DVAL describes a record containing any
7739 discriminants used in TYPE0, returns a type for the value that
7740 contains no dynamic components (that is, no components whose sizes
7741 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
7742 true, gives an error message if the resulting type's size is over
4c4b4cd2 7743 varsize_limit. */
14f9c5c9 7744
d2e4a39e
AS
7745static struct type *
7746to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 7747 int ignore_too_big)
14f9c5c9 7748{
d2e4a39e
AS
7749 struct type *index_type_desc;
7750 struct type *result;
ad82864c 7751 int constrained_packed_array_p;
14f9c5c9 7752
b0dd7688 7753 type0 = ada_check_typedef (type0);
284614f0 7754 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 7755 return type0;
14f9c5c9 7756
ad82864c
JB
7757 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
7758 if (constrained_packed_array_p)
7759 type0 = decode_constrained_packed_array_type (type0);
284614f0 7760
14f9c5c9 7761 index_type_desc = ada_find_parallel_type (type0, "___XA");
28c85d6c 7762 ada_fixup_array_indexes_type (index_type_desc);
14f9c5c9
AS
7763 if (index_type_desc == NULL)
7764 {
61ee279c 7765 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 7766
14f9c5c9 7767 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
7768 depend on the contents of the array in properly constructed
7769 debugging data. */
529cad9c
PH
7770 /* Create a fixed version of the array element type.
7771 We're not providing the address of an element here,
e1d5a0d2 7772 and thus the actual object value cannot be inspected to do
529cad9c
PH
7773 the conversion. This should not be a problem, since arrays of
7774 unconstrained objects are not allowed. In particular, all
7775 the elements of an array of a tagged type should all be of
7776 the same type specified in the debugging info. No need to
7777 consult the object tag. */
1ed6ede0 7778 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 7779
284614f0
JB
7780 /* Make sure we always create a new array type when dealing with
7781 packed array types, since we're going to fix-up the array
7782 type length and element bitsize a little further down. */
ad82864c 7783 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 7784 result = type0;
14f9c5c9 7785 else
e9bb382b 7786 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 7787 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
7788 }
7789 else
7790 {
7791 int i;
7792 struct type *elt_type0;
7793
7794 elt_type0 = type0;
7795 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 7796 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
7797
7798 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
7799 depend on the contents of the array in properly constructed
7800 debugging data. */
529cad9c
PH
7801 /* Create a fixed version of the array element type.
7802 We're not providing the address of an element here,
e1d5a0d2 7803 and thus the actual object value cannot be inspected to do
529cad9c
PH
7804 the conversion. This should not be a problem, since arrays of
7805 unconstrained objects are not allowed. In particular, all
7806 the elements of an array of a tagged type should all be of
7807 the same type specified in the debugging info. No need to
7808 consult the object tag. */
1ed6ede0
JB
7809 result =
7810 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
7811
7812 elt_type0 = type0;
14f9c5c9 7813 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
7814 {
7815 struct type *range_type =
28c85d6c 7816 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 7817
e9bb382b 7818 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 7819 result, range_type);
1ce677a4 7820 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 7821 }
d2e4a39e 7822 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 7823 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7824 }
7825
ad82864c 7826 if (constrained_packed_array_p)
284614f0
JB
7827 {
7828 /* So far, the resulting type has been created as if the original
7829 type was a regular (non-packed) array type. As a result, the
7830 bitsize of the array elements needs to be set again, and the array
7831 length needs to be recomputed based on that bitsize. */
7832 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
7833 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
7834
7835 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
7836 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
7837 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
7838 TYPE_LENGTH (result)++;
7839 }
7840
876cecd0 7841 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 7842 return result;
d2e4a39e 7843}
14f9c5c9
AS
7844
7845
7846/* A standard type (containing no dynamically sized components)
7847 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
7848 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 7849 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
7850 ADDRESS or in VALADDR contains these discriminants.
7851
1ed6ede0
JB
7852 If CHECK_TAG is not null, in the case of tagged types, this function
7853 attempts to locate the object's tag and use it to compute the actual
7854 type. However, when ADDRESS is null, we cannot use it to determine the
7855 location of the tag, and therefore compute the tagged type's actual type.
7856 So we return the tagged type without consulting the tag. */
529cad9c 7857
f192137b
JB
7858static struct type *
7859ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 7860 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 7861{
61ee279c 7862 type = ada_check_typedef (type);
d2e4a39e
AS
7863 switch (TYPE_CODE (type))
7864 {
7865 default:
14f9c5c9 7866 return type;
d2e4a39e 7867 case TYPE_CODE_STRUCT:
4c4b4cd2 7868 {
76a01679 7869 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
7870 struct type *fixed_record_type =
7871 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 7872
529cad9c
PH
7873 /* If STATIC_TYPE is a tagged type and we know the object's address,
7874 then we can determine its tag, and compute the object's actual
0963b4bd 7875 type from there. Note that we have to use the fixed record
1ed6ede0
JB
7876 type (the parent part of the record may have dynamic fields
7877 and the way the location of _tag is expressed may depend on
7878 them). */
529cad9c 7879
1ed6ede0 7880 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679
JB
7881 {
7882 struct type *real_type =
1ed6ede0
JB
7883 type_from_tag (value_tag_from_contents_and_address
7884 (fixed_record_type,
7885 valaddr,
7886 address));
5b4ee69b 7887
76a01679 7888 if (real_type != NULL)
1ed6ede0 7889 return to_fixed_record_type (real_type, valaddr, address, NULL);
76a01679 7890 }
4af88198
JB
7891
7892 /* Check to see if there is a parallel ___XVZ variable.
7893 If there is, then it provides the actual size of our type. */
7894 else if (ada_type_name (fixed_record_type) != NULL)
7895 {
7896 char *name = ada_type_name (fixed_record_type);
7897 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
7898 int xvz_found = 0;
7899 LONGEST size;
7900
88c15c34 7901 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
7902 size = get_int_var_value (xvz_name, &xvz_found);
7903 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
7904 {
7905 fixed_record_type = copy_type (fixed_record_type);
7906 TYPE_LENGTH (fixed_record_type) = size;
7907
7908 /* The FIXED_RECORD_TYPE may have be a stub. We have
7909 observed this when the debugging info is STABS, and
7910 apparently it is something that is hard to fix.
7911
7912 In practice, we don't need the actual type definition
7913 at all, because the presence of the XVZ variable allows us
7914 to assume that there must be a XVS type as well, which we
7915 should be able to use later, when we need the actual type
7916 definition.
7917
7918 In the meantime, pretend that the "fixed" type we are
7919 returning is NOT a stub, because this can cause trouble
7920 when using this type to create new types targeting it.
7921 Indeed, the associated creation routines often check
7922 whether the target type is a stub and will try to replace
0963b4bd 7923 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
7924 might cause the new type to have the wrong size too.
7925 Consider the case of an array, for instance, where the size
7926 of the array is computed from the number of elements in
7927 our array multiplied by the size of its element. */
7928 TYPE_STUB (fixed_record_type) = 0;
7929 }
7930 }
1ed6ede0 7931 return fixed_record_type;
4c4b4cd2 7932 }
d2e4a39e 7933 case TYPE_CODE_ARRAY:
4c4b4cd2 7934 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
7935 case TYPE_CODE_UNION:
7936 if (dval == NULL)
4c4b4cd2 7937 return type;
d2e4a39e 7938 else
4c4b4cd2 7939 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 7940 }
14f9c5c9
AS
7941}
7942
f192137b
JB
7943/* The same as ada_to_fixed_type_1, except that it preserves the type
7944 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
7945
7946 The typedef layer needs be preserved in order to differentiate between
7947 arrays and array pointers when both types are implemented using the same
7948 fat pointer. In the array pointer case, the pointer is encoded as
7949 a typedef of the pointer type. For instance, considering:
7950
7951 type String_Access is access String;
7952 S1 : String_Access := null;
7953
7954 To the debugger, S1 is defined as a typedef of type String. But
7955 to the user, it is a pointer. So if the user tries to print S1,
7956 we should not dereference the array, but print the array address
7957 instead.
7958
7959 If we didn't preserve the typedef layer, we would lose the fact that
7960 the type is to be presented as a pointer (needs de-reference before
7961 being printed). And we would also use the source-level type name. */
f192137b
JB
7962
7963struct type *
7964ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
7965 CORE_ADDR address, struct value *dval, int check_tag)
7966
7967{
7968 struct type *fixed_type =
7969 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
7970
96dbd2c1
JB
7971 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
7972 then preserve the typedef layer.
7973
7974 Implementation note: We can only check the main-type portion of
7975 the TYPE and FIXED_TYPE, because eliminating the typedef layer
7976 from TYPE now returns a type that has the same instance flags
7977 as TYPE. For instance, if TYPE is a "typedef const", and its
7978 target type is a "struct", then the typedef elimination will return
7979 a "const" version of the target type. See check_typedef for more
7980 details about how the typedef layer elimination is done.
7981
7982 brobecker/2010-11-19: It seems to me that the only case where it is
7983 useful to preserve the typedef layer is when dealing with fat pointers.
7984 Perhaps, we could add a check for that and preserve the typedef layer
7985 only in that situation. But this seems unecessary so far, probably
7986 because we call check_typedef/ada_check_typedef pretty much everywhere.
7987 */
f192137b 7988 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
720d1a40 7989 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 7990 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
7991 return type;
7992
7993 return fixed_type;
7994}
7995
14f9c5c9 7996/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 7997 TYPE0, but based on no runtime data. */
14f9c5c9 7998
d2e4a39e
AS
7999static struct type *
8000to_static_fixed_type (struct type *type0)
14f9c5c9 8001{
d2e4a39e 8002 struct type *type;
14f9c5c9
AS
8003
8004 if (type0 == NULL)
8005 return NULL;
8006
876cecd0 8007 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8008 return type0;
8009
61ee279c 8010 type0 = ada_check_typedef (type0);
d2e4a39e 8011
14f9c5c9
AS
8012 switch (TYPE_CODE (type0))
8013 {
8014 default:
8015 return type0;
8016 case TYPE_CODE_STRUCT:
8017 type = dynamic_template_type (type0);
d2e4a39e 8018 if (type != NULL)
4c4b4cd2
PH
8019 return template_to_static_fixed_type (type);
8020 else
8021 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8022 case TYPE_CODE_UNION:
8023 type = ada_find_parallel_type (type0, "___XVU");
8024 if (type != NULL)
4c4b4cd2
PH
8025 return template_to_static_fixed_type (type);
8026 else
8027 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8028 }
8029}
8030
4c4b4cd2
PH
8031/* A static approximation of TYPE with all type wrappers removed. */
8032
d2e4a39e
AS
8033static struct type *
8034static_unwrap_type (struct type *type)
14f9c5c9
AS
8035{
8036 if (ada_is_aligner_type (type))
8037 {
61ee279c 8038 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 8039 if (ada_type_name (type1) == NULL)
4c4b4cd2 8040 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
8041
8042 return static_unwrap_type (type1);
8043 }
d2e4a39e 8044 else
14f9c5c9 8045 {
d2e4a39e 8046 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8047
d2e4a39e 8048 if (raw_real_type == type)
4c4b4cd2 8049 return type;
14f9c5c9 8050 else
4c4b4cd2 8051 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8052 }
8053}
8054
8055/* In some cases, incomplete and private types require
4c4b4cd2 8056 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8057 type Foo;
8058 type FooP is access Foo;
8059 V: FooP;
8060 type Foo is array ...;
4c4b4cd2 8061 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8062 cross-references to such types, we instead substitute for FooP a
8063 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8064 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8065
8066/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8067 exists, otherwise TYPE. */
8068
d2e4a39e 8069struct type *
61ee279c 8070ada_check_typedef (struct type *type)
14f9c5c9 8071{
727e3d2e
JB
8072 if (type == NULL)
8073 return NULL;
8074
720d1a40
JB
8075 /* If our type is a typedef type of a fat pointer, then we're done.
8076 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8077 what allows us to distinguish between fat pointers that represent
8078 array types, and fat pointers that represent array access types
8079 (in both cases, the compiler implements them as fat pointers). */
8080 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
8081 && is_thick_pntr (ada_typedef_target_type (type)))
8082 return type;
8083
14f9c5c9
AS
8084 CHECK_TYPEDEF (type);
8085 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 8086 || !TYPE_STUB (type)
14f9c5c9
AS
8087 || TYPE_TAG_NAME (type) == NULL)
8088 return type;
d2e4a39e 8089 else
14f9c5c9 8090 {
d2e4a39e
AS
8091 char *name = TYPE_TAG_NAME (type);
8092 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8093
05e522ef
JB
8094 if (type1 == NULL)
8095 return type;
8096
8097 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8098 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8099 types, only for the typedef-to-array types). If that's the case,
8100 strip the typedef layer. */
8101 if (TYPE_CODE (type1) == TYPE_CODE_TYPEDEF)
8102 type1 = ada_check_typedef (type1);
8103
8104 return type1;
14f9c5c9
AS
8105 }
8106}
8107
8108/* A value representing the data at VALADDR/ADDRESS as described by
8109 type TYPE0, but with a standard (static-sized) type that correctly
8110 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8111 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8112 creation of struct values]. */
14f9c5c9 8113
4c4b4cd2
PH
8114static struct value *
8115ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
8116 struct value *val0)
14f9c5c9 8117{
1ed6ede0 8118 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8119
14f9c5c9
AS
8120 if (type == type0 && val0 != NULL)
8121 return val0;
d2e4a39e 8122 else
4c4b4cd2
PH
8123 return value_from_contents_and_address (type, 0, address);
8124}
8125
8126/* A value representing VAL, but with a standard (static-sized) type
8127 that correctly describes it. Does not necessarily create a new
8128 value. */
8129
0c3acc09 8130struct value *
4c4b4cd2
PH
8131ada_to_fixed_value (struct value *val)
8132{
df407dfe 8133 return ada_to_fixed_value_create (value_type (val),
42ae5230 8134 value_address (val),
4c4b4cd2 8135 val);
14f9c5c9 8136}
d2e4a39e 8137\f
14f9c5c9 8138
14f9c5c9
AS
8139/* Attributes */
8140
4c4b4cd2
PH
8141/* Table mapping attribute numbers to names.
8142 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8143
d2e4a39e 8144static const char *attribute_names[] = {
14f9c5c9
AS
8145 "<?>",
8146
d2e4a39e 8147 "first",
14f9c5c9
AS
8148 "last",
8149 "length",
8150 "image",
14f9c5c9
AS
8151 "max",
8152 "min",
4c4b4cd2
PH
8153 "modulus",
8154 "pos",
8155 "size",
8156 "tag",
14f9c5c9 8157 "val",
14f9c5c9
AS
8158 0
8159};
8160
d2e4a39e 8161const char *
4c4b4cd2 8162ada_attribute_name (enum exp_opcode n)
14f9c5c9 8163{
4c4b4cd2
PH
8164 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8165 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8166 else
8167 return attribute_names[0];
8168}
8169
4c4b4cd2 8170/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8171
4c4b4cd2
PH
8172static LONGEST
8173pos_atr (struct value *arg)
14f9c5c9 8174{
24209737
PH
8175 struct value *val = coerce_ref (arg);
8176 struct type *type = value_type (val);
14f9c5c9 8177
d2e4a39e 8178 if (!discrete_type_p (type))
323e0a4a 8179 error (_("'POS only defined on discrete types"));
14f9c5c9
AS
8180
8181 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8182 {
8183 int i;
24209737 8184 LONGEST v = value_as_long (val);
14f9c5c9 8185
d2e4a39e 8186 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
8187 {
8188 if (v == TYPE_FIELD_BITPOS (type, i))
8189 return i;
8190 }
323e0a4a 8191 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9
AS
8192 }
8193 else
24209737 8194 return value_as_long (val);
4c4b4cd2
PH
8195}
8196
8197static struct value *
3cb382c9 8198value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8199{
3cb382c9 8200 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8201}
8202
4c4b4cd2 8203/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8204
d2e4a39e
AS
8205static struct value *
8206value_val_atr (struct type *type, struct value *arg)
14f9c5c9 8207{
d2e4a39e 8208 if (!discrete_type_p (type))
323e0a4a 8209 error (_("'VAL only defined on discrete types"));
df407dfe 8210 if (!integer_type_p (value_type (arg)))
323e0a4a 8211 error (_("'VAL requires integral argument"));
14f9c5c9
AS
8212
8213 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
8214 {
8215 long pos = value_as_long (arg);
5b4ee69b 8216
14f9c5c9 8217 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 8218 error (_("argument to 'VAL out of range"));
d2e4a39e 8219 return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
14f9c5c9
AS
8220 }
8221 else
8222 return value_from_longest (type, value_as_long (arg));
8223}
14f9c5c9 8224\f
d2e4a39e 8225
4c4b4cd2 8226 /* Evaluation */
14f9c5c9 8227
4c4b4cd2
PH
8228/* True if TYPE appears to be an Ada character type.
8229 [At the moment, this is true only for Character and Wide_Character;
8230 It is a heuristic test that could stand improvement]. */
14f9c5c9 8231
d2e4a39e
AS
8232int
8233ada_is_character_type (struct type *type)
14f9c5c9 8234{
7b9f71f2
JB
8235 const char *name;
8236
8237 /* If the type code says it's a character, then assume it really is,
8238 and don't check any further. */
8239 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
8240 return 1;
8241
8242 /* Otherwise, assume it's a character type iff it is a discrete type
8243 with a known character type name. */
8244 name = ada_type_name (type);
8245 return (name != NULL
8246 && (TYPE_CODE (type) == TYPE_CODE_INT
8247 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8248 && (strcmp (name, "character") == 0
8249 || strcmp (name, "wide_character") == 0
5a517ebd 8250 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 8251 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8252}
8253
4c4b4cd2 8254/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
8255
8256int
ebf56fd3 8257ada_is_string_type (struct type *type)
14f9c5c9 8258{
61ee279c 8259 type = ada_check_typedef (type);
d2e4a39e 8260 if (type != NULL
14f9c5c9 8261 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
8262 && (ada_is_simple_array_type (type)
8263 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8264 && ada_array_arity (type) == 1)
8265 {
8266 struct type *elttype = ada_array_element_type (type, 1);
8267
8268 return ada_is_character_type (elttype);
8269 }
d2e4a39e 8270 else
14f9c5c9
AS
8271 return 0;
8272}
8273
5bf03f13
JB
8274/* The compiler sometimes provides a parallel XVS type for a given
8275 PAD type. Normally, it is safe to follow the PAD type directly,
8276 but older versions of the compiler have a bug that causes the offset
8277 of its "F" field to be wrong. Following that field in that case
8278 would lead to incorrect results, but this can be worked around
8279 by ignoring the PAD type and using the associated XVS type instead.
8280
8281 Set to True if the debugger should trust the contents of PAD types.
8282 Otherwise, ignore the PAD type if there is a parallel XVS type. */
8283static int trust_pad_over_xvs = 1;
14f9c5c9
AS
8284
8285/* True if TYPE is a struct type introduced by the compiler to force the
8286 alignment of a value. Such types have a single field with a
4c4b4cd2 8287 distinctive name. */
14f9c5c9
AS
8288
8289int
ebf56fd3 8290ada_is_aligner_type (struct type *type)
14f9c5c9 8291{
61ee279c 8292 type = ada_check_typedef (type);
714e53ab 8293
5bf03f13 8294 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
8295 return 0;
8296
14f9c5c9 8297 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
8298 && TYPE_NFIELDS (type) == 1
8299 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
8300}
8301
8302/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 8303 the parallel type. */
14f9c5c9 8304
d2e4a39e
AS
8305struct type *
8306ada_get_base_type (struct type *raw_type)
14f9c5c9 8307{
d2e4a39e
AS
8308 struct type *real_type_namer;
8309 struct type *raw_real_type;
14f9c5c9
AS
8310
8311 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
8312 return raw_type;
8313
284614f0
JB
8314 if (ada_is_aligner_type (raw_type))
8315 /* The encoding specifies that we should always use the aligner type.
8316 So, even if this aligner type has an associated XVS type, we should
8317 simply ignore it.
8318
8319 According to the compiler gurus, an XVS type parallel to an aligner
8320 type may exist because of a stabs limitation. In stabs, aligner
8321 types are empty because the field has a variable-sized type, and
8322 thus cannot actually be used as an aligner type. As a result,
8323 we need the associated parallel XVS type to decode the type.
8324 Since the policy in the compiler is to not change the internal
8325 representation based on the debugging info format, we sometimes
8326 end up having a redundant XVS type parallel to the aligner type. */
8327 return raw_type;
8328
14f9c5c9 8329 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 8330 if (real_type_namer == NULL
14f9c5c9
AS
8331 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
8332 || TYPE_NFIELDS (real_type_namer) != 1)
8333 return raw_type;
8334
f80d3ff2
JB
8335 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
8336 {
8337 /* This is an older encoding form where the base type needs to be
8338 looked up by name. We prefer the newer enconding because it is
8339 more efficient. */
8340 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8341 if (raw_real_type == NULL)
8342 return raw_type;
8343 else
8344 return raw_real_type;
8345 }
8346
8347 /* The field in our XVS type is a reference to the base type. */
8348 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 8349}
14f9c5c9 8350
4c4b4cd2 8351/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 8352
d2e4a39e
AS
8353struct type *
8354ada_aligned_type (struct type *type)
14f9c5c9
AS
8355{
8356 if (ada_is_aligner_type (type))
8357 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
8358 else
8359 return ada_get_base_type (type);
8360}
8361
8362
8363/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 8364 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 8365
fc1a4b47
AC
8366const gdb_byte *
8367ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 8368{
d2e4a39e 8369 if (ada_is_aligner_type (type))
14f9c5c9 8370 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
8371 valaddr +
8372 TYPE_FIELD_BITPOS (type,
8373 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
8374 else
8375 return valaddr;
8376}
8377
4c4b4cd2
PH
8378
8379
14f9c5c9 8380/* The printed representation of an enumeration literal with encoded
4c4b4cd2 8381 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
8382const char *
8383ada_enum_name (const char *name)
14f9c5c9 8384{
4c4b4cd2
PH
8385 static char *result;
8386 static size_t result_len = 0;
d2e4a39e 8387 char *tmp;
14f9c5c9 8388
4c4b4cd2
PH
8389 /* First, unqualify the enumeration name:
8390 1. Search for the last '.' character. If we find one, then skip
177b42fe 8391 all the preceding characters, the unqualified name starts
76a01679 8392 right after that dot.
4c4b4cd2 8393 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
8394 translates dots into "__". Search forward for double underscores,
8395 but stop searching when we hit an overloading suffix, which is
8396 of the form "__" followed by digits. */
4c4b4cd2 8397
c3e5cd34
PH
8398 tmp = strrchr (name, '.');
8399 if (tmp != NULL)
4c4b4cd2
PH
8400 name = tmp + 1;
8401 else
14f9c5c9 8402 {
4c4b4cd2
PH
8403 while ((tmp = strstr (name, "__")) != NULL)
8404 {
8405 if (isdigit (tmp[2]))
8406 break;
8407 else
8408 name = tmp + 2;
8409 }
14f9c5c9
AS
8410 }
8411
8412 if (name[0] == 'Q')
8413 {
14f9c5c9 8414 int v;
5b4ee69b 8415
14f9c5c9 8416 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
8417 {
8418 if (sscanf (name + 2, "%x", &v) != 1)
8419 return name;
8420 }
14f9c5c9 8421 else
4c4b4cd2 8422 return name;
14f9c5c9 8423
4c4b4cd2 8424 GROW_VECT (result, result_len, 16);
14f9c5c9 8425 if (isascii (v) && isprint (v))
88c15c34 8426 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 8427 else if (name[1] == 'U')
88c15c34 8428 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 8429 else
88c15c34 8430 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
8431
8432 return result;
8433 }
d2e4a39e 8434 else
4c4b4cd2 8435 {
c3e5cd34
PH
8436 tmp = strstr (name, "__");
8437 if (tmp == NULL)
8438 tmp = strstr (name, "$");
8439 if (tmp != NULL)
4c4b4cd2
PH
8440 {
8441 GROW_VECT (result, result_len, tmp - name + 1);
8442 strncpy (result, name, tmp - name);
8443 result[tmp - name] = '\0';
8444 return result;
8445 }
8446
8447 return name;
8448 }
14f9c5c9
AS
8449}
8450
14f9c5c9
AS
8451/* Evaluate the subexpression of EXP starting at *POS as for
8452 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 8453 expression. */
14f9c5c9 8454
d2e4a39e
AS
8455static struct value *
8456evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 8457{
4b27a620 8458 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
8459}
8460
8461/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 8462 value it wraps. */
14f9c5c9 8463
d2e4a39e
AS
8464static struct value *
8465unwrap_value (struct value *val)
14f9c5c9 8466{
df407dfe 8467 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 8468
14f9c5c9
AS
8469 if (ada_is_aligner_type (type))
8470 {
de4d072f 8471 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 8472 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 8473
14f9c5c9 8474 if (ada_type_name (val_type) == NULL)
4c4b4cd2 8475 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
8476
8477 return unwrap_value (v);
8478 }
d2e4a39e 8479 else
14f9c5c9 8480 {
d2e4a39e 8481 struct type *raw_real_type =
61ee279c 8482 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 8483
5bf03f13
JB
8484 /* If there is no parallel XVS or XVE type, then the value is
8485 already unwrapped. Return it without further modification. */
8486 if ((type == raw_real_type)
8487 && ada_find_parallel_type (type, "___XVE") == NULL)
8488 return val;
14f9c5c9 8489
d2e4a39e 8490 return
4c4b4cd2
PH
8491 coerce_unspec_val_to_type
8492 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 8493 value_address (val),
1ed6ede0 8494 NULL, 1));
14f9c5c9
AS
8495 }
8496}
d2e4a39e
AS
8497
8498static struct value *
8499cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
8500{
8501 LONGEST val;
8502
df407dfe 8503 if (type == value_type (arg))
14f9c5c9 8504 return arg;
df407dfe 8505 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 8506 val = ada_float_to_fixed (type,
df407dfe 8507 ada_fixed_to_float (value_type (arg),
4c4b4cd2 8508 value_as_long (arg)));
d2e4a39e 8509 else
14f9c5c9 8510 {
a53b7a21 8511 DOUBLEST argd = value_as_double (arg);
5b4ee69b 8512
14f9c5c9
AS
8513 val = ada_float_to_fixed (type, argd);
8514 }
8515
8516 return value_from_longest (type, val);
8517}
8518
d2e4a39e 8519static struct value *
a53b7a21 8520cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 8521{
df407dfe 8522 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 8523 value_as_long (arg));
5b4ee69b 8524
a53b7a21 8525 return value_from_double (type, val);
14f9c5c9
AS
8526}
8527
4c4b4cd2
PH
8528/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8529 return the converted value. */
8530
d2e4a39e
AS
8531static struct value *
8532coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 8533{
df407dfe 8534 struct type *type2 = value_type (val);
5b4ee69b 8535
14f9c5c9
AS
8536 if (type == type2)
8537 return val;
8538
61ee279c
PH
8539 type2 = ada_check_typedef (type2);
8540 type = ada_check_typedef (type);
14f9c5c9 8541
d2e4a39e
AS
8542 if (TYPE_CODE (type2) == TYPE_CODE_PTR
8543 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
8544 {
8545 val = ada_value_ind (val);
df407dfe 8546 type2 = value_type (val);
14f9c5c9
AS
8547 }
8548
d2e4a39e 8549 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
8550 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8551 {
8552 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
4c4b4cd2
PH
8553 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8554 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
323e0a4a 8555 error (_("Incompatible types in assignment"));
04624583 8556 deprecated_set_value_type (val, type);
14f9c5c9 8557 }
d2e4a39e 8558 return val;
14f9c5c9
AS
8559}
8560
4c4b4cd2
PH
8561static struct value *
8562ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8563{
8564 struct value *val;
8565 struct type *type1, *type2;
8566 LONGEST v, v1, v2;
8567
994b9211
AC
8568 arg1 = coerce_ref (arg1);
8569 arg2 = coerce_ref (arg2);
18af8284
JB
8570 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
8571 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 8572
76a01679
JB
8573 if (TYPE_CODE (type1) != TYPE_CODE_INT
8574 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
8575 return value_binop (arg1, arg2, op);
8576
76a01679 8577 switch (op)
4c4b4cd2
PH
8578 {
8579 case BINOP_MOD:
8580 case BINOP_DIV:
8581 case BINOP_REM:
8582 break;
8583 default:
8584 return value_binop (arg1, arg2, op);
8585 }
8586
8587 v2 = value_as_long (arg2);
8588 if (v2 == 0)
323e0a4a 8589 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
8590
8591 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8592 return value_binop (arg1, arg2, op);
8593
8594 v1 = value_as_long (arg1);
8595 switch (op)
8596 {
8597 case BINOP_DIV:
8598 v = v1 / v2;
76a01679
JB
8599 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
8600 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
8601 break;
8602 case BINOP_REM:
8603 v = v1 % v2;
76a01679
JB
8604 if (v * v1 < 0)
8605 v -= v2;
4c4b4cd2
PH
8606 break;
8607 default:
8608 /* Should not reach this point. */
8609 v = 0;
8610 }
8611
8612 val = allocate_value (type1);
990a07ab 8613 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
8614 TYPE_LENGTH (value_type (val)),
8615 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
8616 return val;
8617}
8618
8619static int
8620ada_value_equal (struct value *arg1, struct value *arg2)
8621{
df407dfe
AC
8622 if (ada_is_direct_array_type (value_type (arg1))
8623 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 8624 {
f58b38bf
JB
8625 /* Automatically dereference any array reference before
8626 we attempt to perform the comparison. */
8627 arg1 = ada_coerce_ref (arg1);
8628 arg2 = ada_coerce_ref (arg2);
8629
4c4b4cd2
PH
8630 arg1 = ada_coerce_to_simple_array (arg1);
8631 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
8632 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
8633 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 8634 error (_("Attempt to compare array with non-array"));
4c4b4cd2 8635 /* FIXME: The following works only for types whose
76a01679
JB
8636 representations use all bits (no padding or undefined bits)
8637 and do not have user-defined equality. */
8638 return
df407dfe 8639 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 8640 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 8641 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
8642 }
8643 return value_equal (arg1, arg2);
8644}
8645
52ce6436
PH
8646/* Total number of component associations in the aggregate starting at
8647 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 8648 OP_AGGREGATE. */
52ce6436
PH
8649
8650static int
8651num_component_specs (struct expression *exp, int pc)
8652{
8653 int n, m, i;
5b4ee69b 8654
52ce6436
PH
8655 m = exp->elts[pc + 1].longconst;
8656 pc += 3;
8657 n = 0;
8658 for (i = 0; i < m; i += 1)
8659 {
8660 switch (exp->elts[pc].opcode)
8661 {
8662 default:
8663 n += 1;
8664 break;
8665 case OP_CHOICES:
8666 n += exp->elts[pc + 1].longconst;
8667 break;
8668 }
8669 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
8670 }
8671 return n;
8672}
8673
8674/* Assign the result of evaluating EXP starting at *POS to the INDEXth
8675 component of LHS (a simple array or a record), updating *POS past
8676 the expression, assuming that LHS is contained in CONTAINER. Does
8677 not modify the inferior's memory, nor does it modify LHS (unless
8678 LHS == CONTAINER). */
8679
8680static void
8681assign_component (struct value *container, struct value *lhs, LONGEST index,
8682 struct expression *exp, int *pos)
8683{
8684 struct value *mark = value_mark ();
8685 struct value *elt;
5b4ee69b 8686
52ce6436
PH
8687 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
8688 {
22601c15
UW
8689 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
8690 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 8691
52ce6436
PH
8692 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
8693 }
8694 else
8695 {
8696 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
8697 elt = ada_to_fixed_value (unwrap_value (elt));
8698 }
8699
8700 if (exp->elts[*pos].opcode == OP_AGGREGATE)
8701 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
8702 else
8703 value_assign_to_component (container, elt,
8704 ada_evaluate_subexp (NULL, exp, pos,
8705 EVAL_NORMAL));
8706
8707 value_free_to_mark (mark);
8708}
8709
8710/* Assuming that LHS represents an lvalue having a record or array
8711 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
8712 of that aggregate's value to LHS, advancing *POS past the
8713 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
8714 lvalue containing LHS (possibly LHS itself). Does not modify
8715 the inferior's memory, nor does it modify the contents of
0963b4bd 8716 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
8717
8718static struct value *
8719assign_aggregate (struct value *container,
8720 struct value *lhs, struct expression *exp,
8721 int *pos, enum noside noside)
8722{
8723 struct type *lhs_type;
8724 int n = exp->elts[*pos+1].longconst;
8725 LONGEST low_index, high_index;
8726 int num_specs;
8727 LONGEST *indices;
8728 int max_indices, num_indices;
8729 int is_array_aggregate;
8730 int i;
52ce6436
PH
8731
8732 *pos += 3;
8733 if (noside != EVAL_NORMAL)
8734 {
52ce6436
PH
8735 for (i = 0; i < n; i += 1)
8736 ada_evaluate_subexp (NULL, exp, pos, noside);
8737 return container;
8738 }
8739
8740 container = ada_coerce_ref (container);
8741 if (ada_is_direct_array_type (value_type (container)))
8742 container = ada_coerce_to_simple_array (container);
8743 lhs = ada_coerce_ref (lhs);
8744 if (!deprecated_value_modifiable (lhs))
8745 error (_("Left operand of assignment is not a modifiable lvalue."));
8746
8747 lhs_type = value_type (lhs);
8748 if (ada_is_direct_array_type (lhs_type))
8749 {
8750 lhs = ada_coerce_to_simple_array (lhs);
8751 lhs_type = value_type (lhs);
8752 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8753 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8754 is_array_aggregate = 1;
8755 }
8756 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8757 {
8758 low_index = 0;
8759 high_index = num_visible_fields (lhs_type) - 1;
8760 is_array_aggregate = 0;
8761 }
8762 else
8763 error (_("Left-hand side must be array or record."));
8764
8765 num_specs = num_component_specs (exp, *pos - 3);
8766 max_indices = 4 * num_specs + 4;
8767 indices = alloca (max_indices * sizeof (indices[0]));
8768 indices[0] = indices[1] = low_index - 1;
8769 indices[2] = indices[3] = high_index + 1;
8770 num_indices = 4;
8771
8772 for (i = 0; i < n; i += 1)
8773 {
8774 switch (exp->elts[*pos].opcode)
8775 {
1fbf5ada
JB
8776 case OP_CHOICES:
8777 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
8778 &num_indices, max_indices,
8779 low_index, high_index);
8780 break;
8781 case OP_POSITIONAL:
8782 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
8783 &num_indices, max_indices,
8784 low_index, high_index);
1fbf5ada
JB
8785 break;
8786 case OP_OTHERS:
8787 if (i != n-1)
8788 error (_("Misplaced 'others' clause"));
8789 aggregate_assign_others (container, lhs, exp, pos, indices,
8790 num_indices, low_index, high_index);
8791 break;
8792 default:
8793 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
8794 }
8795 }
8796
8797 return container;
8798}
8799
8800/* Assign into the component of LHS indexed by the OP_POSITIONAL
8801 construct at *POS, updating *POS past the construct, given that
8802 the positions are relative to lower bound LOW, where HIGH is the
8803 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
8804 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 8805 assign_aggregate. */
52ce6436
PH
8806static void
8807aggregate_assign_positional (struct value *container,
8808 struct value *lhs, struct expression *exp,
8809 int *pos, LONGEST *indices, int *num_indices,
8810 int max_indices, LONGEST low, LONGEST high)
8811{
8812 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8813
8814 if (ind - 1 == high)
e1d5a0d2 8815 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
8816 if (ind <= high)
8817 {
8818 add_component_interval (ind, ind, indices, num_indices, max_indices);
8819 *pos += 3;
8820 assign_component (container, lhs, ind, exp, pos);
8821 }
8822 else
8823 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8824}
8825
8826/* Assign into the components of LHS indexed by the OP_CHOICES
8827 construct at *POS, updating *POS past the construct, given that
8828 the allowable indices are LOW..HIGH. Record the indices assigned
8829 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 8830 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
8831static void
8832aggregate_assign_from_choices (struct value *container,
8833 struct value *lhs, struct expression *exp,
8834 int *pos, LONGEST *indices, int *num_indices,
8835 int max_indices, LONGEST low, LONGEST high)
8836{
8837 int j;
8838 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8839 int choice_pos, expr_pc;
8840 int is_array = ada_is_direct_array_type (value_type (lhs));
8841
8842 choice_pos = *pos += 3;
8843
8844 for (j = 0; j < n_choices; j += 1)
8845 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8846 expr_pc = *pos;
8847 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8848
8849 for (j = 0; j < n_choices; j += 1)
8850 {
8851 LONGEST lower, upper;
8852 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 8853
52ce6436
PH
8854 if (op == OP_DISCRETE_RANGE)
8855 {
8856 choice_pos += 1;
8857 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8858 EVAL_NORMAL));
8859 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8860 EVAL_NORMAL));
8861 }
8862 else if (is_array)
8863 {
8864 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
8865 EVAL_NORMAL));
8866 upper = lower;
8867 }
8868 else
8869 {
8870 int ind;
8871 char *name;
5b4ee69b 8872
52ce6436
PH
8873 switch (op)
8874 {
8875 case OP_NAME:
8876 name = &exp->elts[choice_pos + 2].string;
8877 break;
8878 case OP_VAR_VALUE:
8879 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8880 break;
8881 default:
8882 error (_("Invalid record component association."));
8883 }
8884 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8885 ind = 0;
8886 if (! find_struct_field (name, value_type (lhs), 0,
8887 NULL, NULL, NULL, NULL, &ind))
8888 error (_("Unknown component name: %s."), name);
8889 lower = upper = ind;
8890 }
8891
8892 if (lower <= upper && (lower < low || upper > high))
8893 error (_("Index in component association out of bounds."));
8894
8895 add_component_interval (lower, upper, indices, num_indices,
8896 max_indices);
8897 while (lower <= upper)
8898 {
8899 int pos1;
5b4ee69b 8900
52ce6436
PH
8901 pos1 = expr_pc;
8902 assign_component (container, lhs, lower, exp, &pos1);
8903 lower += 1;
8904 }
8905 }
8906}
8907
8908/* Assign the value of the expression in the OP_OTHERS construct in
8909 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8910 have not been previously assigned. The index intervals already assigned
8911 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 8912 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
8913static void
8914aggregate_assign_others (struct value *container,
8915 struct value *lhs, struct expression *exp,
8916 int *pos, LONGEST *indices, int num_indices,
8917 LONGEST low, LONGEST high)
8918{
8919 int i;
5ce64950 8920 int expr_pc = *pos + 1;
52ce6436
PH
8921
8922 for (i = 0; i < num_indices - 2; i += 2)
8923 {
8924 LONGEST ind;
5b4ee69b 8925
52ce6436
PH
8926 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8927 {
5ce64950 8928 int localpos;
5b4ee69b 8929
5ce64950
MS
8930 localpos = expr_pc;
8931 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
8932 }
8933 }
8934 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8935}
8936
8937/* Add the interval [LOW .. HIGH] to the sorted set of intervals
8938 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8939 modifying *SIZE as needed. It is an error if *SIZE exceeds
8940 MAX_SIZE. The resulting intervals do not overlap. */
8941static void
8942add_component_interval (LONGEST low, LONGEST high,
8943 LONGEST* indices, int *size, int max_size)
8944{
8945 int i, j;
5b4ee69b 8946
52ce6436
PH
8947 for (i = 0; i < *size; i += 2) {
8948 if (high >= indices[i] && low <= indices[i + 1])
8949 {
8950 int kh;
5b4ee69b 8951
52ce6436
PH
8952 for (kh = i + 2; kh < *size; kh += 2)
8953 if (high < indices[kh])
8954 break;
8955 if (low < indices[i])
8956 indices[i] = low;
8957 indices[i + 1] = indices[kh - 1];
8958 if (high > indices[i + 1])
8959 indices[i + 1] = high;
8960 memcpy (indices + i + 2, indices + kh, *size - kh);
8961 *size -= kh - i - 2;
8962 return;
8963 }
8964 else if (high < indices[i])
8965 break;
8966 }
8967
8968 if (*size == max_size)
8969 error (_("Internal error: miscounted aggregate components."));
8970 *size += 2;
8971 for (j = *size-1; j >= i+2; j -= 1)
8972 indices[j] = indices[j - 2];
8973 indices[i] = low;
8974 indices[i + 1] = high;
8975}
8976
6e48bd2c
JB
8977/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8978 is different. */
8979
8980static struct value *
8981ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8982{
8983 if (type == ada_check_typedef (value_type (arg2)))
8984 return arg2;
8985
8986 if (ada_is_fixed_point_type (type))
8987 return (cast_to_fixed (type, arg2));
8988
8989 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 8990 return cast_from_fixed (type, arg2);
6e48bd2c
JB
8991
8992 return value_cast (type, arg2);
8993}
8994
284614f0
JB
8995/* Evaluating Ada expressions, and printing their result.
8996 ------------------------------------------------------
8997
21649b50
JB
8998 1. Introduction:
8999 ----------------
9000
284614f0
JB
9001 We usually evaluate an Ada expression in order to print its value.
9002 We also evaluate an expression in order to print its type, which
9003 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9004 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9005 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9006 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9007 similar.
9008
9009 Evaluating expressions is a little more complicated for Ada entities
9010 than it is for entities in languages such as C. The main reason for
9011 this is that Ada provides types whose definition might be dynamic.
9012 One example of such types is variant records. Or another example
9013 would be an array whose bounds can only be known at run time.
9014
9015 The following description is a general guide as to what should be
9016 done (and what should NOT be done) in order to evaluate an expression
9017 involving such types, and when. This does not cover how the semantic
9018 information is encoded by GNAT as this is covered separatly. For the
9019 document used as the reference for the GNAT encoding, see exp_dbug.ads
9020 in the GNAT sources.
9021
9022 Ideally, we should embed each part of this description next to its
9023 associated code. Unfortunately, the amount of code is so vast right
9024 now that it's hard to see whether the code handling a particular
9025 situation might be duplicated or not. One day, when the code is
9026 cleaned up, this guide might become redundant with the comments
9027 inserted in the code, and we might want to remove it.
9028
21649b50
JB
9029 2. ``Fixing'' an Entity, the Simple Case:
9030 -----------------------------------------
9031
284614f0
JB
9032 When evaluating Ada expressions, the tricky issue is that they may
9033 reference entities whose type contents and size are not statically
9034 known. Consider for instance a variant record:
9035
9036 type Rec (Empty : Boolean := True) is record
9037 case Empty is
9038 when True => null;
9039 when False => Value : Integer;
9040 end case;
9041 end record;
9042 Yes : Rec := (Empty => False, Value => 1);
9043 No : Rec := (empty => True);
9044
9045 The size and contents of that record depends on the value of the
9046 descriminant (Rec.Empty). At this point, neither the debugging
9047 information nor the associated type structure in GDB are able to
9048 express such dynamic types. So what the debugger does is to create
9049 "fixed" versions of the type that applies to the specific object.
9050 We also informally refer to this opperation as "fixing" an object,
9051 which means creating its associated fixed type.
9052
9053 Example: when printing the value of variable "Yes" above, its fixed
9054 type would look like this:
9055
9056 type Rec is record
9057 Empty : Boolean;
9058 Value : Integer;
9059 end record;
9060
9061 On the other hand, if we printed the value of "No", its fixed type
9062 would become:
9063
9064 type Rec is record
9065 Empty : Boolean;
9066 end record;
9067
9068 Things become a little more complicated when trying to fix an entity
9069 with a dynamic type that directly contains another dynamic type,
9070 such as an array of variant records, for instance. There are
9071 two possible cases: Arrays, and records.
9072
21649b50
JB
9073 3. ``Fixing'' Arrays:
9074 ---------------------
9075
9076 The type structure in GDB describes an array in terms of its bounds,
9077 and the type of its elements. By design, all elements in the array
9078 have the same type and we cannot represent an array of variant elements
9079 using the current type structure in GDB. When fixing an array,
9080 we cannot fix the array element, as we would potentially need one
9081 fixed type per element of the array. As a result, the best we can do
9082 when fixing an array is to produce an array whose bounds and size
9083 are correct (allowing us to read it from memory), but without having
9084 touched its element type. Fixing each element will be done later,
9085 when (if) necessary.
9086
9087 Arrays are a little simpler to handle than records, because the same
9088 amount of memory is allocated for each element of the array, even if
1b536f04 9089 the amount of space actually used by each element differs from element
21649b50 9090 to element. Consider for instance the following array of type Rec:
284614f0
JB
9091
9092 type Rec_Array is array (1 .. 2) of Rec;
9093
1b536f04
JB
9094 The actual amount of memory occupied by each element might be different
9095 from element to element, depending on the value of their discriminant.
21649b50 9096 But the amount of space reserved for each element in the array remains
1b536f04 9097 fixed regardless. So we simply need to compute that size using
21649b50
JB
9098 the debugging information available, from which we can then determine
9099 the array size (we multiply the number of elements of the array by
9100 the size of each element).
9101
9102 The simplest case is when we have an array of a constrained element
9103 type. For instance, consider the following type declarations:
9104
9105 type Bounded_String (Max_Size : Integer) is
9106 Length : Integer;
9107 Buffer : String (1 .. Max_Size);
9108 end record;
9109 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
9110
9111 In this case, the compiler describes the array as an array of
9112 variable-size elements (identified by its XVS suffix) for which
9113 the size can be read in the parallel XVZ variable.
9114
9115 In the case of an array of an unconstrained element type, the compiler
9116 wraps the array element inside a private PAD type. This type should not
9117 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9118 that we also use the adjective "aligner" in our code to designate
9119 these wrapper types.
9120
1b536f04 9121 In some cases, the size allocated for each element is statically
21649b50
JB
9122 known. In that case, the PAD type already has the correct size,
9123 and the array element should remain unfixed.
9124
9125 But there are cases when this size is not statically known.
9126 For instance, assuming that "Five" is an integer variable:
284614f0
JB
9127
9128 type Dynamic is array (1 .. Five) of Integer;
9129 type Wrapper (Has_Length : Boolean := False) is record
9130 Data : Dynamic;
9131 case Has_Length is
9132 when True => Length : Integer;
9133 when False => null;
9134 end case;
9135 end record;
9136 type Wrapper_Array is array (1 .. 2) of Wrapper;
9137
9138 Hello : Wrapper_Array := (others => (Has_Length => True,
9139 Data => (others => 17),
9140 Length => 1));
9141
9142
9143 The debugging info would describe variable Hello as being an
9144 array of a PAD type. The size of that PAD type is not statically
9145 known, but can be determined using a parallel XVZ variable.
9146 In that case, a copy of the PAD type with the correct size should
9147 be used for the fixed array.
9148
21649b50
JB
9149 3. ``Fixing'' record type objects:
9150 ----------------------------------
9151
9152 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9153 record types. In this case, in order to compute the associated
9154 fixed type, we need to determine the size and offset of each of
9155 its components. This, in turn, requires us to compute the fixed
9156 type of each of these components.
9157
9158 Consider for instance the example:
9159
9160 type Bounded_String (Max_Size : Natural) is record
9161 Str : String (1 .. Max_Size);
9162 Length : Natural;
9163 end record;
9164 My_String : Bounded_String (Max_Size => 10);
9165
9166 In that case, the position of field "Length" depends on the size
9167 of field Str, which itself depends on the value of the Max_Size
21649b50 9168 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9169 we need to fix the type of field Str. Therefore, fixing a variant
9170 record requires us to fix each of its components.
9171
9172 However, if a component does not have a dynamic size, the component
9173 should not be fixed. In particular, fields that use a PAD type
9174 should not fixed. Here is an example where this might happen
9175 (assuming type Rec above):
9176
9177 type Container (Big : Boolean) is record
9178 First : Rec;
9179 After : Integer;
9180 case Big is
9181 when True => Another : Integer;
9182 when False => null;
9183 end case;
9184 end record;
9185 My_Container : Container := (Big => False,
9186 First => (Empty => True),
9187 After => 42);
9188
9189 In that example, the compiler creates a PAD type for component First,
9190 whose size is constant, and then positions the component After just
9191 right after it. The offset of component After is therefore constant
9192 in this case.
9193
9194 The debugger computes the position of each field based on an algorithm
9195 that uses, among other things, the actual position and size of the field
21649b50
JB
9196 preceding it. Let's now imagine that the user is trying to print
9197 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9198 end up computing the offset of field After based on the size of the
9199 fixed version of field First. And since in our example First has
9200 only one actual field, the size of the fixed type is actually smaller
9201 than the amount of space allocated to that field, and thus we would
9202 compute the wrong offset of field After.
9203
21649b50
JB
9204 To make things more complicated, we need to watch out for dynamic
9205 components of variant records (identified by the ___XVL suffix in
9206 the component name). Even if the target type is a PAD type, the size
9207 of that type might not be statically known. So the PAD type needs
9208 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9209 we might end up with the wrong size for our component. This can be
9210 observed with the following type declarations:
284614f0
JB
9211
9212 type Octal is new Integer range 0 .. 7;
9213 type Octal_Array is array (Positive range <>) of Octal;
9214 pragma Pack (Octal_Array);
9215
9216 type Octal_Buffer (Size : Positive) is record
9217 Buffer : Octal_Array (1 .. Size);
9218 Length : Integer;
9219 end record;
9220
9221 In that case, Buffer is a PAD type whose size is unset and needs
9222 to be computed by fixing the unwrapped type.
9223
21649b50
JB
9224 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9225 ----------------------------------------------------------
9226
9227 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
9228 thus far, be actually fixed?
9229
9230 The answer is: Only when referencing that element. For instance
9231 when selecting one component of a record, this specific component
9232 should be fixed at that point in time. Or when printing the value
9233 of a record, each component should be fixed before its value gets
9234 printed. Similarly for arrays, the element of the array should be
9235 fixed when printing each element of the array, or when extracting
9236 one element out of that array. On the other hand, fixing should
9237 not be performed on the elements when taking a slice of an array!
9238
9239 Note that one of the side-effects of miscomputing the offset and
9240 size of each field is that we end up also miscomputing the size
9241 of the containing type. This can have adverse results when computing
9242 the value of an entity. GDB fetches the value of an entity based
9243 on the size of its type, and thus a wrong size causes GDB to fetch
9244 the wrong amount of memory. In the case where the computed size is
9245 too small, GDB fetches too little data to print the value of our
9246 entiry. Results in this case as unpredicatble, as we usually read
9247 past the buffer containing the data =:-o. */
9248
9249/* Implement the evaluate_exp routine in the exp_descriptor structure
9250 for the Ada language. */
9251
52ce6436 9252static struct value *
ebf56fd3 9253ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 9254 int *pos, enum noside noside)
14f9c5c9
AS
9255{
9256 enum exp_opcode op;
b5385fc0 9257 int tem;
14f9c5c9
AS
9258 int pc;
9259 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
9260 struct type *type;
52ce6436 9261 int nargs, oplen;
d2e4a39e 9262 struct value **argvec;
14f9c5c9 9263
d2e4a39e
AS
9264 pc = *pos;
9265 *pos += 1;
14f9c5c9
AS
9266 op = exp->elts[pc].opcode;
9267
d2e4a39e 9268 switch (op)
14f9c5c9
AS
9269 {
9270 default:
9271 *pos -= 1;
6e48bd2c
JB
9272 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9273 arg1 = unwrap_value (arg1);
9274
9275 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
9276 then we need to perform the conversion manually, because
9277 evaluate_subexp_standard doesn't do it. This conversion is
9278 necessary in Ada because the different kinds of float/fixed
9279 types in Ada have different representations.
9280
9281 Similarly, we need to perform the conversion from OP_LONG
9282 ourselves. */
9283 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
9284 arg1 = ada_value_cast (expect_type, arg1, noside);
9285
9286 return arg1;
4c4b4cd2
PH
9287
9288 case OP_STRING:
9289 {
76a01679 9290 struct value *result;
5b4ee69b 9291
76a01679
JB
9292 *pos -= 1;
9293 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
9294 /* The result type will have code OP_STRING, bashed there from
9295 OP_ARRAY. Bash it back. */
df407dfe
AC
9296 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
9297 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 9298 return result;
4c4b4cd2 9299 }
14f9c5c9
AS
9300
9301 case UNOP_CAST:
9302 (*pos) += 2;
9303 type = exp->elts[pc + 1].type;
9304 arg1 = evaluate_subexp (type, exp, pos, noside);
9305 if (noside == EVAL_SKIP)
4c4b4cd2 9306 goto nosideret;
6e48bd2c 9307 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
9308 return arg1;
9309
4c4b4cd2
PH
9310 case UNOP_QUAL:
9311 (*pos) += 2;
9312 type = exp->elts[pc + 1].type;
9313 return ada_evaluate_subexp (type, exp, pos, noside);
9314
14f9c5c9
AS
9315 case BINOP_ASSIGN:
9316 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
9317 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9318 {
9319 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
9320 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
9321 return arg1;
9322 return ada_value_assign (arg1, arg1);
9323 }
003f3813
JB
9324 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
9325 except if the lhs of our assignment is a convenience variable.
9326 In the case of assigning to a convenience variable, the lhs
9327 should be exactly the result of the evaluation of the rhs. */
9328 type = value_type (arg1);
9329 if (VALUE_LVAL (arg1) == lval_internalvar)
9330 type = NULL;
9331 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 9332 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 9333 return arg1;
df407dfe
AC
9334 if (ada_is_fixed_point_type (value_type (arg1)))
9335 arg2 = cast_to_fixed (value_type (arg1), arg2);
9336 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 9337 error
323e0a4a 9338 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 9339 else
df407dfe 9340 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 9341 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
9342
9343 case BINOP_ADD:
9344 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9345 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9346 if (noside == EVAL_SKIP)
4c4b4cd2 9347 goto nosideret;
2ac8a782
JB
9348 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9349 return (value_from_longest
9350 (value_type (arg1),
9351 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
9352 if ((ada_is_fixed_point_type (value_type (arg1))
9353 || ada_is_fixed_point_type (value_type (arg2)))
9354 && value_type (arg1) != value_type (arg2))
323e0a4a 9355 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
9356 /* Do the addition, and cast the result to the type of the first
9357 argument. We cannot cast the result to a reference type, so if
9358 ARG1 is a reference type, find its underlying type. */
9359 type = value_type (arg1);
9360 while (TYPE_CODE (type) == TYPE_CODE_REF)
9361 type = TYPE_TARGET_TYPE (type);
f44316fa 9362 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 9363 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
9364
9365 case BINOP_SUB:
9366 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
9367 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
9368 if (noside == EVAL_SKIP)
4c4b4cd2 9369 goto nosideret;
2ac8a782
JB
9370 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
9371 return (value_from_longest
9372 (value_type (arg1),
9373 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
9374 if ((ada_is_fixed_point_type (value_type (arg1))
9375 || ada_is_fixed_point_type (value_type (arg2)))
9376 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
9377 error (_("Operands of fixed-point subtraction "
9378 "must have the same type"));
b7789565
JB
9379 /* Do the substraction, and cast the result to the type of the first
9380 argument. We cannot cast the result to a reference type, so if
9381 ARG1 is a reference type, find its underlying type. */
9382 type = value_type (arg1);
9383 while (TYPE_CODE (type) == TYPE_CODE_REF)
9384 type = TYPE_TARGET_TYPE (type);
f44316fa 9385 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 9386 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
9387
9388 case BINOP_MUL:
9389 case BINOP_DIV:
e1578042
JB
9390 case BINOP_REM:
9391 case BINOP_MOD:
14f9c5c9
AS
9392 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9393 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9394 if (noside == EVAL_SKIP)
4c4b4cd2 9395 goto nosideret;
e1578042 9396 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
9397 {
9398 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9399 return value_zero (value_type (arg1), not_lval);
9400 }
14f9c5c9 9401 else
4c4b4cd2 9402 {
a53b7a21 9403 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 9404 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 9405 arg1 = cast_from_fixed (type, arg1);
df407dfe 9406 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 9407 arg2 = cast_from_fixed (type, arg2);
f44316fa 9408 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
9409 return ada_value_binop (arg1, arg2, op);
9410 }
9411
4c4b4cd2
PH
9412 case BINOP_EQUAL:
9413 case BINOP_NOTEQUAL:
14f9c5c9 9414 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 9415 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 9416 if (noside == EVAL_SKIP)
76a01679 9417 goto nosideret;
4c4b4cd2 9418 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 9419 tem = 0;
4c4b4cd2 9420 else
f44316fa
UW
9421 {
9422 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9423 tem = ada_value_equal (arg1, arg2);
9424 }
4c4b4cd2 9425 if (op == BINOP_NOTEQUAL)
76a01679 9426 tem = !tem;
fbb06eb1
UW
9427 type = language_bool_type (exp->language_defn, exp->gdbarch);
9428 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
9429
9430 case UNOP_NEG:
9431 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9432 if (noside == EVAL_SKIP)
9433 goto nosideret;
df407dfe
AC
9434 else if (ada_is_fixed_point_type (value_type (arg1)))
9435 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 9436 else
f44316fa
UW
9437 {
9438 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9439 return value_neg (arg1);
9440 }
4c4b4cd2 9441
2330c6c6
JB
9442 case BINOP_LOGICAL_AND:
9443 case BINOP_LOGICAL_OR:
9444 case UNOP_LOGICAL_NOT:
000d5124
JB
9445 {
9446 struct value *val;
9447
9448 *pos -= 1;
9449 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
9450 type = language_bool_type (exp->language_defn, exp->gdbarch);
9451 return value_cast (type, val);
000d5124 9452 }
2330c6c6
JB
9453
9454 case BINOP_BITWISE_AND:
9455 case BINOP_BITWISE_IOR:
9456 case BINOP_BITWISE_XOR:
000d5124
JB
9457 {
9458 struct value *val;
9459
9460 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9461 *pos = pc;
9462 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
9463
9464 return value_cast (value_type (arg1), val);
9465 }
2330c6c6 9466
14f9c5c9
AS
9467 case OP_VAR_VALUE:
9468 *pos -= 1;
6799def4 9469
14f9c5c9 9470 if (noside == EVAL_SKIP)
4c4b4cd2
PH
9471 {
9472 *pos += 4;
9473 goto nosideret;
9474 }
9475 else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
9476 /* Only encountered when an unresolved symbol occurs in a
9477 context other than a function call, in which case, it is
52ce6436 9478 invalid. */
323e0a4a 9479 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 9480 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
14f9c5c9 9481 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 9482 {
0c1f74cf 9483 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
9484 /* Check to see if this is a tagged type. We also need to handle
9485 the case where the type is a reference to a tagged type, but
9486 we have to be careful to exclude pointers to tagged types.
9487 The latter should be shown as usual (as a pointer), whereas
9488 a reference should mostly be transparent to the user. */
9489 if (ada_is_tagged_type (type, 0)
9490 || (TYPE_CODE(type) == TYPE_CODE_REF
9491 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0c1f74cf
JB
9492 {
9493 /* Tagged types are a little special in the fact that the real
9494 type is dynamic and can only be determined by inspecting the
9495 object's tag. This means that we need to get the object's
9496 value first (EVAL_NORMAL) and then extract the actual object
9497 type from its tag.
9498
9499 Note that we cannot skip the final step where we extract
9500 the object type from its tag, because the EVAL_NORMAL phase
9501 results in dynamic components being resolved into fixed ones.
9502 This can cause problems when trying to print the type
9503 description of tagged types whose parent has a dynamic size:
9504 We use the type name of the "_parent" component in order
9505 to print the name of the ancestor type in the type description.
9506 If that component had a dynamic size, the resolution into
9507 a fixed type would result in the loss of that type name,
9508 thus preventing us from printing the name of the ancestor
9509 type in the type description. */
b79819ba
JB
9510 struct type *actual_type;
9511
0c1f74cf 9512 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
b79819ba
JB
9513 actual_type = type_from_tag (ada_value_tag (arg1));
9514 if (actual_type == NULL)
9515 /* If, for some reason, we were unable to determine
9516 the actual type from the tag, then use the static
9517 approximation that we just computed as a fallback.
9518 This can happen if the debugging information is
9519 incomplete, for instance. */
9520 actual_type = type;
9521
9522 return value_zero (actual_type, not_lval);
0c1f74cf
JB
9523 }
9524
4c4b4cd2
PH
9525 *pos += 4;
9526 return value_zero
9527 (to_static_fixed_type
9528 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
9529 not_lval);
9530 }
d2e4a39e 9531 else
4c4b4cd2 9532 {
284614f0
JB
9533 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9534 arg1 = unwrap_value (arg1);
4c4b4cd2
PH
9535 return ada_to_fixed_value (arg1);
9536 }
9537
9538 case OP_FUNCALL:
9539 (*pos) += 2;
9540
9541 /* Allocate arg vector, including space for the function to be
9542 called in argvec[0] and a terminating NULL. */
9543 nargs = longest_to_int (exp->elts[pc + 1].longconst);
9544 argvec =
9545 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
9546
9547 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 9548 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 9549 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
9550 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
9551 else
9552 {
9553 for (tem = 0; tem <= nargs; tem += 1)
9554 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9555 argvec[tem] = 0;
9556
9557 if (noside == EVAL_SKIP)
9558 goto nosideret;
9559 }
9560
ad82864c
JB
9561 if (ada_is_constrained_packed_array_type
9562 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 9563 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
9564 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
9565 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
9566 /* This is a packed array that has already been fixed, and
9567 therefore already coerced to a simple array. Nothing further
9568 to do. */
9569 ;
df407dfe
AC
9570 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
9571 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
76a01679 9572 && VALUE_LVAL (argvec[0]) == lval_memory))
4c4b4cd2
PH
9573 argvec[0] = value_addr (argvec[0]);
9574
df407dfe 9575 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
9576
9577 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
9578 them. So, if this is an array typedef (encoding use for array
9579 access types encoded as fat pointers), strip it now. */
720d1a40
JB
9580 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
9581 type = ada_typedef_target_type (type);
9582
4c4b4cd2
PH
9583 if (TYPE_CODE (type) == TYPE_CODE_PTR)
9584 {
61ee279c 9585 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
9586 {
9587 case TYPE_CODE_FUNC:
61ee279c 9588 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
9589 break;
9590 case TYPE_CODE_ARRAY:
9591 break;
9592 case TYPE_CODE_STRUCT:
9593 if (noside != EVAL_AVOID_SIDE_EFFECTS)
9594 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 9595 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
9596 break;
9597 default:
323e0a4a 9598 error (_("cannot subscript or call something of type `%s'"),
df407dfe 9599 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
9600 break;
9601 }
9602 }
9603
9604 switch (TYPE_CODE (type))
9605 {
9606 case TYPE_CODE_FUNC:
9607 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9608 return allocate_value (TYPE_TARGET_TYPE (type));
9609 return call_function_by_hand (argvec[0], nargs, argvec + 1);
9610 case TYPE_CODE_STRUCT:
9611 {
9612 int arity;
9613
4c4b4cd2
PH
9614 arity = ada_array_arity (type);
9615 type = ada_array_element_type (type, nargs);
9616 if (type == NULL)
323e0a4a 9617 error (_("cannot subscript or call a record"));
4c4b4cd2 9618 if (arity != nargs)
323e0a4a 9619 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 9620 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 9621 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
9622 return
9623 unwrap_value (ada_value_subscript
9624 (argvec[0], nargs, argvec + 1));
9625 }
9626 case TYPE_CODE_ARRAY:
9627 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9628 {
9629 type = ada_array_element_type (type, nargs);
9630 if (type == NULL)
323e0a4a 9631 error (_("element type of array unknown"));
4c4b4cd2 9632 else
0a07e705 9633 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
9634 }
9635 return
9636 unwrap_value (ada_value_subscript
9637 (ada_coerce_to_simple_array (argvec[0]),
9638 nargs, argvec + 1));
9639 case TYPE_CODE_PTR: /* Pointer to array */
9640 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
9641 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9642 {
9643 type = ada_array_element_type (type, nargs);
9644 if (type == NULL)
323e0a4a 9645 error (_("element type of array unknown"));
4c4b4cd2 9646 else
0a07e705 9647 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
9648 }
9649 return
9650 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
9651 nargs, argvec + 1));
9652
9653 default:
e1d5a0d2
PH
9654 error (_("Attempt to index or call something other than an "
9655 "array or function"));
4c4b4cd2
PH
9656 }
9657
9658 case TERNOP_SLICE:
9659 {
9660 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9661 struct value *low_bound_val =
9662 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
9663 struct value *high_bound_val =
9664 evaluate_subexp (NULL_TYPE, exp, pos, noside);
9665 LONGEST low_bound;
9666 LONGEST high_bound;
5b4ee69b 9667
994b9211
AC
9668 low_bound_val = coerce_ref (low_bound_val);
9669 high_bound_val = coerce_ref (high_bound_val);
714e53ab
PH
9670 low_bound = pos_atr (low_bound_val);
9671 high_bound = pos_atr (high_bound_val);
963a6417 9672
4c4b4cd2
PH
9673 if (noside == EVAL_SKIP)
9674 goto nosideret;
9675
4c4b4cd2
PH
9676 /* If this is a reference to an aligner type, then remove all
9677 the aligners. */
df407dfe
AC
9678 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9679 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
9680 TYPE_TARGET_TYPE (value_type (array)) =
9681 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 9682
ad82864c 9683 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 9684 error (_("cannot slice a packed array"));
4c4b4cd2
PH
9685
9686 /* If this is a reference to an array or an array lvalue,
9687 convert to a pointer. */
df407dfe
AC
9688 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9689 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
9690 && VALUE_LVAL (array) == lval_memory))
9691 array = value_addr (array);
9692
1265e4aa 9693 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 9694 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 9695 (value_type (array))))
0b5d8877 9696 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
9697
9698 array = ada_coerce_to_simple_array_ptr (array);
9699
714e53ab
PH
9700 /* If we have more than one level of pointer indirection,
9701 dereference the value until we get only one level. */
df407dfe
AC
9702 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
9703 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
9704 == TYPE_CODE_PTR))
9705 array = value_ind (array);
9706
9707 /* Make sure we really do have an array type before going further,
9708 to avoid a SEGV when trying to get the index type or the target
9709 type later down the road if the debug info generated by
9710 the compiler is incorrect or incomplete. */
df407dfe 9711 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 9712 error (_("cannot take slice of non-array"));
714e53ab 9713
828292f2
JB
9714 if (TYPE_CODE (ada_check_typedef (value_type (array)))
9715 == TYPE_CODE_PTR)
4c4b4cd2 9716 {
828292f2
JB
9717 struct type *type0 = ada_check_typedef (value_type (array));
9718
0b5d8877 9719 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
828292f2 9720 return empty_array (TYPE_TARGET_TYPE (type0), low_bound);
4c4b4cd2
PH
9721 else
9722 {
9723 struct type *arr_type0 =
828292f2 9724 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 9725
f5938064
JG
9726 return ada_value_slice_from_ptr (array, arr_type0,
9727 longest_to_int (low_bound),
9728 longest_to_int (high_bound));
4c4b4cd2
PH
9729 }
9730 }
9731 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9732 return array;
9733 else if (high_bound < low_bound)
df407dfe 9734 return empty_array (value_type (array), low_bound);
4c4b4cd2 9735 else
529cad9c
PH
9736 return ada_value_slice (array, longest_to_int (low_bound),
9737 longest_to_int (high_bound));
4c4b4cd2 9738 }
14f9c5c9 9739
4c4b4cd2
PH
9740 case UNOP_IN_RANGE:
9741 (*pos) += 2;
9742 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 9743 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 9744
14f9c5c9 9745 if (noside == EVAL_SKIP)
4c4b4cd2 9746 goto nosideret;
14f9c5c9 9747
4c4b4cd2
PH
9748 switch (TYPE_CODE (type))
9749 {
9750 default:
e1d5a0d2
PH
9751 lim_warning (_("Membership test incompletely implemented; "
9752 "always returns true"));
fbb06eb1
UW
9753 type = language_bool_type (exp->language_defn, exp->gdbarch);
9754 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
9755
9756 case TYPE_CODE_RANGE:
030b4912
UW
9757 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
9758 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
9759 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9760 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
9761 type = language_bool_type (exp->language_defn, exp->gdbarch);
9762 return
9763 value_from_longest (type,
4c4b4cd2
PH
9764 (value_less (arg1, arg3)
9765 || value_equal (arg1, arg3))
9766 && (value_less (arg2, arg1)
9767 || value_equal (arg2, arg1)));
9768 }
9769
9770 case BINOP_IN_BOUNDS:
14f9c5c9 9771 (*pos) += 2;
4c4b4cd2
PH
9772 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9773 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 9774
4c4b4cd2
PH
9775 if (noside == EVAL_SKIP)
9776 goto nosideret;
14f9c5c9 9777
4c4b4cd2 9778 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
9779 {
9780 type = language_bool_type (exp->language_defn, exp->gdbarch);
9781 return value_zero (type, not_lval);
9782 }
14f9c5c9 9783
4c4b4cd2 9784 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 9785
1eea4ebd
UW
9786 type = ada_index_type (value_type (arg2), tem, "range");
9787 if (!type)
9788 type = value_type (arg1);
14f9c5c9 9789
1eea4ebd
UW
9790 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
9791 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 9792
f44316fa
UW
9793 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9794 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 9795 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 9796 return
fbb06eb1 9797 value_from_longest (type,
4c4b4cd2
PH
9798 (value_less (arg1, arg3)
9799 || value_equal (arg1, arg3))
9800 && (value_less (arg2, arg1)
9801 || value_equal (arg2, arg1)));
9802
9803 case TERNOP_IN_RANGE:
9804 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9805 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9806 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9807
9808 if (noside == EVAL_SKIP)
9809 goto nosideret;
9810
f44316fa
UW
9811 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9812 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 9813 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 9814 return
fbb06eb1 9815 value_from_longest (type,
4c4b4cd2
PH
9816 (value_less (arg1, arg3)
9817 || value_equal (arg1, arg3))
9818 && (value_less (arg2, arg1)
9819 || value_equal (arg2, arg1)));
9820
9821 case OP_ATR_FIRST:
9822 case OP_ATR_LAST:
9823 case OP_ATR_LENGTH:
9824 {
76a01679 9825 struct type *type_arg;
5b4ee69b 9826
76a01679
JB
9827 if (exp->elts[*pos].opcode == OP_TYPE)
9828 {
9829 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9830 arg1 = NULL;
5bc23cb3 9831 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
9832 }
9833 else
9834 {
9835 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9836 type_arg = NULL;
9837 }
9838
9839 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 9840 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
9841 tem = longest_to_int (exp->elts[*pos + 2].longconst);
9842 *pos += 4;
9843
9844 if (noside == EVAL_SKIP)
9845 goto nosideret;
9846
9847 if (type_arg == NULL)
9848 {
9849 arg1 = ada_coerce_ref (arg1);
9850
ad82864c 9851 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
9852 arg1 = ada_coerce_to_simple_array (arg1);
9853
1eea4ebd
UW
9854 type = ada_index_type (value_type (arg1), tem,
9855 ada_attribute_name (op));
9856 if (type == NULL)
9857 type = builtin_type (exp->gdbarch)->builtin_int;
76a01679
JB
9858
9859 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 9860 return allocate_value (type);
76a01679
JB
9861
9862 switch (op)
9863 {
9864 default: /* Should never happen. */
323e0a4a 9865 error (_("unexpected attribute encountered"));
76a01679 9866 case OP_ATR_FIRST:
1eea4ebd
UW
9867 return value_from_longest
9868 (type, ada_array_bound (arg1, tem, 0));
76a01679 9869 case OP_ATR_LAST:
1eea4ebd
UW
9870 return value_from_longest
9871 (type, ada_array_bound (arg1, tem, 1));
76a01679 9872 case OP_ATR_LENGTH:
1eea4ebd
UW
9873 return value_from_longest
9874 (type, ada_array_length (arg1, tem));
76a01679
JB
9875 }
9876 }
9877 else if (discrete_type_p (type_arg))
9878 {
9879 struct type *range_type;
9880 char *name = ada_type_name (type_arg);
5b4ee69b 9881
76a01679
JB
9882 range_type = NULL;
9883 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 9884 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
9885 if (range_type == NULL)
9886 range_type = type_arg;
9887 switch (op)
9888 {
9889 default:
323e0a4a 9890 error (_("unexpected attribute encountered"));
76a01679 9891 case OP_ATR_FIRST:
690cc4eb 9892 return value_from_longest
43bbcdc2 9893 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 9894 case OP_ATR_LAST:
690cc4eb 9895 return value_from_longest
43bbcdc2 9896 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 9897 case OP_ATR_LENGTH:
323e0a4a 9898 error (_("the 'length attribute applies only to array types"));
76a01679
JB
9899 }
9900 }
9901 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 9902 error (_("unimplemented type attribute"));
76a01679
JB
9903 else
9904 {
9905 LONGEST low, high;
9906
ad82864c
JB
9907 if (ada_is_constrained_packed_array_type (type_arg))
9908 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 9909
1eea4ebd 9910 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
76a01679 9911 if (type == NULL)
1eea4ebd
UW
9912 type = builtin_type (exp->gdbarch)->builtin_int;
9913
76a01679
JB
9914 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9915 return allocate_value (type);
9916
9917 switch (op)
9918 {
9919 default:
323e0a4a 9920 error (_("unexpected attribute encountered"));
76a01679 9921 case OP_ATR_FIRST:
1eea4ebd 9922 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
9923 return value_from_longest (type, low);
9924 case OP_ATR_LAST:
1eea4ebd 9925 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
9926 return value_from_longest (type, high);
9927 case OP_ATR_LENGTH:
1eea4ebd
UW
9928 low = ada_array_bound_from_type (type_arg, tem, 0);
9929 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
9930 return value_from_longest (type, high - low + 1);
9931 }
9932 }
14f9c5c9
AS
9933 }
9934
4c4b4cd2
PH
9935 case OP_ATR_TAG:
9936 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9937 if (noside == EVAL_SKIP)
76a01679 9938 goto nosideret;
4c4b4cd2
PH
9939
9940 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 9941 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
9942
9943 return ada_value_tag (arg1);
9944
9945 case OP_ATR_MIN:
9946 case OP_ATR_MAX:
9947 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
9948 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9949 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9950 if (noside == EVAL_SKIP)
76a01679 9951 goto nosideret;
d2e4a39e 9952 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 9953 return value_zero (value_type (arg1), not_lval);
14f9c5c9 9954 else
f44316fa
UW
9955 {
9956 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9957 return value_binop (arg1, arg2,
9958 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9959 }
14f9c5c9 9960
4c4b4cd2
PH
9961 case OP_ATR_MODULUS:
9962 {
31dedfee 9963 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 9964
5b4ee69b 9965 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
9966 if (noside == EVAL_SKIP)
9967 goto nosideret;
4c4b4cd2 9968
76a01679 9969 if (!ada_is_modular_type (type_arg))
323e0a4a 9970 error (_("'modulus must be applied to modular type"));
4c4b4cd2 9971
76a01679
JB
9972 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9973 ada_modulus (type_arg));
4c4b4cd2
PH
9974 }
9975
9976
9977 case OP_ATR_POS:
9978 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
9979 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9980 if (noside == EVAL_SKIP)
76a01679 9981 goto nosideret;
3cb382c9
UW
9982 type = builtin_type (exp->gdbarch)->builtin_int;
9983 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9984 return value_zero (type, not_lval);
14f9c5c9 9985 else
3cb382c9 9986 return value_pos_atr (type, arg1);
14f9c5c9 9987
4c4b4cd2
PH
9988 case OP_ATR_SIZE:
9989 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
9990 type = value_type (arg1);
9991
9992 /* If the argument is a reference, then dereference its type, since
9993 the user is really asking for the size of the actual object,
9994 not the size of the pointer. */
9995 if (TYPE_CODE (type) == TYPE_CODE_REF)
9996 type = TYPE_TARGET_TYPE (type);
9997
4c4b4cd2 9998 if (noside == EVAL_SKIP)
76a01679 9999 goto nosideret;
4c4b4cd2 10000 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 10001 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 10002 else
22601c15 10003 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 10004 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
10005
10006 case OP_ATR_VAL:
10007 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 10008 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 10009 type = exp->elts[pc + 2].type;
14f9c5c9 10010 if (noside == EVAL_SKIP)
76a01679 10011 goto nosideret;
4c4b4cd2 10012 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10013 return value_zero (type, not_lval);
4c4b4cd2 10014 else
76a01679 10015 return value_val_atr (type, arg1);
4c4b4cd2
PH
10016
10017 case BINOP_EXP:
10018 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10019 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10020 if (noside == EVAL_SKIP)
10021 goto nosideret;
10022 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 10023 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 10024 else
f44316fa
UW
10025 {
10026 /* For integer exponentiation operations,
10027 only promote the first argument. */
10028 if (is_integral_type (value_type (arg2)))
10029 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10030 else
10031 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10032
10033 return value_binop (arg1, arg2, op);
10034 }
4c4b4cd2
PH
10035
10036 case UNOP_PLUS:
10037 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10038 if (noside == EVAL_SKIP)
10039 goto nosideret;
10040 else
10041 return arg1;
10042
10043 case UNOP_ABS:
10044 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10045 if (noside == EVAL_SKIP)
10046 goto nosideret;
f44316fa 10047 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 10048 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 10049 return value_neg (arg1);
14f9c5c9 10050 else
4c4b4cd2 10051 return arg1;
14f9c5c9
AS
10052
10053 case UNOP_IND:
6b0d7253 10054 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10055 if (noside == EVAL_SKIP)
4c4b4cd2 10056 goto nosideret;
df407dfe 10057 type = ada_check_typedef (value_type (arg1));
14f9c5c9 10058 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
10059 {
10060 if (ada_is_array_descriptor_type (type))
10061 /* GDB allows dereferencing GNAT array descriptors. */
10062 {
10063 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 10064
4c4b4cd2 10065 if (arrType == NULL)
323e0a4a 10066 error (_("Attempt to dereference null array pointer."));
00a4c844 10067 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
10068 }
10069 else if (TYPE_CODE (type) == TYPE_CODE_PTR
10070 || TYPE_CODE (type) == TYPE_CODE_REF
10071 /* In C you can dereference an array to get the 1st elt. */
10072 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab
PH
10073 {
10074 type = to_static_fixed_type
10075 (ada_aligned_type
10076 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10077 check_size (type);
10078 return value_zero (type, lval_memory);
10079 }
4c4b4cd2 10080 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
10081 {
10082 /* GDB allows dereferencing an int. */
10083 if (expect_type == NULL)
10084 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10085 lval_memory);
10086 else
10087 {
10088 expect_type =
10089 to_static_fixed_type (ada_aligned_type (expect_type));
10090 return value_zero (expect_type, lval_memory);
10091 }
10092 }
4c4b4cd2 10093 else
323e0a4a 10094 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 10095 }
0963b4bd 10096 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 10097 type = ada_check_typedef (value_type (arg1));
d2e4a39e 10098
96967637
JB
10099 if (TYPE_CODE (type) == TYPE_CODE_INT)
10100 /* GDB allows dereferencing an int. If we were given
10101 the expect_type, then use that as the target type.
10102 Otherwise, assume that the target type is an int. */
10103 {
10104 if (expect_type != NULL)
10105 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
10106 arg1));
10107 else
10108 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
10109 (CORE_ADDR) value_as_address (arg1));
10110 }
6b0d7253 10111
4c4b4cd2
PH
10112 if (ada_is_array_descriptor_type (type))
10113 /* GDB allows dereferencing GNAT array descriptors. */
10114 return ada_coerce_to_simple_array (arg1);
14f9c5c9 10115 else
4c4b4cd2 10116 return ada_value_ind (arg1);
14f9c5c9
AS
10117
10118 case STRUCTOP_STRUCT:
10119 tem = longest_to_int (exp->elts[pc + 1].longconst);
10120 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
10121 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10122 if (noside == EVAL_SKIP)
4c4b4cd2 10123 goto nosideret;
14f9c5c9 10124 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10125 {
df407dfe 10126 struct type *type1 = value_type (arg1);
5b4ee69b 10127
76a01679
JB
10128 if (ada_is_tagged_type (type1, 1))
10129 {
10130 type = ada_lookup_struct_elt_type (type1,
10131 &exp->elts[pc + 2].string,
10132 1, 1, NULL);
10133 if (type == NULL)
10134 /* In this case, we assume that the field COULD exist
10135 in some extension of the type. Return an object of
10136 "type" void, which will match any formal
0963b4bd 10137 (see ada_type_match). */
30b15541
UW
10138 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
10139 lval_memory);
76a01679
JB
10140 }
10141 else
10142 type =
10143 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
10144 0, NULL);
10145
10146 return value_zero (ada_aligned_type (type), lval_memory);
10147 }
14f9c5c9 10148 else
284614f0
JB
10149 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
10150 arg1 = unwrap_value (arg1);
10151 return ada_to_fixed_value (arg1);
10152
14f9c5c9 10153 case OP_TYPE:
4c4b4cd2
PH
10154 /* The value is not supposed to be used. This is here to make it
10155 easier to accommodate expressions that contain types. */
14f9c5c9
AS
10156 (*pos) += 2;
10157 if (noside == EVAL_SKIP)
4c4b4cd2 10158 goto nosideret;
14f9c5c9 10159 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 10160 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 10161 else
323e0a4a 10162 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
10163
10164 case OP_AGGREGATE:
10165 case OP_CHOICES:
10166 case OP_OTHERS:
10167 case OP_DISCRETE_RANGE:
10168 case OP_POSITIONAL:
10169 case OP_NAME:
10170 if (noside == EVAL_NORMAL)
10171 switch (op)
10172 {
10173 case OP_NAME:
10174 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 10175 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
10176 case OP_AGGREGATE:
10177 error (_("Aggregates only allowed on the right of an assignment"));
10178 default:
0963b4bd
MS
10179 internal_error (__FILE__, __LINE__,
10180 _("aggregate apparently mangled"));
52ce6436
PH
10181 }
10182
10183 ada_forward_operator_length (exp, pc, &oplen, &nargs);
10184 *pos += oplen - 1;
10185 for (tem = 0; tem < nargs; tem += 1)
10186 ada_evaluate_subexp (NULL, exp, pos, noside);
10187 goto nosideret;
14f9c5c9
AS
10188 }
10189
10190nosideret:
22601c15 10191 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 10192}
14f9c5c9 10193\f
d2e4a39e 10194
4c4b4cd2 10195 /* Fixed point */
14f9c5c9
AS
10196
10197/* If TYPE encodes an Ada fixed-point type, return the suffix of the
10198 type name that encodes the 'small and 'delta information.
4c4b4cd2 10199 Otherwise, return NULL. */
14f9c5c9 10200
d2e4a39e 10201static const char *
ebf56fd3 10202fixed_type_info (struct type *type)
14f9c5c9 10203{
d2e4a39e 10204 const char *name = ada_type_name (type);
14f9c5c9
AS
10205 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
10206
d2e4a39e
AS
10207 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
10208 {
14f9c5c9 10209 const char *tail = strstr (name, "___XF_");
5b4ee69b 10210
14f9c5c9 10211 if (tail == NULL)
4c4b4cd2 10212 return NULL;
d2e4a39e 10213 else
4c4b4cd2 10214 return tail + 5;
14f9c5c9
AS
10215 }
10216 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
10217 return fixed_type_info (TYPE_TARGET_TYPE (type));
10218 else
10219 return NULL;
10220}
10221
4c4b4cd2 10222/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
10223
10224int
ebf56fd3 10225ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
10226{
10227 return fixed_type_info (type) != NULL;
10228}
10229
4c4b4cd2
PH
10230/* Return non-zero iff TYPE represents a System.Address type. */
10231
10232int
10233ada_is_system_address_type (struct type *type)
10234{
10235 return (TYPE_NAME (type)
10236 && strcmp (TYPE_NAME (type), "system__address") == 0);
10237}
10238
14f9c5c9
AS
10239/* Assuming that TYPE is the representation of an Ada fixed-point
10240 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 10241 delta cannot be determined. */
14f9c5c9
AS
10242
10243DOUBLEST
ebf56fd3 10244ada_delta (struct type *type)
14f9c5c9
AS
10245{
10246 const char *encoding = fixed_type_info (type);
facc390f 10247 DOUBLEST num, den;
14f9c5c9 10248
facc390f
JB
10249 /* Strictly speaking, num and den are encoded as integer. However,
10250 they may not fit into a long, and they will have to be converted
10251 to DOUBLEST anyway. So scan them as DOUBLEST. */
10252 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10253 &num, &den) < 2)
14f9c5c9 10254 return -1.0;
d2e4a39e 10255 else
facc390f 10256 return num / den;
14f9c5c9
AS
10257}
10258
10259/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 10260 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
10261
10262static DOUBLEST
ebf56fd3 10263scaling_factor (struct type *type)
14f9c5c9
AS
10264{
10265 const char *encoding = fixed_type_info (type);
facc390f 10266 DOUBLEST num0, den0, num1, den1;
14f9c5c9 10267 int n;
d2e4a39e 10268
facc390f
JB
10269 /* Strictly speaking, num's and den's are encoded as integer. However,
10270 they may not fit into a long, and they will have to be converted
10271 to DOUBLEST anyway. So scan them as DOUBLEST. */
10272 n = sscanf (encoding,
10273 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
10274 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
10275 &num0, &den0, &num1, &den1);
14f9c5c9
AS
10276
10277 if (n < 2)
10278 return 1.0;
10279 else if (n == 4)
facc390f 10280 return num1 / den1;
d2e4a39e 10281 else
facc390f 10282 return num0 / den0;
14f9c5c9
AS
10283}
10284
10285
10286/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 10287 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
10288
10289DOUBLEST
ebf56fd3 10290ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 10291{
d2e4a39e 10292 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
10293}
10294
4c4b4cd2
PH
10295/* The representation of a fixed-point value of type TYPE
10296 corresponding to the value X. */
14f9c5c9
AS
10297
10298LONGEST
ebf56fd3 10299ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
10300{
10301 return (LONGEST) (x / scaling_factor (type) + 0.5);
10302}
10303
14f9c5c9 10304\f
d2e4a39e 10305
4c4b4cd2 10306 /* Range types */
14f9c5c9
AS
10307
10308/* Scan STR beginning at position K for a discriminant name, and
10309 return the value of that discriminant field of DVAL in *PX. If
10310 PNEW_K is not null, put the position of the character beyond the
10311 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 10312 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
10313
10314static int
07d8f827 10315scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
76a01679 10316 int *pnew_k)
14f9c5c9
AS
10317{
10318 static char *bound_buffer = NULL;
10319 static size_t bound_buffer_len = 0;
10320 char *bound;
10321 char *pend;
d2e4a39e 10322 struct value *bound_val;
14f9c5c9
AS
10323
10324 if (dval == NULL || str == NULL || str[k] == '\0')
10325 return 0;
10326
d2e4a39e 10327 pend = strstr (str + k, "__");
14f9c5c9
AS
10328 if (pend == NULL)
10329 {
d2e4a39e 10330 bound = str + k;
14f9c5c9
AS
10331 k += strlen (bound);
10332 }
d2e4a39e 10333 else
14f9c5c9 10334 {
d2e4a39e 10335 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
14f9c5c9 10336 bound = bound_buffer;
d2e4a39e
AS
10337 strncpy (bound_buffer, str + k, pend - (str + k));
10338 bound[pend - (str + k)] = '\0';
10339 k = pend - str;
14f9c5c9 10340 }
d2e4a39e 10341
df407dfe 10342 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
10343 if (bound_val == NULL)
10344 return 0;
10345
10346 *px = value_as_long (bound_val);
10347 if (pnew_k != NULL)
10348 *pnew_k = k;
10349 return 1;
10350}
10351
10352/* Value of variable named NAME in the current environment. If
10353 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
10354 otherwise causes an error with message ERR_MSG. */
10355
d2e4a39e
AS
10356static struct value *
10357get_var_value (char *name, char *err_msg)
14f9c5c9 10358{
4c4b4cd2 10359 struct ada_symbol_info *syms;
14f9c5c9
AS
10360 int nsyms;
10361
4c4b4cd2
PH
10362 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
10363 &syms);
14f9c5c9
AS
10364
10365 if (nsyms != 1)
10366 {
10367 if (err_msg == NULL)
4c4b4cd2 10368 return 0;
14f9c5c9 10369 else
8a3fe4f8 10370 error (("%s"), err_msg);
14f9c5c9
AS
10371 }
10372
4c4b4cd2 10373 return value_of_variable (syms[0].sym, syms[0].block);
14f9c5c9 10374}
d2e4a39e 10375
14f9c5c9 10376/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
10377 no such variable found, returns 0, and sets *FLAG to 0. If
10378 successful, sets *FLAG to 1. */
10379
14f9c5c9 10380LONGEST
4c4b4cd2 10381get_int_var_value (char *name, int *flag)
14f9c5c9 10382{
4c4b4cd2 10383 struct value *var_val = get_var_value (name, 0);
d2e4a39e 10384
14f9c5c9
AS
10385 if (var_val == 0)
10386 {
10387 if (flag != NULL)
4c4b4cd2 10388 *flag = 0;
14f9c5c9
AS
10389 return 0;
10390 }
10391 else
10392 {
10393 if (flag != NULL)
4c4b4cd2 10394 *flag = 1;
14f9c5c9
AS
10395 return value_as_long (var_val);
10396 }
10397}
d2e4a39e 10398
14f9c5c9
AS
10399
10400/* Return a range type whose base type is that of the range type named
10401 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 10402 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
10403 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
10404 corresponding range type from debug information; fall back to using it
10405 if symbol lookup fails. If a new type must be created, allocate it
10406 like ORIG_TYPE was. The bounds information, in general, is encoded
10407 in NAME, the base type given in the named range type. */
14f9c5c9 10408
d2e4a39e 10409static struct type *
28c85d6c 10410to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 10411{
28c85d6c 10412 char *name;
14f9c5c9 10413 struct type *base_type;
d2e4a39e 10414 char *subtype_info;
14f9c5c9 10415
28c85d6c
JB
10416 gdb_assert (raw_type != NULL);
10417 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 10418
1ce677a4 10419 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
10420 base_type = TYPE_TARGET_TYPE (raw_type);
10421 else
10422 base_type = raw_type;
10423
28c85d6c 10424 name = TYPE_NAME (raw_type);
14f9c5c9
AS
10425 subtype_info = strstr (name, "___XD");
10426 if (subtype_info == NULL)
690cc4eb 10427 {
43bbcdc2
PH
10428 LONGEST L = ada_discrete_type_low_bound (raw_type);
10429 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 10430
690cc4eb
PH
10431 if (L < INT_MIN || U > INT_MAX)
10432 return raw_type;
10433 else
28c85d6c 10434 return create_range_type (alloc_type_copy (raw_type), raw_type,
43bbcdc2
PH
10435 ada_discrete_type_low_bound (raw_type),
10436 ada_discrete_type_high_bound (raw_type));
690cc4eb 10437 }
14f9c5c9
AS
10438 else
10439 {
10440 static char *name_buf = NULL;
10441 static size_t name_len = 0;
10442 int prefix_len = subtype_info - name;
10443 LONGEST L, U;
10444 struct type *type;
10445 char *bounds_str;
10446 int n;
10447
10448 GROW_VECT (name_buf, name_len, prefix_len + 5);
10449 strncpy (name_buf, name, prefix_len);
10450 name_buf[prefix_len] = '\0';
10451
10452 subtype_info += 5;
10453 bounds_str = strchr (subtype_info, '_');
10454 n = 1;
10455
d2e4a39e 10456 if (*subtype_info == 'L')
4c4b4cd2
PH
10457 {
10458 if (!ada_scan_number (bounds_str, n, &L, &n)
10459 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
10460 return raw_type;
10461 if (bounds_str[n] == '_')
10462 n += 2;
0963b4bd 10463 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
10464 n += 1;
10465 subtype_info += 1;
10466 }
d2e4a39e 10467 else
4c4b4cd2
PH
10468 {
10469 int ok;
5b4ee69b 10470
4c4b4cd2
PH
10471 strcpy (name_buf + prefix_len, "___L");
10472 L = get_int_var_value (name_buf, &ok);
10473 if (!ok)
10474 {
323e0a4a 10475 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
10476 L = 1;
10477 }
10478 }
14f9c5c9 10479
d2e4a39e 10480 if (*subtype_info == 'U')
4c4b4cd2
PH
10481 {
10482 if (!ada_scan_number (bounds_str, n, &U, &n)
10483 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
10484 return raw_type;
10485 }
d2e4a39e 10486 else
4c4b4cd2
PH
10487 {
10488 int ok;
5b4ee69b 10489
4c4b4cd2
PH
10490 strcpy (name_buf + prefix_len, "___U");
10491 U = get_int_var_value (name_buf, &ok);
10492 if (!ok)
10493 {
323e0a4a 10494 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
10495 U = L;
10496 }
10497 }
14f9c5c9 10498
28c85d6c 10499 type = create_range_type (alloc_type_copy (raw_type), base_type, L, U);
d2e4a39e 10500 TYPE_NAME (type) = name;
14f9c5c9
AS
10501 return type;
10502 }
10503}
10504
4c4b4cd2
PH
10505/* True iff NAME is the name of a range type. */
10506
14f9c5c9 10507int
d2e4a39e 10508ada_is_range_type_name (const char *name)
14f9c5c9
AS
10509{
10510 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 10511}
14f9c5c9 10512\f
d2e4a39e 10513
4c4b4cd2
PH
10514 /* Modular types */
10515
10516/* True iff TYPE is an Ada modular type. */
14f9c5c9 10517
14f9c5c9 10518int
d2e4a39e 10519ada_is_modular_type (struct type *type)
14f9c5c9 10520{
18af8284 10521 struct type *subranged_type = get_base_type (type);
14f9c5c9
AS
10522
10523 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 10524 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 10525 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
10526}
10527
0056e4d5
JB
10528/* Try to determine the lower and upper bounds of the given modular type
10529 using the type name only. Return non-zero and set L and U as the lower
10530 and upper bounds (respectively) if successful. */
10531
10532int
10533ada_modulus_from_name (struct type *type, ULONGEST *modulus)
10534{
10535 char *name = ada_type_name (type);
10536 char *suffix;
10537 int k;
10538 LONGEST U;
10539
10540 if (name == NULL)
10541 return 0;
10542
10543 /* Discrete type bounds are encoded using an __XD suffix. In our case,
10544 we are looking for static bounds, which means an __XDLU suffix.
10545 Moreover, we know that the lower bound of modular types is always
10546 zero, so the actual suffix should start with "__XDLU_0__", and
10547 then be followed by the upper bound value. */
10548 suffix = strstr (name, "__XDLU_0__");
10549 if (suffix == NULL)
10550 return 0;
10551 k = 10;
10552 if (!ada_scan_number (suffix, k, &U, NULL))
10553 return 0;
10554
10555 *modulus = (ULONGEST) U + 1;
10556 return 1;
10557}
10558
4c4b4cd2
PH
10559/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
10560
61ee279c 10561ULONGEST
0056e4d5 10562ada_modulus (struct type *type)
14f9c5c9 10563{
43bbcdc2 10564 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 10565}
d2e4a39e 10566\f
f7f9143b
JB
10567
10568/* Ada exception catchpoint support:
10569 ---------------------------------
10570
10571 We support 3 kinds of exception catchpoints:
10572 . catchpoints on Ada exceptions
10573 . catchpoints on unhandled Ada exceptions
10574 . catchpoints on failed assertions
10575
10576 Exceptions raised during failed assertions, or unhandled exceptions
10577 could perfectly be caught with the general catchpoint on Ada exceptions.
10578 However, we can easily differentiate these two special cases, and having
10579 the option to distinguish these two cases from the rest can be useful
10580 to zero-in on certain situations.
10581
10582 Exception catchpoints are a specialized form of breakpoint,
10583 since they rely on inserting breakpoints inside known routines
10584 of the GNAT runtime. The implementation therefore uses a standard
10585 breakpoint structure of the BP_BREAKPOINT type, but with its own set
10586 of breakpoint_ops.
10587
0259addd
JB
10588 Support in the runtime for exception catchpoints have been changed
10589 a few times already, and these changes affect the implementation
10590 of these catchpoints. In order to be able to support several
10591 variants of the runtime, we use a sniffer that will determine
28010a5d 10592 the runtime variant used by the program being debugged. */
f7f9143b
JB
10593
10594/* The different types of catchpoints that we introduced for catching
10595 Ada exceptions. */
10596
10597enum exception_catchpoint_kind
10598{
10599 ex_catch_exception,
10600 ex_catch_exception_unhandled,
10601 ex_catch_assert
10602};
10603
3d0b0fa3
JB
10604/* Ada's standard exceptions. */
10605
10606static char *standard_exc[] = {
10607 "constraint_error",
10608 "program_error",
10609 "storage_error",
10610 "tasking_error"
10611};
10612
0259addd
JB
10613typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
10614
10615/* A structure that describes how to support exception catchpoints
10616 for a given executable. */
10617
10618struct exception_support_info
10619{
10620 /* The name of the symbol to break on in order to insert
10621 a catchpoint on exceptions. */
10622 const char *catch_exception_sym;
10623
10624 /* The name of the symbol to break on in order to insert
10625 a catchpoint on unhandled exceptions. */
10626 const char *catch_exception_unhandled_sym;
10627
10628 /* The name of the symbol to break on in order to insert
10629 a catchpoint on failed assertions. */
10630 const char *catch_assert_sym;
10631
10632 /* Assuming that the inferior just triggered an unhandled exception
10633 catchpoint, this function is responsible for returning the address
10634 in inferior memory where the name of that exception is stored.
10635 Return zero if the address could not be computed. */
10636 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
10637};
10638
10639static CORE_ADDR ada_unhandled_exception_name_addr (void);
10640static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
10641
10642/* The following exception support info structure describes how to
10643 implement exception catchpoints with the latest version of the
10644 Ada runtime (as of 2007-03-06). */
10645
10646static const struct exception_support_info default_exception_support_info =
10647{
10648 "__gnat_debug_raise_exception", /* catch_exception_sym */
10649 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10650 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
10651 ada_unhandled_exception_name_addr
10652};
10653
10654/* The following exception support info structure describes how to
10655 implement exception catchpoints with a slightly older version
10656 of the Ada runtime. */
10657
10658static const struct exception_support_info exception_support_info_fallback =
10659{
10660 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
10661 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10662 "system__assertions__raise_assert_failure", /* catch_assert_sym */
10663 ada_unhandled_exception_name_addr_from_raise
10664};
10665
f17011e0
JB
10666/* Return nonzero if we can detect the exception support routines
10667 described in EINFO.
10668
10669 This function errors out if an abnormal situation is detected
10670 (for instance, if we find the exception support routines, but
10671 that support is found to be incomplete). */
10672
10673static int
10674ada_has_this_exception_support (const struct exception_support_info *einfo)
10675{
10676 struct symbol *sym;
10677
10678 /* The symbol we're looking up is provided by a unit in the GNAT runtime
10679 that should be compiled with debugging information. As a result, we
10680 expect to find that symbol in the symtabs. */
10681
10682 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
10683 if (sym == NULL)
a6af7abe
JB
10684 {
10685 /* Perhaps we did not find our symbol because the Ada runtime was
10686 compiled without debugging info, or simply stripped of it.
10687 It happens on some GNU/Linux distributions for instance, where
10688 users have to install a separate debug package in order to get
10689 the runtime's debugging info. In that situation, let the user
10690 know why we cannot insert an Ada exception catchpoint.
10691
10692 Note: Just for the purpose of inserting our Ada exception
10693 catchpoint, we could rely purely on the associated minimal symbol.
10694 But we would be operating in degraded mode anyway, since we are
10695 still lacking the debugging info needed later on to extract
10696 the name of the exception being raised (this name is printed in
10697 the catchpoint message, and is also used when trying to catch
10698 a specific exception). We do not handle this case for now. */
10699 if (lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL))
10700 error (_("Your Ada runtime appears to be missing some debugging "
10701 "information.\nCannot insert Ada exception catchpoint "
10702 "in this configuration."));
10703
10704 return 0;
10705 }
f17011e0
JB
10706
10707 /* Make sure that the symbol we found corresponds to a function. */
10708
10709 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
10710 error (_("Symbol \"%s\" is not a function (class = %d)"),
10711 SYMBOL_LINKAGE_NAME (sym), SYMBOL_CLASS (sym));
10712
10713 return 1;
10714}
10715
0259addd
JB
10716/* Inspect the Ada runtime and determine which exception info structure
10717 should be used to provide support for exception catchpoints.
10718
3eecfa55
JB
10719 This function will always set the per-inferior exception_info,
10720 or raise an error. */
0259addd
JB
10721
10722static void
10723ada_exception_support_info_sniffer (void)
10724{
3eecfa55 10725 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
10726 struct symbol *sym;
10727
10728 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 10729 if (data->exception_info != NULL)
0259addd
JB
10730 return;
10731
10732 /* Check the latest (default) exception support info. */
f17011e0 10733 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 10734 {
3eecfa55 10735 data->exception_info = &default_exception_support_info;
0259addd
JB
10736 return;
10737 }
10738
10739 /* Try our fallback exception suport info. */
f17011e0 10740 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 10741 {
3eecfa55 10742 data->exception_info = &exception_support_info_fallback;
0259addd
JB
10743 return;
10744 }
10745
10746 /* Sometimes, it is normal for us to not be able to find the routine
10747 we are looking for. This happens when the program is linked with
10748 the shared version of the GNAT runtime, and the program has not been
10749 started yet. Inform the user of these two possible causes if
10750 applicable. */
10751
ccefe4c4 10752 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
10753 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
10754
10755 /* If the symbol does not exist, then check that the program is
10756 already started, to make sure that shared libraries have been
10757 loaded. If it is not started, this may mean that the symbol is
10758 in a shared library. */
10759
10760 if (ptid_get_pid (inferior_ptid) == 0)
10761 error (_("Unable to insert catchpoint. Try to start the program first."));
10762
10763 /* At this point, we know that we are debugging an Ada program and
10764 that the inferior has been started, but we still are not able to
0963b4bd 10765 find the run-time symbols. That can mean that we are in
0259addd
JB
10766 configurable run time mode, or that a-except as been optimized
10767 out by the linker... In any case, at this point it is not worth
10768 supporting this feature. */
10769
7dda8cff 10770 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
10771}
10772
f7f9143b
JB
10773/* True iff FRAME is very likely to be that of a function that is
10774 part of the runtime system. This is all very heuristic, but is
10775 intended to be used as advice as to what frames are uninteresting
10776 to most users. */
10777
10778static int
10779is_known_support_routine (struct frame_info *frame)
10780{
4ed6b5be 10781 struct symtab_and_line sal;
f7f9143b 10782 char *func_name;
692465f1 10783 enum language func_lang;
f7f9143b 10784 int i;
f7f9143b 10785
4ed6b5be
JB
10786 /* If this code does not have any debugging information (no symtab),
10787 This cannot be any user code. */
f7f9143b 10788
4ed6b5be 10789 find_frame_sal (frame, &sal);
f7f9143b
JB
10790 if (sal.symtab == NULL)
10791 return 1;
10792
4ed6b5be
JB
10793 /* If there is a symtab, but the associated source file cannot be
10794 located, then assume this is not user code: Selecting a frame
10795 for which we cannot display the code would not be very helpful
10796 for the user. This should also take care of case such as VxWorks
10797 where the kernel has some debugging info provided for a few units. */
f7f9143b 10798
9bbc9174 10799 if (symtab_to_fullname (sal.symtab) == NULL)
f7f9143b
JB
10800 return 1;
10801
4ed6b5be
JB
10802 /* Check the unit filename againt the Ada runtime file naming.
10803 We also check the name of the objfile against the name of some
10804 known system libraries that sometimes come with debugging info
10805 too. */
10806
f7f9143b
JB
10807 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
10808 {
10809 re_comp (known_runtime_file_name_patterns[i]);
10810 if (re_exec (sal.symtab->filename))
10811 return 1;
4ed6b5be
JB
10812 if (sal.symtab->objfile != NULL
10813 && re_exec (sal.symtab->objfile->name))
10814 return 1;
f7f9143b
JB
10815 }
10816
4ed6b5be 10817 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 10818
e9e07ba6 10819 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
10820 if (func_name == NULL)
10821 return 1;
10822
10823 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
10824 {
10825 re_comp (known_auxiliary_function_name_patterns[i]);
10826 if (re_exec (func_name))
10827 return 1;
10828 }
10829
10830 return 0;
10831}
10832
10833/* Find the first frame that contains debugging information and that is not
10834 part of the Ada run-time, starting from FI and moving upward. */
10835
0ef643c8 10836void
f7f9143b
JB
10837ada_find_printable_frame (struct frame_info *fi)
10838{
10839 for (; fi != NULL; fi = get_prev_frame (fi))
10840 {
10841 if (!is_known_support_routine (fi))
10842 {
10843 select_frame (fi);
10844 break;
10845 }
10846 }
10847
10848}
10849
10850/* Assuming that the inferior just triggered an unhandled exception
10851 catchpoint, return the address in inferior memory where the name
10852 of the exception is stored.
10853
10854 Return zero if the address could not be computed. */
10855
10856static CORE_ADDR
10857ada_unhandled_exception_name_addr (void)
0259addd
JB
10858{
10859 return parse_and_eval_address ("e.full_name");
10860}
10861
10862/* Same as ada_unhandled_exception_name_addr, except that this function
10863 should be used when the inferior uses an older version of the runtime,
10864 where the exception name needs to be extracted from a specific frame
10865 several frames up in the callstack. */
10866
10867static CORE_ADDR
10868ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
10869{
10870 int frame_level;
10871 struct frame_info *fi;
3eecfa55 10872 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
10873
10874 /* To determine the name of this exception, we need to select
10875 the frame corresponding to RAISE_SYM_NAME. This frame is
10876 at least 3 levels up, so we simply skip the first 3 frames
10877 without checking the name of their associated function. */
10878 fi = get_current_frame ();
10879 for (frame_level = 0; frame_level < 3; frame_level += 1)
10880 if (fi != NULL)
10881 fi = get_prev_frame (fi);
10882
10883 while (fi != NULL)
10884 {
692465f1
JB
10885 char *func_name;
10886 enum language func_lang;
10887
e9e07ba6 10888 find_frame_funname (fi, &func_name, &func_lang, NULL);
f7f9143b 10889 if (func_name != NULL
3eecfa55 10890 && strcmp (func_name, data->exception_info->catch_exception_sym) == 0)
f7f9143b
JB
10891 break; /* We found the frame we were looking for... */
10892 fi = get_prev_frame (fi);
10893 }
10894
10895 if (fi == NULL)
10896 return 0;
10897
10898 select_frame (fi);
10899 return parse_and_eval_address ("id.full_name");
10900}
10901
10902/* Assuming the inferior just triggered an Ada exception catchpoint
10903 (of any type), return the address in inferior memory where the name
10904 of the exception is stored, if applicable.
10905
10906 Return zero if the address could not be computed, or if not relevant. */
10907
10908static CORE_ADDR
10909ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
10910 struct breakpoint *b)
10911{
3eecfa55
JB
10912 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
10913
f7f9143b
JB
10914 switch (ex)
10915 {
10916 case ex_catch_exception:
10917 return (parse_and_eval_address ("e.full_name"));
10918 break;
10919
10920 case ex_catch_exception_unhandled:
3eecfa55 10921 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
10922 break;
10923
10924 case ex_catch_assert:
10925 return 0; /* Exception name is not relevant in this case. */
10926 break;
10927
10928 default:
10929 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10930 break;
10931 }
10932
10933 return 0; /* Should never be reached. */
10934}
10935
10936/* Same as ada_exception_name_addr_1, except that it intercepts and contains
10937 any error that ada_exception_name_addr_1 might cause to be thrown.
10938 When an error is intercepted, a warning with the error message is printed,
10939 and zero is returned. */
10940
10941static CORE_ADDR
10942ada_exception_name_addr (enum exception_catchpoint_kind ex,
10943 struct breakpoint *b)
10944{
bfd189b1 10945 volatile struct gdb_exception e;
f7f9143b
JB
10946 CORE_ADDR result = 0;
10947
10948 TRY_CATCH (e, RETURN_MASK_ERROR)
10949 {
10950 result = ada_exception_name_addr_1 (ex, b);
10951 }
10952
10953 if (e.reason < 0)
10954 {
10955 warning (_("failed to get exception name: %s"), e.message);
10956 return 0;
10957 }
10958
10959 return result;
10960}
10961
28010a5d
PA
10962static struct symtab_and_line ada_exception_sal (enum exception_catchpoint_kind,
10963 char *, char **,
c0a91b2b 10964 const struct breakpoint_ops **);
28010a5d
PA
10965static char *ada_exception_catchpoint_cond_string (const char *excep_string);
10966
10967/* Ada catchpoints.
10968
10969 In the case of catchpoints on Ada exceptions, the catchpoint will
10970 stop the target on every exception the program throws. When a user
10971 specifies the name of a specific exception, we translate this
10972 request into a condition expression (in text form), and then parse
10973 it into an expression stored in each of the catchpoint's locations.
10974 We then use this condition to check whether the exception that was
10975 raised is the one the user is interested in. If not, then the
10976 target is resumed again. We store the name of the requested
10977 exception, in order to be able to re-set the condition expression
10978 when symbols change. */
10979
10980/* An instance of this type is used to represent an Ada catchpoint
10981 breakpoint location. It includes a "struct bp_location" as a kind
10982 of base class; users downcast to "struct bp_location *" when
10983 needed. */
10984
10985struct ada_catchpoint_location
10986{
10987 /* The base class. */
10988 struct bp_location base;
10989
10990 /* The condition that checks whether the exception that was raised
10991 is the specific exception the user specified on catchpoint
10992 creation. */
10993 struct expression *excep_cond_expr;
10994};
10995
10996/* Implement the DTOR method in the bp_location_ops structure for all
10997 Ada exception catchpoint kinds. */
10998
10999static void
11000ada_catchpoint_location_dtor (struct bp_location *bl)
11001{
11002 struct ada_catchpoint_location *al = (struct ada_catchpoint_location *) bl;
11003
11004 xfree (al->excep_cond_expr);
11005}
11006
11007/* The vtable to be used in Ada catchpoint locations. */
11008
11009static const struct bp_location_ops ada_catchpoint_location_ops =
11010{
11011 ada_catchpoint_location_dtor
11012};
11013
11014/* An instance of this type is used to represent an Ada catchpoint.
11015 It includes a "struct breakpoint" as a kind of base class; users
11016 downcast to "struct breakpoint *" when needed. */
11017
11018struct ada_catchpoint
11019{
11020 /* The base class. */
11021 struct breakpoint base;
11022
11023 /* The name of the specific exception the user specified. */
11024 char *excep_string;
11025};
11026
11027/* Parse the exception condition string in the context of each of the
11028 catchpoint's locations, and store them for later evaluation. */
11029
11030static void
11031create_excep_cond_exprs (struct ada_catchpoint *c)
11032{
11033 struct cleanup *old_chain;
11034 struct bp_location *bl;
11035 char *cond_string;
11036
11037 /* Nothing to do if there's no specific exception to catch. */
11038 if (c->excep_string == NULL)
11039 return;
11040
11041 /* Same if there are no locations... */
11042 if (c->base.loc == NULL)
11043 return;
11044
11045 /* Compute the condition expression in text form, from the specific
11046 expection we want to catch. */
11047 cond_string = ada_exception_catchpoint_cond_string (c->excep_string);
11048 old_chain = make_cleanup (xfree, cond_string);
11049
11050 /* Iterate over all the catchpoint's locations, and parse an
11051 expression for each. */
11052 for (bl = c->base.loc; bl != NULL; bl = bl->next)
11053 {
11054 struct ada_catchpoint_location *ada_loc
11055 = (struct ada_catchpoint_location *) bl;
11056 struct expression *exp = NULL;
11057
11058 if (!bl->shlib_disabled)
11059 {
11060 volatile struct gdb_exception e;
11061 char *s;
11062
11063 s = cond_string;
11064 TRY_CATCH (e, RETURN_MASK_ERROR)
11065 {
11066 exp = parse_exp_1 (&s, block_for_pc (bl->address), 0);
11067 }
11068 if (e.reason < 0)
11069 warning (_("failed to reevaluate internal exception condition "
11070 "for catchpoint %d: %s"),
11071 c->base.number, e.message);
11072 }
11073
11074 ada_loc->excep_cond_expr = exp;
11075 }
11076
11077 do_cleanups (old_chain);
11078}
11079
11080/* Implement the DTOR method in the breakpoint_ops structure for all
11081 exception catchpoint kinds. */
11082
11083static void
11084dtor_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
11085{
11086 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11087
11088 xfree (c->excep_string);
348d480f 11089
2060206e 11090 bkpt_breakpoint_ops.dtor (b);
28010a5d
PA
11091}
11092
11093/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11094 structure for all exception catchpoint kinds. */
11095
11096static struct bp_location *
11097allocate_location_exception (enum exception_catchpoint_kind ex,
11098 struct breakpoint *self)
11099{
11100 struct ada_catchpoint_location *loc;
11101
11102 loc = XNEW (struct ada_catchpoint_location);
11103 init_bp_location (&loc->base, &ada_catchpoint_location_ops, self);
11104 loc->excep_cond_expr = NULL;
11105 return &loc->base;
11106}
11107
11108/* Implement the RE_SET method in the breakpoint_ops structure for all
11109 exception catchpoint kinds. */
11110
11111static void
11112re_set_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
11113{
11114 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11115
11116 /* Call the base class's method. This updates the catchpoint's
11117 locations. */
2060206e 11118 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
11119
11120 /* Reparse the exception conditional expressions. One for each
11121 location. */
11122 create_excep_cond_exprs (c);
11123}
11124
11125/* Returns true if we should stop for this breakpoint hit. If the
11126 user specified a specific exception, we only want to cause a stop
11127 if the program thrown that exception. */
11128
11129static int
11130should_stop_exception (const struct bp_location *bl)
11131{
11132 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
11133 const struct ada_catchpoint_location *ada_loc
11134 = (const struct ada_catchpoint_location *) bl;
11135 volatile struct gdb_exception ex;
11136 int stop;
11137
11138 /* With no specific exception, should always stop. */
11139 if (c->excep_string == NULL)
11140 return 1;
11141
11142 if (ada_loc->excep_cond_expr == NULL)
11143 {
11144 /* We will have a NULL expression if back when we were creating
11145 the expressions, this location's had failed to parse. */
11146 return 1;
11147 }
11148
11149 stop = 1;
11150 TRY_CATCH (ex, RETURN_MASK_ALL)
11151 {
11152 struct value *mark;
11153
11154 mark = value_mark ();
11155 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr));
11156 value_free_to_mark (mark);
11157 }
11158 if (ex.reason < 0)
11159 exception_fprintf (gdb_stderr, ex,
11160 _("Error in testing exception condition:\n"));
11161 return stop;
11162}
11163
11164/* Implement the CHECK_STATUS method in the breakpoint_ops structure
11165 for all exception catchpoint kinds. */
11166
11167static void
11168check_status_exception (enum exception_catchpoint_kind ex, bpstat bs)
11169{
11170 bs->stop = should_stop_exception (bs->bp_location_at);
11171}
11172
f7f9143b
JB
11173/* Implement the PRINT_IT method in the breakpoint_ops structure
11174 for all exception catchpoint kinds. */
11175
11176static enum print_stop_action
348d480f 11177print_it_exception (enum exception_catchpoint_kind ex, bpstat bs)
f7f9143b 11178{
79a45e25 11179 struct ui_out *uiout = current_uiout;
348d480f
PA
11180 struct breakpoint *b = bs->breakpoint_at;
11181
956a9fb9 11182 annotate_catchpoint (b->number);
f7f9143b 11183
956a9fb9 11184 if (ui_out_is_mi_like_p (uiout))
f7f9143b 11185 {
956a9fb9
JB
11186 ui_out_field_string (uiout, "reason",
11187 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11188 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
f7f9143b
JB
11189 }
11190
00eb2c4a
JB
11191 ui_out_text (uiout,
11192 b->disposition == disp_del ? "\nTemporary catchpoint "
11193 : "\nCatchpoint ");
956a9fb9
JB
11194 ui_out_field_int (uiout, "bkptno", b->number);
11195 ui_out_text (uiout, ", ");
f7f9143b 11196
f7f9143b
JB
11197 switch (ex)
11198 {
11199 case ex_catch_exception:
f7f9143b 11200 case ex_catch_exception_unhandled:
956a9fb9
JB
11201 {
11202 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
11203 char exception_name[256];
11204
11205 if (addr != 0)
11206 {
11207 read_memory (addr, exception_name, sizeof (exception_name) - 1);
11208 exception_name [sizeof (exception_name) - 1] = '\0';
11209 }
11210 else
11211 {
11212 /* For some reason, we were unable to read the exception
11213 name. This could happen if the Runtime was compiled
11214 without debugging info, for instance. In that case,
11215 just replace the exception name by the generic string
11216 "exception" - it will read as "an exception" in the
11217 notification we are about to print. */
967cff16 11218 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
11219 }
11220 /* In the case of unhandled exception breakpoints, we print
11221 the exception name as "unhandled EXCEPTION_NAME", to make
11222 it clearer to the user which kind of catchpoint just got
11223 hit. We used ui_out_text to make sure that this extra
11224 info does not pollute the exception name in the MI case. */
11225 if (ex == ex_catch_exception_unhandled)
11226 ui_out_text (uiout, "unhandled ");
11227 ui_out_field_string (uiout, "exception-name", exception_name);
11228 }
11229 break;
f7f9143b 11230 case ex_catch_assert:
956a9fb9
JB
11231 /* In this case, the name of the exception is not really
11232 important. Just print "failed assertion" to make it clearer
11233 that his program just hit an assertion-failure catchpoint.
11234 We used ui_out_text because this info does not belong in
11235 the MI output. */
11236 ui_out_text (uiout, "failed assertion");
11237 break;
f7f9143b 11238 }
956a9fb9
JB
11239 ui_out_text (uiout, " at ");
11240 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
11241
11242 return PRINT_SRC_AND_LOC;
11243}
11244
11245/* Implement the PRINT_ONE method in the breakpoint_ops structure
11246 for all exception catchpoint kinds. */
11247
11248static void
11249print_one_exception (enum exception_catchpoint_kind ex,
a6d9a66e 11250 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 11251{
79a45e25 11252 struct ui_out *uiout = current_uiout;
28010a5d 11253 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
11254 struct value_print_options opts;
11255
11256 get_user_print_options (&opts);
11257 if (opts.addressprint)
f7f9143b
JB
11258 {
11259 annotate_field (4);
5af949e3 11260 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
11261 }
11262
11263 annotate_field (5);
a6d9a66e 11264 *last_loc = b->loc;
f7f9143b
JB
11265 switch (ex)
11266 {
11267 case ex_catch_exception:
28010a5d 11268 if (c->excep_string != NULL)
f7f9143b 11269 {
28010a5d
PA
11270 char *msg = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11271
f7f9143b
JB
11272 ui_out_field_string (uiout, "what", msg);
11273 xfree (msg);
11274 }
11275 else
11276 ui_out_field_string (uiout, "what", "all Ada exceptions");
11277
11278 break;
11279
11280 case ex_catch_exception_unhandled:
11281 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
11282 break;
11283
11284 case ex_catch_assert:
11285 ui_out_field_string (uiout, "what", "failed Ada assertions");
11286 break;
11287
11288 default:
11289 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11290 break;
11291 }
11292}
11293
11294/* Implement the PRINT_MENTION method in the breakpoint_ops structure
11295 for all exception catchpoint kinds. */
11296
11297static void
11298print_mention_exception (enum exception_catchpoint_kind ex,
11299 struct breakpoint *b)
11300{
28010a5d 11301 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 11302 struct ui_out *uiout = current_uiout;
28010a5d 11303
00eb2c4a
JB
11304 ui_out_text (uiout, b->disposition == disp_del ? _("Temporary catchpoint ")
11305 : _("Catchpoint "));
11306 ui_out_field_int (uiout, "bkptno", b->number);
11307 ui_out_text (uiout, ": ");
11308
f7f9143b
JB
11309 switch (ex)
11310 {
11311 case ex_catch_exception:
28010a5d 11312 if (c->excep_string != NULL)
00eb2c4a
JB
11313 {
11314 char *info = xstrprintf (_("`%s' Ada exception"), c->excep_string);
11315 struct cleanup *old_chain = make_cleanup (xfree, info);
11316
11317 ui_out_text (uiout, info);
11318 do_cleanups (old_chain);
11319 }
f7f9143b 11320 else
00eb2c4a 11321 ui_out_text (uiout, _("all Ada exceptions"));
f7f9143b
JB
11322 break;
11323
11324 case ex_catch_exception_unhandled:
00eb2c4a 11325 ui_out_text (uiout, _("unhandled Ada exceptions"));
f7f9143b
JB
11326 break;
11327
11328 case ex_catch_assert:
00eb2c4a 11329 ui_out_text (uiout, _("failed Ada assertions"));
f7f9143b
JB
11330 break;
11331
11332 default:
11333 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11334 break;
11335 }
11336}
11337
6149aea9
PA
11338/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
11339 for all exception catchpoint kinds. */
11340
11341static void
11342print_recreate_exception (enum exception_catchpoint_kind ex,
11343 struct breakpoint *b, struct ui_file *fp)
11344{
28010a5d
PA
11345 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
11346
6149aea9
PA
11347 switch (ex)
11348 {
11349 case ex_catch_exception:
11350 fprintf_filtered (fp, "catch exception");
28010a5d
PA
11351 if (c->excep_string != NULL)
11352 fprintf_filtered (fp, " %s", c->excep_string);
6149aea9
PA
11353 break;
11354
11355 case ex_catch_exception_unhandled:
78076abc 11356 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
11357 break;
11358
11359 case ex_catch_assert:
11360 fprintf_filtered (fp, "catch assert");
11361 break;
11362
11363 default:
11364 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11365 }
d9b3f62e 11366 print_recreate_thread (b, fp);
6149aea9
PA
11367}
11368
f7f9143b
JB
11369/* Virtual table for "catch exception" breakpoints. */
11370
28010a5d
PA
11371static void
11372dtor_catch_exception (struct breakpoint *b)
11373{
11374 dtor_exception (ex_catch_exception, b);
11375}
11376
11377static struct bp_location *
11378allocate_location_catch_exception (struct breakpoint *self)
11379{
11380 return allocate_location_exception (ex_catch_exception, self);
11381}
11382
11383static void
11384re_set_catch_exception (struct breakpoint *b)
11385{
11386 re_set_exception (ex_catch_exception, b);
11387}
11388
11389static void
11390check_status_catch_exception (bpstat bs)
11391{
11392 check_status_exception (ex_catch_exception, bs);
11393}
11394
f7f9143b 11395static enum print_stop_action
348d480f 11396print_it_catch_exception (bpstat bs)
f7f9143b 11397{
348d480f 11398 return print_it_exception (ex_catch_exception, bs);
f7f9143b
JB
11399}
11400
11401static void
a6d9a66e 11402print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 11403{
a6d9a66e 11404 print_one_exception (ex_catch_exception, b, last_loc);
f7f9143b
JB
11405}
11406
11407static void
11408print_mention_catch_exception (struct breakpoint *b)
11409{
11410 print_mention_exception (ex_catch_exception, b);
11411}
11412
6149aea9
PA
11413static void
11414print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
11415{
11416 print_recreate_exception (ex_catch_exception, b, fp);
11417}
11418
2060206e 11419static struct breakpoint_ops catch_exception_breakpoint_ops;
f7f9143b
JB
11420
11421/* Virtual table for "catch exception unhandled" breakpoints. */
11422
28010a5d
PA
11423static void
11424dtor_catch_exception_unhandled (struct breakpoint *b)
11425{
11426 dtor_exception (ex_catch_exception_unhandled, b);
11427}
11428
11429static struct bp_location *
11430allocate_location_catch_exception_unhandled (struct breakpoint *self)
11431{
11432 return allocate_location_exception (ex_catch_exception_unhandled, self);
11433}
11434
11435static void
11436re_set_catch_exception_unhandled (struct breakpoint *b)
11437{
11438 re_set_exception (ex_catch_exception_unhandled, b);
11439}
11440
11441static void
11442check_status_catch_exception_unhandled (bpstat bs)
11443{
11444 check_status_exception (ex_catch_exception_unhandled, bs);
11445}
11446
f7f9143b 11447static enum print_stop_action
348d480f 11448print_it_catch_exception_unhandled (bpstat bs)
f7f9143b 11449{
348d480f 11450 return print_it_exception (ex_catch_exception_unhandled, bs);
f7f9143b
JB
11451}
11452
11453static void
a6d9a66e
UW
11454print_one_catch_exception_unhandled (struct breakpoint *b,
11455 struct bp_location **last_loc)
f7f9143b 11456{
a6d9a66e 11457 print_one_exception (ex_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
11458}
11459
11460static void
11461print_mention_catch_exception_unhandled (struct breakpoint *b)
11462{
11463 print_mention_exception (ex_catch_exception_unhandled, b);
11464}
11465
6149aea9
PA
11466static void
11467print_recreate_catch_exception_unhandled (struct breakpoint *b,
11468 struct ui_file *fp)
11469{
11470 print_recreate_exception (ex_catch_exception_unhandled, b, fp);
11471}
11472
2060206e 11473static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
f7f9143b
JB
11474
11475/* Virtual table for "catch assert" breakpoints. */
11476
28010a5d
PA
11477static void
11478dtor_catch_assert (struct breakpoint *b)
11479{
11480 dtor_exception (ex_catch_assert, b);
11481}
11482
11483static struct bp_location *
11484allocate_location_catch_assert (struct breakpoint *self)
11485{
11486 return allocate_location_exception (ex_catch_assert, self);
11487}
11488
11489static void
11490re_set_catch_assert (struct breakpoint *b)
11491{
11492 return re_set_exception (ex_catch_assert, b);
11493}
11494
11495static void
11496check_status_catch_assert (bpstat bs)
11497{
11498 check_status_exception (ex_catch_assert, bs);
11499}
11500
f7f9143b 11501static enum print_stop_action
348d480f 11502print_it_catch_assert (bpstat bs)
f7f9143b 11503{
348d480f 11504 return print_it_exception (ex_catch_assert, bs);
f7f9143b
JB
11505}
11506
11507static void
a6d9a66e 11508print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 11509{
a6d9a66e 11510 print_one_exception (ex_catch_assert, b, last_loc);
f7f9143b
JB
11511}
11512
11513static void
11514print_mention_catch_assert (struct breakpoint *b)
11515{
11516 print_mention_exception (ex_catch_assert, b);
11517}
11518
6149aea9
PA
11519static void
11520print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
11521{
11522 print_recreate_exception (ex_catch_assert, b, fp);
11523}
11524
2060206e 11525static struct breakpoint_ops catch_assert_breakpoint_ops;
f7f9143b 11526
f7f9143b
JB
11527/* Return a newly allocated copy of the first space-separated token
11528 in ARGSP, and then adjust ARGSP to point immediately after that
11529 token.
11530
11531 Return NULL if ARGPS does not contain any more tokens. */
11532
11533static char *
11534ada_get_next_arg (char **argsp)
11535{
11536 char *args = *argsp;
11537 char *end;
11538 char *result;
11539
0fcd72ba 11540 args = skip_spaces (args);
f7f9143b
JB
11541 if (args[0] == '\0')
11542 return NULL; /* No more arguments. */
11543
11544 /* Find the end of the current argument. */
11545
0fcd72ba 11546 end = skip_to_space (args);
f7f9143b
JB
11547
11548 /* Adjust ARGSP to point to the start of the next argument. */
11549
11550 *argsp = end;
11551
11552 /* Make a copy of the current argument and return it. */
11553
11554 result = xmalloc (end - args + 1);
11555 strncpy (result, args, end - args);
11556 result[end - args] = '\0';
11557
11558 return result;
11559}
11560
11561/* Split the arguments specified in a "catch exception" command.
11562 Set EX to the appropriate catchpoint type.
28010a5d 11563 Set EXCEP_STRING to the name of the specific exception if
f7f9143b
JB
11564 specified by the user. */
11565
11566static void
11567catch_ada_exception_command_split (char *args,
11568 enum exception_catchpoint_kind *ex,
28010a5d 11569 char **excep_string)
f7f9143b
JB
11570{
11571 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
11572 char *exception_name;
11573
11574 exception_name = ada_get_next_arg (&args);
11575 make_cleanup (xfree, exception_name);
11576
11577 /* Check that we do not have any more arguments. Anything else
11578 is unexpected. */
11579
0fcd72ba 11580 args = skip_spaces (args);
f7f9143b
JB
11581
11582 if (args[0] != '\0')
11583 error (_("Junk at end of expression"));
11584
11585 discard_cleanups (old_chain);
11586
11587 if (exception_name == NULL)
11588 {
11589 /* Catch all exceptions. */
11590 *ex = ex_catch_exception;
28010a5d 11591 *excep_string = NULL;
f7f9143b
JB
11592 }
11593 else if (strcmp (exception_name, "unhandled") == 0)
11594 {
11595 /* Catch unhandled exceptions. */
11596 *ex = ex_catch_exception_unhandled;
28010a5d 11597 *excep_string = NULL;
f7f9143b
JB
11598 }
11599 else
11600 {
11601 /* Catch a specific exception. */
11602 *ex = ex_catch_exception;
28010a5d 11603 *excep_string = exception_name;
f7f9143b
JB
11604 }
11605}
11606
11607/* Return the name of the symbol on which we should break in order to
11608 implement a catchpoint of the EX kind. */
11609
11610static const char *
11611ada_exception_sym_name (enum exception_catchpoint_kind ex)
11612{
3eecfa55
JB
11613 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11614
11615 gdb_assert (data->exception_info != NULL);
0259addd 11616
f7f9143b
JB
11617 switch (ex)
11618 {
11619 case ex_catch_exception:
3eecfa55 11620 return (data->exception_info->catch_exception_sym);
f7f9143b
JB
11621 break;
11622 case ex_catch_exception_unhandled:
3eecfa55 11623 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b
JB
11624 break;
11625 case ex_catch_assert:
3eecfa55 11626 return (data->exception_info->catch_assert_sym);
f7f9143b
JB
11627 break;
11628 default:
11629 internal_error (__FILE__, __LINE__,
11630 _("unexpected catchpoint kind (%d)"), ex);
11631 }
11632}
11633
11634/* Return the breakpoint ops "virtual table" used for catchpoints
11635 of the EX kind. */
11636
c0a91b2b 11637static const struct breakpoint_ops *
4b9eee8c 11638ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
f7f9143b
JB
11639{
11640 switch (ex)
11641 {
11642 case ex_catch_exception:
11643 return (&catch_exception_breakpoint_ops);
11644 break;
11645 case ex_catch_exception_unhandled:
11646 return (&catch_exception_unhandled_breakpoint_ops);
11647 break;
11648 case ex_catch_assert:
11649 return (&catch_assert_breakpoint_ops);
11650 break;
11651 default:
11652 internal_error (__FILE__, __LINE__,
11653 _("unexpected catchpoint kind (%d)"), ex);
11654 }
11655}
11656
11657/* Return the condition that will be used to match the current exception
11658 being raised with the exception that the user wants to catch. This
11659 assumes that this condition is used when the inferior just triggered
11660 an exception catchpoint.
11661
11662 The string returned is a newly allocated string that needs to be
11663 deallocated later. */
11664
11665static char *
28010a5d 11666ada_exception_catchpoint_cond_string (const char *excep_string)
f7f9143b 11667{
3d0b0fa3
JB
11668 int i;
11669
0963b4bd 11670 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 11671 runtime units that have been compiled without debugging info; if
28010a5d 11672 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
11673 exception (e.g. "constraint_error") then, during the evaluation
11674 of the condition expression, the symbol lookup on this name would
0963b4bd 11675 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
11676 may then be set only on user-defined exceptions which have the
11677 same not-fully-qualified name (e.g. my_package.constraint_error).
11678
11679 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 11680 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
11681 exception constraint_error" is rewritten into "catch exception
11682 standard.constraint_error".
11683
11684 If an exception named contraint_error is defined in another package of
11685 the inferior program, then the only way to specify this exception as a
11686 breakpoint condition is to use its fully-qualified named:
11687 e.g. my_package.constraint_error. */
11688
11689 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
11690 {
28010a5d 11691 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3
JB
11692 {
11693 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
28010a5d 11694 excep_string);
3d0b0fa3
JB
11695 }
11696 }
28010a5d 11697 return xstrprintf ("long_integer (e) = long_integer (&%s)", excep_string);
f7f9143b
JB
11698}
11699
11700/* Return the symtab_and_line that should be used to insert an exception
11701 catchpoint of the TYPE kind.
11702
28010a5d
PA
11703 EXCEP_STRING should contain the name of a specific exception that
11704 the catchpoint should catch, or NULL otherwise.
f7f9143b 11705
28010a5d
PA
11706 ADDR_STRING returns the name of the function where the real
11707 breakpoint that implements the catchpoints is set, depending on the
11708 type of catchpoint we need to create. */
f7f9143b
JB
11709
11710static struct symtab_and_line
28010a5d 11711ada_exception_sal (enum exception_catchpoint_kind ex, char *excep_string,
c0a91b2b 11712 char **addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
11713{
11714 const char *sym_name;
11715 struct symbol *sym;
f7f9143b 11716
0259addd
JB
11717 /* First, find out which exception support info to use. */
11718 ada_exception_support_info_sniffer ();
11719
11720 /* Then lookup the function on which we will break in order to catch
f7f9143b 11721 the Ada exceptions requested by the user. */
f7f9143b
JB
11722 sym_name = ada_exception_sym_name (ex);
11723 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
11724
f17011e0
JB
11725 /* We can assume that SYM is not NULL at this stage. If the symbol
11726 did not exist, ada_exception_support_info_sniffer would have
11727 raised an exception.
f7f9143b 11728
f17011e0
JB
11729 Also, ada_exception_support_info_sniffer should have already
11730 verified that SYM is a function symbol. */
11731 gdb_assert (sym != NULL);
11732 gdb_assert (SYMBOL_CLASS (sym) == LOC_BLOCK);
f7f9143b
JB
11733
11734 /* Set ADDR_STRING. */
f7f9143b
JB
11735 *addr_string = xstrdup (sym_name);
11736
f7f9143b 11737 /* Set OPS. */
4b9eee8c 11738 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 11739
f17011e0 11740 return find_function_start_sal (sym, 1);
f7f9143b
JB
11741}
11742
11743/* Parse the arguments (ARGS) of the "catch exception" command.
11744
f7f9143b
JB
11745 If the user asked the catchpoint to catch only a specific
11746 exception, then save the exception name in ADDR_STRING.
11747
11748 See ada_exception_sal for a description of all the remaining
11749 function arguments of this function. */
11750
9ac4176b 11751static struct symtab_and_line
f7f9143b 11752ada_decode_exception_location (char *args, char **addr_string,
28010a5d 11753 char **excep_string,
c0a91b2b 11754 const struct breakpoint_ops **ops)
f7f9143b
JB
11755{
11756 enum exception_catchpoint_kind ex;
11757
28010a5d
PA
11758 catch_ada_exception_command_split (args, &ex, excep_string);
11759 return ada_exception_sal (ex, *excep_string, addr_string, ops);
11760}
11761
11762/* Create an Ada exception catchpoint. */
11763
11764static void
11765create_ada_exception_catchpoint (struct gdbarch *gdbarch,
11766 struct symtab_and_line sal,
11767 char *addr_string,
11768 char *excep_string,
c0a91b2b 11769 const struct breakpoint_ops *ops,
28010a5d
PA
11770 int tempflag,
11771 int from_tty)
11772{
11773 struct ada_catchpoint *c;
11774
11775 c = XNEW (struct ada_catchpoint);
11776 init_ada_exception_breakpoint (&c->base, gdbarch, sal, addr_string,
11777 ops, tempflag, from_tty);
11778 c->excep_string = excep_string;
11779 create_excep_cond_exprs (c);
3ea46bff 11780 install_breakpoint (0, &c->base, 1);
f7f9143b
JB
11781}
11782
9ac4176b
PA
11783/* Implement the "catch exception" command. */
11784
11785static void
11786catch_ada_exception_command (char *arg, int from_tty,
11787 struct cmd_list_element *command)
11788{
11789 struct gdbarch *gdbarch = get_current_arch ();
11790 int tempflag;
11791 struct symtab_and_line sal;
11792 char *addr_string = NULL;
28010a5d 11793 char *excep_string = NULL;
c0a91b2b 11794 const struct breakpoint_ops *ops = NULL;
9ac4176b
PA
11795
11796 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11797
11798 if (!arg)
11799 arg = "";
28010a5d
PA
11800 sal = ada_decode_exception_location (arg, &addr_string, &excep_string, &ops);
11801 create_ada_exception_catchpoint (gdbarch, sal, addr_string,
11802 excep_string, ops, tempflag, from_tty);
9ac4176b
PA
11803}
11804
11805static struct symtab_and_line
f7f9143b 11806ada_decode_assert_location (char *args, char **addr_string,
c0a91b2b 11807 const struct breakpoint_ops **ops)
f7f9143b
JB
11808{
11809 /* Check that no argument where provided at the end of the command. */
11810
11811 if (args != NULL)
11812 {
0fcd72ba 11813 args = skip_spaces (args);
f7f9143b
JB
11814 if (*args != '\0')
11815 error (_("Junk at end of arguments."));
11816 }
11817
28010a5d 11818 return ada_exception_sal (ex_catch_assert, NULL, addr_string, ops);
f7f9143b
JB
11819}
11820
9ac4176b
PA
11821/* Implement the "catch assert" command. */
11822
11823static void
11824catch_assert_command (char *arg, int from_tty,
11825 struct cmd_list_element *command)
11826{
11827 struct gdbarch *gdbarch = get_current_arch ();
11828 int tempflag;
11829 struct symtab_and_line sal;
11830 char *addr_string = NULL;
c0a91b2b 11831 const struct breakpoint_ops *ops = NULL;
9ac4176b
PA
11832
11833 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11834
11835 if (!arg)
11836 arg = "";
11837 sal = ada_decode_assert_location (arg, &addr_string, &ops);
28010a5d
PA
11838 create_ada_exception_catchpoint (gdbarch, sal, addr_string,
11839 NULL, ops, tempflag, from_tty);
9ac4176b 11840}
4c4b4cd2
PH
11841 /* Operators */
11842/* Information about operators given special treatment in functions
11843 below. */
11844/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
11845
11846#define ADA_OPERATORS \
11847 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
11848 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
11849 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
11850 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
11851 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
11852 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
11853 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
11854 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
11855 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
11856 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
11857 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
11858 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
11859 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
11860 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
11861 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
11862 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
11863 OP_DEFN (OP_OTHERS, 1, 1, 0) \
11864 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
11865 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
11866
11867static void
554794dc
SDJ
11868ada_operator_length (const struct expression *exp, int pc, int *oplenp,
11869 int *argsp)
4c4b4cd2
PH
11870{
11871 switch (exp->elts[pc - 1].opcode)
11872 {
76a01679 11873 default:
4c4b4cd2
PH
11874 operator_length_standard (exp, pc, oplenp, argsp);
11875 break;
11876
11877#define OP_DEFN(op, len, args, binop) \
11878 case op: *oplenp = len; *argsp = args; break;
11879 ADA_OPERATORS;
11880#undef OP_DEFN
52ce6436
PH
11881
11882 case OP_AGGREGATE:
11883 *oplenp = 3;
11884 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
11885 break;
11886
11887 case OP_CHOICES:
11888 *oplenp = 3;
11889 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
11890 break;
4c4b4cd2
PH
11891 }
11892}
11893
c0201579
JK
11894/* Implementation of the exp_descriptor method operator_check. */
11895
11896static int
11897ada_operator_check (struct expression *exp, int pos,
11898 int (*objfile_func) (struct objfile *objfile, void *data),
11899 void *data)
11900{
11901 const union exp_element *const elts = exp->elts;
11902 struct type *type = NULL;
11903
11904 switch (elts[pos].opcode)
11905 {
11906 case UNOP_IN_RANGE:
11907 case UNOP_QUAL:
11908 type = elts[pos + 1].type;
11909 break;
11910
11911 default:
11912 return operator_check_standard (exp, pos, objfile_func, data);
11913 }
11914
11915 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
11916
11917 if (type && TYPE_OBJFILE (type)
11918 && (*objfile_func) (TYPE_OBJFILE (type), data))
11919 return 1;
11920
11921 return 0;
11922}
11923
4c4b4cd2
PH
11924static char *
11925ada_op_name (enum exp_opcode opcode)
11926{
11927 switch (opcode)
11928 {
76a01679 11929 default:
4c4b4cd2 11930 return op_name_standard (opcode);
52ce6436 11931
4c4b4cd2
PH
11932#define OP_DEFN(op, len, args, binop) case op: return #op;
11933 ADA_OPERATORS;
11934#undef OP_DEFN
52ce6436
PH
11935
11936 case OP_AGGREGATE:
11937 return "OP_AGGREGATE";
11938 case OP_CHOICES:
11939 return "OP_CHOICES";
11940 case OP_NAME:
11941 return "OP_NAME";
4c4b4cd2
PH
11942 }
11943}
11944
11945/* As for operator_length, but assumes PC is pointing at the first
11946 element of the operator, and gives meaningful results only for the
52ce6436 11947 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
11948
11949static void
76a01679
JB
11950ada_forward_operator_length (struct expression *exp, int pc,
11951 int *oplenp, int *argsp)
4c4b4cd2 11952{
76a01679 11953 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
11954 {
11955 default:
11956 *oplenp = *argsp = 0;
11957 break;
52ce6436 11958
4c4b4cd2
PH
11959#define OP_DEFN(op, len, args, binop) \
11960 case op: *oplenp = len; *argsp = args; break;
11961 ADA_OPERATORS;
11962#undef OP_DEFN
52ce6436
PH
11963
11964 case OP_AGGREGATE:
11965 *oplenp = 3;
11966 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
11967 break;
11968
11969 case OP_CHOICES:
11970 *oplenp = 3;
11971 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
11972 break;
11973
11974 case OP_STRING:
11975 case OP_NAME:
11976 {
11977 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 11978
52ce6436
PH
11979 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
11980 *argsp = 0;
11981 break;
11982 }
4c4b4cd2
PH
11983 }
11984}
11985
11986static int
11987ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
11988{
11989 enum exp_opcode op = exp->elts[elt].opcode;
11990 int oplen, nargs;
11991 int pc = elt;
11992 int i;
76a01679 11993
4c4b4cd2
PH
11994 ada_forward_operator_length (exp, elt, &oplen, &nargs);
11995
76a01679 11996 switch (op)
4c4b4cd2 11997 {
76a01679 11998 /* Ada attributes ('Foo). */
4c4b4cd2
PH
11999 case OP_ATR_FIRST:
12000 case OP_ATR_LAST:
12001 case OP_ATR_LENGTH:
12002 case OP_ATR_IMAGE:
12003 case OP_ATR_MAX:
12004 case OP_ATR_MIN:
12005 case OP_ATR_MODULUS:
12006 case OP_ATR_POS:
12007 case OP_ATR_SIZE:
12008 case OP_ATR_TAG:
12009 case OP_ATR_VAL:
12010 break;
12011
12012 case UNOP_IN_RANGE:
12013 case UNOP_QUAL:
323e0a4a
AC
12014 /* XXX: gdb_sprint_host_address, type_sprint */
12015 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
12016 gdb_print_host_address (exp->elts[pc + 1].type, stream);
12017 fprintf_filtered (stream, " (");
12018 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
12019 fprintf_filtered (stream, ")");
12020 break;
12021 case BINOP_IN_BOUNDS:
52ce6436
PH
12022 fprintf_filtered (stream, " (%d)",
12023 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
12024 break;
12025 case TERNOP_IN_RANGE:
12026 break;
12027
52ce6436
PH
12028 case OP_AGGREGATE:
12029 case OP_OTHERS:
12030 case OP_DISCRETE_RANGE:
12031 case OP_POSITIONAL:
12032 case OP_CHOICES:
12033 break;
12034
12035 case OP_NAME:
12036 case OP_STRING:
12037 {
12038 char *name = &exp->elts[elt + 2].string;
12039 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 12040
52ce6436
PH
12041 fprintf_filtered (stream, "Text: `%.*s'", len, name);
12042 break;
12043 }
12044
4c4b4cd2
PH
12045 default:
12046 return dump_subexp_body_standard (exp, stream, elt);
12047 }
12048
12049 elt += oplen;
12050 for (i = 0; i < nargs; i += 1)
12051 elt = dump_subexp (exp, stream, elt);
12052
12053 return elt;
12054}
12055
12056/* The Ada extension of print_subexp (q.v.). */
12057
76a01679
JB
12058static void
12059ada_print_subexp (struct expression *exp, int *pos,
12060 struct ui_file *stream, enum precedence prec)
4c4b4cd2 12061{
52ce6436 12062 int oplen, nargs, i;
4c4b4cd2
PH
12063 int pc = *pos;
12064 enum exp_opcode op = exp->elts[pc].opcode;
12065
12066 ada_forward_operator_length (exp, pc, &oplen, &nargs);
12067
52ce6436 12068 *pos += oplen;
4c4b4cd2
PH
12069 switch (op)
12070 {
12071 default:
52ce6436 12072 *pos -= oplen;
4c4b4cd2
PH
12073 print_subexp_standard (exp, pos, stream, prec);
12074 return;
12075
12076 case OP_VAR_VALUE:
4c4b4cd2
PH
12077 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
12078 return;
12079
12080 case BINOP_IN_BOUNDS:
323e0a4a 12081 /* XXX: sprint_subexp */
4c4b4cd2 12082 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12083 fputs_filtered (" in ", stream);
4c4b4cd2 12084 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12085 fputs_filtered ("'range", stream);
4c4b4cd2 12086 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
12087 fprintf_filtered (stream, "(%ld)",
12088 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
12089 return;
12090
12091 case TERNOP_IN_RANGE:
4c4b4cd2 12092 if (prec >= PREC_EQUAL)
76a01679 12093 fputs_filtered ("(", stream);
323e0a4a 12094 /* XXX: sprint_subexp */
4c4b4cd2 12095 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12096 fputs_filtered (" in ", stream);
4c4b4cd2
PH
12097 print_subexp (exp, pos, stream, PREC_EQUAL);
12098 fputs_filtered (" .. ", stream);
12099 print_subexp (exp, pos, stream, PREC_EQUAL);
12100 if (prec >= PREC_EQUAL)
76a01679
JB
12101 fputs_filtered (")", stream);
12102 return;
4c4b4cd2
PH
12103
12104 case OP_ATR_FIRST:
12105 case OP_ATR_LAST:
12106 case OP_ATR_LENGTH:
12107 case OP_ATR_IMAGE:
12108 case OP_ATR_MAX:
12109 case OP_ATR_MIN:
12110 case OP_ATR_MODULUS:
12111 case OP_ATR_POS:
12112 case OP_ATR_SIZE:
12113 case OP_ATR_TAG:
12114 case OP_ATR_VAL:
4c4b4cd2 12115 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
12116 {
12117 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
12118 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
12119 *pos += 3;
12120 }
4c4b4cd2 12121 else
76a01679 12122 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
12123 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
12124 if (nargs > 1)
76a01679
JB
12125 {
12126 int tem;
5b4ee69b 12127
76a01679
JB
12128 for (tem = 1; tem < nargs; tem += 1)
12129 {
12130 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
12131 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
12132 }
12133 fputs_filtered (")", stream);
12134 }
4c4b4cd2 12135 return;
14f9c5c9 12136
4c4b4cd2 12137 case UNOP_QUAL:
4c4b4cd2
PH
12138 type_print (exp->elts[pc + 1].type, "", stream, 0);
12139 fputs_filtered ("'(", stream);
12140 print_subexp (exp, pos, stream, PREC_PREFIX);
12141 fputs_filtered (")", stream);
12142 return;
14f9c5c9 12143
4c4b4cd2 12144 case UNOP_IN_RANGE:
323e0a4a 12145 /* XXX: sprint_subexp */
4c4b4cd2 12146 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 12147 fputs_filtered (" in ", stream);
4c4b4cd2
PH
12148 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
12149 return;
52ce6436
PH
12150
12151 case OP_DISCRETE_RANGE:
12152 print_subexp (exp, pos, stream, PREC_SUFFIX);
12153 fputs_filtered ("..", stream);
12154 print_subexp (exp, pos, stream, PREC_SUFFIX);
12155 return;
12156
12157 case OP_OTHERS:
12158 fputs_filtered ("others => ", stream);
12159 print_subexp (exp, pos, stream, PREC_SUFFIX);
12160 return;
12161
12162 case OP_CHOICES:
12163 for (i = 0; i < nargs-1; i += 1)
12164 {
12165 if (i > 0)
12166 fputs_filtered ("|", stream);
12167 print_subexp (exp, pos, stream, PREC_SUFFIX);
12168 }
12169 fputs_filtered (" => ", stream);
12170 print_subexp (exp, pos, stream, PREC_SUFFIX);
12171 return;
12172
12173 case OP_POSITIONAL:
12174 print_subexp (exp, pos, stream, PREC_SUFFIX);
12175 return;
12176
12177 case OP_AGGREGATE:
12178 fputs_filtered ("(", stream);
12179 for (i = 0; i < nargs; i += 1)
12180 {
12181 if (i > 0)
12182 fputs_filtered (", ", stream);
12183 print_subexp (exp, pos, stream, PREC_SUFFIX);
12184 }
12185 fputs_filtered (")", stream);
12186 return;
4c4b4cd2
PH
12187 }
12188}
14f9c5c9
AS
12189
12190/* Table mapping opcodes into strings for printing operators
12191 and precedences of the operators. */
12192
d2e4a39e
AS
12193static const struct op_print ada_op_print_tab[] = {
12194 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
12195 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
12196 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
12197 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
12198 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
12199 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
12200 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
12201 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
12202 {"<=", BINOP_LEQ, PREC_ORDER, 0},
12203 {">=", BINOP_GEQ, PREC_ORDER, 0},
12204 {">", BINOP_GTR, PREC_ORDER, 0},
12205 {"<", BINOP_LESS, PREC_ORDER, 0},
12206 {">>", BINOP_RSH, PREC_SHIFT, 0},
12207 {"<<", BINOP_LSH, PREC_SHIFT, 0},
12208 {"+", BINOP_ADD, PREC_ADD, 0},
12209 {"-", BINOP_SUB, PREC_ADD, 0},
12210 {"&", BINOP_CONCAT, PREC_ADD, 0},
12211 {"*", BINOP_MUL, PREC_MUL, 0},
12212 {"/", BINOP_DIV, PREC_MUL, 0},
12213 {"rem", BINOP_REM, PREC_MUL, 0},
12214 {"mod", BINOP_MOD, PREC_MUL, 0},
12215 {"**", BINOP_EXP, PREC_REPEAT, 0},
12216 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
12217 {"-", UNOP_NEG, PREC_PREFIX, 0},
12218 {"+", UNOP_PLUS, PREC_PREFIX, 0},
12219 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
12220 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
12221 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
12222 {".all", UNOP_IND, PREC_SUFFIX, 1},
12223 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
12224 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
d2e4a39e 12225 {NULL, 0, 0, 0}
14f9c5c9
AS
12226};
12227\f
72d5681a
PH
12228enum ada_primitive_types {
12229 ada_primitive_type_int,
12230 ada_primitive_type_long,
12231 ada_primitive_type_short,
12232 ada_primitive_type_char,
12233 ada_primitive_type_float,
12234 ada_primitive_type_double,
12235 ada_primitive_type_void,
12236 ada_primitive_type_long_long,
12237 ada_primitive_type_long_double,
12238 ada_primitive_type_natural,
12239 ada_primitive_type_positive,
12240 ada_primitive_type_system_address,
12241 nr_ada_primitive_types
12242};
6c038f32
PH
12243
12244static void
d4a9a881 12245ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
12246 struct language_arch_info *lai)
12247{
d4a9a881 12248 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 12249
72d5681a 12250 lai->primitive_type_vector
d4a9a881 12251 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 12252 struct type *);
e9bb382b
UW
12253
12254 lai->primitive_type_vector [ada_primitive_type_int]
12255 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
12256 0, "integer");
12257 lai->primitive_type_vector [ada_primitive_type_long]
12258 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
12259 0, "long_integer");
12260 lai->primitive_type_vector [ada_primitive_type_short]
12261 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
12262 0, "short_integer");
12263 lai->string_char_type
12264 = lai->primitive_type_vector [ada_primitive_type_char]
12265 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
12266 lai->primitive_type_vector [ada_primitive_type_float]
12267 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
12268 "float", NULL);
12269 lai->primitive_type_vector [ada_primitive_type_double]
12270 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
12271 "long_float", NULL);
12272 lai->primitive_type_vector [ada_primitive_type_long_long]
12273 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
12274 0, "long_long_integer");
12275 lai->primitive_type_vector [ada_primitive_type_long_double]
12276 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
12277 "long_long_float", NULL);
12278 lai->primitive_type_vector [ada_primitive_type_natural]
12279 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
12280 0, "natural");
12281 lai->primitive_type_vector [ada_primitive_type_positive]
12282 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
12283 0, "positive");
12284 lai->primitive_type_vector [ada_primitive_type_void]
12285 = builtin->builtin_void;
12286
12287 lai->primitive_type_vector [ada_primitive_type_system_address]
12288 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
12289 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
12290 = "system__address";
fbb06eb1 12291
47e729a8 12292 lai->bool_type_symbol = NULL;
fbb06eb1 12293 lai->bool_type_default = builtin->builtin_bool;
6c038f32 12294}
6c038f32
PH
12295\f
12296 /* Language vector */
12297
12298/* Not really used, but needed in the ada_language_defn. */
12299
12300static void
6c7a06a3 12301emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 12302{
6c7a06a3 12303 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
12304}
12305
12306static int
12307parse (void)
12308{
12309 warnings_issued = 0;
12310 return ada_parse ();
12311}
12312
12313static const struct exp_descriptor ada_exp_descriptor = {
12314 ada_print_subexp,
12315 ada_operator_length,
c0201579 12316 ada_operator_check,
6c038f32
PH
12317 ada_op_name,
12318 ada_dump_subexp_body,
12319 ada_evaluate_subexp
12320};
12321
12322const struct language_defn ada_language_defn = {
12323 "ada", /* Language name */
12324 language_ada,
6c038f32
PH
12325 range_check_off,
12326 type_check_off,
12327 case_sensitive_on, /* Yes, Ada is case-insensitive, but
12328 that's not quite what this means. */
6c038f32 12329 array_row_major,
9a044a89 12330 macro_expansion_no,
6c038f32
PH
12331 &ada_exp_descriptor,
12332 parse,
12333 ada_error,
12334 resolve,
12335 ada_printchar, /* Print a character constant */
12336 ada_printstr, /* Function to print string constant */
12337 emit_char, /* Function to print single char (not used) */
6c038f32 12338 ada_print_type, /* Print a type using appropriate syntax */
be942545 12339 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
12340 ada_val_print, /* Print a value using appropriate syntax */
12341 ada_value_print, /* Print a top-level value */
12342 NULL, /* Language specific skip_trampoline */
2b2d9e11 12343 NULL, /* name_of_this */
6c038f32
PH
12344 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
12345 basic_lookup_transparent_type, /* lookup_transparent_type */
12346 ada_la_decode, /* Language specific symbol demangler */
0963b4bd
MS
12347 NULL, /* Language specific
12348 class_name_from_physname */
6c038f32
PH
12349 ada_op_print_tab, /* expression operators for printing */
12350 0, /* c-style arrays */
12351 1, /* String lower bound */
6c038f32 12352 ada_get_gdb_completer_word_break_characters,
41d27058 12353 ada_make_symbol_completion_list,
72d5681a 12354 ada_language_arch_info,
e79af960 12355 ada_print_array_index,
41f1b697 12356 default_pass_by_reference,
ae6a3a4c 12357 c_get_string,
f8eba3c6
TT
12358 compare_names,
12359 ada_iterate_over_symbols,
6c038f32
PH
12360 LANG_MAGIC
12361};
12362
2c0b251b
PA
12363/* Provide a prototype to silence -Wmissing-prototypes. */
12364extern initialize_file_ftype _initialize_ada_language;
12365
5bf03f13
JB
12366/* Command-list for the "set/show ada" prefix command. */
12367static struct cmd_list_element *set_ada_list;
12368static struct cmd_list_element *show_ada_list;
12369
12370/* Implement the "set ada" prefix command. */
12371
12372static void
12373set_ada_command (char *arg, int from_tty)
12374{
12375 printf_unfiltered (_(\
12376"\"set ada\" must be followed by the name of a setting.\n"));
12377 help_list (set_ada_list, "set ada ", -1, gdb_stdout);
12378}
12379
12380/* Implement the "show ada" prefix command. */
12381
12382static void
12383show_ada_command (char *args, int from_tty)
12384{
12385 cmd_show_list (show_ada_list, from_tty, "");
12386}
12387
2060206e
PA
12388static void
12389initialize_ada_catchpoint_ops (void)
12390{
12391 struct breakpoint_ops *ops;
12392
12393 initialize_breakpoint_ops ();
12394
12395 ops = &catch_exception_breakpoint_ops;
12396 *ops = bkpt_breakpoint_ops;
12397 ops->dtor = dtor_catch_exception;
12398 ops->allocate_location = allocate_location_catch_exception;
12399 ops->re_set = re_set_catch_exception;
12400 ops->check_status = check_status_catch_exception;
12401 ops->print_it = print_it_catch_exception;
12402 ops->print_one = print_one_catch_exception;
12403 ops->print_mention = print_mention_catch_exception;
12404 ops->print_recreate = print_recreate_catch_exception;
12405
12406 ops = &catch_exception_unhandled_breakpoint_ops;
12407 *ops = bkpt_breakpoint_ops;
12408 ops->dtor = dtor_catch_exception_unhandled;
12409 ops->allocate_location = allocate_location_catch_exception_unhandled;
12410 ops->re_set = re_set_catch_exception_unhandled;
12411 ops->check_status = check_status_catch_exception_unhandled;
12412 ops->print_it = print_it_catch_exception_unhandled;
12413 ops->print_one = print_one_catch_exception_unhandled;
12414 ops->print_mention = print_mention_catch_exception_unhandled;
12415 ops->print_recreate = print_recreate_catch_exception_unhandled;
12416
12417 ops = &catch_assert_breakpoint_ops;
12418 *ops = bkpt_breakpoint_ops;
12419 ops->dtor = dtor_catch_assert;
12420 ops->allocate_location = allocate_location_catch_assert;
12421 ops->re_set = re_set_catch_assert;
12422 ops->check_status = check_status_catch_assert;
12423 ops->print_it = print_it_catch_assert;
12424 ops->print_one = print_one_catch_assert;
12425 ops->print_mention = print_mention_catch_assert;
12426 ops->print_recreate = print_recreate_catch_assert;
12427}
12428
d2e4a39e 12429void
6c038f32 12430_initialize_ada_language (void)
14f9c5c9 12431{
6c038f32
PH
12432 add_language (&ada_language_defn);
12433
2060206e
PA
12434 initialize_ada_catchpoint_ops ();
12435
5bf03f13
JB
12436 add_prefix_cmd ("ada", no_class, set_ada_command,
12437 _("Prefix command for changing Ada-specfic settings"),
12438 &set_ada_list, "set ada ", 0, &setlist);
12439
12440 add_prefix_cmd ("ada", no_class, show_ada_command,
12441 _("Generic command for showing Ada-specific settings."),
12442 &show_ada_list, "show ada ", 0, &showlist);
12443
12444 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
12445 &trust_pad_over_xvs, _("\
12446Enable or disable an optimization trusting PAD types over XVS types"), _("\
12447Show whether an optimization trusting PAD types over XVS types is activated"),
12448 _("\
12449This is related to the encoding used by the GNAT compiler. The debugger\n\
12450should normally trust the contents of PAD types, but certain older versions\n\
12451of GNAT have a bug that sometimes causes the information in the PAD type\n\
12452to be incorrect. Turning this setting \"off\" allows the debugger to\n\
12453work around this bug. It is always safe to turn this option \"off\", but\n\
12454this incurs a slight performance penalty, so it is recommended to NOT change\n\
12455this option to \"off\" unless necessary."),
12456 NULL, NULL, &set_ada_list, &show_ada_list);
12457
9ac4176b
PA
12458 add_catch_command ("exception", _("\
12459Catch Ada exceptions, when raised.\n\
12460With an argument, catch only exceptions with the given name."),
12461 catch_ada_exception_command,
12462 NULL,
12463 CATCH_PERMANENT,
12464 CATCH_TEMPORARY);
12465 add_catch_command ("assert", _("\
12466Catch failed Ada assertions, when raised.\n\
12467With an argument, catch only exceptions with the given name."),
12468 catch_assert_command,
12469 NULL,
12470 CATCH_PERMANENT,
12471 CATCH_TEMPORARY);
12472
6c038f32 12473 varsize_limit = 65536;
6c038f32
PH
12474
12475 obstack_init (&symbol_list_obstack);
12476
12477 decoded_names_store = htab_create_alloc
12478 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
12479 NULL, xcalloc, xfree);
6b69afc4 12480
e802dbe0
JB
12481 /* Setup per-inferior data. */
12482 observer_attach_inferior_exit (ada_inferior_exit);
12483 ada_inferior_data
12484 = register_inferior_data_with_cleanup (ada_inferior_data_cleanup);
14f9c5c9 12485}
This page took 2.163234 seconds and 4 git commands to generate.