]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
*** empty log message ***
[thirdparty/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
197e01b6 1/* Ada language support routines for GDB, the GNU debugger. Copyright (C)
10a2c479 2
ae6a3a4c
TJB
3 1992, 1993, 1994, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2007, 2008,
4 2009 Free 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"
14f9c5c9 60
ccefe4c4
TT
61#include "psymtab.h"
62
4c4b4cd2
PH
63/* Define whether or not the C operator '/' truncates towards zero for
64 differently signed operands (truncation direction is undefined in C).
65 Copied from valarith.c. */
66
67#ifndef TRUNCATION_TOWARDS_ZERO
68#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
69#endif
70
50810684 71static void modify_general_field (struct type *, char *, LONGEST, int, int);
14f9c5c9 72
d2e4a39e 73static struct type *desc_base_type (struct type *);
14f9c5c9 74
d2e4a39e 75static struct type *desc_bounds_type (struct type *);
14f9c5c9 76
d2e4a39e 77static struct value *desc_bounds (struct value *);
14f9c5c9 78
d2e4a39e 79static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 80
d2e4a39e 81static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 82
556bdfd4 83static struct type *desc_data_target_type (struct type *);
14f9c5c9 84
d2e4a39e 85static struct value *desc_data (struct value *);
14f9c5c9 86
d2e4a39e 87static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 88
d2e4a39e 89static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 90
d2e4a39e 91static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 92
d2e4a39e 93static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 94
d2e4a39e 95static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 96
d2e4a39e 97static struct type *desc_index_type (struct type *, int);
14f9c5c9 98
d2e4a39e 99static int desc_arity (struct type *);
14f9c5c9 100
d2e4a39e 101static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 102
d2e4a39e 103static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 104
4a399546
UW
105static struct value *ensure_lval (struct value *,
106 struct gdbarch *, CORE_ADDR *);
14f9c5c9 107
d2e4a39e 108static struct value *make_array_descriptor (struct type *, struct value *,
4a399546 109 struct gdbarch *, CORE_ADDR *);
14f9c5c9 110
4c4b4cd2 111static void ada_add_block_symbols (struct obstack *,
76a01679 112 struct block *, const char *,
2570f2b7 113 domain_enum, struct objfile *, int);
14f9c5c9 114
4c4b4cd2 115static int is_nonfunction (struct ada_symbol_info *, int);
14f9c5c9 116
76a01679 117static void add_defn_to_vec (struct obstack *, struct symbol *,
2570f2b7 118 struct block *);
14f9c5c9 119
4c4b4cd2
PH
120static int num_defns_collected (struct obstack *);
121
122static struct ada_symbol_info *defns_collected (struct obstack *, int);
14f9c5c9 123
4c4b4cd2 124static struct value *resolve_subexp (struct expression **, int *, int,
76a01679 125 struct type *);
14f9c5c9 126
d2e4a39e 127static void replace_operator_with_call (struct expression **, int, int, int,
4c4b4cd2 128 struct symbol *, struct block *);
14f9c5c9 129
d2e4a39e 130static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 131
4c4b4cd2
PH
132static char *ada_op_name (enum exp_opcode);
133
134static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 135
d2e4a39e 136static int numeric_type_p (struct type *);
14f9c5c9 137
d2e4a39e 138static int integer_type_p (struct type *);
14f9c5c9 139
d2e4a39e 140static int scalar_type_p (struct type *);
14f9c5c9 141
d2e4a39e 142static int discrete_type_p (struct type *);
14f9c5c9 143
aeb5907d
JB
144static enum ada_renaming_category parse_old_style_renaming (struct type *,
145 const char **,
146 int *,
147 const char **);
148
149static struct symbol *find_old_style_renaming_symbol (const char *,
150 struct block *);
151
4c4b4cd2 152static struct type *ada_lookup_struct_elt_type (struct type *, char *,
76a01679 153 int, int, int *);
4c4b4cd2 154
d2e4a39e 155static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 156
b4ba55a1
JB
157static struct type *ada_find_parallel_type_with_name (struct type *,
158 const char *);
159
d2e4a39e 160static int is_dynamic_field (struct type *, int);
14f9c5c9 161
10a2c479 162static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 163 const gdb_byte *,
4c4b4cd2
PH
164 CORE_ADDR, struct value *);
165
166static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 167
28c85d6c 168static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 169
d2e4a39e 170static struct type *to_static_fixed_type (struct type *);
f192137b 171static struct type *static_unwrap_type (struct type *type);
14f9c5c9 172
d2e4a39e 173static struct value *unwrap_value (struct value *);
14f9c5c9 174
ad82864c 175static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 176
ad82864c 177static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 178
ad82864c
JB
179static long decode_packed_array_bitsize (struct type *);
180
181static struct value *decode_constrained_packed_array (struct value *);
182
183static int ada_is_packed_array_type (struct type *);
184
185static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 186
d2e4a39e 187static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 188 struct value **);
14f9c5c9 189
50810684 190static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
52ce6436 191
4c4b4cd2
PH
192static struct value *coerce_unspec_val_to_type (struct value *,
193 struct type *);
14f9c5c9 194
d2e4a39e 195static struct value *get_var_value (char *, char *);
14f9c5c9 196
d2e4a39e 197static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 198
d2e4a39e 199static int equiv_types (struct type *, struct type *);
14f9c5c9 200
d2e4a39e 201static int is_name_suffix (const char *);
14f9c5c9 202
d2e4a39e 203static int wild_match (const char *, int, const char *);
14f9c5c9 204
d2e4a39e 205static struct value *ada_coerce_ref (struct value *);
14f9c5c9 206
4c4b4cd2
PH
207static LONGEST pos_atr (struct value *);
208
3cb382c9 209static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 210
d2e4a39e 211static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 212
4c4b4cd2
PH
213static struct symbol *standard_lookup (const char *, const struct block *,
214 domain_enum);
14f9c5c9 215
4c4b4cd2
PH
216static struct value *ada_search_struct_field (char *, struct value *, int,
217 struct type *);
218
219static struct value *ada_value_primitive_field (struct value *, int, int,
220 struct type *);
221
76a01679 222static int find_struct_field (char *, struct type *, int,
52ce6436 223 struct type **, int *, int *, int *, int *);
4c4b4cd2
PH
224
225static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
226 struct value *);
227
4c4b4cd2
PH
228static int ada_resolve_function (struct ada_symbol_info *, int,
229 struct value **, int, const char *,
230 struct type *);
231
232static struct value *ada_coerce_to_simple_array (struct value *);
233
234static int ada_is_direct_array_type (struct type *);
235
72d5681a
PH
236static void ada_language_arch_info (struct gdbarch *,
237 struct language_arch_info *);
714e53ab
PH
238
239static void check_size (const struct type *);
52ce6436
PH
240
241static struct value *ada_index_struct_field (int, struct value *, int,
242 struct type *);
243
244static struct value *assign_aggregate (struct value *, struct value *,
245 struct expression *, int *, enum noside);
246
247static void aggregate_assign_from_choices (struct value *, struct value *,
248 struct expression *,
249 int *, LONGEST *, int *,
250 int, LONGEST, LONGEST);
251
252static void aggregate_assign_positional (struct value *, struct value *,
253 struct expression *,
254 int *, LONGEST *, int *, int,
255 LONGEST, LONGEST);
256
257
258static void aggregate_assign_others (struct value *, struct value *,
259 struct expression *,
260 int *, LONGEST *, int, LONGEST, LONGEST);
261
262
263static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
264
265
266static struct value *ada_evaluate_subexp (struct type *, struct expression *,
267 int *, enum noside);
268
269static void ada_forward_operator_length (struct expression *, int, int *,
270 int *);
4c4b4cd2
PH
271\f
272
76a01679 273
4c4b4cd2 274/* Maximum-sized dynamic type. */
14f9c5c9
AS
275static unsigned int varsize_limit;
276
4c4b4cd2
PH
277/* FIXME: brobecker/2003-09-17: No longer a const because it is
278 returned by a function that does not return a const char *. */
279static char *ada_completer_word_break_characters =
280#ifdef VMS
281 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
282#else
14f9c5c9 283 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 284#endif
14f9c5c9 285
4c4b4cd2 286/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 287static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 288 = "__gnat_ada_main_program_name";
14f9c5c9 289
4c4b4cd2
PH
290/* Limit on the number of warnings to raise per expression evaluation. */
291static int warning_limit = 2;
292
293/* Number of warning messages issued; reset to 0 by cleanups after
294 expression evaluation. */
295static int warnings_issued = 0;
296
297static const char *known_runtime_file_name_patterns[] = {
298 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
299};
300
301static const char *known_auxiliary_function_name_patterns[] = {
302 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
303};
304
305/* Space for allocating results of ada_lookup_symbol_list. */
306static struct obstack symbol_list_obstack;
307
e802dbe0
JB
308 /* Inferior-specific data. */
309
310/* Per-inferior data for this module. */
311
312struct ada_inferior_data
313{
314 /* The ada__tags__type_specific_data type, which is used when decoding
315 tagged types. With older versions of GNAT, this type was directly
316 accessible through a component ("tsd") in the object tag. But this
317 is no longer the case, so we cache it for each inferior. */
318 struct type *tsd_type;
319};
320
321/* Our key to this module's inferior data. */
322static const struct inferior_data *ada_inferior_data;
323
324/* A cleanup routine for our inferior data. */
325static void
326ada_inferior_data_cleanup (struct inferior *inf, void *arg)
327{
328 struct ada_inferior_data *data;
329
330 data = inferior_data (inf, ada_inferior_data);
331 if (data != NULL)
332 xfree (data);
333}
334
335/* Return our inferior data for the given inferior (INF).
336
337 This function always returns a valid pointer to an allocated
338 ada_inferior_data structure. If INF's inferior data has not
339 been previously set, this functions creates a new one with all
340 fields set to zero, sets INF's inferior to it, and then returns
341 a pointer to that newly allocated ada_inferior_data. */
342
343static struct ada_inferior_data *
344get_ada_inferior_data (struct inferior *inf)
345{
346 struct ada_inferior_data *data;
347
348 data = inferior_data (inf, ada_inferior_data);
349 if (data == NULL)
350 {
351 data = XZALLOC (struct ada_inferior_data);
352 set_inferior_data (inf, ada_inferior_data, data);
353 }
354
355 return data;
356}
357
358/* Perform all necessary cleanups regarding our module's inferior data
359 that is required after the inferior INF just exited. */
360
361static void
362ada_inferior_exit (struct inferior *inf)
363{
364 ada_inferior_data_cleanup (inf, NULL);
365 set_inferior_data (inf, ada_inferior_data, NULL);
366}
367
4c4b4cd2
PH
368 /* Utilities */
369
41d27058
JB
370/* Given DECODED_NAME a string holding a symbol name in its
371 decoded form (ie using the Ada dotted notation), returns
372 its unqualified name. */
373
374static const char *
375ada_unqualified_name (const char *decoded_name)
376{
377 const char *result = strrchr (decoded_name, '.');
378
379 if (result != NULL)
380 result++; /* Skip the dot... */
381 else
382 result = decoded_name;
383
384 return result;
385}
386
387/* Return a string starting with '<', followed by STR, and '>'.
388 The result is good until the next call. */
389
390static char *
391add_angle_brackets (const char *str)
392{
393 static char *result = NULL;
394
395 xfree (result);
88c15c34 396 result = xstrprintf ("<%s>", str);
41d27058
JB
397 return result;
398}
96d887e8 399
4c4b4cd2
PH
400static char *
401ada_get_gdb_completer_word_break_characters (void)
402{
403 return ada_completer_word_break_characters;
404}
405
e79af960
JB
406/* Print an array element index using the Ada syntax. */
407
408static void
409ada_print_array_index (struct value *index_value, struct ui_file *stream,
79a45b7d 410 const struct value_print_options *options)
e79af960 411{
79a45b7d 412 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
413 fprintf_filtered (stream, " => ");
414}
415
f27cf670 416/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 417 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 418 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 419
f27cf670
AS
420void *
421grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 422{
d2e4a39e
AS
423 if (*size < min_size)
424 {
425 *size *= 2;
426 if (*size < min_size)
4c4b4cd2 427 *size = min_size;
f27cf670 428 vect = xrealloc (vect, *size * element_size);
d2e4a39e 429 }
f27cf670 430 return vect;
14f9c5c9
AS
431}
432
433/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 434 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
435
436static int
ebf56fd3 437field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
438{
439 int len = strlen (target);
5b4ee69b 440
d2e4a39e 441 return
4c4b4cd2
PH
442 (strncmp (field_name, target, len) == 0
443 && (field_name[len] == '\0'
444 || (strncmp (field_name + len, "___", 3) == 0
76a01679
JB
445 && strcmp (field_name + strlen (field_name) - 6,
446 "___XVN") != 0)));
14f9c5c9
AS
447}
448
449
872c8b51
JB
450/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
451 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
452 and return its index. This function also handles fields whose name
453 have ___ suffixes because the compiler sometimes alters their name
454 by adding such a suffix to represent fields with certain constraints.
455 If the field could not be found, return a negative number if
456 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
457
458int
459ada_get_field_index (const struct type *type, const char *field_name,
460 int maybe_missing)
461{
462 int fieldno;
872c8b51
JB
463 struct type *struct_type = check_typedef ((struct type *) type);
464
465 for (fieldno = 0; fieldno < TYPE_NFIELDS (struct_type); fieldno++)
466 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
467 return fieldno;
468
469 if (!maybe_missing)
323e0a4a 470 error (_("Unable to find field %s in struct %s. Aborting"),
872c8b51 471 field_name, TYPE_NAME (struct_type));
4c4b4cd2
PH
472
473 return -1;
474}
475
476/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
477
478int
d2e4a39e 479ada_name_prefix_len (const char *name)
14f9c5c9
AS
480{
481 if (name == NULL)
482 return 0;
d2e4a39e 483 else
14f9c5c9 484 {
d2e4a39e 485 const char *p = strstr (name, "___");
5b4ee69b 486
14f9c5c9 487 if (p == NULL)
4c4b4cd2 488 return strlen (name);
14f9c5c9 489 else
4c4b4cd2 490 return p - name;
14f9c5c9
AS
491 }
492}
493
4c4b4cd2
PH
494/* Return non-zero if SUFFIX is a suffix of STR.
495 Return zero if STR is null. */
496
14f9c5c9 497static int
d2e4a39e 498is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
499{
500 int len1, len2;
5b4ee69b 501
14f9c5c9
AS
502 if (str == NULL)
503 return 0;
504 len1 = strlen (str);
505 len2 = strlen (suffix);
4c4b4cd2 506 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
507}
508
4c4b4cd2
PH
509/* The contents of value VAL, treated as a value of type TYPE. The
510 result is an lval in memory if VAL is. */
14f9c5c9 511
d2e4a39e 512static struct value *
4c4b4cd2 513coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 514{
61ee279c 515 type = ada_check_typedef (type);
df407dfe 516 if (value_type (val) == type)
4c4b4cd2 517 return val;
d2e4a39e 518 else
14f9c5c9 519 {
4c4b4cd2
PH
520 struct value *result;
521
522 /* Make sure that the object size is not unreasonable before
523 trying to allocate some memory for it. */
714e53ab 524 check_size (type);
4c4b4cd2
PH
525
526 result = allocate_value (type);
74bcbdf3 527 set_value_component_location (result, val);
9bbda503
AC
528 set_value_bitsize (result, value_bitsize (val));
529 set_value_bitpos (result, value_bitpos (val));
42ae5230 530 set_value_address (result, value_address (val));
d69fe07e 531 if (value_lazy (val)
df407dfe 532 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
dfa52d88 533 set_value_lazy (result, 1);
d2e4a39e 534 else
0fd88904 535 memcpy (value_contents_raw (result), value_contents (val),
4c4b4cd2 536 TYPE_LENGTH (type));
14f9c5c9
AS
537 return result;
538 }
539}
540
fc1a4b47
AC
541static const gdb_byte *
542cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
543{
544 if (valaddr == NULL)
545 return NULL;
546 else
547 return valaddr + offset;
548}
549
550static CORE_ADDR
ebf56fd3 551cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
552{
553 if (address == 0)
554 return 0;
d2e4a39e 555 else
14f9c5c9
AS
556 return address + offset;
557}
558
4c4b4cd2
PH
559/* Issue a warning (as for the definition of warning in utils.c, but
560 with exactly one argument rather than ...), unless the limit on the
561 number of warnings has passed during the evaluation of the current
562 expression. */
a2249542 563
77109804
AC
564/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
565 provided by "complaint". */
a0b31db1 566static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 567
14f9c5c9 568static void
a2249542 569lim_warning (const char *format, ...)
14f9c5c9 570{
a2249542 571 va_list args;
a2249542 572
5b4ee69b 573 va_start (args, format);
4c4b4cd2
PH
574 warnings_issued += 1;
575 if (warnings_issued <= warning_limit)
a2249542
MK
576 vwarning (format, args);
577
578 va_end (args);
4c4b4cd2
PH
579}
580
714e53ab
PH
581/* Issue an error if the size of an object of type T is unreasonable,
582 i.e. if it would be a bad idea to allocate a value of this type in
583 GDB. */
584
585static void
586check_size (const struct type *type)
587{
588 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 589 error (_("object size is larger than varsize-limit"));
714e53ab
PH
590}
591
c3e5cd34 592/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 593static LONGEST
c3e5cd34 594max_of_size (int size)
4c4b4cd2 595{
76a01679 596 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 597
76a01679 598 return top_bit | (top_bit - 1);
4c4b4cd2
PH
599}
600
c3e5cd34 601/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 602static LONGEST
c3e5cd34 603min_of_size (int size)
4c4b4cd2 604{
c3e5cd34 605 return -max_of_size (size) - 1;
4c4b4cd2
PH
606}
607
c3e5cd34 608/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 609static ULONGEST
c3e5cd34 610umax_of_size (int size)
4c4b4cd2 611{
76a01679 612 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 613
76a01679 614 return top_bit | (top_bit - 1);
4c4b4cd2
PH
615}
616
c3e5cd34
PH
617/* Maximum value of integral type T, as a signed quantity. */
618static LONGEST
619max_of_type (struct type *t)
4c4b4cd2 620{
c3e5cd34
PH
621 if (TYPE_UNSIGNED (t))
622 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
623 else
624 return max_of_size (TYPE_LENGTH (t));
625}
626
627/* Minimum value of integral type T, as a signed quantity. */
628static LONGEST
629min_of_type (struct type *t)
630{
631 if (TYPE_UNSIGNED (t))
632 return 0;
633 else
634 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
635}
636
637/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
638LONGEST
639ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 640{
76a01679 641 switch (TYPE_CODE (type))
4c4b4cd2
PH
642 {
643 case TYPE_CODE_RANGE:
690cc4eb 644 return TYPE_HIGH_BOUND (type);
4c4b4cd2 645 case TYPE_CODE_ENUM:
690cc4eb
PH
646 return TYPE_FIELD_BITPOS (type, TYPE_NFIELDS (type) - 1);
647 case TYPE_CODE_BOOL:
648 return 1;
649 case TYPE_CODE_CHAR:
76a01679 650 case TYPE_CODE_INT:
690cc4eb 651 return max_of_type (type);
4c4b4cd2 652 default:
43bbcdc2 653 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
654 }
655}
656
657/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
658LONGEST
659ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 660{
76a01679 661 switch (TYPE_CODE (type))
4c4b4cd2
PH
662 {
663 case TYPE_CODE_RANGE:
690cc4eb 664 return TYPE_LOW_BOUND (type);
4c4b4cd2 665 case TYPE_CODE_ENUM:
690cc4eb
PH
666 return TYPE_FIELD_BITPOS (type, 0);
667 case TYPE_CODE_BOOL:
668 return 0;
669 case TYPE_CODE_CHAR:
76a01679 670 case TYPE_CODE_INT:
690cc4eb 671 return min_of_type (type);
4c4b4cd2 672 default:
43bbcdc2 673 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
674 }
675}
676
677/* The identity on non-range types. For range types, the underlying
76a01679 678 non-range scalar type. */
4c4b4cd2
PH
679
680static struct type *
681base_type (struct type *type)
682{
683 while (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE)
684 {
76a01679
JB
685 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
686 return type;
4c4b4cd2
PH
687 type = TYPE_TARGET_TYPE (type);
688 }
689 return type;
14f9c5c9 690}
4c4b4cd2 691\f
76a01679 692
4c4b4cd2 693 /* Language Selection */
14f9c5c9
AS
694
695/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 696 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 697
14f9c5c9 698enum language
ccefe4c4 699ada_update_initial_language (enum language lang)
14f9c5c9 700{
d2e4a39e 701 if (lookup_minimal_symbol ("adainit", (const char *) NULL,
4c4b4cd2
PH
702 (struct objfile *) NULL) != NULL)
703 return language_ada;
14f9c5c9
AS
704
705 return lang;
706}
96d887e8
PH
707
708/* If the main procedure is written in Ada, then return its name.
709 The result is good until the next call. Return NULL if the main
710 procedure doesn't appear to be in Ada. */
711
712char *
713ada_main_name (void)
714{
715 struct minimal_symbol *msym;
f9bc20b9 716 static char *main_program_name = NULL;
6c038f32 717
96d887e8
PH
718 /* For Ada, the name of the main procedure is stored in a specific
719 string constant, generated by the binder. Look for that symbol,
720 extract its address, and then read that string. If we didn't find
721 that string, then most probably the main procedure is not written
722 in Ada. */
723 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
724
725 if (msym != NULL)
726 {
f9bc20b9
JB
727 CORE_ADDR main_program_name_addr;
728 int err_code;
729
96d887e8
PH
730 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
731 if (main_program_name_addr == 0)
323e0a4a 732 error (_("Invalid address for Ada main program name."));
96d887e8 733
f9bc20b9
JB
734 xfree (main_program_name);
735 target_read_string (main_program_name_addr, &main_program_name,
736 1024, &err_code);
737
738 if (err_code != 0)
739 return NULL;
96d887e8
PH
740 return main_program_name;
741 }
742
743 /* The main procedure doesn't seem to be in Ada. */
744 return NULL;
745}
14f9c5c9 746\f
4c4b4cd2 747 /* Symbols */
d2e4a39e 748
4c4b4cd2
PH
749/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
750 of NULLs. */
14f9c5c9 751
d2e4a39e
AS
752const struct ada_opname_map ada_opname_table[] = {
753 {"Oadd", "\"+\"", BINOP_ADD},
754 {"Osubtract", "\"-\"", BINOP_SUB},
755 {"Omultiply", "\"*\"", BINOP_MUL},
756 {"Odivide", "\"/\"", BINOP_DIV},
757 {"Omod", "\"mod\"", BINOP_MOD},
758 {"Orem", "\"rem\"", BINOP_REM},
759 {"Oexpon", "\"**\"", BINOP_EXP},
760 {"Olt", "\"<\"", BINOP_LESS},
761 {"Ole", "\"<=\"", BINOP_LEQ},
762 {"Ogt", "\">\"", BINOP_GTR},
763 {"Oge", "\">=\"", BINOP_GEQ},
764 {"Oeq", "\"=\"", BINOP_EQUAL},
765 {"One", "\"/=\"", BINOP_NOTEQUAL},
766 {"Oand", "\"and\"", BINOP_BITWISE_AND},
767 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
768 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
769 {"Oconcat", "\"&\"", BINOP_CONCAT},
770 {"Oabs", "\"abs\"", UNOP_ABS},
771 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
772 {"Oadd", "\"+\"", UNOP_PLUS},
773 {"Osubtract", "\"-\"", UNOP_NEG},
774 {NULL, NULL}
14f9c5c9
AS
775};
776
4c4b4cd2
PH
777/* The "encoded" form of DECODED, according to GNAT conventions.
778 The result is valid until the next call to ada_encode. */
779
14f9c5c9 780char *
4c4b4cd2 781ada_encode (const char *decoded)
14f9c5c9 782{
4c4b4cd2
PH
783 static char *encoding_buffer = NULL;
784 static size_t encoding_buffer_size = 0;
d2e4a39e 785 const char *p;
14f9c5c9 786 int k;
d2e4a39e 787
4c4b4cd2 788 if (decoded == NULL)
14f9c5c9
AS
789 return NULL;
790
4c4b4cd2
PH
791 GROW_VECT (encoding_buffer, encoding_buffer_size,
792 2 * strlen (decoded) + 10);
14f9c5c9
AS
793
794 k = 0;
4c4b4cd2 795 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 796 {
cdc7bb92 797 if (*p == '.')
4c4b4cd2
PH
798 {
799 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
800 k += 2;
801 }
14f9c5c9 802 else if (*p == '"')
4c4b4cd2
PH
803 {
804 const struct ada_opname_map *mapping;
805
806 for (mapping = ada_opname_table;
1265e4aa
JB
807 mapping->encoded != NULL
808 && strncmp (mapping->decoded, p,
809 strlen (mapping->decoded)) != 0; mapping += 1)
4c4b4cd2
PH
810 ;
811 if (mapping->encoded == NULL)
323e0a4a 812 error (_("invalid Ada operator name: %s"), p);
4c4b4cd2
PH
813 strcpy (encoding_buffer + k, mapping->encoded);
814 k += strlen (mapping->encoded);
815 break;
816 }
d2e4a39e 817 else
4c4b4cd2
PH
818 {
819 encoding_buffer[k] = *p;
820 k += 1;
821 }
14f9c5c9
AS
822 }
823
4c4b4cd2
PH
824 encoding_buffer[k] = '\0';
825 return encoding_buffer;
14f9c5c9
AS
826}
827
828/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
829 quotes, unfolded, but with the quotes stripped away. Result good
830 to next call. */
831
d2e4a39e
AS
832char *
833ada_fold_name (const char *name)
14f9c5c9 834{
d2e4a39e 835 static char *fold_buffer = NULL;
14f9c5c9
AS
836 static size_t fold_buffer_size = 0;
837
838 int len = strlen (name);
d2e4a39e 839 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
840
841 if (name[0] == '\'')
842 {
d2e4a39e
AS
843 strncpy (fold_buffer, name + 1, len - 2);
844 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
845 }
846 else
847 {
848 int i;
5b4ee69b 849
14f9c5c9 850 for (i = 0; i <= len; i += 1)
4c4b4cd2 851 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
852 }
853
854 return fold_buffer;
855}
856
529cad9c
PH
857/* Return nonzero if C is either a digit or a lowercase alphabet character. */
858
859static int
860is_lower_alphanum (const char c)
861{
862 return (isdigit (c) || (isalpha (c) && islower (c)));
863}
864
29480c32
JB
865/* Remove either of these suffixes:
866 . .{DIGIT}+
867 . ${DIGIT}+
868 . ___{DIGIT}+
869 . __{DIGIT}+.
870 These are suffixes introduced by the compiler for entities such as
871 nested subprogram for instance, in order to avoid name clashes.
872 They do not serve any purpose for the debugger. */
873
874static void
875ada_remove_trailing_digits (const char *encoded, int *len)
876{
877 if (*len > 1 && isdigit (encoded[*len - 1]))
878 {
879 int i = *len - 2;
5b4ee69b 880
29480c32
JB
881 while (i > 0 && isdigit (encoded[i]))
882 i--;
883 if (i >= 0 && encoded[i] == '.')
884 *len = i;
885 else if (i >= 0 && encoded[i] == '$')
886 *len = i;
887 else if (i >= 2 && strncmp (encoded + i - 2, "___", 3) == 0)
888 *len = i - 2;
889 else if (i >= 1 && strncmp (encoded + i - 1, "__", 2) == 0)
890 *len = i - 1;
891 }
892}
893
894/* Remove the suffix introduced by the compiler for protected object
895 subprograms. */
896
897static void
898ada_remove_po_subprogram_suffix (const char *encoded, int *len)
899{
900 /* Remove trailing N. */
901
902 /* Protected entry subprograms are broken into two
903 separate subprograms: The first one is unprotected, and has
904 a 'N' suffix; the second is the protected version, and has
905 the 'P' suffix. The second calls the first one after handling
906 the protection. Since the P subprograms are internally generated,
907 we leave these names undecoded, giving the user a clue that this
908 entity is internal. */
909
910 if (*len > 1
911 && encoded[*len - 1] == 'N'
912 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
913 *len = *len - 1;
914}
915
69fadcdf
JB
916/* Remove trailing X[bn]* suffixes (indicating names in package bodies). */
917
918static void
919ada_remove_Xbn_suffix (const char *encoded, int *len)
920{
921 int i = *len - 1;
922
923 while (i > 0 && (encoded[i] == 'b' || encoded[i] == 'n'))
924 i--;
925
926 if (encoded[i] != 'X')
927 return;
928
929 if (i == 0)
930 return;
931
932 if (isalnum (encoded[i-1]))
933 *len = i;
934}
935
29480c32
JB
936/* If ENCODED follows the GNAT entity encoding conventions, then return
937 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
938 replaced by ENCODED.
14f9c5c9 939
4c4b4cd2 940 The resulting string is valid until the next call of ada_decode.
29480c32 941 If the string is unchanged by decoding, the original string pointer
4c4b4cd2
PH
942 is returned. */
943
944const char *
945ada_decode (const char *encoded)
14f9c5c9
AS
946{
947 int i, j;
948 int len0;
d2e4a39e 949 const char *p;
4c4b4cd2 950 char *decoded;
14f9c5c9 951 int at_start_name;
4c4b4cd2
PH
952 static char *decoding_buffer = NULL;
953 static size_t decoding_buffer_size = 0;
d2e4a39e 954
29480c32
JB
955 /* The name of the Ada main procedure starts with "_ada_".
956 This prefix is not part of the decoded name, so skip this part
957 if we see this prefix. */
4c4b4cd2
PH
958 if (strncmp (encoded, "_ada_", 5) == 0)
959 encoded += 5;
14f9c5c9 960
29480c32
JB
961 /* If the name starts with '_', then it is not a properly encoded
962 name, so do not attempt to decode it. Similarly, if the name
963 starts with '<', the name should not be decoded. */
4c4b4cd2 964 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
965 goto Suppress;
966
4c4b4cd2 967 len0 = strlen (encoded);
4c4b4cd2 968
29480c32
JB
969 ada_remove_trailing_digits (encoded, &len0);
970 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 971
4c4b4cd2
PH
972 /* Remove the ___X.* suffix if present. Do not forget to verify that
973 the suffix is located before the current "end" of ENCODED. We want
974 to avoid re-matching parts of ENCODED that have previously been
975 marked as discarded (by decrementing LEN0). */
976 p = strstr (encoded, "___");
977 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
978 {
979 if (p[3] == 'X')
4c4b4cd2 980 len0 = p - encoded;
14f9c5c9 981 else
4c4b4cd2 982 goto Suppress;
14f9c5c9 983 }
4c4b4cd2 984
29480c32
JB
985 /* Remove any trailing TKB suffix. It tells us that this symbol
986 is for the body of a task, but that information does not actually
987 appear in the decoded name. */
988
4c4b4cd2 989 if (len0 > 3 && strncmp (encoded + len0 - 3, "TKB", 3) == 0)
14f9c5c9 990 len0 -= 3;
76a01679 991
a10967fa
JB
992 /* Remove any trailing TB suffix. The TB suffix is slightly different
993 from the TKB suffix because it is used for non-anonymous task
994 bodies. */
995
996 if (len0 > 2 && strncmp (encoded + len0 - 2, "TB", 2) == 0)
997 len0 -= 2;
998
29480c32
JB
999 /* Remove trailing "B" suffixes. */
1000 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1001
4c4b4cd2 1002 if (len0 > 1 && strncmp (encoded + len0 - 1, "B", 1) == 0)
14f9c5c9
AS
1003 len0 -= 1;
1004
4c4b4cd2 1005 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1006
4c4b4cd2
PH
1007 GROW_VECT (decoding_buffer, decoding_buffer_size, 2 * len0 + 1);
1008 decoded = decoding_buffer;
14f9c5c9 1009
29480c32
JB
1010 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1011
4c4b4cd2 1012 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1013 {
4c4b4cd2
PH
1014 i = len0 - 2;
1015 while ((i >= 0 && isdigit (encoded[i]))
1016 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1017 i -= 1;
1018 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1019 len0 = i - 1;
1020 else if (encoded[i] == '$')
1021 len0 = i;
d2e4a39e 1022 }
14f9c5c9 1023
29480c32
JB
1024 /* The first few characters that are not alphabetic are not part
1025 of any encoding we use, so we can copy them over verbatim. */
1026
4c4b4cd2
PH
1027 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1028 decoded[j] = encoded[i];
14f9c5c9
AS
1029
1030 at_start_name = 1;
1031 while (i < len0)
1032 {
29480c32 1033 /* Is this a symbol function? */
4c4b4cd2
PH
1034 if (at_start_name && encoded[i] == 'O')
1035 {
1036 int k;
5b4ee69b 1037
4c4b4cd2
PH
1038 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1039 {
1040 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1041 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1042 op_len - 1) == 0)
1043 && !isalnum (encoded[i + op_len]))
4c4b4cd2
PH
1044 {
1045 strcpy (decoded + j, ada_opname_table[k].decoded);
1046 at_start_name = 0;
1047 i += op_len;
1048 j += strlen (ada_opname_table[k].decoded);
1049 break;
1050 }
1051 }
1052 if (ada_opname_table[k].encoded != NULL)
1053 continue;
1054 }
14f9c5c9
AS
1055 at_start_name = 0;
1056
529cad9c
PH
1057 /* Replace "TK__" with "__", which will eventually be translated
1058 into "." (just below). */
1059
4c4b4cd2
PH
1060 if (i < len0 - 4 && strncmp (encoded + i, "TK__", 4) == 0)
1061 i += 2;
529cad9c 1062
29480c32
JB
1063 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1064 be translated into "." (just below). These are internal names
1065 generated for anonymous blocks inside which our symbol is nested. */
1066
1067 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1068 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1069 && isdigit (encoded [i+4]))
1070 {
1071 int k = i + 5;
1072
1073 while (k < len0 && isdigit (encoded[k]))
1074 k++; /* Skip any extra digit. */
1075
1076 /* Double-check that the "__B_{DIGITS}+" sequence we found
1077 is indeed followed by "__". */
1078 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1079 i = k;
1080 }
1081
529cad9c
PH
1082 /* Remove _E{DIGITS}+[sb] */
1083
1084 /* Just as for protected object subprograms, there are 2 categories
1085 of subprograms created by the compiler for each entry. The first
1086 one implements the actual entry code, and has a suffix following
1087 the convention above; the second one implements the barrier and
1088 uses the same convention as above, except that the 'E' is replaced
1089 by a 'B'.
1090
1091 Just as above, we do not decode the name of barrier functions
1092 to give the user a clue that the code he is debugging has been
1093 internally generated. */
1094
1095 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1096 && isdigit (encoded[i+2]))
1097 {
1098 int k = i + 3;
1099
1100 while (k < len0 && isdigit (encoded[k]))
1101 k++;
1102
1103 if (k < len0
1104 && (encoded[k] == 'b' || encoded[k] == 's'))
1105 {
1106 k++;
1107 /* Just as an extra precaution, make sure that if this
1108 suffix is followed by anything else, it is a '_'.
1109 Otherwise, we matched this sequence by accident. */
1110 if (k == len0
1111 || (k < len0 && encoded[k] == '_'))
1112 i = k;
1113 }
1114 }
1115
1116 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1117 the GNAT front-end in protected object subprograms. */
1118
1119 if (i < len0 + 3
1120 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1121 {
1122 /* Backtrack a bit up until we reach either the begining of
1123 the encoded name, or "__". Make sure that we only find
1124 digits or lowercase characters. */
1125 const char *ptr = encoded + i - 1;
1126
1127 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1128 ptr--;
1129 if (ptr < encoded
1130 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1131 i++;
1132 }
1133
4c4b4cd2
PH
1134 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1135 {
29480c32
JB
1136 /* This is a X[bn]* sequence not separated from the previous
1137 part of the name with a non-alpha-numeric character (in other
1138 words, immediately following an alpha-numeric character), then
1139 verify that it is placed at the end of the encoded name. If
1140 not, then the encoding is not valid and we should abort the
1141 decoding. Otherwise, just skip it, it is used in body-nested
1142 package names. */
4c4b4cd2
PH
1143 do
1144 i += 1;
1145 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1146 if (i < len0)
1147 goto Suppress;
1148 }
cdc7bb92 1149 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1150 {
29480c32 1151 /* Replace '__' by '.'. */
4c4b4cd2
PH
1152 decoded[j] = '.';
1153 at_start_name = 1;
1154 i += 2;
1155 j += 1;
1156 }
14f9c5c9 1157 else
4c4b4cd2 1158 {
29480c32
JB
1159 /* It's a character part of the decoded name, so just copy it
1160 over. */
4c4b4cd2
PH
1161 decoded[j] = encoded[i];
1162 i += 1;
1163 j += 1;
1164 }
14f9c5c9 1165 }
4c4b4cd2 1166 decoded[j] = '\000';
14f9c5c9 1167
29480c32
JB
1168 /* Decoded names should never contain any uppercase character.
1169 Double-check this, and abort the decoding if we find one. */
1170
4c4b4cd2
PH
1171 for (i = 0; decoded[i] != '\0'; i += 1)
1172 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1173 goto Suppress;
1174
4c4b4cd2
PH
1175 if (strcmp (decoded, encoded) == 0)
1176 return encoded;
1177 else
1178 return decoded;
14f9c5c9
AS
1179
1180Suppress:
4c4b4cd2
PH
1181 GROW_VECT (decoding_buffer, decoding_buffer_size, strlen (encoded) + 3);
1182 decoded = decoding_buffer;
1183 if (encoded[0] == '<')
1184 strcpy (decoded, encoded);
14f9c5c9 1185 else
88c15c34 1186 xsnprintf (decoded, decoding_buffer_size, "<%s>", encoded);
4c4b4cd2
PH
1187 return decoded;
1188
1189}
1190
1191/* Table for keeping permanent unique copies of decoded names. Once
1192 allocated, names in this table are never released. While this is a
1193 storage leak, it should not be significant unless there are massive
1194 changes in the set of decoded names in successive versions of a
1195 symbol table loaded during a single session. */
1196static struct htab *decoded_names_store;
1197
1198/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1199 in the language-specific part of GSYMBOL, if it has not been
1200 previously computed. Tries to save the decoded name in the same
1201 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1202 in any case, the decoded symbol has a lifetime at least that of
1203 GSYMBOL).
1204 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1205 const, but nevertheless modified to a semantically equivalent form
1206 when a decoded name is cached in it.
76a01679 1207*/
4c4b4cd2 1208
76a01679
JB
1209char *
1210ada_decode_symbol (const struct general_symbol_info *gsymbol)
4c4b4cd2 1211{
76a01679 1212 char **resultp =
afa16725 1213 (char **) &gsymbol->language_specific.mangled_lang.demangled_name;
5b4ee69b 1214
4c4b4cd2
PH
1215 if (*resultp == NULL)
1216 {
1217 const char *decoded = ada_decode (gsymbol->name);
5b4ee69b 1218
714835d5 1219 if (gsymbol->obj_section != NULL)
76a01679 1220 {
714835d5 1221 struct objfile *objf = gsymbol->obj_section->objfile;
5b4ee69b 1222
714835d5
UW
1223 *resultp = obsavestring (decoded, strlen (decoded),
1224 &objf->objfile_obstack);
76a01679 1225 }
4c4b4cd2 1226 /* Sometimes, we can't find a corresponding objfile, in which
76a01679
JB
1227 case, we put the result on the heap. Since we only decode
1228 when needed, we hope this usually does not cause a
1229 significant memory leak (FIXME). */
4c4b4cd2 1230 if (*resultp == NULL)
76a01679
JB
1231 {
1232 char **slot = (char **) htab_find_slot (decoded_names_store,
1233 decoded, INSERT);
5b4ee69b 1234
76a01679
JB
1235 if (*slot == NULL)
1236 *slot = xstrdup (decoded);
1237 *resultp = *slot;
1238 }
4c4b4cd2 1239 }
14f9c5c9 1240
4c4b4cd2
PH
1241 return *resultp;
1242}
76a01679 1243
2c0b251b 1244static char *
76a01679 1245ada_la_decode (const char *encoded, int options)
4c4b4cd2
PH
1246{
1247 return xstrdup (ada_decode (encoded));
14f9c5c9
AS
1248}
1249
1250/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
4c4b4cd2
PH
1251 suffixes that encode debugging information or leading _ada_ on
1252 SYM_NAME (see is_name_suffix commentary for the debugging
1253 information that is ignored). If WILD, then NAME need only match a
1254 suffix of SYM_NAME minus the same suffixes. Also returns 0 if
1255 either argument is NULL. */
14f9c5c9 1256
2c0b251b 1257static int
d2e4a39e 1258ada_match_name (const char *sym_name, const char *name, int wild)
14f9c5c9
AS
1259{
1260 if (sym_name == NULL || name == NULL)
1261 return 0;
1262 else if (wild)
1263 return wild_match (name, strlen (name), sym_name);
d2e4a39e
AS
1264 else
1265 {
1266 int len_name = strlen (name);
5b4ee69b 1267
4c4b4cd2
PH
1268 return (strncmp (sym_name, name, len_name) == 0
1269 && is_name_suffix (sym_name + len_name))
1270 || (strncmp (sym_name, "_ada_", 5) == 0
1271 && strncmp (sym_name + 5, name, len_name) == 0
1272 && is_name_suffix (sym_name + len_name + 5));
d2e4a39e 1273 }
14f9c5c9 1274}
14f9c5c9 1275\f
d2e4a39e 1276
4c4b4cd2 1277 /* Arrays */
14f9c5c9 1278
28c85d6c
JB
1279/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1280 generated by the GNAT compiler to describe the index type used
1281 for each dimension of an array, check whether it follows the latest
1282 known encoding. If not, fix it up to conform to the latest encoding.
1283 Otherwise, do nothing. This function also does nothing if
1284 INDEX_DESC_TYPE is NULL.
1285
1286 The GNAT encoding used to describle the array index type evolved a bit.
1287 Initially, the information would be provided through the name of each
1288 field of the structure type only, while the type of these fields was
1289 described as unspecified and irrelevant. The debugger was then expected
1290 to perform a global type lookup using the name of that field in order
1291 to get access to the full index type description. Because these global
1292 lookups can be very expensive, the encoding was later enhanced to make
1293 the global lookup unnecessary by defining the field type as being
1294 the full index type description.
1295
1296 The purpose of this routine is to allow us to support older versions
1297 of the compiler by detecting the use of the older encoding, and by
1298 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1299 we essentially replace each field's meaningless type by the associated
1300 index subtype). */
1301
1302void
1303ada_fixup_array_indexes_type (struct type *index_desc_type)
1304{
1305 int i;
1306
1307 if (index_desc_type == NULL)
1308 return;
1309 gdb_assert (TYPE_NFIELDS (index_desc_type) > 0);
1310
1311 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1312 to check one field only, no need to check them all). If not, return
1313 now.
1314
1315 If our INDEX_DESC_TYPE was generated using the older encoding,
1316 the field type should be a meaningless integer type whose name
1317 is not equal to the field name. */
1318 if (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)) != NULL
1319 && strcmp (TYPE_NAME (TYPE_FIELD_TYPE (index_desc_type, 0)),
1320 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1321 return;
1322
1323 /* Fixup each field of INDEX_DESC_TYPE. */
1324 for (i = 0; i < TYPE_NFIELDS (index_desc_type); i++)
1325 {
1326 char *name = TYPE_FIELD_NAME (index_desc_type, i);
1327 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1328
1329 if (raw_type)
1330 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1331 }
1332}
1333
4c4b4cd2 1334/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of array descriptors. */
14f9c5c9 1335
d2e4a39e
AS
1336static char *bound_name[] = {
1337 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
14f9c5c9
AS
1338 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
1339};
1340
1341/* Maximum number of array dimensions we are prepared to handle. */
1342
4c4b4cd2 1343#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char *)))
14f9c5c9 1344
4c4b4cd2 1345/* Like modify_field, but allows bitpos > wordlength. */
14f9c5c9
AS
1346
1347static void
50810684
UW
1348modify_general_field (struct type *type, char *addr,
1349 LONGEST fieldval, int bitpos, int bitsize)
14f9c5c9 1350{
50810684 1351 modify_field (type, addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
14f9c5c9
AS
1352}
1353
1354
4c4b4cd2
PH
1355/* The desc_* routines return primitive portions of array descriptors
1356 (fat pointers). */
14f9c5c9
AS
1357
1358/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1359 level of indirection, if needed. */
1360
d2e4a39e
AS
1361static struct type *
1362desc_base_type (struct type *type)
14f9c5c9
AS
1363{
1364 if (type == NULL)
1365 return NULL;
61ee279c 1366 type = ada_check_typedef (type);
1265e4aa
JB
1367 if (type != NULL
1368 && (TYPE_CODE (type) == TYPE_CODE_PTR
1369 || TYPE_CODE (type) == TYPE_CODE_REF))
61ee279c 1370 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1371 else
1372 return type;
1373}
1374
4c4b4cd2
PH
1375/* True iff TYPE indicates a "thin" array pointer type. */
1376
14f9c5c9 1377static int
d2e4a39e 1378is_thin_pntr (struct type *type)
14f9c5c9 1379{
d2e4a39e 1380 return
14f9c5c9
AS
1381 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1382 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1383}
1384
4c4b4cd2
PH
1385/* The descriptor type for thin pointer type TYPE. */
1386
d2e4a39e
AS
1387static struct type *
1388thin_descriptor_type (struct type *type)
14f9c5c9 1389{
d2e4a39e 1390 struct type *base_type = desc_base_type (type);
5b4ee69b 1391
14f9c5c9
AS
1392 if (base_type == NULL)
1393 return NULL;
1394 if (is_suffix (ada_type_name (base_type), "___XVE"))
1395 return base_type;
d2e4a39e 1396 else
14f9c5c9 1397 {
d2e4a39e 1398 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1399
14f9c5c9 1400 if (alt_type == NULL)
4c4b4cd2 1401 return base_type;
14f9c5c9 1402 else
4c4b4cd2 1403 return alt_type;
14f9c5c9
AS
1404 }
1405}
1406
4c4b4cd2
PH
1407/* A pointer to the array data for thin-pointer value VAL. */
1408
d2e4a39e
AS
1409static struct value *
1410thin_data_pntr (struct value *val)
14f9c5c9 1411{
df407dfe 1412 struct type *type = value_type (val);
556bdfd4 1413 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1414
556bdfd4
UW
1415 data_type = lookup_pointer_type (data_type);
1416
14f9c5c9 1417 if (TYPE_CODE (type) == TYPE_CODE_PTR)
556bdfd4 1418 return value_cast (data_type, value_copy (val));
d2e4a39e 1419 else
42ae5230 1420 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1421}
1422
4c4b4cd2
PH
1423/* True iff TYPE indicates a "thick" array pointer type. */
1424
14f9c5c9 1425static int
d2e4a39e 1426is_thick_pntr (struct type *type)
14f9c5c9
AS
1427{
1428 type = desc_base_type (type);
1429 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2 1430 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1431}
1432
4c4b4cd2
PH
1433/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1434 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1435
d2e4a39e
AS
1436static struct type *
1437desc_bounds_type (struct type *type)
14f9c5c9 1438{
d2e4a39e 1439 struct type *r;
14f9c5c9
AS
1440
1441 type = desc_base_type (type);
1442
1443 if (type == NULL)
1444 return NULL;
1445 else if (is_thin_pntr (type))
1446 {
1447 type = thin_descriptor_type (type);
1448 if (type == NULL)
4c4b4cd2 1449 return NULL;
14f9c5c9
AS
1450 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1451 if (r != NULL)
61ee279c 1452 return ada_check_typedef (r);
14f9c5c9
AS
1453 }
1454 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1455 {
1456 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1457 if (r != NULL)
61ee279c 1458 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1459 }
1460 return NULL;
1461}
1462
1463/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1464 one, a pointer to its bounds data. Otherwise NULL. */
1465
d2e4a39e
AS
1466static struct value *
1467desc_bounds (struct value *arr)
14f9c5c9 1468{
df407dfe 1469 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1470
d2e4a39e 1471 if (is_thin_pntr (type))
14f9c5c9 1472 {
d2e4a39e 1473 struct type *bounds_type =
4c4b4cd2 1474 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1475 LONGEST addr;
1476
4cdfadb1 1477 if (bounds_type == NULL)
323e0a4a 1478 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1479
1480 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1481 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1482 the correct calculation is a real pain. FIXME (and fix GCC). */
14f9c5c9 1483 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4c4b4cd2 1484 addr = value_as_long (arr);
d2e4a39e 1485 else
42ae5230 1486 addr = value_address (arr);
14f9c5c9 1487
d2e4a39e 1488 return
4c4b4cd2
PH
1489 value_from_longest (lookup_pointer_type (bounds_type),
1490 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1491 }
1492
1493 else if (is_thick_pntr (type))
05e522ef
JB
1494 {
1495 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1496 _("Bad GNAT array descriptor"));
1497 struct type *p_bounds_type = value_type (p_bounds);
1498
1499 if (p_bounds_type
1500 && TYPE_CODE (p_bounds_type) == TYPE_CODE_PTR)
1501 {
1502 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1503
1504 if (TYPE_STUB (target_type))
1505 p_bounds = value_cast (lookup_pointer_type
1506 (ada_check_typedef (target_type)),
1507 p_bounds);
1508 }
1509 else
1510 error (_("Bad GNAT array descriptor"));
1511
1512 return p_bounds;
1513 }
14f9c5c9
AS
1514 else
1515 return NULL;
1516}
1517
4c4b4cd2
PH
1518/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1519 position of the field containing the address of the bounds data. */
1520
14f9c5c9 1521static int
d2e4a39e 1522fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1523{
1524 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1525}
1526
1527/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1528 size of the field containing the address of the bounds data. */
1529
14f9c5c9 1530static int
d2e4a39e 1531fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1532{
1533 type = desc_base_type (type);
1534
d2e4a39e 1535 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1536 return TYPE_FIELD_BITSIZE (type, 1);
1537 else
61ee279c 1538 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1539}
1540
4c4b4cd2 1541/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1542 pointer to one, the type of its array data (a array-with-no-bounds type);
1543 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1544 data. */
4c4b4cd2 1545
d2e4a39e 1546static struct type *
556bdfd4 1547desc_data_target_type (struct type *type)
14f9c5c9
AS
1548{
1549 type = desc_base_type (type);
1550
4c4b4cd2 1551 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1552 if (is_thin_pntr (type))
556bdfd4 1553 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1554 else if (is_thick_pntr (type))
556bdfd4
UW
1555 {
1556 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1557
1558 if (data_type
1559 && TYPE_CODE (ada_check_typedef (data_type)) == TYPE_CODE_PTR)
05e522ef 1560 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1561 }
1562
1563 return NULL;
14f9c5c9
AS
1564}
1565
1566/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1567 its array data. */
4c4b4cd2 1568
d2e4a39e
AS
1569static struct value *
1570desc_data (struct value *arr)
14f9c5c9 1571{
df407dfe 1572 struct type *type = value_type (arr);
5b4ee69b 1573
14f9c5c9
AS
1574 if (is_thin_pntr (type))
1575 return thin_data_pntr (arr);
1576 else if (is_thick_pntr (type))
d2e4a39e 1577 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1578 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1579 else
1580 return NULL;
1581}
1582
1583
1584/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1585 position of the field containing the address of the data. */
1586
14f9c5c9 1587static int
d2e4a39e 1588fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1589{
1590 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1591}
1592
1593/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1594 size of the field containing the address of the data. */
1595
14f9c5c9 1596static int
d2e4a39e 1597fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1598{
1599 type = desc_base_type (type);
1600
1601 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1602 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1603 else
14f9c5c9
AS
1604 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1605}
1606
4c4b4cd2 1607/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1608 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1609 bound, if WHICH is 1. The first bound is I=1. */
1610
d2e4a39e
AS
1611static struct value *
1612desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1613{
d2e4a39e 1614 return value_struct_elt (&bounds, NULL, bound_name[2 * i + which - 2], NULL,
323e0a4a 1615 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1616}
1617
1618/* If BOUNDS is an array-bounds structure type, return the bit position
1619 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1620 bound, if WHICH is 1. The first bound is I=1. */
1621
14f9c5c9 1622static int
d2e4a39e 1623desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1624{
d2e4a39e 1625 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1626}
1627
1628/* If BOUNDS is an array-bounds structure type, return the bit field size
1629 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1630 bound, if WHICH is 1. The first bound is I=1. */
1631
76a01679 1632static int
d2e4a39e 1633desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1634{
1635 type = desc_base_type (type);
1636
d2e4a39e
AS
1637 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1638 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1639 else
1640 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1641}
1642
1643/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1644 Ith bound (numbering from 1). Otherwise, NULL. */
1645
d2e4a39e
AS
1646static struct type *
1647desc_index_type (struct type *type, int i)
14f9c5c9
AS
1648{
1649 type = desc_base_type (type);
1650
1651 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
d2e4a39e
AS
1652 return lookup_struct_elt_type (type, bound_name[2 * i - 2], 1);
1653 else
14f9c5c9
AS
1654 return NULL;
1655}
1656
4c4b4cd2
PH
1657/* The number of index positions in the array-bounds type TYPE.
1658 Return 0 if TYPE is NULL. */
1659
14f9c5c9 1660static int
d2e4a39e 1661desc_arity (struct type *type)
14f9c5c9
AS
1662{
1663 type = desc_base_type (type);
1664
1665 if (type != NULL)
1666 return TYPE_NFIELDS (type) / 2;
1667 return 0;
1668}
1669
4c4b4cd2
PH
1670/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1671 an array descriptor type (representing an unconstrained array
1672 type). */
1673
76a01679
JB
1674static int
1675ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1676{
1677 if (type == NULL)
1678 return 0;
61ee279c 1679 type = ada_check_typedef (type);
4c4b4cd2 1680 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
76a01679 1681 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1682}
1683
52ce6436
PH
1684/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
1685 * to one. */
1686
2c0b251b 1687static int
52ce6436
PH
1688ada_is_array_type (struct type *type)
1689{
1690 while (type != NULL
1691 && (TYPE_CODE (type) == TYPE_CODE_PTR
1692 || TYPE_CODE (type) == TYPE_CODE_REF))
1693 type = TYPE_TARGET_TYPE (type);
1694 return ada_is_direct_array_type (type);
1695}
1696
4c4b4cd2 1697/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1698
14f9c5c9 1699int
4c4b4cd2 1700ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1701{
1702 if (type == NULL)
1703 return 0;
61ee279c 1704 type = ada_check_typedef (type);
14f9c5c9 1705 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
4c4b4cd2
PH
1706 || (TYPE_CODE (type) == TYPE_CODE_PTR
1707 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
14f9c5c9
AS
1708}
1709
4c4b4cd2
PH
1710/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1711
14f9c5c9 1712int
4c4b4cd2 1713ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1714{
556bdfd4 1715 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1716
1717 if (type == NULL)
1718 return 0;
61ee279c 1719 type = ada_check_typedef (type);
556bdfd4
UW
1720 return (data_type != NULL
1721 && TYPE_CODE (data_type) == TYPE_CODE_ARRAY
1722 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1723}
1724
1725/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1726 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1727 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1728 is still needed. */
1729
14f9c5c9 1730int
ebf56fd3 1731ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1732{
d2e4a39e 1733 return
14f9c5c9
AS
1734 type != NULL
1735 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1736 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1737 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1738 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1739}
1740
1741
4c4b4cd2 1742/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1743 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1744 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1745 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1746 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1747 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1748 a descriptor. */
d2e4a39e
AS
1749struct type *
1750ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1751{
ad82864c
JB
1752 if (ada_is_constrained_packed_array_type (value_type (arr)))
1753 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1754
df407dfe
AC
1755 if (!ada_is_array_descriptor_type (value_type (arr)))
1756 return value_type (arr);
d2e4a39e
AS
1757
1758 if (!bounds)
ad82864c
JB
1759 {
1760 struct type *array_type =
1761 ada_check_typedef (desc_data_target_type (value_type (arr)));
1762
1763 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1764 TYPE_FIELD_BITSIZE (array_type, 0) =
1765 decode_packed_array_bitsize (value_type (arr));
1766
1767 return array_type;
1768 }
14f9c5c9
AS
1769 else
1770 {
d2e4a39e 1771 struct type *elt_type;
14f9c5c9 1772 int arity;
d2e4a39e 1773 struct value *descriptor;
14f9c5c9 1774
df407dfe
AC
1775 elt_type = ada_array_element_type (value_type (arr), -1);
1776 arity = ada_array_arity (value_type (arr));
14f9c5c9 1777
d2e4a39e 1778 if (elt_type == NULL || arity == 0)
df407dfe 1779 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1780
1781 descriptor = desc_bounds (arr);
d2e4a39e 1782 if (value_as_long (descriptor) == 0)
4c4b4cd2 1783 return NULL;
d2e4a39e 1784 while (arity > 0)
4c4b4cd2 1785 {
e9bb382b
UW
1786 struct type *range_type = alloc_type_copy (value_type (arr));
1787 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1788 struct value *low = desc_one_bound (descriptor, arity, 0);
1789 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1790
5b4ee69b 1791 arity -= 1;
df407dfe 1792 create_range_type (range_type, value_type (low),
529cad9c
PH
1793 longest_to_int (value_as_long (low)),
1794 longest_to_int (value_as_long (high)));
4c4b4cd2 1795 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1796
1797 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1798 TYPE_FIELD_BITSIZE (elt_type, 0) =
1799 decode_packed_array_bitsize (value_type (arr));
4c4b4cd2 1800 }
14f9c5c9
AS
1801
1802 return lookup_pointer_type (elt_type);
1803 }
1804}
1805
1806/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
1807 Otherwise, returns either a standard GDB array with bounds set
1808 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1809 GDB array. Returns NULL if ARR is a null fat pointer. */
1810
d2e4a39e
AS
1811struct value *
1812ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 1813{
df407dfe 1814 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1815 {
d2e4a39e 1816 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 1817
14f9c5c9 1818 if (arrType == NULL)
4c4b4cd2 1819 return NULL;
14f9c5c9
AS
1820 return value_cast (arrType, value_copy (desc_data (arr)));
1821 }
ad82864c
JB
1822 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1823 return decode_constrained_packed_array (arr);
14f9c5c9
AS
1824 else
1825 return arr;
1826}
1827
1828/* If ARR does not represent an array, returns ARR unchanged.
1829 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
1830 be ARR itself if it already is in the proper form). */
1831
1832static struct value *
d2e4a39e 1833ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 1834{
df407dfe 1835 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1836 {
d2e4a39e 1837 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 1838
14f9c5c9 1839 if (arrVal == NULL)
323e0a4a 1840 error (_("Bounds unavailable for null array pointer."));
529cad9c 1841 check_size (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
1842 return value_ind (arrVal);
1843 }
ad82864c
JB
1844 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1845 return decode_constrained_packed_array (arr);
d2e4a39e 1846 else
14f9c5c9
AS
1847 return arr;
1848}
1849
1850/* If TYPE represents a GNAT array type, return it translated to an
1851 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
1852 packing). For other types, is the identity. */
1853
d2e4a39e
AS
1854struct type *
1855ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 1856{
ad82864c
JB
1857 if (ada_is_constrained_packed_array_type (type))
1858 return decode_constrained_packed_array_type (type);
17280b9f
UW
1859
1860 if (ada_is_array_descriptor_type (type))
556bdfd4 1861 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
1862
1863 return type;
14f9c5c9
AS
1864}
1865
4c4b4cd2
PH
1866/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1867
ad82864c
JB
1868static int
1869ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
1870{
1871 if (type == NULL)
1872 return 0;
4c4b4cd2 1873 type = desc_base_type (type);
61ee279c 1874 type = ada_check_typedef (type);
d2e4a39e 1875 return
14f9c5c9
AS
1876 ada_type_name (type) != NULL
1877 && strstr (ada_type_name (type), "___XP") != NULL;
1878}
1879
ad82864c
JB
1880/* Non-zero iff TYPE represents a standard GNAT constrained
1881 packed-array type. */
1882
1883int
1884ada_is_constrained_packed_array_type (struct type *type)
1885{
1886 return ada_is_packed_array_type (type)
1887 && !ada_is_array_descriptor_type (type);
1888}
1889
1890/* Non-zero iff TYPE represents an array descriptor for a
1891 unconstrained packed-array type. */
1892
1893static int
1894ada_is_unconstrained_packed_array_type (struct type *type)
1895{
1896 return ada_is_packed_array_type (type)
1897 && ada_is_array_descriptor_type (type);
1898}
1899
1900/* Given that TYPE encodes a packed array type (constrained or unconstrained),
1901 return the size of its elements in bits. */
1902
1903static long
1904decode_packed_array_bitsize (struct type *type)
1905{
1906 char *raw_name = ada_type_name (ada_check_typedef (type));
1907 char *tail;
1908 long bits;
1909
1910 if (!raw_name)
1911 raw_name = ada_type_name (desc_base_type (type));
1912
1913 if (!raw_name)
1914 return 0;
1915
1916 tail = strstr (raw_name, "___XP");
1917
1918 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1919 {
1920 lim_warning
1921 (_("could not understand bit size information on packed array"));
1922 return 0;
1923 }
1924
1925 return bits;
1926}
1927
14f9c5c9
AS
1928/* Given that TYPE is a standard GDB array type with all bounds filled
1929 in, and that the element size of its ultimate scalar constituents
1930 (that is, either its elements, or, if it is an array of arrays, its
1931 elements' elements, etc.) is *ELT_BITS, return an identical type,
1932 but with the bit sizes of its elements (and those of any
1933 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2
PH
1934 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1935 in bits. */
1936
d2e4a39e 1937static struct type *
ad82864c 1938constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 1939{
d2e4a39e
AS
1940 struct type *new_elt_type;
1941 struct type *new_type;
14f9c5c9
AS
1942 LONGEST low_bound, high_bound;
1943
61ee279c 1944 type = ada_check_typedef (type);
14f9c5c9
AS
1945 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1946 return type;
1947
e9bb382b 1948 new_type = alloc_type_copy (type);
ad82864c
JB
1949 new_elt_type =
1950 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
1951 elt_bits);
262452ec 1952 create_array_type (new_type, new_elt_type, TYPE_INDEX_TYPE (type));
14f9c5c9
AS
1953 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1954 TYPE_NAME (new_type) = ada_type_name (type);
1955
262452ec 1956 if (get_discrete_bounds (TYPE_INDEX_TYPE (type),
4c4b4cd2 1957 &low_bound, &high_bound) < 0)
14f9c5c9
AS
1958 low_bound = high_bound = 0;
1959 if (high_bound < low_bound)
1960 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 1961 else
14f9c5c9
AS
1962 {
1963 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 1964 TYPE_LENGTH (new_type) =
4c4b4cd2 1965 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
1966 }
1967
876cecd0 1968 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
1969 return new_type;
1970}
1971
ad82864c
JB
1972/* The array type encoded by TYPE, where
1973 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 1974
d2e4a39e 1975static struct type *
ad82864c 1976decode_constrained_packed_array_type (struct type *type)
d2e4a39e 1977{
727e3d2e
JB
1978 char *raw_name = ada_type_name (ada_check_typedef (type));
1979 char *name;
1980 char *tail;
d2e4a39e 1981 struct type *shadow_type;
14f9c5c9 1982 long bits;
14f9c5c9 1983
727e3d2e
JB
1984 if (!raw_name)
1985 raw_name = ada_type_name (desc_base_type (type));
1986
1987 if (!raw_name)
1988 return NULL;
1989
1990 name = (char *) alloca (strlen (raw_name) + 1);
1991 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
1992 type = desc_base_type (type);
1993
14f9c5c9
AS
1994 memcpy (name, raw_name, tail - raw_name);
1995 name[tail - raw_name] = '\000';
1996
b4ba55a1
JB
1997 shadow_type = ada_find_parallel_type_with_name (type, name);
1998
1999 if (shadow_type == NULL)
14f9c5c9 2000 {
323e0a4a 2001 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2002 return NULL;
2003 }
cb249c71 2004 CHECK_TYPEDEF (shadow_type);
14f9c5c9
AS
2005
2006 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
2007 {
323e0a4a 2008 lim_warning (_("could not understand bounds information on packed array"));
14f9c5c9
AS
2009 return NULL;
2010 }
d2e4a39e 2011
ad82864c
JB
2012 bits = decode_packed_array_bitsize (type);
2013 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2014}
2015
ad82864c
JB
2016/* Given that ARR is a struct value *indicating a GNAT constrained packed
2017 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2018 standard GDB array type except that the BITSIZEs of the array
2019 target types are set to the number of bits in each element, and the
4c4b4cd2 2020 type length is set appropriately. */
14f9c5c9 2021
d2e4a39e 2022static struct value *
ad82864c 2023decode_constrained_packed_array (struct value *arr)
14f9c5c9 2024{
4c4b4cd2 2025 struct type *type;
14f9c5c9 2026
4c4b4cd2 2027 arr = ada_coerce_ref (arr);
284614f0
JB
2028
2029 /* If our value is a pointer, then dererence it. Make sure that
2030 this operation does not cause the target type to be fixed, as
2031 this would indirectly cause this array to be decoded. The rest
2032 of the routine assumes that the array hasn't been decoded yet,
2033 so we use the basic "value_ind" routine to perform the dereferencing,
2034 as opposed to using "ada_value_ind". */
df407dfe 2035 if (TYPE_CODE (value_type (arr)) == TYPE_CODE_PTR)
284614f0 2036 arr = value_ind (arr);
4c4b4cd2 2037
ad82864c 2038 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2039 if (type == NULL)
2040 {
323e0a4a 2041 error (_("can't unpack array"));
14f9c5c9
AS
2042 return NULL;
2043 }
61ee279c 2044
50810684 2045 if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
32c9a795 2046 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2047 {
2048 /* This is a (right-justified) modular type representing a packed
2049 array with no wrapper. In order to interpret the value through
2050 the (left-justified) packed array type we just built, we must
2051 first left-justify it. */
2052 int bit_size, bit_pos;
2053 ULONGEST mod;
2054
df407dfe 2055 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2056 bit_size = 0;
2057 while (mod > 0)
2058 {
2059 bit_size += 1;
2060 mod >>= 1;
2061 }
df407dfe 2062 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2063 arr = ada_value_primitive_packed_val (arr, NULL,
2064 bit_pos / HOST_CHAR_BIT,
2065 bit_pos % HOST_CHAR_BIT,
2066 bit_size,
2067 type);
2068 }
2069
4c4b4cd2 2070 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2071}
2072
2073
2074/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2075 given in IND. ARR must be a simple array. */
14f9c5c9 2076
d2e4a39e
AS
2077static struct value *
2078value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2079{
2080 int i;
2081 int bits, elt_off, bit_off;
2082 long elt_total_bit_offset;
d2e4a39e
AS
2083 struct type *elt_type;
2084 struct value *v;
14f9c5c9
AS
2085
2086 bits = 0;
2087 elt_total_bit_offset = 0;
df407dfe 2088 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2089 for (i = 0; i < arity; i += 1)
14f9c5c9 2090 {
d2e4a39e 2091 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
4c4b4cd2
PH
2092 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2093 error
323e0a4a 2094 (_("attempt to do packed indexing of something other than a packed array"));
14f9c5c9 2095 else
4c4b4cd2
PH
2096 {
2097 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2098 LONGEST lowerbound, upperbound;
2099 LONGEST idx;
2100
2101 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2102 {
323e0a4a 2103 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2104 lowerbound = upperbound = 0;
2105 }
2106
3cb382c9 2107 idx = pos_atr (ind[i]);
4c4b4cd2 2108 if (idx < lowerbound || idx > upperbound)
323e0a4a 2109 lim_warning (_("packed array index %ld out of bounds"), (long) idx);
4c4b4cd2
PH
2110 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2111 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2112 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2113 }
14f9c5c9
AS
2114 }
2115 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2116 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2117
2118 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2119 bits, elt_type);
14f9c5c9
AS
2120 return v;
2121}
2122
4c4b4cd2 2123/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2124
2125static int
d2e4a39e 2126has_negatives (struct type *type)
14f9c5c9 2127{
d2e4a39e
AS
2128 switch (TYPE_CODE (type))
2129 {
2130 default:
2131 return 0;
2132 case TYPE_CODE_INT:
2133 return !TYPE_UNSIGNED (type);
2134 case TYPE_CODE_RANGE:
2135 return TYPE_LOW_BOUND (type) < 0;
2136 }
14f9c5c9 2137}
d2e4a39e 2138
14f9c5c9
AS
2139
2140/* Create a new value of type TYPE from the contents of OBJ starting
2141 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2142 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
4c4b4cd2
PH
2143 assigning through the result will set the field fetched from.
2144 VALADDR is ignored unless OBJ is NULL, in which case,
2145 VALADDR+OFFSET must address the start of storage containing the
2146 packed value. The value returned in this case is never an lval.
2147 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
14f9c5c9 2148
d2e4a39e 2149struct value *
fc1a4b47 2150ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
a2bd3dcd 2151 long offset, int bit_offset, int bit_size,
4c4b4cd2 2152 struct type *type)
14f9c5c9 2153{
d2e4a39e 2154 struct value *v;
4c4b4cd2
PH
2155 int src, /* Index into the source area */
2156 targ, /* Index into the target area */
2157 srcBitsLeft, /* Number of source bits left to move */
2158 nsrc, ntarg, /* Number of source and target bytes */
2159 unusedLS, /* Number of bits in next significant
2160 byte of source that are unused */
2161 accumSize; /* Number of meaningful bits in accum */
2162 unsigned char *bytes; /* First byte containing data to unpack */
d2e4a39e 2163 unsigned char *unpacked;
4c4b4cd2 2164 unsigned long accum; /* Staging area for bits being transferred */
14f9c5c9
AS
2165 unsigned char sign;
2166 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
4c4b4cd2
PH
2167 /* Transmit bytes from least to most significant; delta is the direction
2168 the indices move. */
50810684 2169 int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
14f9c5c9 2170
61ee279c 2171 type = ada_check_typedef (type);
14f9c5c9
AS
2172
2173 if (obj == NULL)
2174 {
2175 v = allocate_value (type);
d2e4a39e 2176 bytes = (unsigned char *) (valaddr + offset);
14f9c5c9 2177 }
9214ee5f 2178 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
14f9c5c9
AS
2179 {
2180 v = value_at (type,
42ae5230 2181 value_address (obj) + offset);
d2e4a39e 2182 bytes = (unsigned char *) alloca (len);
42ae5230 2183 read_memory (value_address (v), bytes, len);
14f9c5c9 2184 }
d2e4a39e 2185 else
14f9c5c9
AS
2186 {
2187 v = allocate_value (type);
0fd88904 2188 bytes = (unsigned char *) value_contents (obj) + offset;
14f9c5c9 2189 }
d2e4a39e
AS
2190
2191 if (obj != NULL)
14f9c5c9 2192 {
42ae5230 2193 CORE_ADDR new_addr;
5b4ee69b 2194
74bcbdf3 2195 set_value_component_location (v, obj);
42ae5230 2196 new_addr = value_address (obj) + offset;
9bbda503
AC
2197 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2198 set_value_bitsize (v, bit_size);
df407dfe 2199 if (value_bitpos (v) >= HOST_CHAR_BIT)
4c4b4cd2 2200 {
42ae5230 2201 ++new_addr;
9bbda503 2202 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
4c4b4cd2 2203 }
42ae5230 2204 set_value_address (v, new_addr);
14f9c5c9
AS
2205 }
2206 else
9bbda503 2207 set_value_bitsize (v, bit_size);
0fd88904 2208 unpacked = (unsigned char *) value_contents (v);
14f9c5c9
AS
2209
2210 srcBitsLeft = bit_size;
2211 nsrc = len;
2212 ntarg = TYPE_LENGTH (type);
2213 sign = 0;
2214 if (bit_size == 0)
2215 {
2216 memset (unpacked, 0, TYPE_LENGTH (type));
2217 return v;
2218 }
50810684 2219 else if (gdbarch_bits_big_endian (get_type_arch (type)))
14f9c5c9 2220 {
d2e4a39e 2221 src = len - 1;
1265e4aa
JB
2222 if (has_negatives (type)
2223 && ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2224 sign = ~0;
d2e4a39e
AS
2225
2226 unusedLS =
4c4b4cd2
PH
2227 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2228 % HOST_CHAR_BIT;
14f9c5c9
AS
2229
2230 switch (TYPE_CODE (type))
4c4b4cd2
PH
2231 {
2232 case TYPE_CODE_ARRAY:
2233 case TYPE_CODE_UNION:
2234 case TYPE_CODE_STRUCT:
2235 /* Non-scalar values must be aligned at a byte boundary... */
2236 accumSize =
2237 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2238 /* ... And are placed at the beginning (most-significant) bytes
2239 of the target. */
529cad9c 2240 targ = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
0056e4d5 2241 ntarg = targ + 1;
4c4b4cd2
PH
2242 break;
2243 default:
2244 accumSize = 0;
2245 targ = TYPE_LENGTH (type) - 1;
2246 break;
2247 }
14f9c5c9 2248 }
d2e4a39e 2249 else
14f9c5c9
AS
2250 {
2251 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2252
2253 src = targ = 0;
2254 unusedLS = bit_offset;
2255 accumSize = 0;
2256
d2e4a39e 2257 if (has_negatives (type) && (bytes[len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2258 sign = ~0;
14f9c5c9 2259 }
d2e4a39e 2260
14f9c5c9
AS
2261 accum = 0;
2262 while (nsrc > 0)
2263 {
2264 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2265 part of the value. */
d2e4a39e 2266 unsigned int unusedMSMask =
4c4b4cd2
PH
2267 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2268 1;
2269 /* Sign-extend bits for this byte. */
14f9c5c9 2270 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2271
d2e4a39e 2272 accum |=
4c4b4cd2 2273 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2274 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2275 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2
PH
2276 {
2277 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2278 accumSize -= HOST_CHAR_BIT;
2279 accum >>= HOST_CHAR_BIT;
2280 ntarg -= 1;
2281 targ += delta;
2282 }
14f9c5c9
AS
2283 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2284 unusedLS = 0;
2285 nsrc -= 1;
2286 src += delta;
2287 }
2288 while (ntarg > 0)
2289 {
2290 accum |= sign << accumSize;
2291 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
2292 accumSize -= HOST_CHAR_BIT;
2293 accum >>= HOST_CHAR_BIT;
2294 ntarg -= 1;
2295 targ += delta;
2296 }
2297
2298 return v;
2299}
d2e4a39e 2300
14f9c5c9
AS
2301/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
2302 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
4c4b4cd2 2303 not overlap. */
14f9c5c9 2304static void
fc1a4b47 2305move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
50810684 2306 int src_offset, int n, int bits_big_endian_p)
14f9c5c9
AS
2307{
2308 unsigned int accum, mask;
2309 int accum_bits, chunk_size;
2310
2311 target += targ_offset / HOST_CHAR_BIT;
2312 targ_offset %= HOST_CHAR_BIT;
2313 source += src_offset / HOST_CHAR_BIT;
2314 src_offset %= HOST_CHAR_BIT;
50810684 2315 if (bits_big_endian_p)
14f9c5c9
AS
2316 {
2317 accum = (unsigned char) *source;
2318 source += 1;
2319 accum_bits = HOST_CHAR_BIT - src_offset;
2320
d2e4a39e 2321 while (n > 0)
4c4b4cd2
PH
2322 {
2323 int unused_right;
5b4ee69b 2324
4c4b4cd2
PH
2325 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
2326 accum_bits += HOST_CHAR_BIT;
2327 source += 1;
2328 chunk_size = HOST_CHAR_BIT - targ_offset;
2329 if (chunk_size > n)
2330 chunk_size = n;
2331 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
2332 mask = ((1 << chunk_size) - 1) << unused_right;
2333 *target =
2334 (*target & ~mask)
2335 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
2336 n -= chunk_size;
2337 accum_bits -= chunk_size;
2338 target += 1;
2339 targ_offset = 0;
2340 }
14f9c5c9
AS
2341 }
2342 else
2343 {
2344 accum = (unsigned char) *source >> src_offset;
2345 source += 1;
2346 accum_bits = HOST_CHAR_BIT - src_offset;
2347
d2e4a39e 2348 while (n > 0)
4c4b4cd2
PH
2349 {
2350 accum = accum + ((unsigned char) *source << accum_bits);
2351 accum_bits += HOST_CHAR_BIT;
2352 source += 1;
2353 chunk_size = HOST_CHAR_BIT - targ_offset;
2354 if (chunk_size > n)
2355 chunk_size = n;
2356 mask = ((1 << chunk_size) - 1) << targ_offset;
2357 *target = (*target & ~mask) | ((accum << targ_offset) & mask);
2358 n -= chunk_size;
2359 accum_bits -= chunk_size;
2360 accum >>= chunk_size;
2361 target += 1;
2362 targ_offset = 0;
2363 }
14f9c5c9
AS
2364 }
2365}
2366
14f9c5c9
AS
2367/* Store the contents of FROMVAL into the location of TOVAL.
2368 Return a new value with the location of TOVAL and contents of
2369 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2370 floating-point or non-scalar types. */
14f9c5c9 2371
d2e4a39e
AS
2372static struct value *
2373ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2374{
df407dfe
AC
2375 struct type *type = value_type (toval);
2376 int bits = value_bitsize (toval);
14f9c5c9 2377
52ce6436
PH
2378 toval = ada_coerce_ref (toval);
2379 fromval = ada_coerce_ref (fromval);
2380
2381 if (ada_is_direct_array_type (value_type (toval)))
2382 toval = ada_coerce_to_simple_array (toval);
2383 if (ada_is_direct_array_type (value_type (fromval)))
2384 fromval = ada_coerce_to_simple_array (fromval);
2385
88e3b34b 2386 if (!deprecated_value_modifiable (toval))
323e0a4a 2387 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2388
d2e4a39e 2389 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2390 && bits > 0
d2e4a39e 2391 && (TYPE_CODE (type) == TYPE_CODE_FLT
4c4b4cd2 2392 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
14f9c5c9 2393 {
df407dfe
AC
2394 int len = (value_bitpos (toval)
2395 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2396 int from_size;
d2e4a39e
AS
2397 char *buffer = (char *) alloca (len);
2398 struct value *val;
42ae5230 2399 CORE_ADDR to_addr = value_address (toval);
14f9c5c9
AS
2400
2401 if (TYPE_CODE (type) == TYPE_CODE_FLT)
4c4b4cd2 2402 fromval = value_cast (type, fromval);
14f9c5c9 2403
52ce6436 2404 read_memory (to_addr, buffer, len);
aced2898
PH
2405 from_size = value_bitsize (fromval);
2406 if (from_size == 0)
2407 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
50810684 2408 if (gdbarch_bits_big_endian (get_type_arch (type)))
df407dfe 2409 move_bits (buffer, value_bitpos (toval),
50810684 2410 value_contents (fromval), from_size - bits, bits, 1);
14f9c5c9 2411 else
50810684
UW
2412 move_bits (buffer, value_bitpos (toval),
2413 value_contents (fromval), 0, bits, 0);
52ce6436 2414 write_memory (to_addr, buffer, len);
8cebebb9
PP
2415 observer_notify_memory_changed (to_addr, len, buffer);
2416
14f9c5c9 2417 val = value_copy (toval);
0fd88904 2418 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2419 TYPE_LENGTH (type));
04624583 2420 deprecated_set_value_type (val, type);
d2e4a39e 2421
14f9c5c9
AS
2422 return val;
2423 }
2424
2425 return value_assign (toval, fromval);
2426}
2427
2428
52ce6436
PH
2429/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2430 * CONTAINER, assign the contents of VAL to COMPONENTS's place in
2431 * CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2432 * COMPONENT, and not the inferior's memory. The current contents
2433 * of COMPONENT are ignored. */
2434static void
2435value_assign_to_component (struct value *container, struct value *component,
2436 struct value *val)
2437{
2438 LONGEST offset_in_container =
42ae5230 2439 (LONGEST) (value_address (component) - value_address (container));
52ce6436
PH
2440 int bit_offset_in_container =
2441 value_bitpos (component) - value_bitpos (container);
2442 int bits;
2443
2444 val = value_cast (value_type (component), val);
2445
2446 if (value_bitsize (component) == 0)
2447 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2448 else
2449 bits = value_bitsize (component);
2450
50810684 2451 if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
52ce6436
PH
2452 move_bits (value_contents_writeable (container) + offset_in_container,
2453 value_bitpos (container) + bit_offset_in_container,
2454 value_contents (val),
2455 TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
50810684 2456 bits, 1);
52ce6436
PH
2457 else
2458 move_bits (value_contents_writeable (container) + offset_in_container,
2459 value_bitpos (container) + bit_offset_in_container,
50810684 2460 value_contents (val), 0, bits, 0);
52ce6436
PH
2461}
2462
4c4b4cd2
PH
2463/* The value of the element of array ARR at the ARITY indices given in IND.
2464 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2465 thereto. */
2466
d2e4a39e
AS
2467struct value *
2468ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2469{
2470 int k;
d2e4a39e
AS
2471 struct value *elt;
2472 struct type *elt_type;
14f9c5c9
AS
2473
2474 elt = ada_coerce_to_simple_array (arr);
2475
df407dfe 2476 elt_type = ada_check_typedef (value_type (elt));
d2e4a39e 2477 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
14f9c5c9
AS
2478 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2479 return value_subscript_packed (elt, arity, ind);
2480
2481 for (k = 0; k < arity; k += 1)
2482 {
2483 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
323e0a4a 2484 error (_("too many subscripts (%d expected)"), k);
2497b498 2485 elt = value_subscript (elt, pos_atr (ind[k]));
14f9c5c9
AS
2486 }
2487 return elt;
2488}
2489
2490/* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
2491 value of the element of *ARR at the ARITY indices given in
4c4b4cd2 2492 IND. Does not read the entire array into memory. */
14f9c5c9 2493
2c0b251b 2494static struct value *
d2e4a39e 2495ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
4c4b4cd2 2496 struct value **ind)
14f9c5c9
AS
2497{
2498 int k;
2499
2500 for (k = 0; k < arity; k += 1)
2501 {
2502 LONGEST lwb, upb;
14f9c5c9
AS
2503
2504 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
323e0a4a 2505 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2506 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2507 value_copy (arr));
14f9c5c9 2508 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
2497b498 2509 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2510 type = TYPE_TARGET_TYPE (type);
2511 }
2512
2513 return value_ind (arr);
2514}
2515
0b5d8877 2516/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
f5938064
JG
2517 actual type of ARRAY_PTR is ignored), returns the Ada slice of HIGH-LOW+1
2518 elements starting at index LOW. The lower bound of this array is LOW, as
2519 per Ada rules. */
0b5d8877 2520static struct value *
f5938064
JG
2521ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2522 int low, int high)
0b5d8877 2523{
6c038f32 2524 CORE_ADDR base = value_as_address (array_ptr)
43bbcdc2 2525 + ((low - ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type)))
0b5d8877 2526 * TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
6c038f32
PH
2527 struct type *index_type =
2528 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
0b5d8877 2529 low, high);
6c038f32 2530 struct type *slice_type =
0b5d8877 2531 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
5b4ee69b 2532
f5938064 2533 return value_at_lazy (slice_type, base);
0b5d8877
PH
2534}
2535
2536
2537static struct value *
2538ada_value_slice (struct value *array, int low, int high)
2539{
df407dfe 2540 struct type *type = value_type (array);
6c038f32 2541 struct type *index_type =
0b5d8877 2542 create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
6c038f32 2543 struct type *slice_type =
0b5d8877 2544 create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
5b4ee69b 2545
6c038f32 2546 return value_cast (slice_type, value_slice (array, low, high - low + 1));
0b5d8877
PH
2547}
2548
14f9c5c9
AS
2549/* If type is a record type in the form of a standard GNAT array
2550 descriptor, returns the number of dimensions for type. If arr is a
2551 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2552 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2553
2554int
d2e4a39e 2555ada_array_arity (struct type *type)
14f9c5c9
AS
2556{
2557 int arity;
2558
2559 if (type == NULL)
2560 return 0;
2561
2562 type = desc_base_type (type);
2563
2564 arity = 0;
d2e4a39e 2565 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9 2566 return desc_arity (desc_bounds_type (type));
d2e4a39e
AS
2567 else
2568 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9 2569 {
4c4b4cd2 2570 arity += 1;
61ee279c 2571 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2572 }
d2e4a39e 2573
14f9c5c9
AS
2574 return arity;
2575}
2576
2577/* If TYPE is a record type in the form of a standard GNAT array
2578 descriptor or a simple array type, returns the element type for
2579 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2580 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2581
d2e4a39e
AS
2582struct type *
2583ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2584{
2585 type = desc_base_type (type);
2586
d2e4a39e 2587 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
14f9c5c9
AS
2588 {
2589 int k;
d2e4a39e 2590 struct type *p_array_type;
14f9c5c9 2591
556bdfd4 2592 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2593
2594 k = ada_array_arity (type);
2595 if (k == 0)
4c4b4cd2 2596 return NULL;
d2e4a39e 2597
4c4b4cd2 2598 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2599 if (nindices >= 0 && k > nindices)
4c4b4cd2 2600 k = nindices;
d2e4a39e 2601 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2602 {
61ee279c 2603 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2604 k -= 1;
2605 }
14f9c5c9
AS
2606 return p_array_type;
2607 }
2608 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
2609 {
2610 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2611 {
2612 type = TYPE_TARGET_TYPE (type);
2613 nindices -= 1;
2614 }
14f9c5c9
AS
2615 return type;
2616 }
2617
2618 return NULL;
2619}
2620
4c4b4cd2 2621/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2622 Does not examine memory. Throws an error if N is invalid or TYPE
2623 is not an array type. NAME is the name of the Ada attribute being
2624 evaluated ('range, 'first, 'last, or 'length); it is used in building
2625 the error message. */
14f9c5c9 2626
1eea4ebd
UW
2627static struct type *
2628ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2629{
4c4b4cd2
PH
2630 struct type *result_type;
2631
14f9c5c9
AS
2632 type = desc_base_type (type);
2633
1eea4ebd
UW
2634 if (n < 0 || n > ada_array_arity (type))
2635 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2636
4c4b4cd2 2637 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2638 {
2639 int i;
2640
2641 for (i = 1; i < n; i += 1)
4c4b4cd2 2642 type = TYPE_TARGET_TYPE (type);
262452ec 2643 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
2644 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2645 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 2646 perhaps stabsread.c would make more sense. */
1eea4ebd
UW
2647 if (result_type && TYPE_CODE (result_type) == TYPE_CODE_UNDEF)
2648 result_type = NULL;
14f9c5c9 2649 }
d2e4a39e 2650 else
1eea4ebd
UW
2651 {
2652 result_type = desc_index_type (desc_bounds_type (type), n);
2653 if (result_type == NULL)
2654 error (_("attempt to take bound of something that is not an array"));
2655 }
2656
2657 return result_type;
14f9c5c9
AS
2658}
2659
2660/* Given that arr is an array type, returns the lower bound of the
2661 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2662 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2663 array-descriptor type. It works for other arrays with bounds supplied
2664 by run-time quantities other than discriminants. */
14f9c5c9 2665
abb68b3e 2666static LONGEST
1eea4ebd 2667ada_array_bound_from_type (struct type * arr_type, int n, int which)
14f9c5c9 2668{
1ce677a4 2669 struct type *type, *elt_type, *index_type_desc, *index_type;
1ce677a4 2670 int i;
262452ec
JK
2671
2672 gdb_assert (which == 0 || which == 1);
14f9c5c9 2673
ad82864c
JB
2674 if (ada_is_constrained_packed_array_type (arr_type))
2675 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2676
4c4b4cd2 2677 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2678 return (LONGEST) - which;
14f9c5c9
AS
2679
2680 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
2681 type = TYPE_TARGET_TYPE (arr_type);
2682 else
2683 type = arr_type;
2684
1ce677a4
UW
2685 elt_type = type;
2686 for (i = n; i > 1; i--)
2687 elt_type = TYPE_TARGET_TYPE (type);
2688
14f9c5c9 2689 index_type_desc = ada_find_parallel_type (type, "___XA");
28c85d6c 2690 ada_fixup_array_indexes_type (index_type_desc);
262452ec 2691 if (index_type_desc != NULL)
28c85d6c
JB
2692 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
2693 NULL);
262452ec 2694 else
1ce677a4 2695 index_type = TYPE_INDEX_TYPE (elt_type);
262452ec 2696
43bbcdc2
PH
2697 return
2698 (LONGEST) (which == 0
2699 ? ada_discrete_type_low_bound (index_type)
2700 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2701}
2702
2703/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
2704 nth index (numbering from 1) if WHICH is 0, and the upper bound if
2705 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 2706 supplied by run-time quantities other than discriminants. */
14f9c5c9 2707
1eea4ebd 2708static LONGEST
4dc81987 2709ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 2710{
df407dfe 2711 struct type *arr_type = value_type (arr);
14f9c5c9 2712
ad82864c
JB
2713 if (ada_is_constrained_packed_array_type (arr_type))
2714 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 2715 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 2716 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 2717 else
1eea4ebd 2718 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
2719}
2720
2721/* Given that arr is an array value, returns the length of the
2722 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
2723 supplied by run-time quantities other than discriminants.
2724 Does not work for arrays indexed by enumeration types with representation
2725 clauses at the moment. */
14f9c5c9 2726
1eea4ebd 2727static LONGEST
d2e4a39e 2728ada_array_length (struct value *arr, int n)
14f9c5c9 2729{
df407dfe 2730 struct type *arr_type = ada_check_typedef (value_type (arr));
14f9c5c9 2731
ad82864c
JB
2732 if (ada_is_constrained_packed_array_type (arr_type))
2733 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 2734
4c4b4cd2 2735 if (ada_is_simple_array_type (arr_type))
1eea4ebd
UW
2736 return (ada_array_bound_from_type (arr_type, n, 1)
2737 - ada_array_bound_from_type (arr_type, n, 0) + 1);
14f9c5c9 2738 else
1eea4ebd
UW
2739 return (value_as_long (desc_one_bound (desc_bounds (arr), n, 1))
2740 - value_as_long (desc_one_bound (desc_bounds (arr), n, 0)) + 1);
4c4b4cd2
PH
2741}
2742
2743/* An empty array whose type is that of ARR_TYPE (an array type),
2744 with bounds LOW to LOW-1. */
2745
2746static struct value *
2747empty_array (struct type *arr_type, int low)
2748{
6c038f32 2749 struct type *index_type =
0b5d8877
PH
2750 create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
2751 low, low - 1);
2752 struct type *elt_type = ada_array_element_type (arr_type, 1);
5b4ee69b 2753
0b5d8877 2754 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 2755}
14f9c5c9 2756\f
d2e4a39e 2757
4c4b4cd2 2758 /* Name resolution */
14f9c5c9 2759
4c4b4cd2
PH
2760/* The "decoded" name for the user-definable Ada operator corresponding
2761 to OP. */
14f9c5c9 2762
d2e4a39e 2763static const char *
4c4b4cd2 2764ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
2765{
2766 int i;
2767
4c4b4cd2 2768 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
2769 {
2770 if (ada_opname_table[i].op == op)
4c4b4cd2 2771 return ada_opname_table[i].decoded;
14f9c5c9 2772 }
323e0a4a 2773 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
2774}
2775
2776
4c4b4cd2
PH
2777/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
2778 references (marked by OP_VAR_VALUE nodes in which the symbol has an
2779 undefined namespace) and converts operators that are
2780 user-defined into appropriate function calls. If CONTEXT_TYPE is
14f9c5c9
AS
2781 non-null, it provides a preferred result type [at the moment, only
2782 type void has any effect---causing procedures to be preferred over
2783 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
4c4b4cd2 2784 return type is preferred. May change (expand) *EXP. */
14f9c5c9 2785
4c4b4cd2
PH
2786static void
2787resolve (struct expression **expp, int void_context_p)
14f9c5c9 2788{
30b15541
UW
2789 struct type *context_type = NULL;
2790 int pc = 0;
2791
2792 if (void_context_p)
2793 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
2794
2795 resolve_subexp (expp, &pc, 1, context_type);
14f9c5c9
AS
2796}
2797
4c4b4cd2
PH
2798/* Resolve the operator of the subexpression beginning at
2799 position *POS of *EXPP. "Resolving" consists of replacing
2800 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
2801 with their resolutions, replacing built-in operators with
2802 function calls to user-defined operators, where appropriate, and,
2803 when DEPROCEDURE_P is non-zero, converting function-valued variables
2804 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
2805 are as in ada_resolve, above. */
14f9c5c9 2806
d2e4a39e 2807static struct value *
4c4b4cd2 2808resolve_subexp (struct expression **expp, int *pos, int deprocedure_p,
76a01679 2809 struct type *context_type)
14f9c5c9
AS
2810{
2811 int pc = *pos;
2812 int i;
4c4b4cd2 2813 struct expression *exp; /* Convenience: == *expp. */
14f9c5c9 2814 enum exp_opcode op = (*expp)->elts[pc].opcode;
4c4b4cd2
PH
2815 struct value **argvec; /* Vector of operand types (alloca'ed). */
2816 int nargs; /* Number of operands. */
52ce6436 2817 int oplen;
14f9c5c9
AS
2818
2819 argvec = NULL;
2820 nargs = 0;
2821 exp = *expp;
2822
52ce6436
PH
2823 /* Pass one: resolve operands, saving their types and updating *pos,
2824 if needed. */
14f9c5c9
AS
2825 switch (op)
2826 {
4c4b4cd2
PH
2827 case OP_FUNCALL:
2828 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679
JB
2829 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
2830 *pos += 7;
4c4b4cd2
PH
2831 else
2832 {
2833 *pos += 3;
2834 resolve_subexp (expp, pos, 0, NULL);
2835 }
2836 nargs = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9
AS
2837 break;
2838
14f9c5c9 2839 case UNOP_ADDR:
4c4b4cd2
PH
2840 *pos += 1;
2841 resolve_subexp (expp, pos, 0, NULL);
2842 break;
2843
52ce6436
PH
2844 case UNOP_QUAL:
2845 *pos += 3;
17466c1a 2846 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type));
4c4b4cd2
PH
2847 break;
2848
52ce6436 2849 case OP_ATR_MODULUS:
4c4b4cd2
PH
2850 case OP_ATR_SIZE:
2851 case OP_ATR_TAG:
4c4b4cd2
PH
2852 case OP_ATR_FIRST:
2853 case OP_ATR_LAST:
2854 case OP_ATR_LENGTH:
2855 case OP_ATR_POS:
2856 case OP_ATR_VAL:
4c4b4cd2
PH
2857 case OP_ATR_MIN:
2858 case OP_ATR_MAX:
52ce6436
PH
2859 case TERNOP_IN_RANGE:
2860 case BINOP_IN_BOUNDS:
2861 case UNOP_IN_RANGE:
2862 case OP_AGGREGATE:
2863 case OP_OTHERS:
2864 case OP_CHOICES:
2865 case OP_POSITIONAL:
2866 case OP_DISCRETE_RANGE:
2867 case OP_NAME:
2868 ada_forward_operator_length (exp, pc, &oplen, &nargs);
2869 *pos += oplen;
14f9c5c9
AS
2870 break;
2871
2872 case BINOP_ASSIGN:
2873 {
4c4b4cd2
PH
2874 struct value *arg1;
2875
2876 *pos += 1;
2877 arg1 = resolve_subexp (expp, pos, 0, NULL);
2878 if (arg1 == NULL)
2879 resolve_subexp (expp, pos, 1, NULL);
2880 else
df407dfe 2881 resolve_subexp (expp, pos, 1, value_type (arg1));
4c4b4cd2 2882 break;
14f9c5c9
AS
2883 }
2884
4c4b4cd2 2885 case UNOP_CAST:
4c4b4cd2
PH
2886 *pos += 3;
2887 nargs = 1;
2888 break;
14f9c5c9 2889
4c4b4cd2
PH
2890 case BINOP_ADD:
2891 case BINOP_SUB:
2892 case BINOP_MUL:
2893 case BINOP_DIV:
2894 case BINOP_REM:
2895 case BINOP_MOD:
2896 case BINOP_EXP:
2897 case BINOP_CONCAT:
2898 case BINOP_LOGICAL_AND:
2899 case BINOP_LOGICAL_OR:
2900 case BINOP_BITWISE_AND:
2901 case BINOP_BITWISE_IOR:
2902 case BINOP_BITWISE_XOR:
14f9c5c9 2903
4c4b4cd2
PH
2904 case BINOP_EQUAL:
2905 case BINOP_NOTEQUAL:
2906 case BINOP_LESS:
2907 case BINOP_GTR:
2908 case BINOP_LEQ:
2909 case BINOP_GEQ:
14f9c5c9 2910
4c4b4cd2
PH
2911 case BINOP_REPEAT:
2912 case BINOP_SUBSCRIPT:
2913 case BINOP_COMMA:
40c8aaa9
JB
2914 *pos += 1;
2915 nargs = 2;
2916 break;
14f9c5c9 2917
4c4b4cd2
PH
2918 case UNOP_NEG:
2919 case UNOP_PLUS:
2920 case UNOP_LOGICAL_NOT:
2921 case UNOP_ABS:
2922 case UNOP_IND:
2923 *pos += 1;
2924 nargs = 1;
2925 break;
14f9c5c9 2926
4c4b4cd2
PH
2927 case OP_LONG:
2928 case OP_DOUBLE:
2929 case OP_VAR_VALUE:
2930 *pos += 4;
2931 break;
14f9c5c9 2932
4c4b4cd2
PH
2933 case OP_TYPE:
2934 case OP_BOOL:
2935 case OP_LAST:
4c4b4cd2
PH
2936 case OP_INTERNALVAR:
2937 *pos += 3;
2938 break;
14f9c5c9 2939
4c4b4cd2
PH
2940 case UNOP_MEMVAL:
2941 *pos += 3;
2942 nargs = 1;
2943 break;
2944
67f3407f
DJ
2945 case OP_REGISTER:
2946 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2947 break;
2948
4c4b4cd2
PH
2949 case STRUCTOP_STRUCT:
2950 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2951 nargs = 1;
2952 break;
2953
4c4b4cd2 2954 case TERNOP_SLICE:
4c4b4cd2
PH
2955 *pos += 1;
2956 nargs = 3;
2957 break;
2958
52ce6436 2959 case OP_STRING:
14f9c5c9 2960 break;
4c4b4cd2
PH
2961
2962 default:
323e0a4a 2963 error (_("Unexpected operator during name resolution"));
14f9c5c9
AS
2964 }
2965
76a01679 2966 argvec = (struct value * *) alloca (sizeof (struct value *) * (nargs + 1));
4c4b4cd2
PH
2967 for (i = 0; i < nargs; i += 1)
2968 argvec[i] = resolve_subexp (expp, pos, 1, NULL);
2969 argvec[i] = NULL;
2970 exp = *expp;
2971
2972 /* Pass two: perform any resolution on principal operator. */
14f9c5c9
AS
2973 switch (op)
2974 {
2975 default:
2976 break;
2977
14f9c5c9 2978 case OP_VAR_VALUE:
4c4b4cd2 2979 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
2980 {
2981 struct ada_symbol_info *candidates;
2982 int n_candidates;
2983
2984 n_candidates =
2985 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
2986 (exp->elts[pc + 2].symbol),
2987 exp->elts[pc + 1].block, VAR_DOMAIN,
2988 &candidates);
2989
2990 if (n_candidates > 1)
2991 {
2992 /* Types tend to get re-introduced locally, so if there
2993 are any local symbols that are not types, first filter
2994 out all types. */
2995 int j;
2996 for (j = 0; j < n_candidates; j += 1)
2997 switch (SYMBOL_CLASS (candidates[j].sym))
2998 {
2999 case LOC_REGISTER:
3000 case LOC_ARG:
3001 case LOC_REF_ARG:
76a01679
JB
3002 case LOC_REGPARM_ADDR:
3003 case LOC_LOCAL:
76a01679 3004 case LOC_COMPUTED:
76a01679
JB
3005 goto FoundNonType;
3006 default:
3007 break;
3008 }
3009 FoundNonType:
3010 if (j < n_candidates)
3011 {
3012 j = 0;
3013 while (j < n_candidates)
3014 {
3015 if (SYMBOL_CLASS (candidates[j].sym) == LOC_TYPEDEF)
3016 {
3017 candidates[j] = candidates[n_candidates - 1];
3018 n_candidates -= 1;
3019 }
3020 else
3021 j += 1;
3022 }
3023 }
3024 }
3025
3026 if (n_candidates == 0)
323e0a4a 3027 error (_("No definition found for %s"),
76a01679
JB
3028 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3029 else if (n_candidates == 1)
3030 i = 0;
3031 else if (deprocedure_p
3032 && !is_nonfunction (candidates, n_candidates))
3033 {
06d5cf63
JB
3034 i = ada_resolve_function
3035 (candidates, n_candidates, NULL, 0,
3036 SYMBOL_LINKAGE_NAME (exp->elts[pc + 2].symbol),
3037 context_type);
76a01679 3038 if (i < 0)
323e0a4a 3039 error (_("Could not find a match for %s"),
76a01679
JB
3040 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3041 }
3042 else
3043 {
323e0a4a 3044 printf_filtered (_("Multiple matches for %s\n"),
76a01679
JB
3045 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
3046 user_select_syms (candidates, n_candidates, 1);
3047 i = 0;
3048 }
3049
3050 exp->elts[pc + 1].block = candidates[i].block;
3051 exp->elts[pc + 2].symbol = candidates[i].sym;
1265e4aa
JB
3052 if (innermost_block == NULL
3053 || contained_in (candidates[i].block, innermost_block))
76a01679
JB
3054 innermost_block = candidates[i].block;
3055 }
3056
3057 if (deprocedure_p
3058 && (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 2].symbol))
3059 == TYPE_CODE_FUNC))
3060 {
3061 replace_operator_with_call (expp, pc, 0, 0,
3062 exp->elts[pc + 2].symbol,
3063 exp->elts[pc + 1].block);
3064 exp = *expp;
3065 }
14f9c5c9
AS
3066 break;
3067
3068 case OP_FUNCALL:
3069 {
4c4b4cd2 3070 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
76a01679 3071 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
4c4b4cd2
PH
3072 {
3073 struct ada_symbol_info *candidates;
3074 int n_candidates;
3075
3076 n_candidates =
76a01679
JB
3077 ada_lookup_symbol_list (SYMBOL_LINKAGE_NAME
3078 (exp->elts[pc + 5].symbol),
3079 exp->elts[pc + 4].block, VAR_DOMAIN,
3080 &candidates);
4c4b4cd2
PH
3081 if (n_candidates == 1)
3082 i = 0;
3083 else
3084 {
06d5cf63
JB
3085 i = ada_resolve_function
3086 (candidates, n_candidates,
3087 argvec, nargs,
3088 SYMBOL_LINKAGE_NAME (exp->elts[pc + 5].symbol),
3089 context_type);
4c4b4cd2 3090 if (i < 0)
323e0a4a 3091 error (_("Could not find a match for %s"),
4c4b4cd2
PH
3092 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
3093 }
3094
3095 exp->elts[pc + 4].block = candidates[i].block;
3096 exp->elts[pc + 5].symbol = candidates[i].sym;
1265e4aa
JB
3097 if (innermost_block == NULL
3098 || contained_in (candidates[i].block, innermost_block))
4c4b4cd2
PH
3099 innermost_block = candidates[i].block;
3100 }
14f9c5c9
AS
3101 }
3102 break;
3103 case BINOP_ADD:
3104 case BINOP_SUB:
3105 case BINOP_MUL:
3106 case BINOP_DIV:
3107 case BINOP_REM:
3108 case BINOP_MOD:
3109 case BINOP_CONCAT:
3110 case BINOP_BITWISE_AND:
3111 case BINOP_BITWISE_IOR:
3112 case BINOP_BITWISE_XOR:
3113 case BINOP_EQUAL:
3114 case BINOP_NOTEQUAL:
3115 case BINOP_LESS:
3116 case BINOP_GTR:
3117 case BINOP_LEQ:
3118 case BINOP_GEQ:
3119 case BINOP_EXP:
3120 case UNOP_NEG:
3121 case UNOP_PLUS:
3122 case UNOP_LOGICAL_NOT:
3123 case UNOP_ABS:
3124 if (possible_user_operator_p (op, argvec))
4c4b4cd2
PH
3125 {
3126 struct ada_symbol_info *candidates;
3127 int n_candidates;
3128
3129 n_candidates =
3130 ada_lookup_symbol_list (ada_encode (ada_decoded_op_name (op)),
3131 (struct block *) NULL, VAR_DOMAIN,
3132 &candidates);
3133 i = ada_resolve_function (candidates, n_candidates, argvec, nargs,
76a01679 3134 ada_decoded_op_name (op), NULL);
4c4b4cd2
PH
3135 if (i < 0)
3136 break;
3137
76a01679
JB
3138 replace_operator_with_call (expp, pc, nargs, 1,
3139 candidates[i].sym, candidates[i].block);
4c4b4cd2
PH
3140 exp = *expp;
3141 }
14f9c5c9 3142 break;
4c4b4cd2
PH
3143
3144 case OP_TYPE:
b3dbf008 3145 case OP_REGISTER:
4c4b4cd2 3146 return NULL;
14f9c5c9
AS
3147 }
3148
3149 *pos = pc;
3150 return evaluate_subexp_type (exp, pos);
3151}
3152
3153/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
4c4b4cd2 3154 MAY_DEREF is non-zero, the formal may be a pointer and the actual
5b3d5b7d 3155 a non-pointer. */
14f9c5c9 3156/* The term "match" here is rather loose. The match is heuristic and
5b3d5b7d 3157 liberal. */
14f9c5c9
AS
3158
3159static int
4dc81987 3160ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3161{
61ee279c
PH
3162 ftype = ada_check_typedef (ftype);
3163 atype = ada_check_typedef (atype);
14f9c5c9
AS
3164
3165 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
3166 ftype = TYPE_TARGET_TYPE (ftype);
3167 if (TYPE_CODE (atype) == TYPE_CODE_REF)
3168 atype = TYPE_TARGET_TYPE (atype);
3169
d2e4a39e 3170 switch (TYPE_CODE (ftype))
14f9c5c9
AS
3171 {
3172 default:
5b3d5b7d 3173 return TYPE_CODE (ftype) == TYPE_CODE (atype);
14f9c5c9
AS
3174 case TYPE_CODE_PTR:
3175 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
4c4b4cd2
PH
3176 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3177 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3178 else
1265e4aa
JB
3179 return (may_deref
3180 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
14f9c5c9
AS
3181 case TYPE_CODE_INT:
3182 case TYPE_CODE_ENUM:
3183 case TYPE_CODE_RANGE:
3184 switch (TYPE_CODE (atype))
4c4b4cd2
PH
3185 {
3186 case TYPE_CODE_INT:
3187 case TYPE_CODE_ENUM:
3188 case TYPE_CODE_RANGE:
3189 return 1;
3190 default:
3191 return 0;
3192 }
14f9c5c9
AS
3193
3194 case TYPE_CODE_ARRAY:
d2e4a39e 3195 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
4c4b4cd2 3196 || ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3197
3198 case TYPE_CODE_STRUCT:
4c4b4cd2
PH
3199 if (ada_is_array_descriptor_type (ftype))
3200 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
3201 || ada_is_array_descriptor_type (atype));
14f9c5c9 3202 else
4c4b4cd2
PH
3203 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
3204 && !ada_is_array_descriptor_type (atype));
14f9c5c9
AS
3205
3206 case TYPE_CODE_UNION:
3207 case TYPE_CODE_FLT:
3208 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
3209 }
3210}
3211
3212/* Return non-zero if the formals of FUNC "sufficiently match" the
3213 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3214 may also be an enumeral, in which case it is treated as a 0-
4c4b4cd2 3215 argument function. */
14f9c5c9
AS
3216
3217static int
d2e4a39e 3218ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
14f9c5c9
AS
3219{
3220 int i;
d2e4a39e 3221 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3222
1265e4aa
JB
3223 if (SYMBOL_CLASS (func) == LOC_CONST
3224 && TYPE_CODE (func_type) == TYPE_CODE_ENUM)
14f9c5c9
AS
3225 return (n_actuals == 0);
3226 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
3227 return 0;
3228
3229 if (TYPE_NFIELDS (func_type) != n_actuals)
3230 return 0;
3231
3232 for (i = 0; i < n_actuals; i += 1)
3233 {
4c4b4cd2 3234 if (actuals[i] == NULL)
76a01679
JB
3235 return 0;
3236 else
3237 {
5b4ee69b
MS
3238 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3239 i));
df407dfe 3240 struct type *atype = ada_check_typedef (value_type (actuals[i]));
4c4b4cd2 3241
76a01679
JB
3242 if (!ada_type_match (ftype, atype, 1))
3243 return 0;
3244 }
14f9c5c9
AS
3245 }
3246 return 1;
3247}
3248
3249/* False iff function type FUNC_TYPE definitely does not produce a value
3250 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3251 FUNC_TYPE is not a valid function type with a non-null return type
3252 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
3253
3254static int
d2e4a39e 3255return_match (struct type *func_type, struct type *context_type)
14f9c5c9 3256{
d2e4a39e 3257 struct type *return_type;
14f9c5c9
AS
3258
3259 if (func_type == NULL)
3260 return 1;
3261
4c4b4cd2
PH
3262 if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
3263 return_type = base_type (TYPE_TARGET_TYPE (func_type));
3264 else
3265 return_type = base_type (func_type);
14f9c5c9
AS
3266 if (return_type == NULL)
3267 return 1;
3268
4c4b4cd2 3269 context_type = base_type (context_type);
14f9c5c9
AS
3270
3271 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
3272 return context_type == NULL || return_type == context_type;
3273 else if (context_type == NULL)
3274 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
3275 else
3276 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
3277}
3278
3279
4c4b4cd2 3280/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
14f9c5c9 3281 function (if any) that matches the types of the NARGS arguments in
4c4b4cd2
PH
3282 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3283 that returns that type, then eliminate matches that don't. If
3284 CONTEXT_TYPE is void and there is at least one match that does not
3285 return void, eliminate all matches that do.
3286
14f9c5c9
AS
3287 Asks the user if there is more than one match remaining. Returns -1
3288 if there is no such symbol or none is selected. NAME is used
4c4b4cd2
PH
3289 solely for messages. May re-arrange and modify SYMS in
3290 the process; the index returned is for the modified vector. */
14f9c5c9 3291
4c4b4cd2
PH
3292static int
3293ada_resolve_function (struct ada_symbol_info syms[],
3294 int nsyms, struct value **args, int nargs,
3295 const char *name, struct type *context_type)
14f9c5c9 3296{
30b15541 3297 int fallback;
14f9c5c9 3298 int k;
4c4b4cd2 3299 int m; /* Number of hits */
14f9c5c9 3300
d2e4a39e 3301 m = 0;
30b15541
UW
3302 /* In the first pass of the loop, we only accept functions matching
3303 context_type. If none are found, we add a second pass of the loop
3304 where every function is accepted. */
3305 for (fallback = 0; m == 0 && fallback < 2; fallback++)
14f9c5c9
AS
3306 {
3307 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3308 {
61ee279c 3309 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].sym));
4c4b4cd2
PH
3310
3311 if (ada_args_match (syms[k].sym, args, nargs)
30b15541 3312 && (fallback || return_match (type, context_type)))
4c4b4cd2
PH
3313 {
3314 syms[m] = syms[k];
3315 m += 1;
3316 }
3317 }
14f9c5c9
AS
3318 }
3319
3320 if (m == 0)
3321 return -1;
3322 else if (m > 1)
3323 {
323e0a4a 3324 printf_filtered (_("Multiple matches for %s\n"), name);
4c4b4cd2 3325 user_select_syms (syms, m, 1);
14f9c5c9
AS
3326 return 0;
3327 }
3328 return 0;
3329}
3330
4c4b4cd2
PH
3331/* Returns true (non-zero) iff decoded name N0 should appear before N1
3332 in a listing of choices during disambiguation (see sort_choices, below).
3333 The idea is that overloadings of a subprogram name from the
3334 same package should sort in their source order. We settle for ordering
3335 such symbols by their trailing number (__N or $N). */
3336
14f9c5c9 3337static int
4c4b4cd2 3338encoded_ordered_before (char *N0, char *N1)
14f9c5c9
AS
3339{
3340 if (N1 == NULL)
3341 return 0;
3342 else if (N0 == NULL)
3343 return 1;
3344 else
3345 {
3346 int k0, k1;
5b4ee69b 3347
d2e4a39e 3348 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
4c4b4cd2 3349 ;
d2e4a39e 3350 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
4c4b4cd2 3351 ;
d2e4a39e 3352 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
4c4b4cd2
PH
3353 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3354 {
3355 int n0, n1;
5b4ee69b 3356
4c4b4cd2
PH
3357 n0 = k0;
3358 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3359 n0 -= 1;
3360 n1 = k1;
3361 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3362 n1 -= 1;
3363 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3364 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3365 }
14f9c5c9
AS
3366 return (strcmp (N0, N1) < 0);
3367 }
3368}
d2e4a39e 3369
4c4b4cd2
PH
3370/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3371 encoded names. */
3372
d2e4a39e 3373static void
4c4b4cd2 3374sort_choices (struct ada_symbol_info syms[], int nsyms)
14f9c5c9 3375{
4c4b4cd2 3376 int i;
5b4ee69b 3377
d2e4a39e 3378 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3379 {
4c4b4cd2 3380 struct ada_symbol_info sym = syms[i];
14f9c5c9
AS
3381 int j;
3382
d2e4a39e 3383 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2
PH
3384 {
3385 if (encoded_ordered_before (SYMBOL_LINKAGE_NAME (syms[j].sym),
3386 SYMBOL_LINKAGE_NAME (sym.sym)))
3387 break;
3388 syms[j + 1] = syms[j];
3389 }
d2e4a39e 3390 syms[j + 1] = sym;
14f9c5c9
AS
3391 }
3392}
3393
4c4b4cd2
PH
3394/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3395 by asking the user (if necessary), returning the number selected,
3396 and setting the first elements of SYMS items. Error if no symbols
3397 selected. */
14f9c5c9
AS
3398
3399/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
4c4b4cd2 3400 to be re-integrated one of these days. */
14f9c5c9
AS
3401
3402int
4c4b4cd2 3403user_select_syms (struct ada_symbol_info *syms, int nsyms, int max_results)
14f9c5c9
AS
3404{
3405 int i;
d2e4a39e 3406 int *chosen = (int *) alloca (sizeof (int) * nsyms);
14f9c5c9
AS
3407 int n_chosen;
3408 int first_choice = (max_results == 1) ? 1 : 2;
717d2f5a 3409 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9
AS
3410
3411 if (max_results < 1)
323e0a4a 3412 error (_("Request to select 0 symbols!"));
14f9c5c9
AS
3413 if (nsyms <= 1)
3414 return nsyms;
3415
717d2f5a
JB
3416 if (select_mode == multiple_symbols_cancel)
3417 error (_("\
3418canceled because the command is ambiguous\n\
3419See set/show multiple-symbol."));
3420
3421 /* If select_mode is "all", then return all possible symbols.
3422 Only do that if more than one symbol can be selected, of course.
3423 Otherwise, display the menu as usual. */
3424 if (select_mode == multiple_symbols_all && max_results > 1)
3425 return nsyms;
3426
323e0a4a 3427 printf_unfiltered (_("[0] cancel\n"));
14f9c5c9 3428 if (max_results > 1)
323e0a4a 3429 printf_unfiltered (_("[1] all\n"));
14f9c5c9 3430
4c4b4cd2 3431 sort_choices (syms, nsyms);
14f9c5c9
AS
3432
3433 for (i = 0; i < nsyms; i += 1)
3434 {
4c4b4cd2
PH
3435 if (syms[i].sym == NULL)
3436 continue;
3437
3438 if (SYMBOL_CLASS (syms[i].sym) == LOC_BLOCK)
3439 {
76a01679
JB
3440 struct symtab_and_line sal =
3441 find_function_start_sal (syms[i].sym, 1);
5b4ee69b 3442
323e0a4a
AC
3443 if (sal.symtab == NULL)
3444 printf_unfiltered (_("[%d] %s at <no source file available>:%d\n"),
3445 i + first_choice,
3446 SYMBOL_PRINT_NAME (syms[i].sym),
3447 sal.line);
3448 else
3449 printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
3450 SYMBOL_PRINT_NAME (syms[i].sym),
3451 sal.symtab->filename, sal.line);
4c4b4cd2
PH
3452 continue;
3453 }
d2e4a39e 3454 else
4c4b4cd2
PH
3455 {
3456 int is_enumeral =
3457 (SYMBOL_CLASS (syms[i].sym) == LOC_CONST
3458 && SYMBOL_TYPE (syms[i].sym) != NULL
3459 && TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) == TYPE_CODE_ENUM);
6f38eac8 3460 struct symtab *symtab = syms[i].sym->symtab;
4c4b4cd2
PH
3461
3462 if (SYMBOL_LINE (syms[i].sym) != 0 && symtab != NULL)
323e0a4a 3463 printf_unfiltered (_("[%d] %s at %s:%d\n"),
4c4b4cd2
PH
3464 i + first_choice,
3465 SYMBOL_PRINT_NAME (syms[i].sym),
3466 symtab->filename, SYMBOL_LINE (syms[i].sym));
76a01679
JB
3467 else if (is_enumeral
3468 && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
4c4b4cd2 3469 {
a3f17187 3470 printf_unfiltered (("[%d] "), i + first_choice);
76a01679
JB
3471 ada_print_type (SYMBOL_TYPE (syms[i].sym), NULL,
3472 gdb_stdout, -1, 0);
323e0a4a 3473 printf_unfiltered (_("'(%s) (enumeral)\n"),
4c4b4cd2
PH
3474 SYMBOL_PRINT_NAME (syms[i].sym));
3475 }
3476 else if (symtab != NULL)
3477 printf_unfiltered (is_enumeral
323e0a4a
AC
3478 ? _("[%d] %s in %s (enumeral)\n")
3479 : _("[%d] %s at %s:?\n"),
4c4b4cd2
PH
3480 i + first_choice,
3481 SYMBOL_PRINT_NAME (syms[i].sym),
3482 symtab->filename);
3483 else
3484 printf_unfiltered (is_enumeral
323e0a4a
AC
3485 ? _("[%d] %s (enumeral)\n")
3486 : _("[%d] %s at ?\n"),
4c4b4cd2
PH
3487 i + first_choice,
3488 SYMBOL_PRINT_NAME (syms[i].sym));
3489 }
14f9c5c9 3490 }
d2e4a39e 3491
14f9c5c9 3492 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
4c4b4cd2 3493 "overload-choice");
14f9c5c9
AS
3494
3495 for (i = 0; i < n_chosen; i += 1)
4c4b4cd2 3496 syms[i] = syms[chosen[i]];
14f9c5c9
AS
3497
3498 return n_chosen;
3499}
3500
3501/* Read and validate a set of numeric choices from the user in the
4c4b4cd2 3502 range 0 .. N_CHOICES-1. Place the results in increasing
14f9c5c9
AS
3503 order in CHOICES[0 .. N-1], and return N.
3504
3505 The user types choices as a sequence of numbers on one line
3506 separated by blanks, encoding them as follows:
3507
4c4b4cd2 3508 + A choice of 0 means to cancel the selection, throwing an error.
14f9c5c9
AS
3509 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3510 + The user chooses k by typing k+IS_ALL_CHOICE+1.
3511
4c4b4cd2 3512 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9
AS
3513
3514 ANNOTATION_SUFFIX, if present, is used to annotate the input
4c4b4cd2 3515 prompts (for use with the -f switch). */
14f9c5c9
AS
3516
3517int
d2e4a39e 3518get_selections (int *choices, int n_choices, int max_results,
4c4b4cd2 3519 int is_all_choice, char *annotation_suffix)
14f9c5c9 3520{
d2e4a39e 3521 char *args;
0bcd0149 3522 char *prompt;
14f9c5c9
AS
3523 int n_chosen;
3524 int first_choice = is_all_choice ? 2 : 1;
d2e4a39e 3525
14f9c5c9
AS
3526 prompt = getenv ("PS2");
3527 if (prompt == NULL)
0bcd0149 3528 prompt = "> ";
14f9c5c9 3529
0bcd0149 3530 args = command_line_input (prompt, 0, annotation_suffix);
d2e4a39e 3531
14f9c5c9 3532 if (args == NULL)
323e0a4a 3533 error_no_arg (_("one or more choice numbers"));
14f9c5c9
AS
3534
3535 n_chosen = 0;
76a01679 3536
4c4b4cd2
PH
3537 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3538 order, as given in args. Choices are validated. */
14f9c5c9
AS
3539 while (1)
3540 {
d2e4a39e 3541 char *args2;
14f9c5c9
AS
3542 int choice, j;
3543
3544 while (isspace (*args))
4c4b4cd2 3545 args += 1;
14f9c5c9 3546 if (*args == '\0' && n_chosen == 0)
323e0a4a 3547 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3548 else if (*args == '\0')
4c4b4cd2 3549 break;
14f9c5c9
AS
3550
3551 choice = strtol (args, &args2, 10);
d2e4a39e 3552 if (args == args2 || choice < 0
4c4b4cd2 3553 || choice > n_choices + first_choice - 1)
323e0a4a 3554 error (_("Argument must be choice number"));
14f9c5c9
AS
3555 args = args2;
3556
d2e4a39e 3557 if (choice == 0)
323e0a4a 3558 error (_("cancelled"));
14f9c5c9
AS
3559
3560 if (choice < first_choice)
4c4b4cd2
PH
3561 {
3562 n_chosen = n_choices;
3563 for (j = 0; j < n_choices; j += 1)
3564 choices[j] = j;
3565 break;
3566 }
14f9c5c9
AS
3567 choice -= first_choice;
3568
d2e4a39e 3569 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
4c4b4cd2
PH
3570 {
3571 }
14f9c5c9
AS
3572
3573 if (j < 0 || choice != choices[j])
4c4b4cd2
PH
3574 {
3575 int k;
5b4ee69b 3576
4c4b4cd2
PH
3577 for (k = n_chosen - 1; k > j; k -= 1)
3578 choices[k + 1] = choices[k];
3579 choices[j + 1] = choice;
3580 n_chosen += 1;
3581 }
14f9c5c9
AS
3582 }
3583
3584 if (n_chosen > max_results)
323e0a4a 3585 error (_("Select no more than %d of the above"), max_results);
d2e4a39e 3586
14f9c5c9
AS
3587 return n_chosen;
3588}
3589
4c4b4cd2
PH
3590/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3591 on the function identified by SYM and BLOCK, and taking NARGS
3592 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3593
3594static void
d2e4a39e 3595replace_operator_with_call (struct expression **expp, int pc, int nargs,
4c4b4cd2
PH
3596 int oplen, struct symbol *sym,
3597 struct block *block)
14f9c5c9
AS
3598{
3599 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 3600 symbol, -oplen for operator being replaced). */
d2e4a39e 3601 struct expression *newexp = (struct expression *)
14f9c5c9 3602 xmalloc (sizeof (struct expression)
4c4b4cd2 3603 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
d2e4a39e 3604 struct expression *exp = *expp;
14f9c5c9
AS
3605
3606 newexp->nelts = exp->nelts + 7 - oplen;
3607 newexp->language_defn = exp->language_defn;
3608 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 3609 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 3610 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
3611
3612 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
3613 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
3614
3615 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
3616 newexp->elts[pc + 4].block = block;
3617 newexp->elts[pc + 5].symbol = sym;
3618
3619 *expp = newexp;
aacb1f0a 3620 xfree (exp);
d2e4a39e 3621}
14f9c5c9
AS
3622
3623/* Type-class predicates */
3624
4c4b4cd2
PH
3625/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3626 or FLOAT). */
14f9c5c9
AS
3627
3628static int
d2e4a39e 3629numeric_type_p (struct type *type)
14f9c5c9
AS
3630{
3631 if (type == NULL)
3632 return 0;
d2e4a39e
AS
3633 else
3634 {
3635 switch (TYPE_CODE (type))
4c4b4cd2
PH
3636 {
3637 case TYPE_CODE_INT:
3638 case TYPE_CODE_FLT:
3639 return 1;
3640 case TYPE_CODE_RANGE:
3641 return (type == TYPE_TARGET_TYPE (type)
3642 || numeric_type_p (TYPE_TARGET_TYPE (type)));
3643 default:
3644 return 0;
3645 }
d2e4a39e 3646 }
14f9c5c9
AS
3647}
3648
4c4b4cd2 3649/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
3650
3651static int
d2e4a39e 3652integer_type_p (struct type *type)
14f9c5c9
AS
3653{
3654 if (type == NULL)
3655 return 0;
d2e4a39e
AS
3656 else
3657 {
3658 switch (TYPE_CODE (type))
4c4b4cd2
PH
3659 {
3660 case TYPE_CODE_INT:
3661 return 1;
3662 case TYPE_CODE_RANGE:
3663 return (type == TYPE_TARGET_TYPE (type)
3664 || integer_type_p (TYPE_TARGET_TYPE (type)));
3665 default:
3666 return 0;
3667 }
d2e4a39e 3668 }
14f9c5c9
AS
3669}
3670
4c4b4cd2 3671/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
3672
3673static int
d2e4a39e 3674scalar_type_p (struct type *type)
14f9c5c9
AS
3675{
3676 if (type == NULL)
3677 return 0;
d2e4a39e
AS
3678 else
3679 {
3680 switch (TYPE_CODE (type))
4c4b4cd2
PH
3681 {
3682 case TYPE_CODE_INT:
3683 case TYPE_CODE_RANGE:
3684 case TYPE_CODE_ENUM:
3685 case TYPE_CODE_FLT:
3686 return 1;
3687 default:
3688 return 0;
3689 }
d2e4a39e 3690 }
14f9c5c9
AS
3691}
3692
4c4b4cd2 3693/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
3694
3695static int
d2e4a39e 3696discrete_type_p (struct type *type)
14f9c5c9
AS
3697{
3698 if (type == NULL)
3699 return 0;
d2e4a39e
AS
3700 else
3701 {
3702 switch (TYPE_CODE (type))
4c4b4cd2
PH
3703 {
3704 case TYPE_CODE_INT:
3705 case TYPE_CODE_RANGE:
3706 case TYPE_CODE_ENUM:
872f0337 3707 case TYPE_CODE_BOOL:
4c4b4cd2
PH
3708 return 1;
3709 default:
3710 return 0;
3711 }
d2e4a39e 3712 }
14f9c5c9
AS
3713}
3714
4c4b4cd2
PH
3715/* Returns non-zero if OP with operands in the vector ARGS could be
3716 a user-defined function. Errs on the side of pre-defined operators
3717 (i.e., result 0). */
14f9c5c9
AS
3718
3719static int
d2e4a39e 3720possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 3721{
76a01679 3722 struct type *type0 =
df407dfe 3723 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 3724 struct type *type1 =
df407dfe 3725 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 3726
4c4b4cd2
PH
3727 if (type0 == NULL)
3728 return 0;
3729
14f9c5c9
AS
3730 switch (op)
3731 {
3732 default:
3733 return 0;
3734
3735 case BINOP_ADD:
3736 case BINOP_SUB:
3737 case BINOP_MUL:
3738 case BINOP_DIV:
d2e4a39e 3739 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
3740
3741 case BINOP_REM:
3742 case BINOP_MOD:
3743 case BINOP_BITWISE_AND:
3744 case BINOP_BITWISE_IOR:
3745 case BINOP_BITWISE_XOR:
d2e4a39e 3746 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
3747
3748 case BINOP_EQUAL:
3749 case BINOP_NOTEQUAL:
3750 case BINOP_LESS:
3751 case BINOP_GTR:
3752 case BINOP_LEQ:
3753 case BINOP_GEQ:
d2e4a39e 3754 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
3755
3756 case BINOP_CONCAT:
ee90b9ab 3757 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
3758
3759 case BINOP_EXP:
d2e4a39e 3760 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
3761
3762 case UNOP_NEG:
3763 case UNOP_PLUS:
3764 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
3765 case UNOP_ABS:
3766 return (!numeric_type_p (type0));
14f9c5c9
AS
3767
3768 }
3769}
3770\f
4c4b4cd2 3771 /* Renaming */
14f9c5c9 3772
aeb5907d
JB
3773/* NOTES:
3774
3775 1. In the following, we assume that a renaming type's name may
3776 have an ___XD suffix. It would be nice if this went away at some
3777 point.
3778 2. We handle both the (old) purely type-based representation of
3779 renamings and the (new) variable-based encoding. At some point,
3780 it is devoutly to be hoped that the former goes away
3781 (FIXME: hilfinger-2007-07-09).
3782 3. Subprogram renamings are not implemented, although the XRS
3783 suffix is recognized (FIXME: hilfinger-2007-07-09). */
3784
3785/* If SYM encodes a renaming,
3786
3787 <renaming> renames <renamed entity>,
3788
3789 sets *LEN to the length of the renamed entity's name,
3790 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
3791 the string describing the subcomponent selected from the renamed
3792 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
3793 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
3794 are undefined). Otherwise, returns a value indicating the category
3795 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
3796 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
3797 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
3798 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
3799 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
3800 may be NULL, in which case they are not assigned.
3801
3802 [Currently, however, GCC does not generate subprogram renamings.] */
3803
3804enum ada_renaming_category
3805ada_parse_renaming (struct symbol *sym,
3806 const char **renamed_entity, int *len,
3807 const char **renaming_expr)
3808{
3809 enum ada_renaming_category kind;
3810 const char *info;
3811 const char *suffix;
3812
3813 if (sym == NULL)
3814 return ADA_NOT_RENAMING;
3815 switch (SYMBOL_CLASS (sym))
14f9c5c9 3816 {
aeb5907d
JB
3817 default:
3818 return ADA_NOT_RENAMING;
3819 case LOC_TYPEDEF:
3820 return parse_old_style_renaming (SYMBOL_TYPE (sym),
3821 renamed_entity, len, renaming_expr);
3822 case LOC_LOCAL:
3823 case LOC_STATIC:
3824 case LOC_COMPUTED:
3825 case LOC_OPTIMIZED_OUT:
3826 info = strstr (SYMBOL_LINKAGE_NAME (sym), "___XR");
3827 if (info == NULL)
3828 return ADA_NOT_RENAMING;
3829 switch (info[5])
3830 {
3831 case '_':
3832 kind = ADA_OBJECT_RENAMING;
3833 info += 6;
3834 break;
3835 case 'E':
3836 kind = ADA_EXCEPTION_RENAMING;
3837 info += 7;
3838 break;
3839 case 'P':
3840 kind = ADA_PACKAGE_RENAMING;
3841 info += 7;
3842 break;
3843 case 'S':
3844 kind = ADA_SUBPROGRAM_RENAMING;
3845 info += 7;
3846 break;
3847 default:
3848 return ADA_NOT_RENAMING;
3849 }
14f9c5c9 3850 }
4c4b4cd2 3851
aeb5907d
JB
3852 if (renamed_entity != NULL)
3853 *renamed_entity = info;
3854 suffix = strstr (info, "___XE");
3855 if (suffix == NULL || suffix == info)
3856 return ADA_NOT_RENAMING;
3857 if (len != NULL)
3858 *len = strlen (info) - strlen (suffix);
3859 suffix += 5;
3860 if (renaming_expr != NULL)
3861 *renaming_expr = suffix;
3862 return kind;
3863}
3864
3865/* Assuming TYPE encodes a renaming according to the old encoding in
3866 exp_dbug.ads, returns details of that renaming in *RENAMED_ENTITY,
3867 *LEN, and *RENAMING_EXPR, as for ada_parse_renaming, above. Returns
3868 ADA_NOT_RENAMING otherwise. */
3869static enum ada_renaming_category
3870parse_old_style_renaming (struct type *type,
3871 const char **renamed_entity, int *len,
3872 const char **renaming_expr)
3873{
3874 enum ada_renaming_category kind;
3875 const char *name;
3876 const char *info;
3877 const char *suffix;
14f9c5c9 3878
aeb5907d
JB
3879 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
3880 || TYPE_NFIELDS (type) != 1)
3881 return ADA_NOT_RENAMING;
14f9c5c9 3882
aeb5907d
JB
3883 name = type_name_no_tag (type);
3884 if (name == NULL)
3885 return ADA_NOT_RENAMING;
3886
3887 name = strstr (name, "___XR");
3888 if (name == NULL)
3889 return ADA_NOT_RENAMING;
3890 switch (name[5])
3891 {
3892 case '\0':
3893 case '_':
3894 kind = ADA_OBJECT_RENAMING;
3895 break;
3896 case 'E':
3897 kind = ADA_EXCEPTION_RENAMING;
3898 break;
3899 case 'P':
3900 kind = ADA_PACKAGE_RENAMING;
3901 break;
3902 case 'S':
3903 kind = ADA_SUBPROGRAM_RENAMING;
3904 break;
3905 default:
3906 return ADA_NOT_RENAMING;
3907 }
14f9c5c9 3908
aeb5907d
JB
3909 info = TYPE_FIELD_NAME (type, 0);
3910 if (info == NULL)
3911 return ADA_NOT_RENAMING;
3912 if (renamed_entity != NULL)
3913 *renamed_entity = info;
3914 suffix = strstr (info, "___XE");
3915 if (renaming_expr != NULL)
3916 *renaming_expr = suffix + 5;
3917 if (suffix == NULL || suffix == info)
3918 return ADA_NOT_RENAMING;
3919 if (len != NULL)
3920 *len = suffix - info;
3921 return kind;
3922}
52ce6436 3923
14f9c5c9 3924\f
d2e4a39e 3925
4c4b4cd2 3926 /* Evaluation: Function Calls */
14f9c5c9 3927
4c4b4cd2
PH
3928/* Return an lvalue containing the value VAL. This is the identity on
3929 lvalues, and otherwise has the side-effect of pushing a copy of VAL
3930 on the stack, using and updating *SP as the stack pointer, and
42ae5230 3931 returning an lvalue whose value_address points to the copy. */
14f9c5c9 3932
d2e4a39e 3933static struct value *
4a399546 3934ensure_lval (struct value *val, struct gdbarch *gdbarch, CORE_ADDR *sp)
14f9c5c9 3935{
c3e5cd34
PH
3936 if (! VALUE_LVAL (val))
3937 {
df407dfe 3938 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
c3e5cd34
PH
3939
3940 /* The following is taken from the structure-return code in
3941 call_function_by_hand. FIXME: Therefore, some refactoring seems
3942 indicated. */
4a399546 3943 if (gdbarch_inner_than (gdbarch, 1, 2))
c3e5cd34 3944 {
42ae5230 3945 /* Stack grows downward. Align SP and value_address (val) after
c3e5cd34
PH
3946 reserving sufficient space. */
3947 *sp -= len;
4a399546
UW
3948 if (gdbarch_frame_align_p (gdbarch))
3949 *sp = gdbarch_frame_align (gdbarch, *sp);
42ae5230 3950 set_value_address (val, *sp);
c3e5cd34
PH
3951 }
3952 else
3953 {
3954 /* Stack grows upward. Align the frame, allocate space, and
3955 then again, re-align the frame. */
4a399546
UW
3956 if (gdbarch_frame_align_p (gdbarch))
3957 *sp = gdbarch_frame_align (gdbarch, *sp);
42ae5230 3958 set_value_address (val, *sp);
c3e5cd34 3959 *sp += len;
4a399546
UW
3960 if (gdbarch_frame_align_p (gdbarch))
3961 *sp = gdbarch_frame_align (gdbarch, *sp);
c3e5cd34 3962 }
a84a8a0d 3963 VALUE_LVAL (val) = lval_memory;
14f9c5c9 3964
12b795ad 3965 write_memory (value_address (val), value_contents (val), len);
c3e5cd34 3966 }
14f9c5c9
AS
3967
3968 return val;
3969}
3970
3971/* Return the value ACTUAL, converted to be an appropriate value for a
3972 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
3973 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 3974 values not residing in memory, updating it as needed. */
14f9c5c9 3975
a93c0eb6
JB
3976struct value *
3977ada_convert_actual (struct value *actual, struct type *formal_type0,
4a399546 3978 struct gdbarch *gdbarch, CORE_ADDR *sp)
14f9c5c9 3979{
df407dfe 3980 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 3981 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e
AS
3982 struct type *formal_target =
3983 TYPE_CODE (formal_type) == TYPE_CODE_PTR
61ee279c 3984 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e
AS
3985 struct type *actual_target =
3986 TYPE_CODE (actual_type) == TYPE_CODE_PTR
61ee279c 3987 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 3988
4c4b4cd2 3989 if (ada_is_array_descriptor_type (formal_target)
14f9c5c9 3990 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
4a399546 3991 return make_array_descriptor (formal_type, actual, gdbarch, sp);
a84a8a0d
JB
3992 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR
3993 || TYPE_CODE (formal_type) == TYPE_CODE_REF)
14f9c5c9 3994 {
a84a8a0d 3995 struct value *result;
5b4ee69b 3996
14f9c5c9 3997 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
4c4b4cd2 3998 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 3999 result = desc_data (actual);
14f9c5c9 4000 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
4c4b4cd2
PH
4001 {
4002 if (VALUE_LVAL (actual) != lval_memory)
4003 {
4004 struct value *val;
5b4ee69b 4005
df407dfe 4006 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4007 val = allocate_value (actual_type);
990a07ab 4008 memcpy ((char *) value_contents_raw (val),
0fd88904 4009 (char *) value_contents (actual),
4c4b4cd2 4010 TYPE_LENGTH (actual_type));
4a399546 4011 actual = ensure_lval (val, gdbarch, sp);
4c4b4cd2 4012 }
a84a8a0d 4013 result = value_addr (actual);
4c4b4cd2 4014 }
a84a8a0d
JB
4015 else
4016 return actual;
4017 return value_cast_pointers (formal_type, result);
14f9c5c9
AS
4018 }
4019 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
4020 return ada_value_ind (actual);
4021
4022 return actual;
4023}
4024
438c98a1
JB
4025/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4026 type TYPE. This is usually an inefficient no-op except on some targets
4027 (such as AVR) where the representation of a pointer and an address
4028 differs. */
4029
4030static CORE_ADDR
4031value_pointer (struct value *value, struct type *type)
4032{
4033 struct gdbarch *gdbarch = get_type_arch (type);
4034 unsigned len = TYPE_LENGTH (type);
4035 gdb_byte *buf = alloca (len);
4036 CORE_ADDR addr;
4037
4038 addr = value_address (value);
4039 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
4040 addr = extract_unsigned_integer (buf, len, gdbarch_byte_order (gdbarch));
4041 return addr;
4042}
4043
14f9c5c9 4044
4c4b4cd2
PH
4045/* Push a descriptor of type TYPE for array value ARR on the stack at
4046 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4047 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4048 to-descriptor type rather than a descriptor type), a struct value *
4049 representing a pointer to this descriptor. */
14f9c5c9 4050
d2e4a39e 4051static struct value *
4a399546
UW
4052make_array_descriptor (struct type *type, struct value *arr,
4053 struct gdbarch *gdbarch, CORE_ADDR *sp)
14f9c5c9 4054{
d2e4a39e
AS
4055 struct type *bounds_type = desc_bounds_type (type);
4056 struct type *desc_type = desc_base_type (type);
4057 struct value *descriptor = allocate_value (desc_type);
4058 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4059 int i;
d2e4a39e 4060
df407dfe 4061 for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
14f9c5c9 4062 {
50810684
UW
4063 modify_general_field (value_type (bounds),
4064 value_contents_writeable (bounds),
1eea4ebd 4065 ada_array_bound (arr, i, 0),
4c4b4cd2
PH
4066 desc_bound_bitpos (bounds_type, i, 0),
4067 desc_bound_bitsize (bounds_type, i, 0));
50810684
UW
4068 modify_general_field (value_type (bounds),
4069 value_contents_writeable (bounds),
1eea4ebd 4070 ada_array_bound (arr, i, 1),
4c4b4cd2
PH
4071 desc_bound_bitpos (bounds_type, i, 1),
4072 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4073 }
d2e4a39e 4074
4a399546 4075 bounds = ensure_lval (bounds, gdbarch, sp);
d2e4a39e 4076
50810684
UW
4077 modify_general_field (value_type (descriptor),
4078 value_contents_writeable (descriptor),
438c98a1
JB
4079 value_pointer (ensure_lval (arr, gdbarch, sp),
4080 TYPE_FIELD_TYPE (desc_type, 0)),
76a01679
JB
4081 fat_pntr_data_bitpos (desc_type),
4082 fat_pntr_data_bitsize (desc_type));
4c4b4cd2 4083
50810684
UW
4084 modify_general_field (value_type (descriptor),
4085 value_contents_writeable (descriptor),
438c98a1
JB
4086 value_pointer (bounds,
4087 TYPE_FIELD_TYPE (desc_type, 1)),
4c4b4cd2
PH
4088 fat_pntr_bounds_bitpos (desc_type),
4089 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4090
4a399546 4091 descriptor = ensure_lval (descriptor, gdbarch, sp);
14f9c5c9
AS
4092
4093 if (TYPE_CODE (type) == TYPE_CODE_PTR)
4094 return value_addr (descriptor);
4095 else
4096 return descriptor;
4097}
14f9c5c9 4098\f
963a6417
PH
4099/* Dummy definitions for an experimental caching module that is not
4100 * used in the public sources. */
96d887e8 4101
96d887e8
PH
4102static int
4103lookup_cached_symbol (const char *name, domain_enum namespace,
2570f2b7 4104 struct symbol **sym, struct block **block)
96d887e8
PH
4105{
4106 return 0;
4107}
4108
4109static void
4110cache_symbol (const char *name, domain_enum namespace, struct symbol *sym,
2570f2b7 4111 struct block *block)
96d887e8
PH
4112{
4113}
4c4b4cd2
PH
4114\f
4115 /* Symbol Lookup */
4116
4117/* Return the result of a standard (literal, C-like) lookup of NAME in
4118 given DOMAIN, visible from lexical block BLOCK. */
4119
4120static struct symbol *
4121standard_lookup (const char *name, const struct block *block,
4122 domain_enum domain)
4123{
4124 struct symbol *sym;
4c4b4cd2 4125
2570f2b7 4126 if (lookup_cached_symbol (name, domain, &sym, NULL))
4c4b4cd2 4127 return sym;
2570f2b7
UW
4128 sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
4129 cache_symbol (name, domain, sym, block_found);
4c4b4cd2
PH
4130 return sym;
4131}
4132
4133
4134/* Non-zero iff there is at least one non-function/non-enumeral symbol
4135 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4136 since they contend in overloading in the same way. */
4137static int
4138is_nonfunction (struct ada_symbol_info syms[], int n)
4139{
4140 int i;
4141
4142 for (i = 0; i < n; i += 1)
4143 if (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_FUNC
4144 && (TYPE_CODE (SYMBOL_TYPE (syms[i].sym)) != TYPE_CODE_ENUM
4145 || SYMBOL_CLASS (syms[i].sym) != LOC_CONST))
14f9c5c9
AS
4146 return 1;
4147
4148 return 0;
4149}
4150
4151/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4152 struct types. Otherwise, they may not. */
14f9c5c9
AS
4153
4154static int
d2e4a39e 4155equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4156{
d2e4a39e 4157 if (type0 == type1)
14f9c5c9 4158 return 1;
d2e4a39e 4159 if (type0 == NULL || type1 == NULL
14f9c5c9
AS
4160 || TYPE_CODE (type0) != TYPE_CODE (type1))
4161 return 0;
d2e4a39e 4162 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
14f9c5c9
AS
4163 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
4164 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4165 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4166 return 1;
d2e4a39e 4167
14f9c5c9
AS
4168 return 0;
4169}
4170
4171/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4172 no more defined than that of SYM1. */
14f9c5c9
AS
4173
4174static int
d2e4a39e 4175lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4176{
4177 if (sym0 == sym1)
4178 return 1;
176620f1 4179 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4180 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4181 return 0;
4182
d2e4a39e 4183 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4184 {
4185 case LOC_UNDEF:
4186 return 1;
4187 case LOC_TYPEDEF:
4188 {
4c4b4cd2
PH
4189 struct type *type0 = SYMBOL_TYPE (sym0);
4190 struct type *type1 = SYMBOL_TYPE (sym1);
4191 char *name0 = SYMBOL_LINKAGE_NAME (sym0);
4192 char *name1 = SYMBOL_LINKAGE_NAME (sym1);
4193 int len0 = strlen (name0);
5b4ee69b 4194
4c4b4cd2
PH
4195 return
4196 TYPE_CODE (type0) == TYPE_CODE (type1)
4197 && (equiv_types (type0, type1)
4198 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4199 && strncmp (name1 + len0, "___XV", 5) == 0));
14f9c5c9
AS
4200 }
4201 case LOC_CONST:
4202 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4203 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
d2e4a39e
AS
4204 default:
4205 return 0;
14f9c5c9
AS
4206 }
4207}
4208
4c4b4cd2
PH
4209/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct ada_symbol_info
4210 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4211
4212static void
76a01679
JB
4213add_defn_to_vec (struct obstack *obstackp,
4214 struct symbol *sym,
2570f2b7 4215 struct block *block)
14f9c5c9
AS
4216{
4217 int i;
4c4b4cd2 4218 struct ada_symbol_info *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4219
529cad9c
PH
4220 /* Do not try to complete stub types, as the debugger is probably
4221 already scanning all symbols matching a certain name at the
4222 time when this function is called. Trying to replace the stub
4223 type by its associated full type will cause us to restart a scan
4224 which may lead to an infinite recursion. Instead, the client
4225 collecting the matching symbols will end up collecting several
4226 matches, with at least one of them complete. It can then filter
4227 out the stub ones if needed. */
4228
4c4b4cd2
PH
4229 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4230 {
4231 if (lesseq_defined_than (sym, prevDefns[i].sym))
4232 return;
4233 else if (lesseq_defined_than (prevDefns[i].sym, sym))
4234 {
4235 prevDefns[i].sym = sym;
4236 prevDefns[i].block = block;
4c4b4cd2 4237 return;
76a01679 4238 }
4c4b4cd2
PH
4239 }
4240
4241 {
4242 struct ada_symbol_info info;
4243
4244 info.sym = sym;
4245 info.block = block;
4c4b4cd2
PH
4246 obstack_grow (obstackp, &info, sizeof (struct ada_symbol_info));
4247 }
4248}
4249
4250/* Number of ada_symbol_info structures currently collected in
4251 current vector in *OBSTACKP. */
4252
76a01679
JB
4253static int
4254num_defns_collected (struct obstack *obstackp)
4c4b4cd2
PH
4255{
4256 return obstack_object_size (obstackp) / sizeof (struct ada_symbol_info);
4257}
4258
4259/* Vector of ada_symbol_info structures currently collected in current
4260 vector in *OBSTACKP. If FINISH, close off the vector and return
4261 its final address. */
4262
76a01679 4263static struct ada_symbol_info *
4c4b4cd2
PH
4264defns_collected (struct obstack *obstackp, int finish)
4265{
4266 if (finish)
4267 return obstack_finish (obstackp);
4268 else
4269 return (struct ada_symbol_info *) obstack_base (obstackp);
4270}
4271
96d887e8
PH
4272/* Return a minimal symbol matching NAME according to Ada decoding
4273 rules. Returns NULL if there is no such minimal symbol. Names
4274 prefixed with "standard__" are handled specially: "standard__" is
4275 first stripped off, and only static and global symbols are searched. */
4c4b4cd2 4276
96d887e8
PH
4277struct minimal_symbol *
4278ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4279{
4c4b4cd2 4280 struct objfile *objfile;
96d887e8
PH
4281 struct minimal_symbol *msymbol;
4282 int wild_match;
4c4b4cd2 4283
96d887e8 4284 if (strncmp (name, "standard__", sizeof ("standard__") - 1) == 0)
4c4b4cd2 4285 {
96d887e8 4286 name += sizeof ("standard__") - 1;
4c4b4cd2 4287 wild_match = 0;
4c4b4cd2
PH
4288 }
4289 else
96d887e8 4290 wild_match = (strstr (name, "__") == NULL);
4c4b4cd2 4291
96d887e8
PH
4292 ALL_MSYMBOLS (objfile, msymbol)
4293 {
4294 if (ada_match_name (SYMBOL_LINKAGE_NAME (msymbol), name, wild_match)
4295 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4296 return msymbol;
4297 }
4c4b4cd2 4298
96d887e8
PH
4299 return NULL;
4300}
4c4b4cd2 4301
96d887e8
PH
4302/* For all subprograms that statically enclose the subprogram of the
4303 selected frame, add symbols matching identifier NAME in DOMAIN
4304 and their blocks to the list of data in OBSTACKP, as for
4305 ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
4306 wildcard prefix. */
4c4b4cd2 4307
96d887e8
PH
4308static void
4309add_symbols_from_enclosing_procs (struct obstack *obstackp,
76a01679 4310 const char *name, domain_enum namespace,
96d887e8
PH
4311 int wild_match)
4312{
96d887e8 4313}
14f9c5c9 4314
96d887e8
PH
4315/* True if TYPE is definitely an artificial type supplied to a symbol
4316 for which no debugging information was given in the symbol file. */
14f9c5c9 4317
96d887e8
PH
4318static int
4319is_nondebugging_type (struct type *type)
4320{
4321 char *name = ada_type_name (type);
5b4ee69b 4322
96d887e8
PH
4323 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4324}
4c4b4cd2 4325
96d887e8
PH
4326/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
4327 duplicate other symbols in the list (The only case I know of where
4328 this happens is when object files containing stabs-in-ecoff are
4329 linked with files containing ordinary ecoff debugging symbols (or no
4330 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
4331 Returns the number of items in the modified list. */
4c4b4cd2 4332
96d887e8
PH
4333static int
4334remove_extra_symbols (struct ada_symbol_info *syms, int nsyms)
4335{
4336 int i, j;
4c4b4cd2 4337
96d887e8
PH
4338 i = 0;
4339 while (i < nsyms)
4340 {
339c13b6
JB
4341 int remove = 0;
4342
4343 /* If two symbols have the same name and one of them is a stub type,
4344 the get rid of the stub. */
4345
4346 if (TYPE_STUB (SYMBOL_TYPE (syms[i].sym))
4347 && SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL)
4348 {
4349 for (j = 0; j < nsyms; j++)
4350 {
4351 if (j != i
4352 && !TYPE_STUB (SYMBOL_TYPE (syms[j].sym))
4353 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4354 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
4355 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0)
4356 remove = 1;
4357 }
4358 }
4359
4360 /* Two symbols with the same name, same class and same address
4361 should be identical. */
4362
4363 else if (SYMBOL_LINKAGE_NAME (syms[i].sym) != NULL
96d887e8
PH
4364 && SYMBOL_CLASS (syms[i].sym) == LOC_STATIC
4365 && is_nondebugging_type (SYMBOL_TYPE (syms[i].sym)))
4366 {
4367 for (j = 0; j < nsyms; j += 1)
4368 {
4369 if (i != j
4370 && SYMBOL_LINKAGE_NAME (syms[j].sym) != NULL
4371 && strcmp (SYMBOL_LINKAGE_NAME (syms[i].sym),
76a01679 4372 SYMBOL_LINKAGE_NAME (syms[j].sym)) == 0
96d887e8
PH
4373 && SYMBOL_CLASS (syms[i].sym) == SYMBOL_CLASS (syms[j].sym)
4374 && SYMBOL_VALUE_ADDRESS (syms[i].sym)
4375 == SYMBOL_VALUE_ADDRESS (syms[j].sym))
339c13b6 4376 remove = 1;
4c4b4cd2 4377 }
4c4b4cd2 4378 }
339c13b6
JB
4379
4380 if (remove)
4381 {
4382 for (j = i + 1; j < nsyms; j += 1)
4383 syms[j - 1] = syms[j];
4384 nsyms -= 1;
4385 }
4386
96d887e8 4387 i += 1;
14f9c5c9 4388 }
96d887e8 4389 return nsyms;
14f9c5c9
AS
4390}
4391
96d887e8
PH
4392/* Given a type that corresponds to a renaming entity, use the type name
4393 to extract the scope (package name or function name, fully qualified,
4394 and following the GNAT encoding convention) where this renaming has been
4395 defined. The string returned needs to be deallocated after use. */
4c4b4cd2 4396
96d887e8
PH
4397static char *
4398xget_renaming_scope (struct type *renaming_type)
14f9c5c9 4399{
96d887e8
PH
4400 /* The renaming types adhere to the following convention:
4401 <scope>__<rename>___<XR extension>.
4402 So, to extract the scope, we search for the "___XR" extension,
4403 and then backtrack until we find the first "__". */
76a01679 4404
96d887e8
PH
4405 const char *name = type_name_no_tag (renaming_type);
4406 char *suffix = strstr (name, "___XR");
4407 char *last;
4408 int scope_len;
4409 char *scope;
14f9c5c9 4410
96d887e8
PH
4411 /* Now, backtrack a bit until we find the first "__". Start looking
4412 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 4413
96d887e8
PH
4414 for (last = suffix - 3; last > name; last--)
4415 if (last[0] == '_' && last[1] == '_')
4416 break;
76a01679 4417
96d887e8 4418 /* Make a copy of scope and return it. */
14f9c5c9 4419
96d887e8
PH
4420 scope_len = last - name;
4421 scope = (char *) xmalloc ((scope_len + 1) * sizeof (char));
14f9c5c9 4422
96d887e8
PH
4423 strncpy (scope, name, scope_len);
4424 scope[scope_len] = '\0';
4c4b4cd2 4425
96d887e8 4426 return scope;
4c4b4cd2
PH
4427}
4428
96d887e8 4429/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 4430
96d887e8
PH
4431static int
4432is_package_name (const char *name)
4c4b4cd2 4433{
96d887e8
PH
4434 /* Here, We take advantage of the fact that no symbols are generated
4435 for packages, while symbols are generated for each function.
4436 So the condition for NAME represent a package becomes equivalent
4437 to NAME not existing in our list of symbols. There is only one
4438 small complication with library-level functions (see below). */
4c4b4cd2 4439
96d887e8 4440 char *fun_name;
76a01679 4441
96d887e8
PH
4442 /* If it is a function that has not been defined at library level,
4443 then we should be able to look it up in the symbols. */
4444 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
4445 return 0;
14f9c5c9 4446
96d887e8
PH
4447 /* Library-level function names start with "_ada_". See if function
4448 "_ada_" followed by NAME can be found. */
14f9c5c9 4449
96d887e8 4450 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 4451 functions names cannot contain "__" in them. */
96d887e8
PH
4452 if (strstr (name, "__") != NULL)
4453 return 0;
4c4b4cd2 4454
b435e160 4455 fun_name = xstrprintf ("_ada_%s", name);
14f9c5c9 4456
96d887e8
PH
4457 return (standard_lookup (fun_name, NULL, VAR_DOMAIN) == NULL);
4458}
14f9c5c9 4459
96d887e8 4460/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 4461 not visible from FUNCTION_NAME. */
14f9c5c9 4462
96d887e8 4463static int
aeb5907d 4464old_renaming_is_invisible (const struct symbol *sym, char *function_name)
96d887e8 4465{
aeb5907d
JB
4466 char *scope;
4467
4468 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
4469 return 0;
4470
4471 scope = xget_renaming_scope (SYMBOL_TYPE (sym));
d2e4a39e 4472
96d887e8 4473 make_cleanup (xfree, scope);
14f9c5c9 4474
96d887e8
PH
4475 /* If the rename has been defined in a package, then it is visible. */
4476 if (is_package_name (scope))
aeb5907d 4477 return 0;
14f9c5c9 4478
96d887e8
PH
4479 /* Check that the rename is in the current function scope by checking
4480 that its name starts with SCOPE. */
76a01679 4481
96d887e8
PH
4482 /* If the function name starts with "_ada_", it means that it is
4483 a library-level function. Strip this prefix before doing the
4484 comparison, as the encoding for the renaming does not contain
4485 this prefix. */
4486 if (strncmp (function_name, "_ada_", 5) == 0)
4487 function_name += 5;
f26caa11 4488
aeb5907d 4489 return (strncmp (function_name, scope, strlen (scope)) != 0);
f26caa11
PH
4490}
4491
aeb5907d
JB
4492/* Remove entries from SYMS that corresponds to a renaming entity that
4493 is not visible from the function associated with CURRENT_BLOCK or
4494 that is superfluous due to the presence of more specific renaming
4495 information. Places surviving symbols in the initial entries of
4496 SYMS and returns the number of surviving symbols.
96d887e8
PH
4497
4498 Rationale:
aeb5907d
JB
4499 First, in cases where an object renaming is implemented as a
4500 reference variable, GNAT may produce both the actual reference
4501 variable and the renaming encoding. In this case, we discard the
4502 latter.
4503
4504 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
4505 entity. Unfortunately, STABS currently does not support the definition
4506 of types that are local to a given lexical block, so all renamings types
4507 are emitted at library level. As a consequence, if an application
4508 contains two renaming entities using the same name, and a user tries to
4509 print the value of one of these entities, the result of the ada symbol
4510 lookup will also contain the wrong renaming type.
f26caa11 4511
96d887e8
PH
4512 This function partially covers for this limitation by attempting to
4513 remove from the SYMS list renaming symbols that should be visible
4514 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
4515 method with the current information available. The implementation
4516 below has a couple of limitations (FIXME: brobecker-2003-05-12):
4517
4518 - When the user tries to print a rename in a function while there
4519 is another rename entity defined in a package: Normally, the
4520 rename in the function has precedence over the rename in the
4521 package, so the latter should be removed from the list. This is
4522 currently not the case.
4523
4524 - This function will incorrectly remove valid renames if
4525 the CURRENT_BLOCK corresponds to a function which symbol name
4526 has been changed by an "Export" pragma. As a consequence,
4527 the user will be unable to print such rename entities. */
4c4b4cd2 4528
14f9c5c9 4529static int
aeb5907d
JB
4530remove_irrelevant_renamings (struct ada_symbol_info *syms,
4531 int nsyms, const struct block *current_block)
4c4b4cd2
PH
4532{
4533 struct symbol *current_function;
4534 char *current_function_name;
4535 int i;
aeb5907d
JB
4536 int is_new_style_renaming;
4537
4538 /* If there is both a renaming foo___XR... encoded as a variable and
4539 a simple variable foo in the same block, discard the latter.
4540 First, zero out such symbols, then compress. */
4541 is_new_style_renaming = 0;
4542 for (i = 0; i < nsyms; i += 1)
4543 {
4544 struct symbol *sym = syms[i].sym;
4545 struct block *block = syms[i].block;
4546 const char *name;
4547 const char *suffix;
4548
4549 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4550 continue;
4551 name = SYMBOL_LINKAGE_NAME (sym);
4552 suffix = strstr (name, "___XR");
4553
4554 if (suffix != NULL)
4555 {
4556 int name_len = suffix - name;
4557 int j;
5b4ee69b 4558
aeb5907d
JB
4559 is_new_style_renaming = 1;
4560 for (j = 0; j < nsyms; j += 1)
4561 if (i != j && syms[j].sym != NULL
4562 && strncmp (name, SYMBOL_LINKAGE_NAME (syms[j].sym),
4563 name_len) == 0
4564 && block == syms[j].block)
4565 syms[j].sym = NULL;
4566 }
4567 }
4568 if (is_new_style_renaming)
4569 {
4570 int j, k;
4571
4572 for (j = k = 0; j < nsyms; j += 1)
4573 if (syms[j].sym != NULL)
4574 {
4575 syms[k] = syms[j];
4576 k += 1;
4577 }
4578 return k;
4579 }
4c4b4cd2
PH
4580
4581 /* Extract the function name associated to CURRENT_BLOCK.
4582 Abort if unable to do so. */
76a01679 4583
4c4b4cd2
PH
4584 if (current_block == NULL)
4585 return nsyms;
76a01679 4586
7f0df278 4587 current_function = block_linkage_function (current_block);
4c4b4cd2
PH
4588 if (current_function == NULL)
4589 return nsyms;
4590
4591 current_function_name = SYMBOL_LINKAGE_NAME (current_function);
4592 if (current_function_name == NULL)
4593 return nsyms;
4594
4595 /* Check each of the symbols, and remove it from the list if it is
4596 a type corresponding to a renaming that is out of the scope of
4597 the current block. */
4598
4599 i = 0;
4600 while (i < nsyms)
4601 {
aeb5907d
JB
4602 if (ada_parse_renaming (syms[i].sym, NULL, NULL, NULL)
4603 == ADA_OBJECT_RENAMING
4604 && old_renaming_is_invisible (syms[i].sym, current_function_name))
4c4b4cd2
PH
4605 {
4606 int j;
5b4ee69b 4607
aeb5907d 4608 for (j = i + 1; j < nsyms; j += 1)
76a01679 4609 syms[j - 1] = syms[j];
4c4b4cd2
PH
4610 nsyms -= 1;
4611 }
4612 else
4613 i += 1;
4614 }
4615
4616 return nsyms;
4617}
4618
339c13b6
JB
4619/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
4620 whose name and domain match NAME and DOMAIN respectively.
4621 If no match was found, then extend the search to "enclosing"
4622 routines (in other words, if we're inside a nested function,
4623 search the symbols defined inside the enclosing functions).
4624
4625 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
4626
4627static void
4628ada_add_local_symbols (struct obstack *obstackp, const char *name,
4629 struct block *block, domain_enum domain,
4630 int wild_match)
4631{
4632 int block_depth = 0;
4633
4634 while (block != NULL)
4635 {
4636 block_depth += 1;
4637 ada_add_block_symbols (obstackp, block, name, domain, NULL, wild_match);
4638
4639 /* If we found a non-function match, assume that's the one. */
4640 if (is_nonfunction (defns_collected (obstackp, 0),
4641 num_defns_collected (obstackp)))
4642 return;
4643
4644 block = BLOCK_SUPERBLOCK (block);
4645 }
4646
4647 /* If no luck so far, try to find NAME as a local symbol in some lexically
4648 enclosing subprogram. */
4649 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
4650 add_symbols_from_enclosing_procs (obstackp, name, domain, wild_match);
4651}
4652
ccefe4c4
TT
4653/* An object of this type is used as the user_data argument when
4654 calling the map_ada_symtabs method. */
4655
4656struct ada_psym_data
4657{
4658 struct obstack *obstackp;
4659 const char *name;
4660 domain_enum domain;
4661 int global;
4662 int wild_match;
4663};
4664
4665/* Callback function for map_ada_symtabs. */
4666
4667static void
4668ada_add_psyms (struct objfile *objfile, struct symtab *s, void *user_data)
4669{
4670 struct ada_psym_data *data = user_data;
4671 const int block_kind = data->global ? GLOBAL_BLOCK : STATIC_BLOCK;
5b4ee69b 4672
ccefe4c4
TT
4673 ada_add_block_symbols (data->obstackp,
4674 BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), block_kind),
4675 data->name, data->domain, objfile, data->wild_match);
4676}
4677
339c13b6
JB
4678/* Add to OBSTACKP all non-local symbols whose name and domain match
4679 NAME and DOMAIN respectively. The search is performed on GLOBAL_BLOCK
4680 symbols if GLOBAL is non-zero, or on STATIC_BLOCK symbols otherwise. */
4681
4682static void
4683ada_add_non_local_symbols (struct obstack *obstackp, const char *name,
4684 domain_enum domain, int global,
ccefe4c4 4685 int is_wild_match)
339c13b6
JB
4686{
4687 struct objfile *objfile;
ccefe4c4 4688 struct ada_psym_data data;
339c13b6 4689
ccefe4c4
TT
4690 data.obstackp = obstackp;
4691 data.name = name;
4692 data.domain = domain;
4693 data.global = global;
4694 data.wild_match = is_wild_match;
339c13b6 4695
ccefe4c4
TT
4696 ALL_OBJFILES (objfile)
4697 {
4698 if (objfile->sf)
4699 objfile->sf->qf->map_ada_symtabs (objfile, wild_match, is_name_suffix,
4700 ada_add_psyms, name,
4701 global, domain,
4702 is_wild_match, &data);
339c13b6
JB
4703 }
4704}
4705
4c4b4cd2
PH
4706/* Find symbols in DOMAIN matching NAME0, in BLOCK0 and enclosing
4707 scope and in global scopes, returning the number of matches. Sets
6c9353d3 4708 *RESULTS to point to a vector of (SYM,BLOCK) tuples,
4c4b4cd2
PH
4709 indicating the symbols found and the blocks and symbol tables (if
4710 any) in which they were found. This vector are transient---good only to
4711 the next call of ada_lookup_symbol_list. Any non-function/non-enumeral
4712 symbol match within the nest of blocks whose innermost member is BLOCK0,
4713 is the one match returned (no other matches in that or
4714 enclosing blocks is returned). If there are any matches in or
4715 surrounding BLOCK0, then these alone are returned. Otherwise, the
4716 search extends to global and file-scope (static) symbol tables.
4717 Names prefixed with "standard__" are handled specially: "standard__"
4718 is first stripped off, and only static and global symbols are searched. */
14f9c5c9
AS
4719
4720int
4c4b4cd2 4721ada_lookup_symbol_list (const char *name0, const struct block *block0,
76a01679
JB
4722 domain_enum namespace,
4723 struct ada_symbol_info **results)
14f9c5c9
AS
4724{
4725 struct symbol *sym;
14f9c5c9 4726 struct block *block;
4c4b4cd2 4727 const char *name;
4c4b4cd2 4728 int wild_match;
14f9c5c9 4729 int cacheIfUnique;
4c4b4cd2 4730 int ndefns;
14f9c5c9 4731
4c4b4cd2
PH
4732 obstack_free (&symbol_list_obstack, NULL);
4733 obstack_init (&symbol_list_obstack);
14f9c5c9 4734
14f9c5c9
AS
4735 cacheIfUnique = 0;
4736
4737 /* Search specified block and its superiors. */
4738
4c4b4cd2
PH
4739 wild_match = (strstr (name0, "__") == NULL);
4740 name = name0;
76a01679
JB
4741 block = (struct block *) block0; /* FIXME: No cast ought to be
4742 needed, but adding const will
4743 have a cascade effect. */
339c13b6
JB
4744
4745 /* Special case: If the user specifies a symbol name inside package
4746 Standard, do a non-wild matching of the symbol name without
4747 the "standard__" prefix. This was primarily introduced in order
4748 to allow the user to specifically access the standard exceptions
4749 using, for instance, Standard.Constraint_Error when Constraint_Error
4750 is ambiguous (due to the user defining its own Constraint_Error
4751 entity inside its program). */
4c4b4cd2
PH
4752 if (strncmp (name0, "standard__", sizeof ("standard__") - 1) == 0)
4753 {
4754 wild_match = 0;
4755 block = NULL;
4756 name = name0 + sizeof ("standard__") - 1;
4757 }
4758
339c13b6 4759 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 4760
339c13b6
JB
4761 ada_add_local_symbols (&symbol_list_obstack, name, block, namespace,
4762 wild_match);
4c4b4cd2 4763 if (num_defns_collected (&symbol_list_obstack) > 0)
14f9c5c9 4764 goto done;
d2e4a39e 4765
339c13b6
JB
4766 /* No non-global symbols found. Check our cache to see if we have
4767 already performed this search before. If we have, then return
4768 the same result. */
4769
14f9c5c9 4770 cacheIfUnique = 1;
2570f2b7 4771 if (lookup_cached_symbol (name0, namespace, &sym, &block))
4c4b4cd2
PH
4772 {
4773 if (sym != NULL)
2570f2b7 4774 add_defn_to_vec (&symbol_list_obstack, sym, block);
4c4b4cd2
PH
4775 goto done;
4776 }
14f9c5c9 4777
339c13b6
JB
4778 /* Search symbols from all global blocks. */
4779
4780 ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 1,
4781 wild_match);
d2e4a39e 4782
4c4b4cd2 4783 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 4784 (not strictly correct, but perhaps better than an error). */
d2e4a39e 4785
4c4b4cd2 4786 if (num_defns_collected (&symbol_list_obstack) == 0)
339c13b6
JB
4787 ada_add_non_local_symbols (&symbol_list_obstack, name, namespace, 0,
4788 wild_match);
14f9c5c9 4789
4c4b4cd2
PH
4790done:
4791 ndefns = num_defns_collected (&symbol_list_obstack);
4792 *results = defns_collected (&symbol_list_obstack, 1);
4793
4794 ndefns = remove_extra_symbols (*results, ndefns);
4795
d2e4a39e 4796 if (ndefns == 0)
2570f2b7 4797 cache_symbol (name0, namespace, NULL, NULL);
14f9c5c9 4798
4c4b4cd2 4799 if (ndefns == 1 && cacheIfUnique)
2570f2b7 4800 cache_symbol (name0, namespace, (*results)[0].sym, (*results)[0].block);
14f9c5c9 4801
aeb5907d 4802 ndefns = remove_irrelevant_renamings (*results, ndefns, block0);
14f9c5c9 4803
14f9c5c9
AS
4804 return ndefns;
4805}
4806
d2e4a39e 4807struct symbol *
aeb5907d 4808ada_lookup_encoded_symbol (const char *name, const struct block *block0,
21b556f4 4809 domain_enum namespace, struct block **block_found)
14f9c5c9 4810{
4c4b4cd2 4811 struct ada_symbol_info *candidates;
14f9c5c9
AS
4812 int n_candidates;
4813
aeb5907d 4814 n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates);
14f9c5c9
AS
4815
4816 if (n_candidates == 0)
4817 return NULL;
4c4b4cd2 4818
aeb5907d
JB
4819 if (block_found != NULL)
4820 *block_found = candidates[0].block;
4c4b4cd2 4821
21b556f4 4822 return fixup_symbol_section (candidates[0].sym, NULL);
aeb5907d
JB
4823}
4824
4825/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
4826 scope and in global scopes, or NULL if none. NAME is folded and
4827 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
4828 choosing the first symbol if there are multiple choices.
4829 *IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
4830 table in which the symbol was found (in both cases, these
4831 assignments occur only if the pointers are non-null). */
4832struct symbol *
4833ada_lookup_symbol (const char *name, const struct block *block0,
21b556f4 4834 domain_enum namespace, int *is_a_field_of_this)
aeb5907d
JB
4835{
4836 if (is_a_field_of_this != NULL)
4837 *is_a_field_of_this = 0;
4838
4839 return
4840 ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
21b556f4 4841 block0, namespace, NULL);
4c4b4cd2 4842}
14f9c5c9 4843
4c4b4cd2
PH
4844static struct symbol *
4845ada_lookup_symbol_nonlocal (const char *name,
76a01679 4846 const struct block *block,
21b556f4 4847 const domain_enum domain)
4c4b4cd2 4848{
94af9270 4849 return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
14f9c5c9
AS
4850}
4851
4852
4c4b4cd2
PH
4853/* True iff STR is a possible encoded suffix of a normal Ada name
4854 that is to be ignored for matching purposes. Suffixes of parallel
4855 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 4856 are given by any of the regular expressions:
4c4b4cd2 4857
babe1480
JB
4858 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
4859 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
4860 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 4861 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
4862
4863 Also, any leading "__[0-9]+" sequence is skipped before the suffix
4864 match is performed. This sequence is used to differentiate homonyms,
4865 is an optional part of a valid name suffix. */
4c4b4cd2 4866
14f9c5c9 4867static int
d2e4a39e 4868is_name_suffix (const char *str)
14f9c5c9
AS
4869{
4870 int k;
4c4b4cd2
PH
4871 const char *matching;
4872 const int len = strlen (str);
4873
babe1480
JB
4874 /* Skip optional leading __[0-9]+. */
4875
4c4b4cd2
PH
4876 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
4877 {
babe1480
JB
4878 str += 3;
4879 while (isdigit (str[0]))
4880 str += 1;
4c4b4cd2 4881 }
babe1480
JB
4882
4883 /* [.$][0-9]+ */
4c4b4cd2 4884
babe1480 4885 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 4886 {
babe1480 4887 matching = str + 1;
4c4b4cd2
PH
4888 while (isdigit (matching[0]))
4889 matching += 1;
4890 if (matching[0] == '\0')
4891 return 1;
4892 }
4893
4894 /* ___[0-9]+ */
babe1480 4895
4c4b4cd2
PH
4896 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
4897 {
4898 matching = str + 3;
4899 while (isdigit (matching[0]))
4900 matching += 1;
4901 if (matching[0] == '\0')
4902 return 1;
4903 }
4904
529cad9c
PH
4905#if 0
4906 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
4907 with a N at the end. Unfortunately, the compiler uses the same
4908 convention for other internal types it creates. So treating
4909 all entity names that end with an "N" as a name suffix causes
4910 some regressions. For instance, consider the case of an enumerated
4911 type. To support the 'Image attribute, it creates an array whose
4912 name ends with N.
4913 Having a single character like this as a suffix carrying some
4914 information is a bit risky. Perhaps we should change the encoding
4915 to be something like "_N" instead. In the meantime, do not do
4916 the following check. */
4917 /* Protected Object Subprograms */
4918 if (len == 1 && str [0] == 'N')
4919 return 1;
4920#endif
4921
4922 /* _E[0-9]+[bs]$ */
4923 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
4924 {
4925 matching = str + 3;
4926 while (isdigit (matching[0]))
4927 matching += 1;
4928 if ((matching[0] == 'b' || matching[0] == 's')
4929 && matching [1] == '\0')
4930 return 1;
4931 }
4932
4c4b4cd2
PH
4933 /* ??? We should not modify STR directly, as we are doing below. This
4934 is fine in this case, but may become problematic later if we find
4935 that this alternative did not work, and want to try matching
4936 another one from the begining of STR. Since we modified it, we
4937 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
4938 if (str[0] == 'X')
4939 {
4940 str += 1;
d2e4a39e 4941 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
4942 {
4943 if (str[0] != 'n' && str[0] != 'b')
4944 return 0;
4945 str += 1;
4946 }
14f9c5c9 4947 }
babe1480 4948
14f9c5c9
AS
4949 if (str[0] == '\000')
4950 return 1;
babe1480 4951
d2e4a39e 4952 if (str[0] == '_')
14f9c5c9
AS
4953 {
4954 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 4955 return 0;
d2e4a39e 4956 if (str[2] == '_')
4c4b4cd2 4957 {
61ee279c
PH
4958 if (strcmp (str + 3, "JM") == 0)
4959 return 1;
4960 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
4961 the LJM suffix in favor of the JM one. But we will
4962 still accept LJM as a valid suffix for a reasonable
4963 amount of time, just to allow ourselves to debug programs
4964 compiled using an older version of GNAT. */
4c4b4cd2
PH
4965 if (strcmp (str + 3, "LJM") == 0)
4966 return 1;
4967 if (str[3] != 'X')
4968 return 0;
1265e4aa
JB
4969 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
4970 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
4971 return 1;
4972 if (str[4] == 'R' && str[5] != 'T')
4973 return 1;
4974 return 0;
4975 }
4976 if (!isdigit (str[2]))
4977 return 0;
4978 for (k = 3; str[k] != '\0'; k += 1)
4979 if (!isdigit (str[k]) && str[k] != '_')
4980 return 0;
14f9c5c9
AS
4981 return 1;
4982 }
4c4b4cd2 4983 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 4984 {
4c4b4cd2
PH
4985 for (k = 2; str[k] != '\0'; k += 1)
4986 if (!isdigit (str[k]) && str[k] != '_')
4987 return 0;
14f9c5c9
AS
4988 return 1;
4989 }
4990 return 0;
4991}
d2e4a39e 4992
aeb5907d
JB
4993/* Return non-zero if the string starting at NAME and ending before
4994 NAME_END contains no capital letters. */
529cad9c
PH
4995
4996static int
4997is_valid_name_for_wild_match (const char *name0)
4998{
4999 const char *decoded_name = ada_decode (name0);
5000 int i;
5001
5823c3ef
JB
5002 /* If the decoded name starts with an angle bracket, it means that
5003 NAME0 does not follow the GNAT encoding format. It should then
5004 not be allowed as a possible wild match. */
5005 if (decoded_name[0] == '<')
5006 return 0;
5007
529cad9c
PH
5008 for (i=0; decoded_name[i] != '\0'; i++)
5009 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5010 return 0;
5011
5012 return 1;
5013}
5014
4c4b4cd2
PH
5015/* True if NAME represents a name of the form A1.A2....An, n>=1 and
5016 PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1. Ignores
5017 informational suffixes of NAME (i.e., for which is_name_suffix is
5018 true). */
5019
14f9c5c9 5020static int
4c4b4cd2 5021wild_match (const char *patn0, int patn_len, const char *name0)
14f9c5c9 5022{
5823c3ef
JB
5023 char* match;
5024 const char* start;
5b4ee69b 5025
5823c3ef
JB
5026 start = name0;
5027 while (1)
14f9c5c9 5028 {
5823c3ef
JB
5029 match = strstr (start, patn0);
5030 if (match == NULL)
5031 return 0;
5032 if ((match == name0
5033 || match[-1] == '.'
5034 || (match > name0 + 1 && match[-1] == '_' && match[-2] == '_')
5035 || (match == name0 + 5 && strncmp ("_ada_", name0, 5) == 0))
5036 && is_name_suffix (match + patn_len))
5037 return (match == name0 || is_valid_name_for_wild_match (name0));
5038 start = match + 1;
96d887e8 5039 }
96d887e8
PH
5040}
5041
96d887e8
PH
5042/* Add symbols from BLOCK matching identifier NAME in DOMAIN to
5043 vector *defn_symbols, updating the list of symbols in OBSTACKP
5044 (if necessary). If WILD, treat as NAME with a wildcard prefix.
5045 OBJFILE is the section containing BLOCK.
5046 SYMTAB is recorded with each symbol added. */
5047
5048static void
5049ada_add_block_symbols (struct obstack *obstackp,
76a01679 5050 struct block *block, const char *name,
96d887e8 5051 domain_enum domain, struct objfile *objfile,
2570f2b7 5052 int wild)
96d887e8
PH
5053{
5054 struct dict_iterator iter;
5055 int name_len = strlen (name);
5056 /* A matching argument symbol, if any. */
5057 struct symbol *arg_sym;
5058 /* Set true when we find a matching non-argument symbol. */
5059 int found_sym;
5060 struct symbol *sym;
5061
5062 arg_sym = NULL;
5063 found_sym = 0;
5064 if (wild)
5065 {
5066 struct symbol *sym;
5b4ee69b 5067
96d887e8 5068 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5069 {
5eeb2539
AR
5070 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5071 SYMBOL_DOMAIN (sym), domain)
1265e4aa 5072 && wild_match (name, name_len, SYMBOL_LINKAGE_NAME (sym)))
76a01679 5073 {
2a2d4dc3
AS
5074 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
5075 continue;
5076 else if (SYMBOL_IS_ARGUMENT (sym))
5077 arg_sym = sym;
5078 else
5079 {
76a01679
JB
5080 found_sym = 1;
5081 add_defn_to_vec (obstackp,
5082 fixup_symbol_section (sym, objfile),
2570f2b7 5083 block);
76a01679
JB
5084 }
5085 }
5086 }
96d887e8
PH
5087 }
5088 else
5089 {
5090 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5091 {
5eeb2539
AR
5092 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5093 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
5094 {
5095 int cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym), name_len);
5b4ee69b 5096
76a01679
JB
5097 if (cmp == 0
5098 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len))
5099 {
2a2d4dc3
AS
5100 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5101 {
5102 if (SYMBOL_IS_ARGUMENT (sym))
5103 arg_sym = sym;
5104 else
5105 {
5106 found_sym = 1;
5107 add_defn_to_vec (obstackp,
5108 fixup_symbol_section (sym, objfile),
5109 block);
5110 }
5111 }
76a01679
JB
5112 }
5113 }
5114 }
96d887e8
PH
5115 }
5116
5117 if (!found_sym && arg_sym != NULL)
5118 {
76a01679
JB
5119 add_defn_to_vec (obstackp,
5120 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5121 block);
96d887e8
PH
5122 }
5123
5124 if (!wild)
5125 {
5126 arg_sym = NULL;
5127 found_sym = 0;
5128
5129 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 5130 {
5eeb2539
AR
5131 if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
5132 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
5133 {
5134 int cmp;
5135
5136 cmp = (int) '_' - (int) SYMBOL_LINKAGE_NAME (sym)[0];
5137 if (cmp == 0)
5138 {
5139 cmp = strncmp ("_ada_", SYMBOL_LINKAGE_NAME (sym), 5);
5140 if (cmp == 0)
5141 cmp = strncmp (name, SYMBOL_LINKAGE_NAME (sym) + 5,
5142 name_len);
5143 }
5144
5145 if (cmp == 0
5146 && is_name_suffix (SYMBOL_LINKAGE_NAME (sym) + name_len + 5))
5147 {
2a2d4dc3
AS
5148 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
5149 {
5150 if (SYMBOL_IS_ARGUMENT (sym))
5151 arg_sym = sym;
5152 else
5153 {
5154 found_sym = 1;
5155 add_defn_to_vec (obstackp,
5156 fixup_symbol_section (sym, objfile),
5157 block);
5158 }
5159 }
76a01679
JB
5160 }
5161 }
76a01679 5162 }
96d887e8
PH
5163
5164 /* NOTE: This really shouldn't be needed for _ada_ symbols.
5165 They aren't parameters, right? */
5166 if (!found_sym && arg_sym != NULL)
5167 {
5168 add_defn_to_vec (obstackp,
76a01679 5169 fixup_symbol_section (arg_sym, objfile),
2570f2b7 5170 block);
96d887e8
PH
5171 }
5172 }
5173}
5174\f
41d27058
JB
5175
5176 /* Symbol Completion */
5177
5178/* If SYM_NAME is a completion candidate for TEXT, return this symbol
5179 name in a form that's appropriate for the completion. The result
5180 does not need to be deallocated, but is only good until the next call.
5181
5182 TEXT_LEN is equal to the length of TEXT.
5183 Perform a wild match if WILD_MATCH is set.
5184 ENCODED should be set if TEXT represents the start of a symbol name
5185 in its encoded form. */
5186
5187static const char *
5188symbol_completion_match (const char *sym_name,
5189 const char *text, int text_len,
5190 int wild_match, int encoded)
5191{
41d27058
JB
5192 const int verbatim_match = (text[0] == '<');
5193 int match = 0;
5194
5195 if (verbatim_match)
5196 {
5197 /* Strip the leading angle bracket. */
5198 text = text + 1;
5199 text_len--;
5200 }
5201
5202 /* First, test against the fully qualified name of the symbol. */
5203
5204 if (strncmp (sym_name, text, text_len) == 0)
5205 match = 1;
5206
5207 if (match && !encoded)
5208 {
5209 /* One needed check before declaring a positive match is to verify
5210 that iff we are doing a verbatim match, the decoded version
5211 of the symbol name starts with '<'. Otherwise, this symbol name
5212 is not a suitable completion. */
5213 const char *sym_name_copy = sym_name;
5214 int has_angle_bracket;
5215
5216 sym_name = ada_decode (sym_name);
5217 has_angle_bracket = (sym_name[0] == '<');
5218 match = (has_angle_bracket == verbatim_match);
5219 sym_name = sym_name_copy;
5220 }
5221
5222 if (match && !verbatim_match)
5223 {
5224 /* When doing non-verbatim match, another check that needs to
5225 be done is to verify that the potentially matching symbol name
5226 does not include capital letters, because the ada-mode would
5227 not be able to understand these symbol names without the
5228 angle bracket notation. */
5229 const char *tmp;
5230
5231 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
5232 if (*tmp != '\0')
5233 match = 0;
5234 }
5235
5236 /* Second: Try wild matching... */
5237
5238 if (!match && wild_match)
5239 {
5240 /* Since we are doing wild matching, this means that TEXT
5241 may represent an unqualified symbol name. We therefore must
5242 also compare TEXT against the unqualified name of the symbol. */
5243 sym_name = ada_unqualified_name (ada_decode (sym_name));
5244
5245 if (strncmp (sym_name, text, text_len) == 0)
5246 match = 1;
5247 }
5248
5249 /* Finally: If we found a mach, prepare the result to return. */
5250
5251 if (!match)
5252 return NULL;
5253
5254 if (verbatim_match)
5255 sym_name = add_angle_brackets (sym_name);
5256
5257 if (!encoded)
5258 sym_name = ada_decode (sym_name);
5259
5260 return sym_name;
5261}
5262
2ba95b9b
JB
5263DEF_VEC_P (char_ptr);
5264
41d27058
JB
5265/* A companion function to ada_make_symbol_completion_list().
5266 Check if SYM_NAME represents a symbol which name would be suitable
5267 to complete TEXT (TEXT_LEN is the length of TEXT), in which case
5268 it is appended at the end of the given string vector SV.
5269
5270 ORIG_TEXT is the string original string from the user command
5271 that needs to be completed. WORD is the entire command on which
5272 completion should be performed. These two parameters are used to
5273 determine which part of the symbol name should be added to the
5274 completion vector.
5275 if WILD_MATCH is set, then wild matching is performed.
5276 ENCODED should be set if TEXT represents a symbol name in its
5277 encoded formed (in which case the completion should also be
5278 encoded). */
5279
5280static void
d6565258 5281symbol_completion_add (VEC(char_ptr) **sv,
41d27058
JB
5282 const char *sym_name,
5283 const char *text, int text_len,
5284 const char *orig_text, const char *word,
5285 int wild_match, int encoded)
5286{
5287 const char *match = symbol_completion_match (sym_name, text, text_len,
5288 wild_match, encoded);
5289 char *completion;
5290
5291 if (match == NULL)
5292 return;
5293
5294 /* We found a match, so add the appropriate completion to the given
5295 string vector. */
5296
5297 if (word == orig_text)
5298 {
5299 completion = xmalloc (strlen (match) + 5);
5300 strcpy (completion, match);
5301 }
5302 else if (word > orig_text)
5303 {
5304 /* Return some portion of sym_name. */
5305 completion = xmalloc (strlen (match) + 5);
5306 strcpy (completion, match + (word - orig_text));
5307 }
5308 else
5309 {
5310 /* Return some of ORIG_TEXT plus sym_name. */
5311 completion = xmalloc (strlen (match) + (orig_text - word) + 5);
5312 strncpy (completion, word, orig_text - word);
5313 completion[orig_text - word] = '\0';
5314 strcat (completion, match);
5315 }
5316
d6565258 5317 VEC_safe_push (char_ptr, *sv, completion);
41d27058
JB
5318}
5319
ccefe4c4
TT
5320/* An object of this type is passed as the user_data argument to the
5321 map_partial_symbol_names method. */
5322struct add_partial_datum
5323{
5324 VEC(char_ptr) **completions;
5325 char *text;
5326 int text_len;
5327 char *text0;
5328 char *word;
5329 int wild_match;
5330 int encoded;
5331};
5332
5333/* A callback for map_partial_symbol_names. */
5334static void
5335ada_add_partial_symbol_completions (const char *name, void *user_data)
5336{
5337 struct add_partial_datum *data = user_data;
5b4ee69b 5338
ccefe4c4
TT
5339 symbol_completion_add (data->completions, name,
5340 data->text, data->text_len, data->text0, data->word,
5341 data->wild_match, data->encoded);
5342}
5343
41d27058
JB
5344/* Return a list of possible symbol names completing TEXT0. The list
5345 is NULL terminated. WORD is the entire command on which completion
5346 is made. */
5347
5348static char **
5349ada_make_symbol_completion_list (char *text0, char *word)
5350{
5351 char *text;
5352 int text_len;
5353 int wild_match;
5354 int encoded;
2ba95b9b 5355 VEC(char_ptr) *completions = VEC_alloc (char_ptr, 128);
41d27058
JB
5356 struct symbol *sym;
5357 struct symtab *s;
41d27058
JB
5358 struct minimal_symbol *msymbol;
5359 struct objfile *objfile;
5360 struct block *b, *surrounding_static_block = 0;
5361 int i;
5362 struct dict_iterator iter;
5363
5364 if (text0[0] == '<')
5365 {
5366 text = xstrdup (text0);
5367 make_cleanup (xfree, text);
5368 text_len = strlen (text);
5369 wild_match = 0;
5370 encoded = 1;
5371 }
5372 else
5373 {
5374 text = xstrdup (ada_encode (text0));
5375 make_cleanup (xfree, text);
5376 text_len = strlen (text);
5377 for (i = 0; i < text_len; i++)
5378 text[i] = tolower (text[i]);
5379
5380 encoded = (strstr (text0, "__") != NULL);
5381 /* If the name contains a ".", then the user is entering a fully
5382 qualified entity name, and the match must not be done in wild
5383 mode. Similarly, if the user wants to complete what looks like
5384 an encoded name, the match must not be done in wild mode. */
5385 wild_match = (strchr (text0, '.') == NULL && !encoded);
5386 }
5387
5388 /* First, look at the partial symtab symbols. */
41d27058 5389 {
ccefe4c4
TT
5390 struct add_partial_datum data;
5391
5392 data.completions = &completions;
5393 data.text = text;
5394 data.text_len = text_len;
5395 data.text0 = text0;
5396 data.word = word;
5397 data.wild_match = wild_match;
5398 data.encoded = encoded;
5399 map_partial_symbol_names (ada_add_partial_symbol_completions, &data);
41d27058
JB
5400 }
5401
5402 /* At this point scan through the misc symbol vectors and add each
5403 symbol you find to the list. Eventually we want to ignore
5404 anything that isn't a text symbol (everything else will be
5405 handled by the psymtab code above). */
5406
5407 ALL_MSYMBOLS (objfile, msymbol)
5408 {
5409 QUIT;
d6565258 5410 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (msymbol),
41d27058
JB
5411 text, text_len, text0, word, wild_match, encoded);
5412 }
5413
5414 /* Search upwards from currently selected frame (so that we can
5415 complete on local vars. */
5416
5417 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
5418 {
5419 if (!BLOCK_SUPERBLOCK (b))
5420 surrounding_static_block = b; /* For elmin of dups */
5421
5422 ALL_BLOCK_SYMBOLS (b, iter, sym)
5423 {
d6565258 5424 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058
JB
5425 text, text_len, text0, word,
5426 wild_match, encoded);
5427 }
5428 }
5429
5430 /* Go through the symtabs and check the externs and statics for
5431 symbols which match. */
5432
5433 ALL_SYMTABS (objfile, s)
5434 {
5435 QUIT;
5436 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
5437 ALL_BLOCK_SYMBOLS (b, iter, sym)
5438 {
d6565258 5439 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058
JB
5440 text, text_len, text0, word,
5441 wild_match, encoded);
5442 }
5443 }
5444
5445 ALL_SYMTABS (objfile, s)
5446 {
5447 QUIT;
5448 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
5449 /* Don't do this block twice. */
5450 if (b == surrounding_static_block)
5451 continue;
5452 ALL_BLOCK_SYMBOLS (b, iter, sym)
5453 {
d6565258 5454 symbol_completion_add (&completions, SYMBOL_LINKAGE_NAME (sym),
41d27058
JB
5455 text, text_len, text0, word,
5456 wild_match, encoded);
5457 }
5458 }
5459
5460 /* Append the closing NULL entry. */
2ba95b9b 5461 VEC_safe_push (char_ptr, completions, NULL);
41d27058 5462
2ba95b9b
JB
5463 /* Make a copy of the COMPLETIONS VEC before we free it, and then
5464 return the copy. It's unfortunate that we have to make a copy
5465 of an array that we're about to destroy, but there is nothing much
5466 we can do about it. Fortunately, it's typically not a very large
5467 array. */
5468 {
5469 const size_t completions_size =
5470 VEC_length (char_ptr, completions) * sizeof (char *);
5471 char **result = malloc (completions_size);
5472
5473 memcpy (result, VEC_address (char_ptr, completions), completions_size);
5474
5475 VEC_free (char_ptr, completions);
5476 return result;
5477 }
41d27058
JB
5478}
5479
963a6417 5480 /* Field Access */
96d887e8 5481
73fb9985
JB
5482/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
5483 for tagged types. */
5484
5485static int
5486ada_is_dispatch_table_ptr_type (struct type *type)
5487{
5488 char *name;
5489
5490 if (TYPE_CODE (type) != TYPE_CODE_PTR)
5491 return 0;
5492
5493 name = TYPE_NAME (TYPE_TARGET_TYPE (type));
5494 if (name == NULL)
5495 return 0;
5496
5497 return (strcmp (name, "ada__tags__dispatch_table") == 0);
5498}
5499
963a6417
PH
5500/* True if field number FIELD_NUM in struct or union type TYPE is supposed
5501 to be invisible to users. */
96d887e8 5502
963a6417
PH
5503int
5504ada_is_ignored_field (struct type *type, int field_num)
96d887e8 5505{
963a6417
PH
5506 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5507 return 1;
73fb9985
JB
5508
5509 /* Check the name of that field. */
5510 {
5511 const char *name = TYPE_FIELD_NAME (type, field_num);
5512
5513 /* Anonymous field names should not be printed.
5514 brobecker/2007-02-20: I don't think this can actually happen
5515 but we don't want to print the value of annonymous fields anyway. */
5516 if (name == NULL)
5517 return 1;
5518
5519 /* A field named "_parent" is internally generated by GNAT for
5520 tagged types, and should not be printed either. */
5521 if (name[0] == '_' && strncmp (name, "_parent", 7) != 0)
5522 return 1;
5523 }
5524
5525 /* If this is the dispatch table of a tagged type, then ignore. */
5526 if (ada_is_tagged_type (type, 1)
5527 && ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num)))
5528 return 1;
5529
5530 /* Not a special field, so it should not be ignored. */
5531 return 0;
963a6417 5532}
96d887e8 5533
963a6417
PH
5534/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
5535 pointer or reference type whose ultimate target has a tag field. */
96d887e8 5536
963a6417
PH
5537int
5538ada_is_tagged_type (struct type *type, int refok)
5539{
5540 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1, NULL) != NULL);
5541}
96d887e8 5542
963a6417 5543/* True iff TYPE represents the type of X'Tag */
96d887e8 5544
963a6417
PH
5545int
5546ada_is_tag_type (struct type *type)
5547{
5548 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_PTR)
5549 return 0;
5550 else
96d887e8 5551 {
963a6417 5552 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 5553
963a6417
PH
5554 return (name != NULL
5555 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 5556 }
96d887e8
PH
5557}
5558
963a6417 5559/* The type of the tag on VAL. */
76a01679 5560
963a6417
PH
5561struct type *
5562ada_tag_type (struct value *val)
96d887e8 5563{
df407dfe 5564 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0, NULL);
963a6417 5565}
96d887e8 5566
963a6417 5567/* The value of the tag on VAL. */
96d887e8 5568
963a6417
PH
5569struct value *
5570ada_value_tag (struct value *val)
5571{
03ee6b2e 5572 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
5573}
5574
963a6417
PH
5575/* The value of the tag on the object of type TYPE whose contents are
5576 saved at VALADDR, if it is non-null, or is at memory address
5577 ADDRESS. */
96d887e8 5578
963a6417 5579static struct value *
10a2c479 5580value_tag_from_contents_and_address (struct type *type,
fc1a4b47 5581 const gdb_byte *valaddr,
963a6417 5582 CORE_ADDR address)
96d887e8 5583{
b5385fc0 5584 int tag_byte_offset;
963a6417 5585 struct type *tag_type;
5b4ee69b 5586
963a6417 5587 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 5588 NULL, NULL, NULL))
96d887e8 5589 {
fc1a4b47 5590 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
5591 ? NULL
5592 : valaddr + tag_byte_offset);
963a6417 5593 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 5594
963a6417 5595 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 5596 }
963a6417
PH
5597 return NULL;
5598}
96d887e8 5599
963a6417
PH
5600static struct type *
5601type_from_tag (struct value *tag)
5602{
5603 const char *type_name = ada_tag_name (tag);
5b4ee69b 5604
963a6417
PH
5605 if (type_name != NULL)
5606 return ada_find_any_type (ada_encode (type_name));
5607 return NULL;
5608}
96d887e8 5609
963a6417
PH
5610struct tag_args
5611{
5612 struct value *tag;
5613 char *name;
5614};
4c4b4cd2 5615
529cad9c
PH
5616
5617static int ada_tag_name_1 (void *);
5618static int ada_tag_name_2 (struct tag_args *);
5619
4c4b4cd2
PH
5620/* Wrapper function used by ada_tag_name. Given a struct tag_args*
5621 value ARGS, sets ARGS->name to the tag name of ARGS->tag.
5622 The value stored in ARGS->name is valid until the next call to
5623 ada_tag_name_1. */
5624
5625static int
5626ada_tag_name_1 (void *args0)
5627{
5628 struct tag_args *args = (struct tag_args *) args0;
5629 static char name[1024];
76a01679 5630 char *p;
4c4b4cd2 5631 struct value *val;
5b4ee69b 5632
4c4b4cd2 5633 args->name = NULL;
03ee6b2e 5634 val = ada_value_struct_elt (args->tag, "tsd", 1);
529cad9c
PH
5635 if (val == NULL)
5636 return ada_tag_name_2 (args);
03ee6b2e 5637 val = ada_value_struct_elt (val, "expanded_name", 1);
529cad9c
PH
5638 if (val == NULL)
5639 return 0;
5640 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5641 for (p = name; *p != '\0'; p += 1)
5642 if (isalpha (*p))
5643 *p = tolower (*p);
5644 args->name = name;
5645 return 0;
5646}
5647
e802dbe0
JB
5648/* Return the "ada__tags__type_specific_data" type. */
5649
5650static struct type *
5651ada_get_tsd_type (struct inferior *inf)
5652{
5653 struct ada_inferior_data *data = get_ada_inferior_data (inf);
5654
5655 if (data->tsd_type == 0)
5656 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
5657 return data->tsd_type;
5658}
5659
529cad9c
PH
5660/* Utility function for ada_tag_name_1 that tries the second
5661 representation for the dispatch table (in which there is no
5662 explicit 'tsd' field in the referent of the tag pointer, and instead
5663 the tsd pointer is stored just before the dispatch table. */
5664
5665static int
5666ada_tag_name_2 (struct tag_args *args)
5667{
5668 struct type *info_type;
5669 static char name[1024];
5670 char *p;
5671 struct value *val, *valp;
5672
5673 args->name = NULL;
e802dbe0 5674 info_type = ada_get_tsd_type (current_inferior());
529cad9c
PH
5675 if (info_type == NULL)
5676 return 0;
5677 info_type = lookup_pointer_type (lookup_pointer_type (info_type));
5678 valp = value_cast (info_type, args->tag);
5679 if (valp == NULL)
5680 return 0;
2497b498 5681 val = value_ind (value_ptradd (valp, -1));
4c4b4cd2
PH
5682 if (val == NULL)
5683 return 0;
03ee6b2e 5684 val = ada_value_struct_elt (val, "expanded_name", 1);
4c4b4cd2
PH
5685 if (val == NULL)
5686 return 0;
5687 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
5688 for (p = name; *p != '\0'; p += 1)
5689 if (isalpha (*p))
5690 *p = tolower (*p);
5691 args->name = name;
5692 return 0;
5693}
5694
5695/* The type name of the dynamic type denoted by the 'tag value TAG, as
e802dbe0 5696 a C string. */
4c4b4cd2
PH
5697
5698const char *
5699ada_tag_name (struct value *tag)
5700{
5701 struct tag_args args;
5b4ee69b 5702
df407dfe 5703 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 5704 return NULL;
76a01679 5705 args.tag = tag;
4c4b4cd2
PH
5706 args.name = NULL;
5707 catch_errors (ada_tag_name_1, &args, NULL, RETURN_MASK_ALL);
5708 return args.name;
5709}
5710
5711/* The parent type of TYPE, or NULL if none. */
14f9c5c9 5712
d2e4a39e 5713struct type *
ebf56fd3 5714ada_parent_type (struct type *type)
14f9c5c9
AS
5715{
5716 int i;
5717
61ee279c 5718 type = ada_check_typedef (type);
14f9c5c9
AS
5719
5720 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5721 return NULL;
5722
5723 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5724 if (ada_is_parent_field (type, i))
0c1f74cf
JB
5725 {
5726 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
5727
5728 /* If the _parent field is a pointer, then dereference it. */
5729 if (TYPE_CODE (parent_type) == TYPE_CODE_PTR)
5730 parent_type = TYPE_TARGET_TYPE (parent_type);
5731 /* If there is a parallel XVS type, get the actual base type. */
5732 parent_type = ada_get_base_type (parent_type);
5733
5734 return ada_check_typedef (parent_type);
5735 }
14f9c5c9
AS
5736
5737 return NULL;
5738}
5739
4c4b4cd2
PH
5740/* True iff field number FIELD_NUM of structure type TYPE contains the
5741 parent-type (inherited) fields of a derived type. Assumes TYPE is
5742 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
5743
5744int
ebf56fd3 5745ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 5746{
61ee279c 5747 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 5748
4c4b4cd2
PH
5749 return (name != NULL
5750 && (strncmp (name, "PARENT", 6) == 0
5751 || strncmp (name, "_parent", 7) == 0));
14f9c5c9
AS
5752}
5753
4c4b4cd2 5754/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 5755 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 5756 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 5757 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 5758 structures. */
14f9c5c9
AS
5759
5760int
ebf56fd3 5761ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 5762{
d2e4a39e 5763 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 5764
d2e4a39e 5765 return (name != NULL
4c4b4cd2
PH
5766 && (strncmp (name, "PARENT", 6) == 0
5767 || strcmp (name, "REP") == 0
5768 || strncmp (name, "_parent", 7) == 0
5769 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
5770}
5771
4c4b4cd2
PH
5772/* True iff field number FIELD_NUM of structure or union type TYPE
5773 is a variant wrapper. Assumes TYPE is a structure type with at least
5774 FIELD_NUM+1 fields. */
14f9c5c9
AS
5775
5776int
ebf56fd3 5777ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 5778{
d2e4a39e 5779 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 5780
14f9c5c9 5781 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
4c4b4cd2 5782 || (is_dynamic_field (type, field_num)
c3e5cd34
PH
5783 && (TYPE_CODE (TYPE_TARGET_TYPE (field_type))
5784 == TYPE_CODE_UNION)));
14f9c5c9
AS
5785}
5786
5787/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 5788 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
5789 returns the type of the controlling discriminant for the variant.
5790 May return NULL if the type could not be found. */
14f9c5c9 5791
d2e4a39e 5792struct type *
ebf56fd3 5793ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 5794{
d2e4a39e 5795 char *name = ada_variant_discrim_name (var_type);
5b4ee69b 5796
7c964f07 5797 return ada_lookup_struct_elt_type (outer_type, name, 1, 1, NULL);
14f9c5c9
AS
5798}
5799
4c4b4cd2 5800/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 5801 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 5802 represents a 'when others' clause; otherwise 0. */
14f9c5c9
AS
5803
5804int
ebf56fd3 5805ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 5806{
d2e4a39e 5807 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 5808
14f9c5c9
AS
5809 return (name != NULL && name[0] == 'O');
5810}
5811
5812/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
5813 returns the name of the discriminant controlling the variant.
5814 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 5815
d2e4a39e 5816char *
ebf56fd3 5817ada_variant_discrim_name (struct type *type0)
14f9c5c9 5818{
d2e4a39e 5819 static char *result = NULL;
14f9c5c9 5820 static size_t result_len = 0;
d2e4a39e
AS
5821 struct type *type;
5822 const char *name;
5823 const char *discrim_end;
5824 const char *discrim_start;
14f9c5c9
AS
5825
5826 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5827 type = TYPE_TARGET_TYPE (type0);
5828 else
5829 type = type0;
5830
5831 name = ada_type_name (type);
5832
5833 if (name == NULL || name[0] == '\000')
5834 return "";
5835
5836 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5837 discrim_end -= 1)
5838 {
4c4b4cd2
PH
5839 if (strncmp (discrim_end, "___XVN", 6) == 0)
5840 break;
14f9c5c9
AS
5841 }
5842 if (discrim_end == name)
5843 return "";
5844
d2e4a39e 5845 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
5846 discrim_start -= 1)
5847 {
d2e4a39e 5848 if (discrim_start == name + 1)
4c4b4cd2 5849 return "";
76a01679 5850 if ((discrim_start > name + 3
4c4b4cd2
PH
5851 && strncmp (discrim_start - 3, "___", 3) == 0)
5852 || discrim_start[-1] == '.')
5853 break;
14f9c5c9
AS
5854 }
5855
5856 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5857 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 5858 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
5859 return result;
5860}
5861
4c4b4cd2
PH
5862/* Scan STR for a subtype-encoded number, beginning at position K.
5863 Put the position of the character just past the number scanned in
5864 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
5865 Return 1 if there was a valid number at the given position, and 0
5866 otherwise. A "subtype-encoded" number consists of the absolute value
5867 in decimal, followed by the letter 'm' to indicate a negative number.
5868 Assumes 0m does not occur. */
14f9c5c9
AS
5869
5870int
d2e4a39e 5871ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
5872{
5873 ULONGEST RU;
5874
d2e4a39e 5875 if (!isdigit (str[k]))
14f9c5c9
AS
5876 return 0;
5877
4c4b4cd2 5878 /* Do it the hard way so as not to make any assumption about
14f9c5c9 5879 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 5880 LONGEST. */
14f9c5c9
AS
5881 RU = 0;
5882 while (isdigit (str[k]))
5883 {
d2e4a39e 5884 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
5885 k += 1;
5886 }
5887
d2e4a39e 5888 if (str[k] == 'm')
14f9c5c9
AS
5889 {
5890 if (R != NULL)
4c4b4cd2 5891 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
5892 k += 1;
5893 }
5894 else if (R != NULL)
5895 *R = (LONGEST) RU;
5896
4c4b4cd2 5897 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
5898 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5899 number representable as a LONGEST (although either would probably work
5900 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 5901 above is always equivalent to the negative of RU. */
14f9c5c9
AS
5902
5903 if (new_k != NULL)
5904 *new_k = k;
5905 return 1;
5906}
5907
4c4b4cd2
PH
5908/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5909 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5910 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 5911
d2e4a39e 5912int
ebf56fd3 5913ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 5914{
d2e4a39e 5915 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
5916 int p;
5917
5918 p = 0;
5919 while (1)
5920 {
d2e4a39e 5921 switch (name[p])
4c4b4cd2
PH
5922 {
5923 case '\0':
5924 return 0;
5925 case 'S':
5926 {
5927 LONGEST W;
5b4ee69b 5928
4c4b4cd2
PH
5929 if (!ada_scan_number (name, p + 1, &W, &p))
5930 return 0;
5931 if (val == W)
5932 return 1;
5933 break;
5934 }
5935 case 'R':
5936 {
5937 LONGEST L, U;
5b4ee69b 5938
4c4b4cd2
PH
5939 if (!ada_scan_number (name, p + 1, &L, &p)
5940 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
5941 return 0;
5942 if (val >= L && val <= U)
5943 return 1;
5944 break;
5945 }
5946 case 'O':
5947 return 1;
5948 default:
5949 return 0;
5950 }
5951 }
5952}
5953
5954/* FIXME: Lots of redundancy below. Try to consolidate. */
5955
5956/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
5957 ARG_TYPE, extract and return the value of one of its (non-static)
5958 fields. FIELDNO says which field. Differs from value_primitive_field
5959 only in that it can handle packed values of arbitrary type. */
14f9c5c9 5960
4c4b4cd2 5961static struct value *
d2e4a39e 5962ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 5963 struct type *arg_type)
14f9c5c9 5964{
14f9c5c9
AS
5965 struct type *type;
5966
61ee279c 5967 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
5968 type = TYPE_FIELD_TYPE (arg_type, fieldno);
5969
4c4b4cd2 5970 /* Handle packed fields. */
14f9c5c9
AS
5971
5972 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5973 {
5974 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5975 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 5976
0fd88904 5977 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
5978 offset + bit_pos / 8,
5979 bit_pos % 8, bit_size, type);
14f9c5c9
AS
5980 }
5981 else
5982 return value_primitive_field (arg1, offset, fieldno, arg_type);
5983}
5984
52ce6436
PH
5985/* Find field with name NAME in object of type TYPE. If found,
5986 set the following for each argument that is non-null:
5987 - *FIELD_TYPE_P to the field's type;
5988 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
5989 an object of that type;
5990 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
5991 - *BIT_SIZE_P to its size in bits if the field is packed, and
5992 0 otherwise;
5993 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
5994 fields up to but not including the desired field, or by the total
5995 number of fields if not found. A NULL value of NAME never
5996 matches; the function just counts visible fields in this case.
5997
5998 Returns 1 if found, 0 otherwise. */
5999
4c4b4cd2 6000static int
76a01679
JB
6001find_struct_field (char *name, struct type *type, int offset,
6002 struct type **field_type_p,
52ce6436
PH
6003 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
6004 int *index_p)
4c4b4cd2
PH
6005{
6006 int i;
6007
61ee279c 6008 type = ada_check_typedef (type);
76a01679 6009
52ce6436
PH
6010 if (field_type_p != NULL)
6011 *field_type_p = NULL;
6012 if (byte_offset_p != NULL)
d5d6fca5 6013 *byte_offset_p = 0;
52ce6436
PH
6014 if (bit_offset_p != NULL)
6015 *bit_offset_p = 0;
6016 if (bit_size_p != NULL)
6017 *bit_size_p = 0;
6018
6019 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
6020 {
6021 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6022 int fld_offset = offset + bit_pos / 8;
6023 char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6024
4c4b4cd2
PH
6025 if (t_field_name == NULL)
6026 continue;
6027
52ce6436 6028 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
6029 {
6030 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6031
52ce6436
PH
6032 if (field_type_p != NULL)
6033 *field_type_p = TYPE_FIELD_TYPE (type, i);
6034 if (byte_offset_p != NULL)
6035 *byte_offset_p = fld_offset;
6036 if (bit_offset_p != NULL)
6037 *bit_offset_p = bit_pos % 8;
6038 if (bit_size_p != NULL)
6039 *bit_size_p = bit_size;
76a01679
JB
6040 return 1;
6041 }
4c4b4cd2
PH
6042 else if (ada_is_wrapper_field (type, i))
6043 {
52ce6436
PH
6044 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
6045 field_type_p, byte_offset_p, bit_offset_p,
6046 bit_size_p, index_p))
76a01679
JB
6047 return 1;
6048 }
4c4b4cd2
PH
6049 else if (ada_is_variant_part (type, i))
6050 {
52ce6436
PH
6051 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6052 fixed type?? */
4c4b4cd2 6053 int j;
52ce6436
PH
6054 struct type *field_type
6055 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 6056
52ce6436 6057 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 6058 {
76a01679
JB
6059 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
6060 fld_offset
6061 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6062 field_type_p, byte_offset_p,
52ce6436 6063 bit_offset_p, bit_size_p, index_p))
76a01679 6064 return 1;
4c4b4cd2
PH
6065 }
6066 }
52ce6436
PH
6067 else if (index_p != NULL)
6068 *index_p += 1;
4c4b4cd2
PH
6069 }
6070 return 0;
6071}
6072
52ce6436 6073/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 6074
52ce6436
PH
6075static int
6076num_visible_fields (struct type *type)
6077{
6078 int n;
5b4ee69b 6079
52ce6436
PH
6080 n = 0;
6081 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
6082 return n;
6083}
14f9c5c9 6084
4c4b4cd2 6085/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
6086 and search in it assuming it has (class) type TYPE.
6087 If found, return value, else return NULL.
6088
4c4b4cd2 6089 Searches recursively through wrapper fields (e.g., '_parent'). */
14f9c5c9 6090
4c4b4cd2 6091static struct value *
d2e4a39e 6092ada_search_struct_field (char *name, struct value *arg, int offset,
4c4b4cd2 6093 struct type *type)
14f9c5c9
AS
6094{
6095 int i;
14f9c5c9 6096
5b4ee69b 6097 type = ada_check_typedef (type);
52ce6436 6098 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
14f9c5c9
AS
6099 {
6100 char *t_field_name = TYPE_FIELD_NAME (type, i);
6101
6102 if (t_field_name == NULL)
4c4b4cd2 6103 continue;
14f9c5c9
AS
6104
6105 else if (field_name_match (t_field_name, name))
4c4b4cd2 6106 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
6107
6108 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 6109 {
06d5cf63
JB
6110 struct value *v = /* Do not let indent join lines here. */
6111 ada_search_struct_field (name, arg,
6112 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6113 TYPE_FIELD_TYPE (type, i));
5b4ee69b 6114
4c4b4cd2
PH
6115 if (v != NULL)
6116 return v;
6117 }
14f9c5c9
AS
6118
6119 else if (ada_is_variant_part (type, i))
4c4b4cd2 6120 {
52ce6436 6121 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 6122 int j;
5b4ee69b
MS
6123 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6124 i));
4c4b4cd2
PH
6125 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
6126
52ce6436 6127 for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
4c4b4cd2 6128 {
06d5cf63
JB
6129 struct value *v = ada_search_struct_field /* Force line break. */
6130 (name, arg,
6131 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
6132 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 6133
4c4b4cd2
PH
6134 if (v != NULL)
6135 return v;
6136 }
6137 }
14f9c5c9
AS
6138 }
6139 return NULL;
6140}
d2e4a39e 6141
52ce6436
PH
6142static struct value *ada_index_struct_field_1 (int *, struct value *,
6143 int, struct type *);
6144
6145
6146/* Return field #INDEX in ARG, where the index is that returned by
6147 * find_struct_field through its INDEX_P argument. Adjust the address
6148 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
6149 * If found, return value, else return NULL. */
6150
6151static struct value *
6152ada_index_struct_field (int index, struct value *arg, int offset,
6153 struct type *type)
6154{
6155 return ada_index_struct_field_1 (&index, arg, offset, type);
6156}
6157
6158
6159/* Auxiliary function for ada_index_struct_field. Like
6160 * ada_index_struct_field, but takes index from *INDEX_P and modifies
6161 * *INDEX_P. */
6162
6163static struct value *
6164ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
6165 struct type *type)
6166{
6167 int i;
6168 type = ada_check_typedef (type);
6169
6170 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6171 {
6172 if (TYPE_FIELD_NAME (type, i) == NULL)
6173 continue;
6174 else if (ada_is_wrapper_field (type, i))
6175 {
6176 struct value *v = /* Do not let indent join lines here. */
6177 ada_index_struct_field_1 (index_p, arg,
6178 offset + TYPE_FIELD_BITPOS (type, i) / 8,
6179 TYPE_FIELD_TYPE (type, i));
5b4ee69b 6180
52ce6436
PH
6181 if (v != NULL)
6182 return v;
6183 }
6184
6185 else if (ada_is_variant_part (type, i))
6186 {
6187 /* PNH: Do we ever get here? See ada_search_struct_field,
6188 find_struct_field. */
6189 error (_("Cannot assign this kind of variant record"));
6190 }
6191 else if (*index_p == 0)
6192 return ada_value_primitive_field (arg, offset, i, type);
6193 else
6194 *index_p -= 1;
6195 }
6196 return NULL;
6197}
6198
4c4b4cd2
PH
6199/* Given ARG, a value of type (pointer or reference to a)*
6200 structure/union, extract the component named NAME from the ultimate
6201 target structure/union and return it as a value with its
f5938064 6202 appropriate type.
14f9c5c9 6203
4c4b4cd2
PH
6204 The routine searches for NAME among all members of the structure itself
6205 and (recursively) among all members of any wrapper members
14f9c5c9
AS
6206 (e.g., '_parent').
6207
03ee6b2e
PH
6208 If NO_ERR, then simply return NULL in case of error, rather than
6209 calling error. */
14f9c5c9 6210
d2e4a39e 6211struct value *
03ee6b2e 6212ada_value_struct_elt (struct value *arg, char *name, int no_err)
14f9c5c9 6213{
4c4b4cd2 6214 struct type *t, *t1;
d2e4a39e 6215 struct value *v;
14f9c5c9 6216
4c4b4cd2 6217 v = NULL;
df407dfe 6218 t1 = t = ada_check_typedef (value_type (arg));
4c4b4cd2
PH
6219 if (TYPE_CODE (t) == TYPE_CODE_REF)
6220 {
6221 t1 = TYPE_TARGET_TYPE (t);
6222 if (t1 == NULL)
03ee6b2e 6223 goto BadValue;
61ee279c 6224 t1 = ada_check_typedef (t1);
4c4b4cd2 6225 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679 6226 {
994b9211 6227 arg = coerce_ref (arg);
76a01679
JB
6228 t = t1;
6229 }
4c4b4cd2 6230 }
14f9c5c9 6231
4c4b4cd2
PH
6232 while (TYPE_CODE (t) == TYPE_CODE_PTR)
6233 {
6234 t1 = TYPE_TARGET_TYPE (t);
6235 if (t1 == NULL)
03ee6b2e 6236 goto BadValue;
61ee279c 6237 t1 = ada_check_typedef (t1);
4c4b4cd2 6238 if (TYPE_CODE (t1) == TYPE_CODE_PTR)
76a01679
JB
6239 {
6240 arg = value_ind (arg);
6241 t = t1;
6242 }
4c4b4cd2 6243 else
76a01679 6244 break;
4c4b4cd2 6245 }
14f9c5c9 6246
4c4b4cd2 6247 if (TYPE_CODE (t1) != TYPE_CODE_STRUCT && TYPE_CODE (t1) != TYPE_CODE_UNION)
03ee6b2e 6248 goto BadValue;
14f9c5c9 6249
4c4b4cd2
PH
6250 if (t1 == t)
6251 v = ada_search_struct_field (name, arg, 0, t);
6252 else
6253 {
6254 int bit_offset, bit_size, byte_offset;
6255 struct type *field_type;
6256 CORE_ADDR address;
6257
76a01679
JB
6258 if (TYPE_CODE (t) == TYPE_CODE_PTR)
6259 address = value_as_address (arg);
4c4b4cd2 6260 else
0fd88904 6261 address = unpack_pointer (t, value_contents (arg));
14f9c5c9 6262
1ed6ede0 6263 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL, address, NULL, 1);
76a01679
JB
6264 if (find_struct_field (name, t1, 0,
6265 &field_type, &byte_offset, &bit_offset,
52ce6436 6266 &bit_size, NULL))
76a01679
JB
6267 {
6268 if (bit_size != 0)
6269 {
714e53ab
PH
6270 if (TYPE_CODE (t) == TYPE_CODE_REF)
6271 arg = ada_coerce_ref (arg);
6272 else
6273 arg = ada_value_ind (arg);
76a01679
JB
6274 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
6275 bit_offset, bit_size,
6276 field_type);
6277 }
6278 else
f5938064 6279 v = value_at_lazy (field_type, address + byte_offset);
76a01679
JB
6280 }
6281 }
6282
03ee6b2e
PH
6283 if (v != NULL || no_err)
6284 return v;
6285 else
323e0a4a 6286 error (_("There is no member named %s."), name);
14f9c5c9 6287
03ee6b2e
PH
6288 BadValue:
6289 if (no_err)
6290 return NULL;
6291 else
6292 error (_("Attempt to extract a component of a value that is not a record."));
14f9c5c9
AS
6293}
6294
6295/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
6296 If DISPP is non-null, add its byte displacement from the beginning of a
6297 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
6298 work for packed fields).
6299
6300 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 6301 followed by "___".
14f9c5c9 6302
4c4b4cd2
PH
6303 TYPE can be either a struct or union. If REFOK, TYPE may also
6304 be a (pointer or reference)+ to a struct or union, and the
6305 ultimate target type will be searched.
14f9c5c9
AS
6306
6307 Looks recursively into variant clauses and parent types.
6308
4c4b4cd2
PH
6309 If NOERR is nonzero, return NULL if NAME is not suitably defined or
6310 TYPE is not a type of the right kind. */
14f9c5c9 6311
4c4b4cd2 6312static struct type *
76a01679
JB
6313ada_lookup_struct_elt_type (struct type *type, char *name, int refok,
6314 int noerr, int *dispp)
14f9c5c9
AS
6315{
6316 int i;
6317
6318 if (name == NULL)
6319 goto BadName;
6320
76a01679 6321 if (refok && type != NULL)
4c4b4cd2
PH
6322 while (1)
6323 {
61ee279c 6324 type = ada_check_typedef (type);
76a01679
JB
6325 if (TYPE_CODE (type) != TYPE_CODE_PTR
6326 && TYPE_CODE (type) != TYPE_CODE_REF)
6327 break;
6328 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 6329 }
14f9c5c9 6330
76a01679 6331 if (type == NULL
1265e4aa
JB
6332 || (TYPE_CODE (type) != TYPE_CODE_STRUCT
6333 && TYPE_CODE (type) != TYPE_CODE_UNION))
14f9c5c9 6334 {
4c4b4cd2 6335 if (noerr)
76a01679 6336 return NULL;
4c4b4cd2 6337 else
76a01679
JB
6338 {
6339 target_terminal_ours ();
6340 gdb_flush (gdb_stdout);
323e0a4a
AC
6341 if (type == NULL)
6342 error (_("Type (null) is not a structure or union type"));
6343 else
6344 {
6345 /* XXX: type_sprint */
6346 fprintf_unfiltered (gdb_stderr, _("Type "));
6347 type_print (type, "", gdb_stderr, -1);
6348 error (_(" is not a structure or union type"));
6349 }
76a01679 6350 }
14f9c5c9
AS
6351 }
6352
6353 type = to_static_fixed_type (type);
6354
6355 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6356 {
6357 char *t_field_name = TYPE_FIELD_NAME (type, i);
6358 struct type *t;
6359 int disp;
d2e4a39e 6360
14f9c5c9 6361 if (t_field_name == NULL)
4c4b4cd2 6362 continue;
14f9c5c9
AS
6363
6364 else if (field_name_match (t_field_name, name))
4c4b4cd2
PH
6365 {
6366 if (dispp != NULL)
6367 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
61ee279c 6368 return ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 6369 }
14f9c5c9
AS
6370
6371 else if (ada_is_wrapper_field (type, i))
4c4b4cd2
PH
6372 {
6373 disp = 0;
6374 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
6375 0, 1, &disp);
6376 if (t != NULL)
6377 {
6378 if (dispp != NULL)
6379 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6380 return t;
6381 }
6382 }
14f9c5c9
AS
6383
6384 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
6385 {
6386 int j;
5b4ee69b
MS
6387 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
6388 i));
4c4b4cd2
PH
6389
6390 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
6391 {
b1f33ddd
JB
6392 /* FIXME pnh 2008/01/26: We check for a field that is
6393 NOT wrapped in a struct, since the compiler sometimes
6394 generates these for unchecked variant types. Revisit
6395 if the compiler changes this practice. */
6396 char *v_field_name = TYPE_FIELD_NAME (field_type, j);
4c4b4cd2 6397 disp = 0;
b1f33ddd
JB
6398 if (v_field_name != NULL
6399 && field_name_match (v_field_name, name))
6400 t = ada_check_typedef (TYPE_FIELD_TYPE (field_type, j));
6401 else
6402 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
6403 name, 0, 1, &disp);
6404
4c4b4cd2
PH
6405 if (t != NULL)
6406 {
6407 if (dispp != NULL)
6408 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
6409 return t;
6410 }
6411 }
6412 }
14f9c5c9
AS
6413
6414 }
6415
6416BadName:
d2e4a39e 6417 if (!noerr)
14f9c5c9
AS
6418 {
6419 target_terminal_ours ();
6420 gdb_flush (gdb_stdout);
323e0a4a
AC
6421 if (name == NULL)
6422 {
6423 /* XXX: type_sprint */
6424 fprintf_unfiltered (gdb_stderr, _("Type "));
6425 type_print (type, "", gdb_stderr, -1);
6426 error (_(" has no component named <null>"));
6427 }
6428 else
6429 {
6430 /* XXX: type_sprint */
6431 fprintf_unfiltered (gdb_stderr, _("Type "));
6432 type_print (type, "", gdb_stderr, -1);
6433 error (_(" has no component named %s"), name);
6434 }
14f9c5c9
AS
6435 }
6436
6437 return NULL;
6438}
6439
b1f33ddd
JB
6440/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6441 within a value of type OUTER_TYPE, return true iff VAR_TYPE
6442 represents an unchecked union (that is, the variant part of a
6443 record that is named in an Unchecked_Union pragma). */
6444
6445static int
6446is_unchecked_variant (struct type *var_type, struct type *outer_type)
6447{
6448 char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 6449
b1f33ddd
JB
6450 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1, NULL)
6451 == NULL);
6452}
6453
6454
14f9c5c9
AS
6455/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
6456 within a value of type OUTER_TYPE that is stored in GDB at
4c4b4cd2
PH
6457 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
6458 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 6459
d2e4a39e 6460int
ebf56fd3 6461ada_which_variant_applies (struct type *var_type, struct type *outer_type,
fc1a4b47 6462 const gdb_byte *outer_valaddr)
14f9c5c9
AS
6463{
6464 int others_clause;
6465 int i;
d2e4a39e 6466 char *discrim_name = ada_variant_discrim_name (var_type);
0c281816
JB
6467 struct value *outer;
6468 struct value *discrim;
14f9c5c9
AS
6469 LONGEST discrim_val;
6470
0c281816
JB
6471 outer = value_from_contents_and_address (outer_type, outer_valaddr, 0);
6472 discrim = ada_value_struct_elt (outer, discrim_name, 1);
6473 if (discrim == NULL)
14f9c5c9 6474 return -1;
0c281816 6475 discrim_val = value_as_long (discrim);
14f9c5c9
AS
6476
6477 others_clause = -1;
6478 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
6479 {
6480 if (ada_is_others_clause (var_type, i))
4c4b4cd2 6481 others_clause = i;
14f9c5c9 6482 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 6483 return i;
14f9c5c9
AS
6484 }
6485
6486 return others_clause;
6487}
d2e4a39e 6488\f
14f9c5c9
AS
6489
6490
4c4b4cd2 6491 /* Dynamic-Sized Records */
14f9c5c9
AS
6492
6493/* Strategy: The type ostensibly attached to a value with dynamic size
6494 (i.e., a size that is not statically recorded in the debugging
6495 data) does not accurately reflect the size or layout of the value.
6496 Our strategy is to convert these values to values with accurate,
4c4b4cd2 6497 conventional types that are constructed on the fly. */
14f9c5c9
AS
6498
6499/* There is a subtle and tricky problem here. In general, we cannot
6500 determine the size of dynamic records without its data. However,
6501 the 'struct value' data structure, which GDB uses to represent
6502 quantities in the inferior process (the target), requires the size
6503 of the type at the time of its allocation in order to reserve space
6504 for GDB's internal copy of the data. That's why the
6505 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 6506 rather than struct value*s.
14f9c5c9
AS
6507
6508 However, GDB's internal history variables ($1, $2, etc.) are
6509 struct value*s containing internal copies of the data that are not, in
6510 general, the same as the data at their corresponding addresses in
6511 the target. Fortunately, the types we give to these values are all
6512 conventional, fixed-size types (as per the strategy described
6513 above), so that we don't usually have to perform the
6514 'to_fixed_xxx_type' conversions to look at their values.
6515 Unfortunately, there is one exception: if one of the internal
6516 history variables is an array whose elements are unconstrained
6517 records, then we will need to create distinct fixed types for each
6518 element selected. */
6519
6520/* The upshot of all of this is that many routines take a (type, host
6521 address, target address) triple as arguments to represent a value.
6522 The host address, if non-null, is supposed to contain an internal
6523 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 6524 target at the target address. */
14f9c5c9
AS
6525
6526/* Assuming that VAL0 represents a pointer value, the result of
6527 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 6528 dynamic-sized types. */
14f9c5c9 6529
d2e4a39e
AS
6530struct value *
6531ada_value_ind (struct value *val0)
14f9c5c9 6532{
d2e4a39e 6533 struct value *val = unwrap_value (value_ind (val0));
5b4ee69b 6534
4c4b4cd2 6535 return ada_to_fixed_value (val);
14f9c5c9
AS
6536}
6537
6538/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
6539 qualifiers on VAL0. */
6540
d2e4a39e
AS
6541static struct value *
6542ada_coerce_ref (struct value *val0)
6543{
df407dfe 6544 if (TYPE_CODE (value_type (val0)) == TYPE_CODE_REF)
d2e4a39e
AS
6545 {
6546 struct value *val = val0;
5b4ee69b 6547
994b9211 6548 val = coerce_ref (val);
d2e4a39e 6549 val = unwrap_value (val);
4c4b4cd2 6550 return ada_to_fixed_value (val);
d2e4a39e
AS
6551 }
6552 else
14f9c5c9
AS
6553 return val0;
6554}
6555
6556/* Return OFF rounded upward if necessary to a multiple of
4c4b4cd2 6557 ALIGNMENT (a power of 2). */
14f9c5c9
AS
6558
6559static unsigned int
ebf56fd3 6560align_value (unsigned int off, unsigned int alignment)
14f9c5c9
AS
6561{
6562 return (off + alignment - 1) & ~(alignment - 1);
6563}
6564
4c4b4cd2 6565/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
6566
6567static unsigned int
ebf56fd3 6568field_alignment (struct type *type, int f)
14f9c5c9 6569{
d2e4a39e 6570 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 6571 int len;
14f9c5c9
AS
6572 int align_offset;
6573
64a1bf19
JB
6574 /* The field name should never be null, unless the debugging information
6575 is somehow malformed. In this case, we assume the field does not
6576 require any alignment. */
6577 if (name == NULL)
6578 return 1;
6579
6580 len = strlen (name);
6581
4c4b4cd2
PH
6582 if (!isdigit (name[len - 1]))
6583 return 1;
14f9c5c9 6584
d2e4a39e 6585 if (isdigit (name[len - 2]))
14f9c5c9
AS
6586 align_offset = len - 2;
6587 else
6588 align_offset = len - 1;
6589
4c4b4cd2 6590 if (align_offset < 7 || strncmp ("___XV", name + align_offset - 6, 5) != 0)
14f9c5c9
AS
6591 return TARGET_CHAR_BIT;
6592
4c4b4cd2
PH
6593 return atoi (name + align_offset) * TARGET_CHAR_BIT;
6594}
6595
6596/* Find a symbol named NAME. Ignores ambiguity. */
6597
6598struct symbol *
6599ada_find_any_symbol (const char *name)
6600{
6601 struct symbol *sym;
6602
6603 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
6604 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6605 return sym;
6606
6607 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
6608 return sym;
14f9c5c9
AS
6609}
6610
dddfab26
UW
6611/* Find a type named NAME. Ignores ambiguity. This routine will look
6612 solely for types defined by debug info, it will not search the GDB
6613 primitive types. */
4c4b4cd2 6614
d2e4a39e 6615struct type *
ebf56fd3 6616ada_find_any_type (const char *name)
14f9c5c9 6617{
4c4b4cd2 6618 struct symbol *sym = ada_find_any_symbol (name);
14f9c5c9 6619
14f9c5c9 6620 if (sym != NULL)
dddfab26 6621 return SYMBOL_TYPE (sym);
14f9c5c9 6622
dddfab26 6623 return NULL;
14f9c5c9
AS
6624}
6625
aeb5907d
JB
6626/* Given NAME and an associated BLOCK, search all symbols for
6627 NAME suffixed with "___XR", which is the ``renaming'' symbol
4c4b4cd2
PH
6628 associated to NAME. Return this symbol if found, return
6629 NULL otherwise. */
6630
6631struct symbol *
6632ada_find_renaming_symbol (const char *name, struct block *block)
aeb5907d
JB
6633{
6634 struct symbol *sym;
6635
6636 sym = find_old_style_renaming_symbol (name, block);
6637
6638 if (sym != NULL)
6639 return sym;
6640
6641 /* Not right yet. FIXME pnh 7/20/2007. */
6642 sym = ada_find_any_symbol (name);
6643 if (sym != NULL && strstr (SYMBOL_LINKAGE_NAME (sym), "___XR") != NULL)
6644 return sym;
6645 else
6646 return NULL;
6647}
6648
6649static struct symbol *
6650find_old_style_renaming_symbol (const char *name, struct block *block)
4c4b4cd2 6651{
7f0df278 6652 const struct symbol *function_sym = block_linkage_function (block);
4c4b4cd2
PH
6653 char *rename;
6654
6655 if (function_sym != NULL)
6656 {
6657 /* If the symbol is defined inside a function, NAME is not fully
6658 qualified. This means we need to prepend the function name
6659 as well as adding the ``___XR'' suffix to build the name of
6660 the associated renaming symbol. */
6661 char *function_name = SYMBOL_LINKAGE_NAME (function_sym);
529cad9c
PH
6662 /* Function names sometimes contain suffixes used
6663 for instance to qualify nested subprograms. When building
6664 the XR type name, we need to make sure that this suffix is
6665 not included. So do not include any suffix in the function
6666 name length below. */
69fadcdf 6667 int function_name_len = ada_name_prefix_len (function_name);
76a01679
JB
6668 const int rename_len = function_name_len + 2 /* "__" */
6669 + strlen (name) + 6 /* "___XR\0" */ ;
4c4b4cd2 6670
529cad9c 6671 /* Strip the suffix if necessary. */
69fadcdf
JB
6672 ada_remove_trailing_digits (function_name, &function_name_len);
6673 ada_remove_po_subprogram_suffix (function_name, &function_name_len);
6674 ada_remove_Xbn_suffix (function_name, &function_name_len);
529cad9c 6675
4c4b4cd2
PH
6676 /* Library-level functions are a special case, as GNAT adds
6677 a ``_ada_'' prefix to the function name to avoid namespace
aeb5907d 6678 pollution. However, the renaming symbols themselves do not
4c4b4cd2
PH
6679 have this prefix, so we need to skip this prefix if present. */
6680 if (function_name_len > 5 /* "_ada_" */
6681 && strstr (function_name, "_ada_") == function_name)
69fadcdf
JB
6682 {
6683 function_name += 5;
6684 function_name_len -= 5;
6685 }
4c4b4cd2
PH
6686
6687 rename = (char *) alloca (rename_len * sizeof (char));
69fadcdf
JB
6688 strncpy (rename, function_name, function_name_len);
6689 xsnprintf (rename + function_name_len, rename_len - function_name_len,
6690 "__%s___XR", name);
4c4b4cd2
PH
6691 }
6692 else
6693 {
6694 const int rename_len = strlen (name) + 6;
5b4ee69b 6695
4c4b4cd2 6696 rename = (char *) alloca (rename_len * sizeof (char));
88c15c34 6697 xsnprintf (rename, rename_len * sizeof (char), "%s___XR", name);
4c4b4cd2
PH
6698 }
6699
6700 return ada_find_any_symbol (rename);
6701}
6702
14f9c5c9 6703/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 6704 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 6705 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
6706 otherwise return 0. */
6707
14f9c5c9 6708int
d2e4a39e 6709ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
6710{
6711 if (type1 == NULL)
6712 return 1;
6713 else if (type0 == NULL)
6714 return 0;
6715 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6716 return 1;
6717 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6718 return 0;
4c4b4cd2
PH
6719 else if (TYPE_NAME (type1) == NULL && TYPE_NAME (type0) != NULL)
6720 return 1;
ad82864c 6721 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 6722 return 1;
4c4b4cd2
PH
6723 else if (ada_is_array_descriptor_type (type0)
6724 && !ada_is_array_descriptor_type (type1))
14f9c5c9 6725 return 1;
aeb5907d
JB
6726 else
6727 {
6728 const char *type0_name = type_name_no_tag (type0);
6729 const char *type1_name = type_name_no_tag (type1);
6730
6731 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
6732 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
6733 return 1;
6734 }
14f9c5c9
AS
6735 return 0;
6736}
6737
6738/* The name of TYPE, which is either its TYPE_NAME, or, if that is
4c4b4cd2
PH
6739 null, its TYPE_TAG_NAME. Null if TYPE is null. */
6740
d2e4a39e
AS
6741char *
6742ada_type_name (struct type *type)
14f9c5c9 6743{
d2e4a39e 6744 if (type == NULL)
14f9c5c9
AS
6745 return NULL;
6746 else if (TYPE_NAME (type) != NULL)
6747 return TYPE_NAME (type);
6748 else
6749 return TYPE_TAG_NAME (type);
6750}
6751
b4ba55a1
JB
6752/* Search the list of "descriptive" types associated to TYPE for a type
6753 whose name is NAME. */
6754
6755static struct type *
6756find_parallel_type_by_descriptive_type (struct type *type, const char *name)
6757{
6758 struct type *result;
6759
6760 /* If there no descriptive-type info, then there is no parallel type
6761 to be found. */
6762 if (!HAVE_GNAT_AUX_INFO (type))
6763 return NULL;
6764
6765 result = TYPE_DESCRIPTIVE_TYPE (type);
6766 while (result != NULL)
6767 {
6768 char *result_name = ada_type_name (result);
6769
6770 if (result_name == NULL)
6771 {
6772 warning (_("unexpected null name on descriptive type"));
6773 return NULL;
6774 }
6775
6776 /* If the names match, stop. */
6777 if (strcmp (result_name, name) == 0)
6778 break;
6779
6780 /* Otherwise, look at the next item on the list, if any. */
6781 if (HAVE_GNAT_AUX_INFO (result))
6782 result = TYPE_DESCRIPTIVE_TYPE (result);
6783 else
6784 result = NULL;
6785 }
6786
6787 /* If we didn't find a match, see whether this is a packed array. With
6788 older compilers, the descriptive type information is either absent or
6789 irrelevant when it comes to packed arrays so the above lookup fails.
6790 Fall back to using a parallel lookup by name in this case. */
12ab9e09 6791 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
6792 return ada_find_any_type (name);
6793
6794 return result;
6795}
6796
6797/* Find a parallel type to TYPE with the specified NAME, using the
6798 descriptive type taken from the debugging information, if available,
6799 and otherwise using the (slower) name-based method. */
6800
6801static struct type *
6802ada_find_parallel_type_with_name (struct type *type, const char *name)
6803{
6804 struct type *result = NULL;
6805
6806 if (HAVE_GNAT_AUX_INFO (type))
6807 result = find_parallel_type_by_descriptive_type (type, name);
6808 else
6809 result = ada_find_any_type (name);
6810
6811 return result;
6812}
6813
6814/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 6815 SUFFIX to the name of TYPE. */
14f9c5c9 6816
d2e4a39e 6817struct type *
ebf56fd3 6818ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 6819{
b4ba55a1 6820 char *name, *typename = ada_type_name (type);
14f9c5c9 6821 int len;
d2e4a39e 6822
14f9c5c9
AS
6823 if (typename == NULL)
6824 return NULL;
6825
6826 len = strlen (typename);
6827
b4ba55a1 6828 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9
AS
6829
6830 strcpy (name, typename);
6831 strcpy (name + len, suffix);
6832
b4ba55a1 6833 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
6834}
6835
14f9c5c9 6836/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 6837 type describing its fields. Otherwise, return NULL. */
14f9c5c9 6838
d2e4a39e
AS
6839static struct type *
6840dynamic_template_type (struct type *type)
14f9c5c9 6841{
61ee279c 6842 type = ada_check_typedef (type);
14f9c5c9
AS
6843
6844 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
d2e4a39e 6845 || ada_type_name (type) == NULL)
14f9c5c9 6846 return NULL;
d2e4a39e 6847 else
14f9c5c9
AS
6848 {
6849 int len = strlen (ada_type_name (type));
5b4ee69b 6850
4c4b4cd2
PH
6851 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
6852 return type;
14f9c5c9 6853 else
4c4b4cd2 6854 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
6855 }
6856}
6857
6858/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 6859 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 6860
d2e4a39e
AS
6861static int
6862is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
6863{
6864 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 6865
d2e4a39e 6866 return name != NULL
14f9c5c9
AS
6867 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6868 && strstr (name, "___XVL") != NULL;
6869}
6870
4c4b4cd2
PH
6871/* The index of the variant field of TYPE, or -1 if TYPE does not
6872 represent a variant record type. */
14f9c5c9 6873
d2e4a39e 6874static int
4c4b4cd2 6875variant_field_index (struct type *type)
14f9c5c9
AS
6876{
6877 int f;
6878
4c4b4cd2
PH
6879 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
6880 return -1;
6881
6882 for (f = 0; f < TYPE_NFIELDS (type); f += 1)
6883 {
6884 if (ada_is_variant_part (type, f))
6885 return f;
6886 }
6887 return -1;
14f9c5c9
AS
6888}
6889
4c4b4cd2
PH
6890/* A record type with no fields. */
6891
d2e4a39e 6892static struct type *
e9bb382b 6893empty_record (struct type *template)
14f9c5c9 6894{
e9bb382b 6895 struct type *type = alloc_type_copy (template);
5b4ee69b 6896
14f9c5c9
AS
6897 TYPE_CODE (type) = TYPE_CODE_STRUCT;
6898 TYPE_NFIELDS (type) = 0;
6899 TYPE_FIELDS (type) = NULL;
b1f33ddd 6900 INIT_CPLUS_SPECIFIC (type);
14f9c5c9
AS
6901 TYPE_NAME (type) = "<empty>";
6902 TYPE_TAG_NAME (type) = NULL;
14f9c5c9
AS
6903 TYPE_LENGTH (type) = 0;
6904 return type;
6905}
6906
6907/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
6908 the value of type TYPE at VALADDR or ADDRESS (see comments at
6909 the beginning of this section) VAL according to GNAT conventions.
6910 DVAL0 should describe the (portion of a) record that contains any
df407dfe 6911 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
6912 an outer-level type (i.e., as opposed to a branch of a variant.) A
6913 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 6914 of the variant.
14f9c5c9 6915
4c4b4cd2
PH
6916 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
6917 length are not statically known are discarded. As a consequence,
6918 VALADDR, ADDRESS and DVAL0 are ignored.
6919
6920 NOTE: Limitations: For now, we assume that dynamic fields and
6921 variants occupy whole numbers of bytes. However, they need not be
6922 byte-aligned. */
6923
6924struct type *
10a2c479 6925ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 6926 const gdb_byte *valaddr,
4c4b4cd2
PH
6927 CORE_ADDR address, struct value *dval0,
6928 int keep_dynamic_fields)
14f9c5c9 6929{
d2e4a39e
AS
6930 struct value *mark = value_mark ();
6931 struct value *dval;
6932 struct type *rtype;
14f9c5c9 6933 int nfields, bit_len;
4c4b4cd2 6934 int variant_field;
14f9c5c9 6935 long off;
4c4b4cd2 6936 int fld_bit_len, bit_incr;
14f9c5c9
AS
6937 int f;
6938
4c4b4cd2
PH
6939 /* Compute the number of fields in this record type that are going
6940 to be processed: unless keep_dynamic_fields, this includes only
6941 fields whose position and length are static will be processed. */
6942 if (keep_dynamic_fields)
6943 nfields = TYPE_NFIELDS (type);
6944 else
6945 {
6946 nfields = 0;
76a01679 6947 while (nfields < TYPE_NFIELDS (type)
4c4b4cd2
PH
6948 && !ada_is_variant_part (type, nfields)
6949 && !is_dynamic_field (type, nfields))
6950 nfields++;
6951 }
6952
e9bb382b 6953 rtype = alloc_type_copy (type);
14f9c5c9
AS
6954 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6955 INIT_CPLUS_SPECIFIC (rtype);
6956 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e 6957 TYPE_FIELDS (rtype) = (struct field *)
14f9c5c9
AS
6958 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6959 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6960 TYPE_NAME (rtype) = ada_type_name (type);
6961 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 6962 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 6963
d2e4a39e
AS
6964 off = 0;
6965 bit_len = 0;
4c4b4cd2
PH
6966 variant_field = -1;
6967
14f9c5c9
AS
6968 for (f = 0; f < nfields; f += 1)
6969 {
6c038f32
PH
6970 off = align_value (off, field_alignment (type, f))
6971 + TYPE_FIELD_BITPOS (type, f);
14f9c5c9 6972 TYPE_FIELD_BITPOS (rtype, f) = off;
d2e4a39e 6973 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 6974
d2e4a39e 6975 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
6976 {
6977 variant_field = f;
6978 fld_bit_len = bit_incr = 0;
6979 }
14f9c5c9 6980 else if (is_dynamic_field (type, f))
4c4b4cd2 6981 {
284614f0
JB
6982 const gdb_byte *field_valaddr = valaddr;
6983 CORE_ADDR field_address = address;
6984 struct type *field_type =
6985 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
6986
4c4b4cd2 6987 if (dval0 == NULL)
b5304971
JG
6988 {
6989 /* rtype's length is computed based on the run-time
6990 value of discriminants. If the discriminants are not
6991 initialized, the type size may be completely bogus and
6992 GDB may fail to allocate a value for it. So check the
6993 size first before creating the value. */
6994 check_size (rtype);
6995 dval = value_from_contents_and_address (rtype, valaddr, address);
6996 }
4c4b4cd2
PH
6997 else
6998 dval = dval0;
6999
284614f0
JB
7000 /* If the type referenced by this field is an aligner type, we need
7001 to unwrap that aligner type, because its size might not be set.
7002 Keeping the aligner type would cause us to compute the wrong
7003 size for this field, impacting the offset of the all the fields
7004 that follow this one. */
7005 if (ada_is_aligner_type (field_type))
7006 {
7007 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7008
7009 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7010 field_address = cond_offset_target (field_address, field_offset);
7011 field_type = ada_aligned_type (field_type);
7012 }
7013
7014 field_valaddr = cond_offset_host (field_valaddr,
7015 off / TARGET_CHAR_BIT);
7016 field_address = cond_offset_target (field_address,
7017 off / TARGET_CHAR_BIT);
7018
7019 /* Get the fixed type of the field. Note that, in this case,
7020 we do not want to get the real type out of the tag: if
7021 the current field is the parent part of a tagged record,
7022 we will get the tag of the object. Clearly wrong: the real
7023 type of the parent is not the real type of the child. We
7024 would end up in an infinite loop. */
7025 field_type = ada_get_base_type (field_type);
7026 field_type = ada_to_fixed_type (field_type, field_valaddr,
7027 field_address, dval, 0);
7028
7029 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2
PH
7030 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7031 bit_incr = fld_bit_len =
7032 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
7033 }
14f9c5c9 7034 else
4c4b4cd2 7035 {
9f0dec2d
JB
7036 struct type *field_type = TYPE_FIELD_TYPE (type, f);
7037
7038 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2
PH
7039 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7040 if (TYPE_FIELD_BITSIZE (type, f) > 0)
7041 bit_incr = fld_bit_len =
7042 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7043 else
7044 bit_incr = fld_bit_len =
9f0dec2d 7045 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
4c4b4cd2 7046 }
14f9c5c9 7047 if (off + fld_bit_len > bit_len)
4c4b4cd2 7048 bit_len = off + fld_bit_len;
14f9c5c9 7049 off += bit_incr;
4c4b4cd2
PH
7050 TYPE_LENGTH (rtype) =
7051 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7052 }
4c4b4cd2
PH
7053
7054 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7055 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7056 the record. This can happen in the presence of representation
7057 clauses. */
7058 if (variant_field >= 0)
7059 {
7060 struct type *branch_type;
7061
7062 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7063
7064 if (dval0 == NULL)
7065 dval = value_from_contents_and_address (rtype, valaddr, address);
7066 else
7067 dval = dval0;
7068
7069 branch_type =
7070 to_fixed_variant_branch_type
7071 (TYPE_FIELD_TYPE (type, variant_field),
7072 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7073 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
7074 if (branch_type == NULL)
7075 {
7076 for (f = variant_field + 1; f < TYPE_NFIELDS (rtype); f += 1)
7077 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
7078 TYPE_NFIELDS (rtype) -= 1;
7079 }
7080 else
7081 {
7082 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7083 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7084 fld_bit_len =
7085 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
7086 TARGET_CHAR_BIT;
7087 if (off + fld_bit_len > bit_len)
7088 bit_len = off + fld_bit_len;
7089 TYPE_LENGTH (rtype) =
7090 align_value (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7091 }
7092 }
7093
714e53ab
PH
7094 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7095 should contain the alignment of that record, which should be a strictly
7096 positive value. If null or negative, then something is wrong, most
7097 probably in the debug info. In that case, we don't round up the size
7098 of the resulting type. If this record is not part of another structure,
7099 the current RTYPE length might be good enough for our purposes. */
7100 if (TYPE_LENGTH (type) <= 0)
7101 {
323e0a4a
AC
7102 if (TYPE_NAME (rtype))
7103 warning (_("Invalid type size for `%s' detected: %d."),
7104 TYPE_NAME (rtype), TYPE_LENGTH (type));
7105 else
7106 warning (_("Invalid type size for <unnamed> detected: %d."),
7107 TYPE_LENGTH (type));
714e53ab
PH
7108 }
7109 else
7110 {
7111 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype),
7112 TYPE_LENGTH (type));
7113 }
14f9c5c9
AS
7114
7115 value_free_to_mark (mark);
d2e4a39e 7116 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 7117 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7118 return rtype;
7119}
7120
4c4b4cd2
PH
7121/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7122 of 1. */
14f9c5c9 7123
d2e4a39e 7124static struct type *
fc1a4b47 7125template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
7126 CORE_ADDR address, struct value *dval0)
7127{
7128 return ada_template_to_fixed_record_type_1 (type, valaddr,
7129 address, dval0, 1);
7130}
7131
7132/* An ordinary record type in which ___XVL-convention fields and
7133 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7134 static approximations, containing all possible fields. Uses
7135 no runtime values. Useless for use in values, but that's OK,
7136 since the results are used only for type determinations. Works on both
7137 structs and unions. Representation note: to save space, we memorize
7138 the result of this function in the TYPE_TARGET_TYPE of the
7139 template type. */
7140
7141static struct type *
7142template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
7143{
7144 struct type *type;
7145 int nfields;
7146 int f;
7147
4c4b4cd2
PH
7148 if (TYPE_TARGET_TYPE (type0) != NULL)
7149 return TYPE_TARGET_TYPE (type0);
7150
7151 nfields = TYPE_NFIELDS (type0);
7152 type = type0;
14f9c5c9
AS
7153
7154 for (f = 0; f < nfields; f += 1)
7155 {
61ee279c 7156 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type0, f));
4c4b4cd2 7157 struct type *new_type;
14f9c5c9 7158
4c4b4cd2
PH
7159 if (is_dynamic_field (type0, f))
7160 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
14f9c5c9 7161 else
f192137b 7162 new_type = static_unwrap_type (field_type);
4c4b4cd2
PH
7163 if (type == type0 && new_type != field_type)
7164 {
e9bb382b 7165 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
4c4b4cd2
PH
7166 TYPE_CODE (type) = TYPE_CODE (type0);
7167 INIT_CPLUS_SPECIFIC (type);
7168 TYPE_NFIELDS (type) = nfields;
7169 TYPE_FIELDS (type) = (struct field *)
7170 TYPE_ALLOC (type, nfields * sizeof (struct field));
7171 memcpy (TYPE_FIELDS (type), TYPE_FIELDS (type0),
7172 sizeof (struct field) * nfields);
7173 TYPE_NAME (type) = ada_type_name (type0);
7174 TYPE_TAG_NAME (type) = NULL;
876cecd0 7175 TYPE_FIXED_INSTANCE (type) = 1;
4c4b4cd2
PH
7176 TYPE_LENGTH (type) = 0;
7177 }
7178 TYPE_FIELD_TYPE (type, f) = new_type;
7179 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
14f9c5c9 7180 }
14f9c5c9
AS
7181 return type;
7182}
7183
4c4b4cd2 7184/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
7185 whose address in memory is ADDRESS, returns a revision of TYPE,
7186 which should be a non-dynamic-sized record, in which the variant
7187 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
7188 for discriminant values in DVAL0, which can be NULL if the record
7189 contains the necessary discriminant values. */
7190
d2e4a39e 7191static struct type *
fc1a4b47 7192to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 7193 CORE_ADDR address, struct value *dval0)
14f9c5c9 7194{
d2e4a39e 7195 struct value *mark = value_mark ();
4c4b4cd2 7196 struct value *dval;
d2e4a39e 7197 struct type *rtype;
14f9c5c9
AS
7198 struct type *branch_type;
7199 int nfields = TYPE_NFIELDS (type);
4c4b4cd2 7200 int variant_field = variant_field_index (type);
14f9c5c9 7201
4c4b4cd2 7202 if (variant_field == -1)
14f9c5c9
AS
7203 return type;
7204
4c4b4cd2
PH
7205 if (dval0 == NULL)
7206 dval = value_from_contents_and_address (type, valaddr, address);
7207 else
7208 dval = dval0;
7209
e9bb382b 7210 rtype = alloc_type_copy (type);
14f9c5c9 7211 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
4c4b4cd2
PH
7212 INIT_CPLUS_SPECIFIC (rtype);
7213 TYPE_NFIELDS (rtype) = nfields;
d2e4a39e
AS
7214 TYPE_FIELDS (rtype) =
7215 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
7216 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
4c4b4cd2 7217 sizeof (struct field) * nfields);
14f9c5c9
AS
7218 TYPE_NAME (rtype) = ada_type_name (type);
7219 TYPE_TAG_NAME (rtype) = NULL;
876cecd0 7220 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
7221 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
7222
4c4b4cd2
PH
7223 branch_type = to_fixed_variant_branch_type
7224 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 7225 cond_offset_host (valaddr,
4c4b4cd2
PH
7226 TYPE_FIELD_BITPOS (type, variant_field)
7227 / TARGET_CHAR_BIT),
d2e4a39e 7228 cond_offset_target (address,
4c4b4cd2
PH
7229 TYPE_FIELD_BITPOS (type, variant_field)
7230 / TARGET_CHAR_BIT), dval);
d2e4a39e 7231 if (branch_type == NULL)
14f9c5c9 7232 {
4c4b4cd2 7233 int f;
5b4ee69b 7234
4c4b4cd2
PH
7235 for (f = variant_field + 1; f < nfields; f += 1)
7236 TYPE_FIELDS (rtype)[f - 1] = TYPE_FIELDS (rtype)[f];
14f9c5c9 7237 TYPE_NFIELDS (rtype) -= 1;
14f9c5c9
AS
7238 }
7239 else
7240 {
4c4b4cd2
PH
7241 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
7242 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7243 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 7244 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 7245 }
4c4b4cd2 7246 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 7247
4c4b4cd2 7248 value_free_to_mark (mark);
14f9c5c9
AS
7249 return rtype;
7250}
7251
7252/* An ordinary record type (with fixed-length fields) that describes
7253 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
7254 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
7255 should be in DVAL, a record value; it may be NULL if the object
7256 at ADDR itself contains any necessary discriminant values.
7257 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
7258 values from the record are needed. Except in the case that DVAL,
7259 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
7260 unchecked) is replaced by a particular branch of the variant.
7261
7262 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
7263 is questionable and may be removed. It can arise during the
7264 processing of an unconstrained-array-of-record type where all the
7265 variant branches have exactly the same size. This is because in
7266 such cases, the compiler does not bother to use the XVS convention
7267 when encoding the record. I am currently dubious of this
7268 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 7269
d2e4a39e 7270static struct type *
fc1a4b47 7271to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 7272 CORE_ADDR address, struct value *dval)
14f9c5c9 7273{
d2e4a39e 7274 struct type *templ_type;
14f9c5c9 7275
876cecd0 7276 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
7277 return type0;
7278
d2e4a39e 7279 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
7280
7281 if (templ_type != NULL)
7282 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
7283 else if (variant_field_index (type0) >= 0)
7284 {
7285 if (dval == NULL && valaddr == NULL && address == 0)
7286 return type0;
7287 return to_record_with_fixed_variant_part (type0, valaddr, address,
7288 dval);
7289 }
14f9c5c9
AS
7290 else
7291 {
876cecd0 7292 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
7293 return type0;
7294 }
7295
7296}
7297
7298/* An ordinary record type (with fixed-length fields) that describes
7299 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
7300 union type. Any necessary discriminants' values should be in DVAL,
7301 a record value. That is, this routine selects the appropriate
7302 branch of the union at ADDR according to the discriminant value
b1f33ddd
JB
7303 indicated in the union's type name. Returns VAR_TYPE0 itself if
7304 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 7305
d2e4a39e 7306static struct type *
fc1a4b47 7307to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 7308 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
7309{
7310 int which;
d2e4a39e
AS
7311 struct type *templ_type;
7312 struct type *var_type;
14f9c5c9
AS
7313
7314 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
7315 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 7316 else
14f9c5c9
AS
7317 var_type = var_type0;
7318
7319 templ_type = ada_find_parallel_type (var_type, "___XVU");
7320
7321 if (templ_type != NULL)
7322 var_type = templ_type;
7323
b1f33ddd
JB
7324 if (is_unchecked_variant (var_type, value_type (dval)))
7325 return var_type0;
d2e4a39e
AS
7326 which =
7327 ada_which_variant_applies (var_type,
0fd88904 7328 value_type (dval), value_contents (dval));
14f9c5c9
AS
7329
7330 if (which < 0)
e9bb382b 7331 return empty_record (var_type);
14f9c5c9 7332 else if (is_dynamic_field (var_type, which))
4c4b4cd2 7333 return to_fixed_record_type
d2e4a39e
AS
7334 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
7335 valaddr, address, dval);
4c4b4cd2 7336 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
7337 return
7338 to_fixed_record_type
7339 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
7340 else
7341 return TYPE_FIELD_TYPE (var_type, which);
7342}
7343
7344/* Assuming that TYPE0 is an array type describing the type of a value
7345 at ADDR, and that DVAL describes a record containing any
7346 discriminants used in TYPE0, returns a type for the value that
7347 contains no dynamic components (that is, no components whose sizes
7348 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
7349 true, gives an error message if the resulting type's size is over
4c4b4cd2 7350 varsize_limit. */
14f9c5c9 7351
d2e4a39e
AS
7352static struct type *
7353to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 7354 int ignore_too_big)
14f9c5c9 7355{
d2e4a39e
AS
7356 struct type *index_type_desc;
7357 struct type *result;
ad82864c 7358 int constrained_packed_array_p;
14f9c5c9 7359
284614f0 7360 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 7361 return type0;
14f9c5c9 7362
ad82864c
JB
7363 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
7364 if (constrained_packed_array_p)
7365 type0 = decode_constrained_packed_array_type (type0);
284614f0 7366
14f9c5c9 7367 index_type_desc = ada_find_parallel_type (type0, "___XA");
28c85d6c 7368 ada_fixup_array_indexes_type (index_type_desc);
14f9c5c9
AS
7369 if (index_type_desc == NULL)
7370 {
61ee279c 7371 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 7372
14f9c5c9 7373 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
7374 depend on the contents of the array in properly constructed
7375 debugging data. */
529cad9c
PH
7376 /* Create a fixed version of the array element type.
7377 We're not providing the address of an element here,
e1d5a0d2 7378 and thus the actual object value cannot be inspected to do
529cad9c
PH
7379 the conversion. This should not be a problem, since arrays of
7380 unconstrained objects are not allowed. In particular, all
7381 the elements of an array of a tagged type should all be of
7382 the same type specified in the debugging info. No need to
7383 consult the object tag. */
1ed6ede0 7384 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 7385
284614f0
JB
7386 /* Make sure we always create a new array type when dealing with
7387 packed array types, since we're going to fix-up the array
7388 type length and element bitsize a little further down. */
ad82864c 7389 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 7390 result = type0;
14f9c5c9 7391 else
e9bb382b 7392 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 7393 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
7394 }
7395 else
7396 {
7397 int i;
7398 struct type *elt_type0;
7399
7400 elt_type0 = type0;
7401 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
4c4b4cd2 7402 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
7403
7404 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
7405 depend on the contents of the array in properly constructed
7406 debugging data. */
529cad9c
PH
7407 /* Create a fixed version of the array element type.
7408 We're not providing the address of an element here,
e1d5a0d2 7409 and thus the actual object value cannot be inspected to do
529cad9c
PH
7410 the conversion. This should not be a problem, since arrays of
7411 unconstrained objects are not allowed. In particular, all
7412 the elements of an array of a tagged type should all be of
7413 the same type specified in the debugging info. No need to
7414 consult the object tag. */
1ed6ede0
JB
7415 result =
7416 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
7417
7418 elt_type0 = type0;
14f9c5c9 7419 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
4c4b4cd2
PH
7420 {
7421 struct type *range_type =
28c85d6c 7422 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 7423
e9bb382b 7424 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 7425 result, range_type);
1ce677a4 7426 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 7427 }
d2e4a39e 7428 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 7429 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7430 }
7431
ad82864c 7432 if (constrained_packed_array_p)
284614f0
JB
7433 {
7434 /* So far, the resulting type has been created as if the original
7435 type was a regular (non-packed) array type. As a result, the
7436 bitsize of the array elements needs to be set again, and the array
7437 length needs to be recomputed based on that bitsize. */
7438 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
7439 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
7440
7441 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
7442 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
7443 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
7444 TYPE_LENGTH (result)++;
7445 }
7446
876cecd0 7447 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 7448 return result;
d2e4a39e 7449}
14f9c5c9
AS
7450
7451
7452/* A standard type (containing no dynamically sized components)
7453 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
7454 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 7455 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
7456 ADDRESS or in VALADDR contains these discriminants.
7457
1ed6ede0
JB
7458 If CHECK_TAG is not null, in the case of tagged types, this function
7459 attempts to locate the object's tag and use it to compute the actual
7460 type. However, when ADDRESS is null, we cannot use it to determine the
7461 location of the tag, and therefore compute the tagged type's actual type.
7462 So we return the tagged type without consulting the tag. */
529cad9c 7463
f192137b
JB
7464static struct type *
7465ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 7466 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 7467{
61ee279c 7468 type = ada_check_typedef (type);
d2e4a39e
AS
7469 switch (TYPE_CODE (type))
7470 {
7471 default:
14f9c5c9 7472 return type;
d2e4a39e 7473 case TYPE_CODE_STRUCT:
4c4b4cd2 7474 {
76a01679 7475 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
7476 struct type *fixed_record_type =
7477 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 7478
529cad9c
PH
7479 /* If STATIC_TYPE is a tagged type and we know the object's address,
7480 then we can determine its tag, and compute the object's actual
1ed6ede0
JB
7481 type from there. Note that we have to use the fixed record
7482 type (the parent part of the record may have dynamic fields
7483 and the way the location of _tag is expressed may depend on
7484 them). */
529cad9c 7485
1ed6ede0 7486 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679
JB
7487 {
7488 struct type *real_type =
1ed6ede0
JB
7489 type_from_tag (value_tag_from_contents_and_address
7490 (fixed_record_type,
7491 valaddr,
7492 address));
5b4ee69b 7493
76a01679 7494 if (real_type != NULL)
1ed6ede0 7495 return to_fixed_record_type (real_type, valaddr, address, NULL);
76a01679 7496 }
4af88198
JB
7497
7498 /* Check to see if there is a parallel ___XVZ variable.
7499 If there is, then it provides the actual size of our type. */
7500 else if (ada_type_name (fixed_record_type) != NULL)
7501 {
7502 char *name = ada_type_name (fixed_record_type);
7503 char *xvz_name = alloca (strlen (name) + 7 /* "___XVZ\0" */);
7504 int xvz_found = 0;
7505 LONGEST size;
7506
88c15c34 7507 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
4af88198
JB
7508 size = get_int_var_value (xvz_name, &xvz_found);
7509 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
7510 {
7511 fixed_record_type = copy_type (fixed_record_type);
7512 TYPE_LENGTH (fixed_record_type) = size;
7513
7514 /* The FIXED_RECORD_TYPE may have be a stub. We have
7515 observed this when the debugging info is STABS, and
7516 apparently it is something that is hard to fix.
7517
7518 In practice, we don't need the actual type definition
7519 at all, because the presence of the XVZ variable allows us
7520 to assume that there must be a XVS type as well, which we
7521 should be able to use later, when we need the actual type
7522 definition.
7523
7524 In the meantime, pretend that the "fixed" type we are
7525 returning is NOT a stub, because this can cause trouble
7526 when using this type to create new types targeting it.
7527 Indeed, the associated creation routines often check
7528 whether the target type is a stub and will try to replace
7529 it, thus using a type with the wrong size. This, in turn,
7530 might cause the new type to have the wrong size too.
7531 Consider the case of an array, for instance, where the size
7532 of the array is computed from the number of elements in
7533 our array multiplied by the size of its element. */
7534 TYPE_STUB (fixed_record_type) = 0;
7535 }
7536 }
1ed6ede0 7537 return fixed_record_type;
4c4b4cd2 7538 }
d2e4a39e 7539 case TYPE_CODE_ARRAY:
4c4b4cd2 7540 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
7541 case TYPE_CODE_UNION:
7542 if (dval == NULL)
4c4b4cd2 7543 return type;
d2e4a39e 7544 else
4c4b4cd2 7545 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 7546 }
14f9c5c9
AS
7547}
7548
f192137b
JB
7549/* The same as ada_to_fixed_type_1, except that it preserves the type
7550 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
7551 ada_to_fixed_type_1 would return the type referenced by TYPE. */
7552
7553struct type *
7554ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
7555 CORE_ADDR address, struct value *dval, int check_tag)
7556
7557{
7558 struct type *fixed_type =
7559 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
7560
7561 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
7562 && TYPE_TARGET_TYPE (type) == fixed_type)
7563 return type;
7564
7565 return fixed_type;
7566}
7567
14f9c5c9 7568/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 7569 TYPE0, but based on no runtime data. */
14f9c5c9 7570
d2e4a39e
AS
7571static struct type *
7572to_static_fixed_type (struct type *type0)
14f9c5c9 7573{
d2e4a39e 7574 struct type *type;
14f9c5c9
AS
7575
7576 if (type0 == NULL)
7577 return NULL;
7578
876cecd0 7579 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
7580 return type0;
7581
61ee279c 7582 type0 = ada_check_typedef (type0);
d2e4a39e 7583
14f9c5c9
AS
7584 switch (TYPE_CODE (type0))
7585 {
7586 default:
7587 return type0;
7588 case TYPE_CODE_STRUCT:
7589 type = dynamic_template_type (type0);
d2e4a39e 7590 if (type != NULL)
4c4b4cd2
PH
7591 return template_to_static_fixed_type (type);
7592 else
7593 return template_to_static_fixed_type (type0);
14f9c5c9
AS
7594 case TYPE_CODE_UNION:
7595 type = ada_find_parallel_type (type0, "___XVU");
7596 if (type != NULL)
4c4b4cd2
PH
7597 return template_to_static_fixed_type (type);
7598 else
7599 return template_to_static_fixed_type (type0);
14f9c5c9
AS
7600 }
7601}
7602
4c4b4cd2
PH
7603/* A static approximation of TYPE with all type wrappers removed. */
7604
d2e4a39e
AS
7605static struct type *
7606static_unwrap_type (struct type *type)
14f9c5c9
AS
7607{
7608 if (ada_is_aligner_type (type))
7609 {
61ee279c 7610 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 7611 if (ada_type_name (type1) == NULL)
4c4b4cd2 7612 TYPE_NAME (type1) = ada_type_name (type);
14f9c5c9
AS
7613
7614 return static_unwrap_type (type1);
7615 }
d2e4a39e 7616 else
14f9c5c9 7617 {
d2e4a39e 7618 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 7619
d2e4a39e 7620 if (raw_real_type == type)
4c4b4cd2 7621 return type;
14f9c5c9 7622 else
4c4b4cd2 7623 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
7624 }
7625}
7626
7627/* In some cases, incomplete and private types require
4c4b4cd2 7628 cross-references that are not resolved as records (for example,
14f9c5c9
AS
7629 type Foo;
7630 type FooP is access Foo;
7631 V: FooP;
7632 type Foo is array ...;
4c4b4cd2 7633 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
7634 cross-references to such types, we instead substitute for FooP a
7635 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 7636 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
7637
7638/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
7639 exists, otherwise TYPE. */
7640
d2e4a39e 7641struct type *
61ee279c 7642ada_check_typedef (struct type *type)
14f9c5c9 7643{
727e3d2e
JB
7644 if (type == NULL)
7645 return NULL;
7646
14f9c5c9
AS
7647 CHECK_TYPEDEF (type);
7648 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
529cad9c 7649 || !TYPE_STUB (type)
14f9c5c9
AS
7650 || TYPE_TAG_NAME (type) == NULL)
7651 return type;
d2e4a39e 7652 else
14f9c5c9 7653 {
d2e4a39e
AS
7654 char *name = TYPE_TAG_NAME (type);
7655 struct type *type1 = ada_find_any_type (name);
5b4ee69b 7656
05e522ef
JB
7657 if (type1 == NULL)
7658 return type;
7659
7660 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
7661 stubs pointing to arrays, as we don't create symbols for array
7662 types, only for the typedef-to-array types). This is why
7663 we process TYPE1 with ada_check_typedef before returning
7664 the result. */
7665 return ada_check_typedef (type1);
14f9c5c9
AS
7666 }
7667}
7668
7669/* A value representing the data at VALADDR/ADDRESS as described by
7670 type TYPE0, but with a standard (static-sized) type that correctly
7671 describes it. If VAL0 is not NULL and TYPE0 already is a standard
7672 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 7673 creation of struct values]. */
14f9c5c9 7674
4c4b4cd2
PH
7675static struct value *
7676ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
7677 struct value *val0)
14f9c5c9 7678{
1ed6ede0 7679 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 7680
14f9c5c9
AS
7681 if (type == type0 && val0 != NULL)
7682 return val0;
d2e4a39e 7683 else
4c4b4cd2
PH
7684 return value_from_contents_and_address (type, 0, address);
7685}
7686
7687/* A value representing VAL, but with a standard (static-sized) type
7688 that correctly describes it. Does not necessarily create a new
7689 value. */
7690
0c3acc09 7691struct value *
4c4b4cd2
PH
7692ada_to_fixed_value (struct value *val)
7693{
df407dfe 7694 return ada_to_fixed_value_create (value_type (val),
42ae5230 7695 value_address (val),
4c4b4cd2 7696 val);
14f9c5c9 7697}
d2e4a39e 7698\f
14f9c5c9 7699
14f9c5c9
AS
7700/* Attributes */
7701
4c4b4cd2
PH
7702/* Table mapping attribute numbers to names.
7703 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 7704
d2e4a39e 7705static const char *attribute_names[] = {
14f9c5c9
AS
7706 "<?>",
7707
d2e4a39e 7708 "first",
14f9c5c9
AS
7709 "last",
7710 "length",
7711 "image",
14f9c5c9
AS
7712 "max",
7713 "min",
4c4b4cd2
PH
7714 "modulus",
7715 "pos",
7716 "size",
7717 "tag",
14f9c5c9 7718 "val",
14f9c5c9
AS
7719 0
7720};
7721
d2e4a39e 7722const char *
4c4b4cd2 7723ada_attribute_name (enum exp_opcode n)
14f9c5c9 7724{
4c4b4cd2
PH
7725 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
7726 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
7727 else
7728 return attribute_names[0];
7729}
7730
4c4b4cd2 7731/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 7732
4c4b4cd2
PH
7733static LONGEST
7734pos_atr (struct value *arg)
14f9c5c9 7735{
24209737
PH
7736 struct value *val = coerce_ref (arg);
7737 struct type *type = value_type (val);
14f9c5c9 7738
d2e4a39e 7739 if (!discrete_type_p (type))
323e0a4a 7740 error (_("'POS only defined on discrete types"));
14f9c5c9
AS
7741
7742 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7743 {
7744 int i;
24209737 7745 LONGEST v = value_as_long (val);
14f9c5c9 7746
d2e4a39e 7747 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
4c4b4cd2
PH
7748 {
7749 if (v == TYPE_FIELD_BITPOS (type, i))
7750 return i;
7751 }
323e0a4a 7752 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9
AS
7753 }
7754 else
24209737 7755 return value_as_long (val);
4c4b4cd2
PH
7756}
7757
7758static struct value *
3cb382c9 7759value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 7760{
3cb382c9 7761 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
7762}
7763
4c4b4cd2 7764/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 7765
d2e4a39e
AS
7766static struct value *
7767value_val_atr (struct type *type, struct value *arg)
14f9c5c9 7768{
d2e4a39e 7769 if (!discrete_type_p (type))
323e0a4a 7770 error (_("'VAL only defined on discrete types"));
df407dfe 7771 if (!integer_type_p (value_type (arg)))
323e0a4a 7772 error (_("'VAL requires integral argument"));
14f9c5c9
AS
7773
7774 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
7775 {
7776 long pos = value_as_long (arg);
5b4ee69b 7777
14f9c5c9 7778 if (pos < 0 || pos >= TYPE_NFIELDS (type))
323e0a4a 7779 error (_("argument to 'VAL out of range"));
d2e4a39e 7780 return value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
14f9c5c9
AS
7781 }
7782 else
7783 return value_from_longest (type, value_as_long (arg));
7784}
14f9c5c9 7785\f
d2e4a39e 7786
4c4b4cd2 7787 /* Evaluation */
14f9c5c9 7788
4c4b4cd2
PH
7789/* True if TYPE appears to be an Ada character type.
7790 [At the moment, this is true only for Character and Wide_Character;
7791 It is a heuristic test that could stand improvement]. */
14f9c5c9 7792
d2e4a39e
AS
7793int
7794ada_is_character_type (struct type *type)
14f9c5c9 7795{
7b9f71f2
JB
7796 const char *name;
7797
7798 /* If the type code says it's a character, then assume it really is,
7799 and don't check any further. */
7800 if (TYPE_CODE (type) == TYPE_CODE_CHAR)
7801 return 1;
7802
7803 /* Otherwise, assume it's a character type iff it is a discrete type
7804 with a known character type name. */
7805 name = ada_type_name (type);
7806 return (name != NULL
7807 && (TYPE_CODE (type) == TYPE_CODE_INT
7808 || TYPE_CODE (type) == TYPE_CODE_RANGE)
7809 && (strcmp (name, "character") == 0
7810 || strcmp (name, "wide_character") == 0
5a517ebd 7811 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 7812 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
7813}
7814
4c4b4cd2 7815/* True if TYPE appears to be an Ada string type. */
14f9c5c9
AS
7816
7817int
ebf56fd3 7818ada_is_string_type (struct type *type)
14f9c5c9 7819{
61ee279c 7820 type = ada_check_typedef (type);
d2e4a39e 7821 if (type != NULL
14f9c5c9 7822 && TYPE_CODE (type) != TYPE_CODE_PTR
76a01679
JB
7823 && (ada_is_simple_array_type (type)
7824 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
7825 && ada_array_arity (type) == 1)
7826 {
7827 struct type *elttype = ada_array_element_type (type, 1);
7828
7829 return ada_is_character_type (elttype);
7830 }
d2e4a39e 7831 else
14f9c5c9
AS
7832 return 0;
7833}
7834
5bf03f13
JB
7835/* The compiler sometimes provides a parallel XVS type for a given
7836 PAD type. Normally, it is safe to follow the PAD type directly,
7837 but older versions of the compiler have a bug that causes the offset
7838 of its "F" field to be wrong. Following that field in that case
7839 would lead to incorrect results, but this can be worked around
7840 by ignoring the PAD type and using the associated XVS type instead.
7841
7842 Set to True if the debugger should trust the contents of PAD types.
7843 Otherwise, ignore the PAD type if there is a parallel XVS type. */
7844static int trust_pad_over_xvs = 1;
14f9c5c9
AS
7845
7846/* True if TYPE is a struct type introduced by the compiler to force the
7847 alignment of a value. Such types have a single field with a
4c4b4cd2 7848 distinctive name. */
14f9c5c9
AS
7849
7850int
ebf56fd3 7851ada_is_aligner_type (struct type *type)
14f9c5c9 7852{
61ee279c 7853 type = ada_check_typedef (type);
714e53ab 7854
5bf03f13 7855 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
7856 return 0;
7857
14f9c5c9 7858 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
4c4b4cd2
PH
7859 && TYPE_NFIELDS (type) == 1
7860 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
7861}
7862
7863/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 7864 the parallel type. */
14f9c5c9 7865
d2e4a39e
AS
7866struct type *
7867ada_get_base_type (struct type *raw_type)
14f9c5c9 7868{
d2e4a39e
AS
7869 struct type *real_type_namer;
7870 struct type *raw_real_type;
14f9c5c9
AS
7871
7872 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
7873 return raw_type;
7874
284614f0
JB
7875 if (ada_is_aligner_type (raw_type))
7876 /* The encoding specifies that we should always use the aligner type.
7877 So, even if this aligner type has an associated XVS type, we should
7878 simply ignore it.
7879
7880 According to the compiler gurus, an XVS type parallel to an aligner
7881 type may exist because of a stabs limitation. In stabs, aligner
7882 types are empty because the field has a variable-sized type, and
7883 thus cannot actually be used as an aligner type. As a result,
7884 we need the associated parallel XVS type to decode the type.
7885 Since the policy in the compiler is to not change the internal
7886 representation based on the debugging info format, we sometimes
7887 end up having a redundant XVS type parallel to the aligner type. */
7888 return raw_type;
7889
14f9c5c9 7890 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 7891 if (real_type_namer == NULL
14f9c5c9
AS
7892 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
7893 || TYPE_NFIELDS (real_type_namer) != 1)
7894 return raw_type;
7895
f80d3ff2
JB
7896 if (TYPE_CODE (TYPE_FIELD_TYPE (real_type_namer, 0)) != TYPE_CODE_REF)
7897 {
7898 /* This is an older encoding form where the base type needs to be
7899 looked up by name. We prefer the newer enconding because it is
7900 more efficient. */
7901 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
7902 if (raw_real_type == NULL)
7903 return raw_type;
7904 else
7905 return raw_real_type;
7906 }
7907
7908 /* The field in our XVS type is a reference to the base type. */
7909 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 7910}
14f9c5c9 7911
4c4b4cd2 7912/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 7913
d2e4a39e
AS
7914struct type *
7915ada_aligned_type (struct type *type)
14f9c5c9
AS
7916{
7917 if (ada_is_aligner_type (type))
7918 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
7919 else
7920 return ada_get_base_type (type);
7921}
7922
7923
7924/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 7925 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 7926
fc1a4b47
AC
7927const gdb_byte *
7928ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 7929{
d2e4a39e 7930 if (ada_is_aligner_type (type))
14f9c5c9 7931 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
7932 valaddr +
7933 TYPE_FIELD_BITPOS (type,
7934 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
7935 else
7936 return valaddr;
7937}
7938
4c4b4cd2
PH
7939
7940
14f9c5c9 7941/* The printed representation of an enumeration literal with encoded
4c4b4cd2 7942 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
7943const char *
7944ada_enum_name (const char *name)
14f9c5c9 7945{
4c4b4cd2
PH
7946 static char *result;
7947 static size_t result_len = 0;
d2e4a39e 7948 char *tmp;
14f9c5c9 7949
4c4b4cd2
PH
7950 /* First, unqualify the enumeration name:
7951 1. Search for the last '.' character. If we find one, then skip
76a01679
JB
7952 all the preceeding characters, the unqualified name starts
7953 right after that dot.
4c4b4cd2 7954 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
7955 translates dots into "__". Search forward for double underscores,
7956 but stop searching when we hit an overloading suffix, which is
7957 of the form "__" followed by digits. */
4c4b4cd2 7958
c3e5cd34
PH
7959 tmp = strrchr (name, '.');
7960 if (tmp != NULL)
4c4b4cd2
PH
7961 name = tmp + 1;
7962 else
14f9c5c9 7963 {
4c4b4cd2
PH
7964 while ((tmp = strstr (name, "__")) != NULL)
7965 {
7966 if (isdigit (tmp[2]))
7967 break;
7968 else
7969 name = tmp + 2;
7970 }
14f9c5c9
AS
7971 }
7972
7973 if (name[0] == 'Q')
7974 {
14f9c5c9 7975 int v;
5b4ee69b 7976
14f9c5c9 7977 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
7978 {
7979 if (sscanf (name + 2, "%x", &v) != 1)
7980 return name;
7981 }
14f9c5c9 7982 else
4c4b4cd2 7983 return name;
14f9c5c9 7984
4c4b4cd2 7985 GROW_VECT (result, result_len, 16);
14f9c5c9 7986 if (isascii (v) && isprint (v))
88c15c34 7987 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 7988 else if (name[1] == 'U')
88c15c34 7989 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 7990 else
88c15c34 7991 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
7992
7993 return result;
7994 }
d2e4a39e 7995 else
4c4b4cd2 7996 {
c3e5cd34
PH
7997 tmp = strstr (name, "__");
7998 if (tmp == NULL)
7999 tmp = strstr (name, "$");
8000 if (tmp != NULL)
4c4b4cd2
PH
8001 {
8002 GROW_VECT (result, result_len, tmp - name + 1);
8003 strncpy (result, name, tmp - name);
8004 result[tmp - name] = '\0';
8005 return result;
8006 }
8007
8008 return name;
8009 }
14f9c5c9
AS
8010}
8011
14f9c5c9
AS
8012/* Evaluate the subexpression of EXP starting at *POS as for
8013 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 8014 expression. */
14f9c5c9 8015
d2e4a39e
AS
8016static struct value *
8017evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 8018{
4b27a620 8019 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
8020}
8021
8022/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 8023 value it wraps. */
14f9c5c9 8024
d2e4a39e
AS
8025static struct value *
8026unwrap_value (struct value *val)
14f9c5c9 8027{
df407dfe 8028 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 8029
14f9c5c9
AS
8030 if (ada_is_aligner_type (type))
8031 {
de4d072f 8032 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 8033 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 8034
14f9c5c9 8035 if (ada_type_name (val_type) == NULL)
4c4b4cd2 8036 TYPE_NAME (val_type) = ada_type_name (type);
14f9c5c9
AS
8037
8038 return unwrap_value (v);
8039 }
d2e4a39e 8040 else
14f9c5c9 8041 {
d2e4a39e 8042 struct type *raw_real_type =
61ee279c 8043 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 8044
5bf03f13
JB
8045 /* If there is no parallel XVS or XVE type, then the value is
8046 already unwrapped. Return it without further modification. */
8047 if ((type == raw_real_type)
8048 && ada_find_parallel_type (type, "___XVE") == NULL)
8049 return val;
14f9c5c9 8050
d2e4a39e 8051 return
4c4b4cd2
PH
8052 coerce_unspec_val_to_type
8053 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 8054 value_address (val),
1ed6ede0 8055 NULL, 1));
14f9c5c9
AS
8056 }
8057}
d2e4a39e
AS
8058
8059static struct value *
8060cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9
AS
8061{
8062 LONGEST val;
8063
df407dfe 8064 if (type == value_type (arg))
14f9c5c9 8065 return arg;
df407dfe 8066 else if (ada_is_fixed_point_type (value_type (arg)))
d2e4a39e 8067 val = ada_float_to_fixed (type,
df407dfe 8068 ada_fixed_to_float (value_type (arg),
4c4b4cd2 8069 value_as_long (arg)));
d2e4a39e 8070 else
14f9c5c9 8071 {
a53b7a21 8072 DOUBLEST argd = value_as_double (arg);
5b4ee69b 8073
14f9c5c9
AS
8074 val = ada_float_to_fixed (type, argd);
8075 }
8076
8077 return value_from_longest (type, val);
8078}
8079
d2e4a39e 8080static struct value *
a53b7a21 8081cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 8082{
df407dfe 8083 DOUBLEST val = ada_fixed_to_float (value_type (arg),
4c4b4cd2 8084 value_as_long (arg));
5b4ee69b 8085
a53b7a21 8086 return value_from_double (type, val);
14f9c5c9
AS
8087}
8088
4c4b4cd2
PH
8089/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
8090 return the converted value. */
8091
d2e4a39e
AS
8092static struct value *
8093coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 8094{
df407dfe 8095 struct type *type2 = value_type (val);
5b4ee69b 8096
14f9c5c9
AS
8097 if (type == type2)
8098 return val;
8099
61ee279c
PH
8100 type2 = ada_check_typedef (type2);
8101 type = ada_check_typedef (type);
14f9c5c9 8102
d2e4a39e
AS
8103 if (TYPE_CODE (type2) == TYPE_CODE_PTR
8104 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
14f9c5c9
AS
8105 {
8106 val = ada_value_ind (val);
df407dfe 8107 type2 = value_type (val);
14f9c5c9
AS
8108 }
8109
d2e4a39e 8110 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
14f9c5c9
AS
8111 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
8112 {
8113 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
4c4b4cd2
PH
8114 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
8115 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
323e0a4a 8116 error (_("Incompatible types in assignment"));
04624583 8117 deprecated_set_value_type (val, type);
14f9c5c9 8118 }
d2e4a39e 8119 return val;
14f9c5c9
AS
8120}
8121
4c4b4cd2
PH
8122static struct value *
8123ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
8124{
8125 struct value *val;
8126 struct type *type1, *type2;
8127 LONGEST v, v1, v2;
8128
994b9211
AC
8129 arg1 = coerce_ref (arg1);
8130 arg2 = coerce_ref (arg2);
df407dfe
AC
8131 type1 = base_type (ada_check_typedef (value_type (arg1)));
8132 type2 = base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 8133
76a01679
JB
8134 if (TYPE_CODE (type1) != TYPE_CODE_INT
8135 || TYPE_CODE (type2) != TYPE_CODE_INT)
4c4b4cd2
PH
8136 return value_binop (arg1, arg2, op);
8137
76a01679 8138 switch (op)
4c4b4cd2
PH
8139 {
8140 case BINOP_MOD:
8141 case BINOP_DIV:
8142 case BINOP_REM:
8143 break;
8144 default:
8145 return value_binop (arg1, arg2, op);
8146 }
8147
8148 v2 = value_as_long (arg2);
8149 if (v2 == 0)
323e0a4a 8150 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
8151
8152 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
8153 return value_binop (arg1, arg2, op);
8154
8155 v1 = value_as_long (arg1);
8156 switch (op)
8157 {
8158 case BINOP_DIV:
8159 v = v1 / v2;
76a01679
JB
8160 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
8161 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
8162 break;
8163 case BINOP_REM:
8164 v = v1 % v2;
76a01679
JB
8165 if (v * v1 < 0)
8166 v -= v2;
4c4b4cd2
PH
8167 break;
8168 default:
8169 /* Should not reach this point. */
8170 v = 0;
8171 }
8172
8173 val = allocate_value (type1);
990a07ab 8174 store_unsigned_integer (value_contents_raw (val),
e17a4113
UW
8175 TYPE_LENGTH (value_type (val)),
8176 gdbarch_byte_order (get_type_arch (type1)), v);
4c4b4cd2
PH
8177 return val;
8178}
8179
8180static int
8181ada_value_equal (struct value *arg1, struct value *arg2)
8182{
df407dfe
AC
8183 if (ada_is_direct_array_type (value_type (arg1))
8184 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 8185 {
f58b38bf
JB
8186 /* Automatically dereference any array reference before
8187 we attempt to perform the comparison. */
8188 arg1 = ada_coerce_ref (arg1);
8189 arg2 = ada_coerce_ref (arg2);
8190
4c4b4cd2
PH
8191 arg1 = ada_coerce_to_simple_array (arg1);
8192 arg2 = ada_coerce_to_simple_array (arg2);
df407dfe
AC
8193 if (TYPE_CODE (value_type (arg1)) != TYPE_CODE_ARRAY
8194 || TYPE_CODE (value_type (arg2)) != TYPE_CODE_ARRAY)
323e0a4a 8195 error (_("Attempt to compare array with non-array"));
4c4b4cd2 8196 /* FIXME: The following works only for types whose
76a01679
JB
8197 representations use all bits (no padding or undefined bits)
8198 and do not have user-defined equality. */
8199 return
df407dfe 8200 TYPE_LENGTH (value_type (arg1)) == TYPE_LENGTH (value_type (arg2))
0fd88904 8201 && memcmp (value_contents (arg1), value_contents (arg2),
df407dfe 8202 TYPE_LENGTH (value_type (arg1))) == 0;
4c4b4cd2
PH
8203 }
8204 return value_equal (arg1, arg2);
8205}
8206
52ce6436
PH
8207/* Total number of component associations in the aggregate starting at
8208 index PC in EXP. Assumes that index PC is the start of an
8209 OP_AGGREGATE. */
8210
8211static int
8212num_component_specs (struct expression *exp, int pc)
8213{
8214 int n, m, i;
5b4ee69b 8215
52ce6436
PH
8216 m = exp->elts[pc + 1].longconst;
8217 pc += 3;
8218 n = 0;
8219 for (i = 0; i < m; i += 1)
8220 {
8221 switch (exp->elts[pc].opcode)
8222 {
8223 default:
8224 n += 1;
8225 break;
8226 case OP_CHOICES:
8227 n += exp->elts[pc + 1].longconst;
8228 break;
8229 }
8230 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
8231 }
8232 return n;
8233}
8234
8235/* Assign the result of evaluating EXP starting at *POS to the INDEXth
8236 component of LHS (a simple array or a record), updating *POS past
8237 the expression, assuming that LHS is contained in CONTAINER. Does
8238 not modify the inferior's memory, nor does it modify LHS (unless
8239 LHS == CONTAINER). */
8240
8241static void
8242assign_component (struct value *container, struct value *lhs, LONGEST index,
8243 struct expression *exp, int *pos)
8244{
8245 struct value *mark = value_mark ();
8246 struct value *elt;
5b4ee69b 8247
52ce6436
PH
8248 if (TYPE_CODE (value_type (lhs)) == TYPE_CODE_ARRAY)
8249 {
22601c15
UW
8250 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
8251 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 8252
52ce6436
PH
8253 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
8254 }
8255 else
8256 {
8257 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
8258 elt = ada_to_fixed_value (unwrap_value (elt));
8259 }
8260
8261 if (exp->elts[*pos].opcode == OP_AGGREGATE)
8262 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
8263 else
8264 value_assign_to_component (container, elt,
8265 ada_evaluate_subexp (NULL, exp, pos,
8266 EVAL_NORMAL));
8267
8268 value_free_to_mark (mark);
8269}
8270
8271/* Assuming that LHS represents an lvalue having a record or array
8272 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
8273 of that aggregate's value to LHS, advancing *POS past the
8274 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
8275 lvalue containing LHS (possibly LHS itself). Does not modify
8276 the inferior's memory, nor does it modify the contents of
8277 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
8278
8279static struct value *
8280assign_aggregate (struct value *container,
8281 struct value *lhs, struct expression *exp,
8282 int *pos, enum noside noside)
8283{
8284 struct type *lhs_type;
8285 int n = exp->elts[*pos+1].longconst;
8286 LONGEST low_index, high_index;
8287 int num_specs;
8288 LONGEST *indices;
8289 int max_indices, num_indices;
8290 int is_array_aggregate;
8291 int i;
52ce6436
PH
8292
8293 *pos += 3;
8294 if (noside != EVAL_NORMAL)
8295 {
8296 int i;
5b4ee69b 8297
52ce6436
PH
8298 for (i = 0; i < n; i += 1)
8299 ada_evaluate_subexp (NULL, exp, pos, noside);
8300 return container;
8301 }
8302
8303 container = ada_coerce_ref (container);
8304 if (ada_is_direct_array_type (value_type (container)))
8305 container = ada_coerce_to_simple_array (container);
8306 lhs = ada_coerce_ref (lhs);
8307 if (!deprecated_value_modifiable (lhs))
8308 error (_("Left operand of assignment is not a modifiable lvalue."));
8309
8310 lhs_type = value_type (lhs);
8311 if (ada_is_direct_array_type (lhs_type))
8312 {
8313 lhs = ada_coerce_to_simple_array (lhs);
8314 lhs_type = value_type (lhs);
8315 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
8316 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
8317 is_array_aggregate = 1;
8318 }
8319 else if (TYPE_CODE (lhs_type) == TYPE_CODE_STRUCT)
8320 {
8321 low_index = 0;
8322 high_index = num_visible_fields (lhs_type) - 1;
8323 is_array_aggregate = 0;
8324 }
8325 else
8326 error (_("Left-hand side must be array or record."));
8327
8328 num_specs = num_component_specs (exp, *pos - 3);
8329 max_indices = 4 * num_specs + 4;
8330 indices = alloca (max_indices * sizeof (indices[0]));
8331 indices[0] = indices[1] = low_index - 1;
8332 indices[2] = indices[3] = high_index + 1;
8333 num_indices = 4;
8334
8335 for (i = 0; i < n; i += 1)
8336 {
8337 switch (exp->elts[*pos].opcode)
8338 {
8339 case OP_CHOICES:
8340 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
8341 &num_indices, max_indices,
8342 low_index, high_index);
8343 break;
8344 case OP_POSITIONAL:
8345 aggregate_assign_positional (container, lhs, exp, pos, indices,
8346 &num_indices, max_indices,
8347 low_index, high_index);
8348 break;
8349 case OP_OTHERS:
8350 if (i != n-1)
8351 error (_("Misplaced 'others' clause"));
8352 aggregate_assign_others (container, lhs, exp, pos, indices,
8353 num_indices, low_index, high_index);
8354 break;
8355 default:
8356 error (_("Internal error: bad aggregate clause"));
8357 }
8358 }
8359
8360 return container;
8361}
8362
8363/* Assign into the component of LHS indexed by the OP_POSITIONAL
8364 construct at *POS, updating *POS past the construct, given that
8365 the positions are relative to lower bound LOW, where HIGH is the
8366 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
8367 updating *NUM_INDICES as needed. CONTAINER is as for
8368 assign_aggregate. */
8369static void
8370aggregate_assign_positional (struct value *container,
8371 struct value *lhs, struct expression *exp,
8372 int *pos, LONGEST *indices, int *num_indices,
8373 int max_indices, LONGEST low, LONGEST high)
8374{
8375 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
8376
8377 if (ind - 1 == high)
e1d5a0d2 8378 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
8379 if (ind <= high)
8380 {
8381 add_component_interval (ind, ind, indices, num_indices, max_indices);
8382 *pos += 3;
8383 assign_component (container, lhs, ind, exp, pos);
8384 }
8385 else
8386 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8387}
8388
8389/* Assign into the components of LHS indexed by the OP_CHOICES
8390 construct at *POS, updating *POS past the construct, given that
8391 the allowable indices are LOW..HIGH. Record the indices assigned
8392 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
8393 needed. CONTAINER is as for assign_aggregate. */
8394static void
8395aggregate_assign_from_choices (struct value *container,
8396 struct value *lhs, struct expression *exp,
8397 int *pos, LONGEST *indices, int *num_indices,
8398 int max_indices, LONGEST low, LONGEST high)
8399{
8400 int j;
8401 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
8402 int choice_pos, expr_pc;
8403 int is_array = ada_is_direct_array_type (value_type (lhs));
8404
8405 choice_pos = *pos += 3;
8406
8407 for (j = 0; j < n_choices; j += 1)
8408 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8409 expr_pc = *pos;
8410 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8411
8412 for (j = 0; j < n_choices; j += 1)
8413 {
8414 LONGEST lower, upper;
8415 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 8416
52ce6436
PH
8417 if (op == OP_DISCRETE_RANGE)
8418 {
8419 choice_pos += 1;
8420 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8421 EVAL_NORMAL));
8422 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
8423 EVAL_NORMAL));
8424 }
8425 else if (is_array)
8426 {
8427 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
8428 EVAL_NORMAL));
8429 upper = lower;
8430 }
8431 else
8432 {
8433 int ind;
8434 char *name;
5b4ee69b 8435
52ce6436
PH
8436 switch (op)
8437 {
8438 case OP_NAME:
8439 name = &exp->elts[choice_pos + 2].string;
8440 break;
8441 case OP_VAR_VALUE:
8442 name = SYMBOL_NATURAL_NAME (exp->elts[choice_pos + 2].symbol);
8443 break;
8444 default:
8445 error (_("Invalid record component association."));
8446 }
8447 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
8448 ind = 0;
8449 if (! find_struct_field (name, value_type (lhs), 0,
8450 NULL, NULL, NULL, NULL, &ind))
8451 error (_("Unknown component name: %s."), name);
8452 lower = upper = ind;
8453 }
8454
8455 if (lower <= upper && (lower < low || upper > high))
8456 error (_("Index in component association out of bounds."));
8457
8458 add_component_interval (lower, upper, indices, num_indices,
8459 max_indices);
8460 while (lower <= upper)
8461 {
8462 int pos1;
5b4ee69b 8463
52ce6436
PH
8464 pos1 = expr_pc;
8465 assign_component (container, lhs, lower, exp, &pos1);
8466 lower += 1;
8467 }
8468 }
8469}
8470
8471/* Assign the value of the expression in the OP_OTHERS construct in
8472 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
8473 have not been previously assigned. The index intervals already assigned
8474 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
8475 OP_OTHERS clause. CONTAINER is as for assign_aggregate*/
8476static void
8477aggregate_assign_others (struct value *container,
8478 struct value *lhs, struct expression *exp,
8479 int *pos, LONGEST *indices, int num_indices,
8480 LONGEST low, LONGEST high)
8481{
8482 int i;
8483 int expr_pc = *pos+1;
8484
8485 for (i = 0; i < num_indices - 2; i += 2)
8486 {
8487 LONGEST ind;
5b4ee69b 8488
52ce6436
PH
8489 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
8490 {
8491 int pos;
5b4ee69b 8492
52ce6436
PH
8493 pos = expr_pc;
8494 assign_component (container, lhs, ind, exp, &pos);
8495 }
8496 }
8497 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
8498}
8499
8500/* Add the interval [LOW .. HIGH] to the sorted set of intervals
8501 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
8502 modifying *SIZE as needed. It is an error if *SIZE exceeds
8503 MAX_SIZE. The resulting intervals do not overlap. */
8504static void
8505add_component_interval (LONGEST low, LONGEST high,
8506 LONGEST* indices, int *size, int max_size)
8507{
8508 int i, j;
5b4ee69b 8509
52ce6436
PH
8510 for (i = 0; i < *size; i += 2) {
8511 if (high >= indices[i] && low <= indices[i + 1])
8512 {
8513 int kh;
5b4ee69b 8514
52ce6436
PH
8515 for (kh = i + 2; kh < *size; kh += 2)
8516 if (high < indices[kh])
8517 break;
8518 if (low < indices[i])
8519 indices[i] = low;
8520 indices[i + 1] = indices[kh - 1];
8521 if (high > indices[i + 1])
8522 indices[i + 1] = high;
8523 memcpy (indices + i + 2, indices + kh, *size - kh);
8524 *size -= kh - i - 2;
8525 return;
8526 }
8527 else if (high < indices[i])
8528 break;
8529 }
8530
8531 if (*size == max_size)
8532 error (_("Internal error: miscounted aggregate components."));
8533 *size += 2;
8534 for (j = *size-1; j >= i+2; j -= 1)
8535 indices[j] = indices[j - 2];
8536 indices[i] = low;
8537 indices[i + 1] = high;
8538}
8539
6e48bd2c
JB
8540/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
8541 is different. */
8542
8543static struct value *
8544ada_value_cast (struct type *type, struct value *arg2, enum noside noside)
8545{
8546 if (type == ada_check_typedef (value_type (arg2)))
8547 return arg2;
8548
8549 if (ada_is_fixed_point_type (type))
8550 return (cast_to_fixed (type, arg2));
8551
8552 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 8553 return cast_from_fixed (type, arg2);
6e48bd2c
JB
8554
8555 return value_cast (type, arg2);
8556}
8557
284614f0
JB
8558/* Evaluating Ada expressions, and printing their result.
8559 ------------------------------------------------------
8560
21649b50
JB
8561 1. Introduction:
8562 ----------------
8563
284614f0
JB
8564 We usually evaluate an Ada expression in order to print its value.
8565 We also evaluate an expression in order to print its type, which
8566 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
8567 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
8568 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
8569 the evaluation compared to the EVAL_NORMAL, but is otherwise very
8570 similar.
8571
8572 Evaluating expressions is a little more complicated for Ada entities
8573 than it is for entities in languages such as C. The main reason for
8574 this is that Ada provides types whose definition might be dynamic.
8575 One example of such types is variant records. Or another example
8576 would be an array whose bounds can only be known at run time.
8577
8578 The following description is a general guide as to what should be
8579 done (and what should NOT be done) in order to evaluate an expression
8580 involving such types, and when. This does not cover how the semantic
8581 information is encoded by GNAT as this is covered separatly. For the
8582 document used as the reference for the GNAT encoding, see exp_dbug.ads
8583 in the GNAT sources.
8584
8585 Ideally, we should embed each part of this description next to its
8586 associated code. Unfortunately, the amount of code is so vast right
8587 now that it's hard to see whether the code handling a particular
8588 situation might be duplicated or not. One day, when the code is
8589 cleaned up, this guide might become redundant with the comments
8590 inserted in the code, and we might want to remove it.
8591
21649b50
JB
8592 2. ``Fixing'' an Entity, the Simple Case:
8593 -----------------------------------------
8594
284614f0
JB
8595 When evaluating Ada expressions, the tricky issue is that they may
8596 reference entities whose type contents and size are not statically
8597 known. Consider for instance a variant record:
8598
8599 type Rec (Empty : Boolean := True) is record
8600 case Empty is
8601 when True => null;
8602 when False => Value : Integer;
8603 end case;
8604 end record;
8605 Yes : Rec := (Empty => False, Value => 1);
8606 No : Rec := (empty => True);
8607
8608 The size and contents of that record depends on the value of the
8609 descriminant (Rec.Empty). At this point, neither the debugging
8610 information nor the associated type structure in GDB are able to
8611 express such dynamic types. So what the debugger does is to create
8612 "fixed" versions of the type that applies to the specific object.
8613 We also informally refer to this opperation as "fixing" an object,
8614 which means creating its associated fixed type.
8615
8616 Example: when printing the value of variable "Yes" above, its fixed
8617 type would look like this:
8618
8619 type Rec is record
8620 Empty : Boolean;
8621 Value : Integer;
8622 end record;
8623
8624 On the other hand, if we printed the value of "No", its fixed type
8625 would become:
8626
8627 type Rec is record
8628 Empty : Boolean;
8629 end record;
8630
8631 Things become a little more complicated when trying to fix an entity
8632 with a dynamic type that directly contains another dynamic type,
8633 such as an array of variant records, for instance. There are
8634 two possible cases: Arrays, and records.
8635
21649b50
JB
8636 3. ``Fixing'' Arrays:
8637 ---------------------
8638
8639 The type structure in GDB describes an array in terms of its bounds,
8640 and the type of its elements. By design, all elements in the array
8641 have the same type and we cannot represent an array of variant elements
8642 using the current type structure in GDB. When fixing an array,
8643 we cannot fix the array element, as we would potentially need one
8644 fixed type per element of the array. As a result, the best we can do
8645 when fixing an array is to produce an array whose bounds and size
8646 are correct (allowing us to read it from memory), but without having
8647 touched its element type. Fixing each element will be done later,
8648 when (if) necessary.
8649
8650 Arrays are a little simpler to handle than records, because the same
8651 amount of memory is allocated for each element of the array, even if
1b536f04 8652 the amount of space actually used by each element differs from element
21649b50 8653 to element. Consider for instance the following array of type Rec:
284614f0
JB
8654
8655 type Rec_Array is array (1 .. 2) of Rec;
8656
1b536f04
JB
8657 The actual amount of memory occupied by each element might be different
8658 from element to element, depending on the value of their discriminant.
21649b50 8659 But the amount of space reserved for each element in the array remains
1b536f04 8660 fixed regardless. So we simply need to compute that size using
21649b50
JB
8661 the debugging information available, from which we can then determine
8662 the array size (we multiply the number of elements of the array by
8663 the size of each element).
8664
8665 The simplest case is when we have an array of a constrained element
8666 type. For instance, consider the following type declarations:
8667
8668 type Bounded_String (Max_Size : Integer) is
8669 Length : Integer;
8670 Buffer : String (1 .. Max_Size);
8671 end record;
8672 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
8673
8674 In this case, the compiler describes the array as an array of
8675 variable-size elements (identified by its XVS suffix) for which
8676 the size can be read in the parallel XVZ variable.
8677
8678 In the case of an array of an unconstrained element type, the compiler
8679 wraps the array element inside a private PAD type. This type should not
8680 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
8681 that we also use the adjective "aligner" in our code to designate
8682 these wrapper types.
8683
1b536f04 8684 In some cases, the size allocated for each element is statically
21649b50
JB
8685 known. In that case, the PAD type already has the correct size,
8686 and the array element should remain unfixed.
8687
8688 But there are cases when this size is not statically known.
8689 For instance, assuming that "Five" is an integer variable:
284614f0
JB
8690
8691 type Dynamic is array (1 .. Five) of Integer;
8692 type Wrapper (Has_Length : Boolean := False) is record
8693 Data : Dynamic;
8694 case Has_Length is
8695 when True => Length : Integer;
8696 when False => null;
8697 end case;
8698 end record;
8699 type Wrapper_Array is array (1 .. 2) of Wrapper;
8700
8701 Hello : Wrapper_Array := (others => (Has_Length => True,
8702 Data => (others => 17),
8703 Length => 1));
8704
8705
8706 The debugging info would describe variable Hello as being an
8707 array of a PAD type. The size of that PAD type is not statically
8708 known, but can be determined using a parallel XVZ variable.
8709 In that case, a copy of the PAD type with the correct size should
8710 be used for the fixed array.
8711
21649b50
JB
8712 3. ``Fixing'' record type objects:
8713 ----------------------------------
8714
8715 Things are slightly different from arrays in the case of dynamic
284614f0
JB
8716 record types. In this case, in order to compute the associated
8717 fixed type, we need to determine the size and offset of each of
8718 its components. This, in turn, requires us to compute the fixed
8719 type of each of these components.
8720
8721 Consider for instance the example:
8722
8723 type Bounded_String (Max_Size : Natural) is record
8724 Str : String (1 .. Max_Size);
8725 Length : Natural;
8726 end record;
8727 My_String : Bounded_String (Max_Size => 10);
8728
8729 In that case, the position of field "Length" depends on the size
8730 of field Str, which itself depends on the value of the Max_Size
21649b50 8731 discriminant. In order to fix the type of variable My_String,
284614f0
JB
8732 we need to fix the type of field Str. Therefore, fixing a variant
8733 record requires us to fix each of its components.
8734
8735 However, if a component does not have a dynamic size, the component
8736 should not be fixed. In particular, fields that use a PAD type
8737 should not fixed. Here is an example where this might happen
8738 (assuming type Rec above):
8739
8740 type Container (Big : Boolean) is record
8741 First : Rec;
8742 After : Integer;
8743 case Big is
8744 when True => Another : Integer;
8745 when False => null;
8746 end case;
8747 end record;
8748 My_Container : Container := (Big => False,
8749 First => (Empty => True),
8750 After => 42);
8751
8752 In that example, the compiler creates a PAD type for component First,
8753 whose size is constant, and then positions the component After just
8754 right after it. The offset of component After is therefore constant
8755 in this case.
8756
8757 The debugger computes the position of each field based on an algorithm
8758 that uses, among other things, the actual position and size of the field
21649b50
JB
8759 preceding it. Let's now imagine that the user is trying to print
8760 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
8761 end up computing the offset of field After based on the size of the
8762 fixed version of field First. And since in our example First has
8763 only one actual field, the size of the fixed type is actually smaller
8764 than the amount of space allocated to that field, and thus we would
8765 compute the wrong offset of field After.
8766
21649b50
JB
8767 To make things more complicated, we need to watch out for dynamic
8768 components of variant records (identified by the ___XVL suffix in
8769 the component name). Even if the target type is a PAD type, the size
8770 of that type might not be statically known. So the PAD type needs
8771 to be unwrapped and the resulting type needs to be fixed. Otherwise,
8772 we might end up with the wrong size for our component. This can be
8773 observed with the following type declarations:
284614f0
JB
8774
8775 type Octal is new Integer range 0 .. 7;
8776 type Octal_Array is array (Positive range <>) of Octal;
8777 pragma Pack (Octal_Array);
8778
8779 type Octal_Buffer (Size : Positive) is record
8780 Buffer : Octal_Array (1 .. Size);
8781 Length : Integer;
8782 end record;
8783
8784 In that case, Buffer is a PAD type whose size is unset and needs
8785 to be computed by fixing the unwrapped type.
8786
21649b50
JB
8787 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
8788 ----------------------------------------------------------
8789
8790 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
8791 thus far, be actually fixed?
8792
8793 The answer is: Only when referencing that element. For instance
8794 when selecting one component of a record, this specific component
8795 should be fixed at that point in time. Or when printing the value
8796 of a record, each component should be fixed before its value gets
8797 printed. Similarly for arrays, the element of the array should be
8798 fixed when printing each element of the array, or when extracting
8799 one element out of that array. On the other hand, fixing should
8800 not be performed on the elements when taking a slice of an array!
8801
8802 Note that one of the side-effects of miscomputing the offset and
8803 size of each field is that we end up also miscomputing the size
8804 of the containing type. This can have adverse results when computing
8805 the value of an entity. GDB fetches the value of an entity based
8806 on the size of its type, and thus a wrong size causes GDB to fetch
8807 the wrong amount of memory. In the case where the computed size is
8808 too small, GDB fetches too little data to print the value of our
8809 entiry. Results in this case as unpredicatble, as we usually read
8810 past the buffer containing the data =:-o. */
8811
8812/* Implement the evaluate_exp routine in the exp_descriptor structure
8813 for the Ada language. */
8814
52ce6436 8815static struct value *
ebf56fd3 8816ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 8817 int *pos, enum noside noside)
14f9c5c9
AS
8818{
8819 enum exp_opcode op;
b5385fc0 8820 int tem;
14f9c5c9
AS
8821 int pc;
8822 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
8823 struct type *type;
52ce6436 8824 int nargs, oplen;
d2e4a39e 8825 struct value **argvec;
14f9c5c9 8826
d2e4a39e
AS
8827 pc = *pos;
8828 *pos += 1;
14f9c5c9
AS
8829 op = exp->elts[pc].opcode;
8830
d2e4a39e 8831 switch (op)
14f9c5c9
AS
8832 {
8833 default:
8834 *pos -= 1;
6e48bd2c
JB
8835 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
8836 arg1 = unwrap_value (arg1);
8837
8838 /* If evaluating an OP_DOUBLE and an EXPECT_TYPE was provided,
8839 then we need to perform the conversion manually, because
8840 evaluate_subexp_standard doesn't do it. This conversion is
8841 necessary in Ada because the different kinds of float/fixed
8842 types in Ada have different representations.
8843
8844 Similarly, we need to perform the conversion from OP_LONG
8845 ourselves. */
8846 if ((op == OP_DOUBLE || op == OP_LONG) && expect_type != NULL)
8847 arg1 = ada_value_cast (expect_type, arg1, noside);
8848
8849 return arg1;
4c4b4cd2
PH
8850
8851 case OP_STRING:
8852 {
76a01679 8853 struct value *result;
5b4ee69b 8854
76a01679
JB
8855 *pos -= 1;
8856 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
8857 /* The result type will have code OP_STRING, bashed there from
8858 OP_ARRAY. Bash it back. */
df407dfe
AC
8859 if (TYPE_CODE (value_type (result)) == TYPE_CODE_STRING)
8860 TYPE_CODE (value_type (result)) = TYPE_CODE_ARRAY;
76a01679 8861 return result;
4c4b4cd2 8862 }
14f9c5c9
AS
8863
8864 case UNOP_CAST:
8865 (*pos) += 2;
8866 type = exp->elts[pc + 1].type;
8867 arg1 = evaluate_subexp (type, exp, pos, noside);
8868 if (noside == EVAL_SKIP)
4c4b4cd2 8869 goto nosideret;
6e48bd2c 8870 arg1 = ada_value_cast (type, arg1, noside);
14f9c5c9
AS
8871 return arg1;
8872
4c4b4cd2
PH
8873 case UNOP_QUAL:
8874 (*pos) += 2;
8875 type = exp->elts[pc + 1].type;
8876 return ada_evaluate_subexp (type, exp, pos, noside);
8877
14f9c5c9
AS
8878 case BINOP_ASSIGN:
8879 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
8880 if (exp->elts[*pos].opcode == OP_AGGREGATE)
8881 {
8882 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
8883 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
8884 return arg1;
8885 return ada_value_assign (arg1, arg1);
8886 }
003f3813
JB
8887 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
8888 except if the lhs of our assignment is a convenience variable.
8889 In the case of assigning to a convenience variable, the lhs
8890 should be exactly the result of the evaluation of the rhs. */
8891 type = value_type (arg1);
8892 if (VALUE_LVAL (arg1) == lval_internalvar)
8893 type = NULL;
8894 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 8895 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 8896 return arg1;
df407dfe
AC
8897 if (ada_is_fixed_point_type (value_type (arg1)))
8898 arg2 = cast_to_fixed (value_type (arg1), arg2);
8899 else if (ada_is_fixed_point_type (value_type (arg2)))
76a01679 8900 error
323e0a4a 8901 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 8902 else
df407dfe 8903 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 8904 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
8905
8906 case BINOP_ADD:
8907 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8908 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8909 if (noside == EVAL_SKIP)
4c4b4cd2 8910 goto nosideret;
2ac8a782
JB
8911 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8912 return (value_from_longest
8913 (value_type (arg1),
8914 value_as_long (arg1) + value_as_long (arg2)));
df407dfe
AC
8915 if ((ada_is_fixed_point_type (value_type (arg1))
8916 || ada_is_fixed_point_type (value_type (arg2)))
8917 && value_type (arg1) != value_type (arg2))
323e0a4a 8918 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
8919 /* Do the addition, and cast the result to the type of the first
8920 argument. We cannot cast the result to a reference type, so if
8921 ARG1 is a reference type, find its underlying type. */
8922 type = value_type (arg1);
8923 while (TYPE_CODE (type) == TYPE_CODE_REF)
8924 type = TYPE_TARGET_TYPE (type);
f44316fa 8925 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 8926 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
8927
8928 case BINOP_SUB:
8929 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
8930 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
8931 if (noside == EVAL_SKIP)
4c4b4cd2 8932 goto nosideret;
2ac8a782
JB
8933 if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_PTR)
8934 return (value_from_longest
8935 (value_type (arg1),
8936 value_as_long (arg1) - value_as_long (arg2)));
df407dfe
AC
8937 if ((ada_is_fixed_point_type (value_type (arg1))
8938 || ada_is_fixed_point_type (value_type (arg2)))
8939 && value_type (arg1) != value_type (arg2))
323e0a4a 8940 error (_("Operands of fixed-point subtraction must have the same type"));
b7789565
JB
8941 /* Do the substraction, and cast the result to the type of the first
8942 argument. We cannot cast the result to a reference type, so if
8943 ARG1 is a reference type, find its underlying type. */
8944 type = value_type (arg1);
8945 while (TYPE_CODE (type) == TYPE_CODE_REF)
8946 type = TYPE_TARGET_TYPE (type);
f44316fa 8947 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 8948 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
8949
8950 case BINOP_MUL:
8951 case BINOP_DIV:
e1578042
JB
8952 case BINOP_REM:
8953 case BINOP_MOD:
14f9c5c9
AS
8954 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8955 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8956 if (noside == EVAL_SKIP)
4c4b4cd2 8957 goto nosideret;
e1578042 8958 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
8959 {
8960 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8961 return value_zero (value_type (arg1), not_lval);
8962 }
14f9c5c9 8963 else
4c4b4cd2 8964 {
a53b7a21 8965 type = builtin_type (exp->gdbarch)->builtin_double;
df407dfe 8966 if (ada_is_fixed_point_type (value_type (arg1)))
a53b7a21 8967 arg1 = cast_from_fixed (type, arg1);
df407dfe 8968 if (ada_is_fixed_point_type (value_type (arg2)))
a53b7a21 8969 arg2 = cast_from_fixed (type, arg2);
f44316fa 8970 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
8971 return ada_value_binop (arg1, arg2, op);
8972 }
8973
4c4b4cd2
PH
8974 case BINOP_EQUAL:
8975 case BINOP_NOTEQUAL:
14f9c5c9 8976 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 8977 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 8978 if (noside == EVAL_SKIP)
76a01679 8979 goto nosideret;
4c4b4cd2 8980 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 8981 tem = 0;
4c4b4cd2 8982 else
f44316fa
UW
8983 {
8984 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
8985 tem = ada_value_equal (arg1, arg2);
8986 }
4c4b4cd2 8987 if (op == BINOP_NOTEQUAL)
76a01679 8988 tem = !tem;
fbb06eb1
UW
8989 type = language_bool_type (exp->language_defn, exp->gdbarch);
8990 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
8991
8992 case UNOP_NEG:
8993 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8994 if (noside == EVAL_SKIP)
8995 goto nosideret;
df407dfe
AC
8996 else if (ada_is_fixed_point_type (value_type (arg1)))
8997 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 8998 else
f44316fa
UW
8999 {
9000 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9001 return value_neg (arg1);
9002 }
4c4b4cd2 9003
2330c6c6
JB
9004 case BINOP_LOGICAL_AND:
9005 case BINOP_LOGICAL_OR:
9006 case UNOP_LOGICAL_NOT:
000d5124
JB
9007 {
9008 struct value *val;
9009
9010 *pos -= 1;
9011 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
9012 type = language_bool_type (exp->language_defn, exp->gdbarch);
9013 return value_cast (type, val);
000d5124 9014 }
2330c6c6
JB
9015
9016 case BINOP_BITWISE_AND:
9017 case BINOP_BITWISE_IOR:
9018 case BINOP_BITWISE_XOR:
000d5124
JB
9019 {
9020 struct value *val;
9021
9022 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
9023 *pos = pc;
9024 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
9025
9026 return value_cast (value_type (arg1), val);
9027 }
2330c6c6 9028
14f9c5c9
AS
9029 case OP_VAR_VALUE:
9030 *pos -= 1;
6799def4 9031
14f9c5c9 9032 if (noside == EVAL_SKIP)
4c4b4cd2
PH
9033 {
9034 *pos += 4;
9035 goto nosideret;
9036 }
9037 else if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
9038 /* Only encountered when an unresolved symbol occurs in a
9039 context other than a function call, in which case, it is
52ce6436 9040 invalid. */
323e0a4a 9041 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2 9042 SYMBOL_PRINT_NAME (exp->elts[pc + 2].symbol));
14f9c5c9 9043 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 9044 {
0c1f74cf 9045 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
9046 /* Check to see if this is a tagged type. We also need to handle
9047 the case where the type is a reference to a tagged type, but
9048 we have to be careful to exclude pointers to tagged types.
9049 The latter should be shown as usual (as a pointer), whereas
9050 a reference should mostly be transparent to the user. */
9051 if (ada_is_tagged_type (type, 0)
9052 || (TYPE_CODE(type) == TYPE_CODE_REF
9053 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0c1f74cf
JB
9054 {
9055 /* Tagged types are a little special in the fact that the real
9056 type is dynamic and can only be determined by inspecting the
9057 object's tag. This means that we need to get the object's
9058 value first (EVAL_NORMAL) and then extract the actual object
9059 type from its tag.
9060
9061 Note that we cannot skip the final step where we extract
9062 the object type from its tag, because the EVAL_NORMAL phase
9063 results in dynamic components being resolved into fixed ones.
9064 This can cause problems when trying to print the type
9065 description of tagged types whose parent has a dynamic size:
9066 We use the type name of the "_parent" component in order
9067 to print the name of the ancestor type in the type description.
9068 If that component had a dynamic size, the resolution into
9069 a fixed type would result in the loss of that type name,
9070 thus preventing us from printing the name of the ancestor
9071 type in the type description. */
b79819ba
JB
9072 struct type *actual_type;
9073
0c1f74cf 9074 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
b79819ba
JB
9075 actual_type = type_from_tag (ada_value_tag (arg1));
9076 if (actual_type == NULL)
9077 /* If, for some reason, we were unable to determine
9078 the actual type from the tag, then use the static
9079 approximation that we just computed as a fallback.
9080 This can happen if the debugging information is
9081 incomplete, for instance. */
9082 actual_type = type;
9083
9084 return value_zero (actual_type, not_lval);
0c1f74cf
JB
9085 }
9086
4c4b4cd2
PH
9087 *pos += 4;
9088 return value_zero
9089 (to_static_fixed_type
9090 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol))),
9091 not_lval);
9092 }
d2e4a39e 9093 else
4c4b4cd2 9094 {
284614f0
JB
9095 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
9096 arg1 = unwrap_value (arg1);
4c4b4cd2
PH
9097 return ada_to_fixed_value (arg1);
9098 }
9099
9100 case OP_FUNCALL:
9101 (*pos) += 2;
9102
9103 /* Allocate arg vector, including space for the function to be
9104 called in argvec[0] and a terminating NULL. */
9105 nargs = longest_to_int (exp->elts[pc + 1].longconst);
9106 argvec =
9107 (struct value **) alloca (sizeof (struct value *) * (nargs + 2));
9108
9109 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 9110 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 9111 error (_("Unexpected unresolved symbol, %s, during evaluation"),
4c4b4cd2
PH
9112 SYMBOL_PRINT_NAME (exp->elts[pc + 5].symbol));
9113 else
9114 {
9115 for (tem = 0; tem <= nargs; tem += 1)
9116 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9117 argvec[tem] = 0;
9118
9119 if (noside == EVAL_SKIP)
9120 goto nosideret;
9121 }
9122
ad82864c
JB
9123 if (ada_is_constrained_packed_array_type
9124 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 9125 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
284614f0
JB
9126 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
9127 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
9128 /* This is a packed array that has already been fixed, and
9129 therefore already coerced to a simple array. Nothing further
9130 to do. */
9131 ;
df407dfe
AC
9132 else if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_REF
9133 || (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_ARRAY
76a01679 9134 && VALUE_LVAL (argvec[0]) == lval_memory))
4c4b4cd2
PH
9135 argvec[0] = value_addr (argvec[0]);
9136
df407dfe 9137 type = ada_check_typedef (value_type (argvec[0]));
4c4b4cd2
PH
9138 if (TYPE_CODE (type) == TYPE_CODE_PTR)
9139 {
61ee279c 9140 switch (TYPE_CODE (ada_check_typedef (TYPE_TARGET_TYPE (type))))
4c4b4cd2
PH
9141 {
9142 case TYPE_CODE_FUNC:
61ee279c 9143 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
9144 break;
9145 case TYPE_CODE_ARRAY:
9146 break;
9147 case TYPE_CODE_STRUCT:
9148 if (noside != EVAL_AVOID_SIDE_EFFECTS)
9149 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 9150 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
9151 break;
9152 default:
323e0a4a 9153 error (_("cannot subscript or call something of type `%s'"),
df407dfe 9154 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
9155 break;
9156 }
9157 }
9158
9159 switch (TYPE_CODE (type))
9160 {
9161 case TYPE_CODE_FUNC:
9162 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9163 return allocate_value (TYPE_TARGET_TYPE (type));
9164 return call_function_by_hand (argvec[0], nargs, argvec + 1);
9165 case TYPE_CODE_STRUCT:
9166 {
9167 int arity;
9168
4c4b4cd2
PH
9169 arity = ada_array_arity (type);
9170 type = ada_array_element_type (type, nargs);
9171 if (type == NULL)
323e0a4a 9172 error (_("cannot subscript or call a record"));
4c4b4cd2 9173 if (arity != nargs)
323e0a4a 9174 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 9175 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 9176 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
9177 return
9178 unwrap_value (ada_value_subscript
9179 (argvec[0], nargs, argvec + 1));
9180 }
9181 case TYPE_CODE_ARRAY:
9182 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9183 {
9184 type = ada_array_element_type (type, nargs);
9185 if (type == NULL)
323e0a4a 9186 error (_("element type of array unknown"));
4c4b4cd2 9187 else
0a07e705 9188 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
9189 }
9190 return
9191 unwrap_value (ada_value_subscript
9192 (ada_coerce_to_simple_array (argvec[0]),
9193 nargs, argvec + 1));
9194 case TYPE_CODE_PTR: /* Pointer to array */
9195 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
9196 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9197 {
9198 type = ada_array_element_type (type, nargs);
9199 if (type == NULL)
323e0a4a 9200 error (_("element type of array unknown"));
4c4b4cd2 9201 else
0a07e705 9202 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
9203 }
9204 return
9205 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
9206 nargs, argvec + 1));
9207
9208 default:
e1d5a0d2
PH
9209 error (_("Attempt to index or call something other than an "
9210 "array or function"));
4c4b4cd2
PH
9211 }
9212
9213 case TERNOP_SLICE:
9214 {
9215 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9216 struct value *low_bound_val =
9217 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
9218 struct value *high_bound_val =
9219 evaluate_subexp (NULL_TYPE, exp, pos, noside);
9220 LONGEST low_bound;
9221 LONGEST high_bound;
5b4ee69b 9222
994b9211
AC
9223 low_bound_val = coerce_ref (low_bound_val);
9224 high_bound_val = coerce_ref (high_bound_val);
714e53ab
PH
9225 low_bound = pos_atr (low_bound_val);
9226 high_bound = pos_atr (high_bound_val);
963a6417 9227
4c4b4cd2
PH
9228 if (noside == EVAL_SKIP)
9229 goto nosideret;
9230
4c4b4cd2
PH
9231 /* If this is a reference to an aligner type, then remove all
9232 the aligners. */
df407dfe
AC
9233 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9234 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
9235 TYPE_TARGET_TYPE (value_type (array)) =
9236 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 9237
ad82864c 9238 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 9239 error (_("cannot slice a packed array"));
4c4b4cd2
PH
9240
9241 /* If this is a reference to an array or an array lvalue,
9242 convert to a pointer. */
df407dfe
AC
9243 if (TYPE_CODE (value_type (array)) == TYPE_CODE_REF
9244 || (TYPE_CODE (value_type (array)) == TYPE_CODE_ARRAY
4c4b4cd2
PH
9245 && VALUE_LVAL (array) == lval_memory))
9246 array = value_addr (array);
9247
1265e4aa 9248 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 9249 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 9250 (value_type (array))))
0b5d8877 9251 return empty_array (ada_type_of_array (array, 0), low_bound);
4c4b4cd2
PH
9252
9253 array = ada_coerce_to_simple_array_ptr (array);
9254
714e53ab
PH
9255 /* If we have more than one level of pointer indirection,
9256 dereference the value until we get only one level. */
df407dfe
AC
9257 while (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR
9258 && (TYPE_CODE (TYPE_TARGET_TYPE (value_type (array)))
714e53ab
PH
9259 == TYPE_CODE_PTR))
9260 array = value_ind (array);
9261
9262 /* Make sure we really do have an array type before going further,
9263 to avoid a SEGV when trying to get the index type or the target
9264 type later down the road if the debug info generated by
9265 the compiler is incorrect or incomplete. */
df407dfe 9266 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 9267 error (_("cannot take slice of non-array"));
714e53ab 9268
df407dfe 9269 if (TYPE_CODE (value_type (array)) == TYPE_CODE_PTR)
4c4b4cd2 9270 {
0b5d8877 9271 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 9272 return empty_array (TYPE_TARGET_TYPE (value_type (array)),
4c4b4cd2
PH
9273 low_bound);
9274 else
9275 {
9276 struct type *arr_type0 =
df407dfe 9277 to_fixed_array_type (TYPE_TARGET_TYPE (value_type (array)),
4c4b4cd2 9278 NULL, 1);
5b4ee69b 9279
f5938064
JG
9280 return ada_value_slice_from_ptr (array, arr_type0,
9281 longest_to_int (low_bound),
9282 longest_to_int (high_bound));
4c4b4cd2
PH
9283 }
9284 }
9285 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9286 return array;
9287 else if (high_bound < low_bound)
df407dfe 9288 return empty_array (value_type (array), low_bound);
4c4b4cd2 9289 else
529cad9c
PH
9290 return ada_value_slice (array, longest_to_int (low_bound),
9291 longest_to_int (high_bound));
4c4b4cd2 9292 }
14f9c5c9 9293
4c4b4cd2
PH
9294 case UNOP_IN_RANGE:
9295 (*pos) += 2;
9296 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 9297 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 9298
14f9c5c9 9299 if (noside == EVAL_SKIP)
4c4b4cd2 9300 goto nosideret;
14f9c5c9 9301
4c4b4cd2
PH
9302 switch (TYPE_CODE (type))
9303 {
9304 default:
e1d5a0d2
PH
9305 lim_warning (_("Membership test incompletely implemented; "
9306 "always returns true"));
fbb06eb1
UW
9307 type = language_bool_type (exp->language_defn, exp->gdbarch);
9308 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
9309
9310 case TYPE_CODE_RANGE:
030b4912
UW
9311 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
9312 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
9313 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9314 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
9315 type = language_bool_type (exp->language_defn, exp->gdbarch);
9316 return
9317 value_from_longest (type,
4c4b4cd2
PH
9318 (value_less (arg1, arg3)
9319 || value_equal (arg1, arg3))
9320 && (value_less (arg2, arg1)
9321 || value_equal (arg2, arg1)));
9322 }
9323
9324 case BINOP_IN_BOUNDS:
14f9c5c9 9325 (*pos) += 2;
4c4b4cd2
PH
9326 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9327 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 9328
4c4b4cd2
PH
9329 if (noside == EVAL_SKIP)
9330 goto nosideret;
14f9c5c9 9331
4c4b4cd2 9332 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
9333 {
9334 type = language_bool_type (exp->language_defn, exp->gdbarch);
9335 return value_zero (type, not_lval);
9336 }
14f9c5c9 9337
4c4b4cd2 9338 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 9339
1eea4ebd
UW
9340 type = ada_index_type (value_type (arg2), tem, "range");
9341 if (!type)
9342 type = value_type (arg1);
14f9c5c9 9343
1eea4ebd
UW
9344 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
9345 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 9346
f44316fa
UW
9347 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9348 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 9349 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 9350 return
fbb06eb1 9351 value_from_longest (type,
4c4b4cd2
PH
9352 (value_less (arg1, arg3)
9353 || value_equal (arg1, arg3))
9354 && (value_less (arg2, arg1)
9355 || value_equal (arg2, arg1)));
9356
9357 case TERNOP_IN_RANGE:
9358 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9359 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9360 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9361
9362 if (noside == EVAL_SKIP)
9363 goto nosideret;
9364
f44316fa
UW
9365 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9366 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 9367 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 9368 return
fbb06eb1 9369 value_from_longest (type,
4c4b4cd2
PH
9370 (value_less (arg1, arg3)
9371 || value_equal (arg1, arg3))
9372 && (value_less (arg2, arg1)
9373 || value_equal (arg2, arg1)));
9374
9375 case OP_ATR_FIRST:
9376 case OP_ATR_LAST:
9377 case OP_ATR_LENGTH:
9378 {
76a01679 9379 struct type *type_arg;
5b4ee69b 9380
76a01679
JB
9381 if (exp->elts[*pos].opcode == OP_TYPE)
9382 {
9383 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
9384 arg1 = NULL;
5bc23cb3 9385 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
9386 }
9387 else
9388 {
9389 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9390 type_arg = NULL;
9391 }
9392
9393 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 9394 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
9395 tem = longest_to_int (exp->elts[*pos + 2].longconst);
9396 *pos += 4;
9397
9398 if (noside == EVAL_SKIP)
9399 goto nosideret;
9400
9401 if (type_arg == NULL)
9402 {
9403 arg1 = ada_coerce_ref (arg1);
9404
ad82864c 9405 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
9406 arg1 = ada_coerce_to_simple_array (arg1);
9407
1eea4ebd
UW
9408 type = ada_index_type (value_type (arg1), tem,
9409 ada_attribute_name (op));
9410 if (type == NULL)
9411 type = builtin_type (exp->gdbarch)->builtin_int;
76a01679
JB
9412
9413 if (noside == EVAL_AVOID_SIDE_EFFECTS)
1eea4ebd 9414 return allocate_value (type);
76a01679
JB
9415
9416 switch (op)
9417 {
9418 default: /* Should never happen. */
323e0a4a 9419 error (_("unexpected attribute encountered"));
76a01679 9420 case OP_ATR_FIRST:
1eea4ebd
UW
9421 return value_from_longest
9422 (type, ada_array_bound (arg1, tem, 0));
76a01679 9423 case OP_ATR_LAST:
1eea4ebd
UW
9424 return value_from_longest
9425 (type, ada_array_bound (arg1, tem, 1));
76a01679 9426 case OP_ATR_LENGTH:
1eea4ebd
UW
9427 return value_from_longest
9428 (type, ada_array_length (arg1, tem));
76a01679
JB
9429 }
9430 }
9431 else if (discrete_type_p (type_arg))
9432 {
9433 struct type *range_type;
9434 char *name = ada_type_name (type_arg);
5b4ee69b 9435
76a01679
JB
9436 range_type = NULL;
9437 if (name != NULL && TYPE_CODE (type_arg) != TYPE_CODE_ENUM)
28c85d6c 9438 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
9439 if (range_type == NULL)
9440 range_type = type_arg;
9441 switch (op)
9442 {
9443 default:
323e0a4a 9444 error (_("unexpected attribute encountered"));
76a01679 9445 case OP_ATR_FIRST:
690cc4eb 9446 return value_from_longest
43bbcdc2 9447 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 9448 case OP_ATR_LAST:
690cc4eb 9449 return value_from_longest
43bbcdc2 9450 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 9451 case OP_ATR_LENGTH:
323e0a4a 9452 error (_("the 'length attribute applies only to array types"));
76a01679
JB
9453 }
9454 }
9455 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
323e0a4a 9456 error (_("unimplemented type attribute"));
76a01679
JB
9457 else
9458 {
9459 LONGEST low, high;
9460
ad82864c
JB
9461 if (ada_is_constrained_packed_array_type (type_arg))
9462 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 9463
1eea4ebd 9464 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
76a01679 9465 if (type == NULL)
1eea4ebd
UW
9466 type = builtin_type (exp->gdbarch)->builtin_int;
9467
76a01679
JB
9468 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9469 return allocate_value (type);
9470
9471 switch (op)
9472 {
9473 default:
323e0a4a 9474 error (_("unexpected attribute encountered"));
76a01679 9475 case OP_ATR_FIRST:
1eea4ebd 9476 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
9477 return value_from_longest (type, low);
9478 case OP_ATR_LAST:
1eea4ebd 9479 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
9480 return value_from_longest (type, high);
9481 case OP_ATR_LENGTH:
1eea4ebd
UW
9482 low = ada_array_bound_from_type (type_arg, tem, 0);
9483 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
9484 return value_from_longest (type, high - low + 1);
9485 }
9486 }
14f9c5c9
AS
9487 }
9488
4c4b4cd2
PH
9489 case OP_ATR_TAG:
9490 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9491 if (noside == EVAL_SKIP)
76a01679 9492 goto nosideret;
4c4b4cd2
PH
9493
9494 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 9495 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
9496
9497 return ada_value_tag (arg1);
9498
9499 case OP_ATR_MIN:
9500 case OP_ATR_MAX:
9501 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
9502 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9503 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9504 if (noside == EVAL_SKIP)
76a01679 9505 goto nosideret;
d2e4a39e 9506 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 9507 return value_zero (value_type (arg1), not_lval);
14f9c5c9 9508 else
f44316fa
UW
9509 {
9510 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9511 return value_binop (arg1, arg2,
9512 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
9513 }
14f9c5c9 9514
4c4b4cd2
PH
9515 case OP_ATR_MODULUS:
9516 {
31dedfee 9517 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 9518
5b4ee69b 9519 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
9520 if (noside == EVAL_SKIP)
9521 goto nosideret;
4c4b4cd2 9522
76a01679 9523 if (!ada_is_modular_type (type_arg))
323e0a4a 9524 error (_("'modulus must be applied to modular type"));
4c4b4cd2 9525
76a01679
JB
9526 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
9527 ada_modulus (type_arg));
4c4b4cd2
PH
9528 }
9529
9530
9531 case OP_ATR_POS:
9532 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
9533 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9534 if (noside == EVAL_SKIP)
76a01679 9535 goto nosideret;
3cb382c9
UW
9536 type = builtin_type (exp->gdbarch)->builtin_int;
9537 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9538 return value_zero (type, not_lval);
14f9c5c9 9539 else
3cb382c9 9540 return value_pos_atr (type, arg1);
14f9c5c9 9541
4c4b4cd2
PH
9542 case OP_ATR_SIZE:
9543 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
9544 type = value_type (arg1);
9545
9546 /* If the argument is a reference, then dereference its type, since
9547 the user is really asking for the size of the actual object,
9548 not the size of the pointer. */
9549 if (TYPE_CODE (type) == TYPE_CODE_REF)
9550 type = TYPE_TARGET_TYPE (type);
9551
4c4b4cd2 9552 if (noside == EVAL_SKIP)
76a01679 9553 goto nosideret;
4c4b4cd2 9554 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 9555 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 9556 else
22601c15 9557 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 9558 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
9559
9560 case OP_ATR_VAL:
9561 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 9562 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 9563 type = exp->elts[pc + 2].type;
14f9c5c9 9564 if (noside == EVAL_SKIP)
76a01679 9565 goto nosideret;
4c4b4cd2 9566 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 9567 return value_zero (type, not_lval);
4c4b4cd2 9568 else
76a01679 9569 return value_val_atr (type, arg1);
4c4b4cd2
PH
9570
9571 case BINOP_EXP:
9572 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9573 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9574 if (noside == EVAL_SKIP)
9575 goto nosideret;
9576 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 9577 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 9578 else
f44316fa
UW
9579 {
9580 /* For integer exponentiation operations,
9581 only promote the first argument. */
9582 if (is_integral_type (value_type (arg2)))
9583 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9584 else
9585 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9586
9587 return value_binop (arg1, arg2, op);
9588 }
4c4b4cd2
PH
9589
9590 case UNOP_PLUS:
9591 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9592 if (noside == EVAL_SKIP)
9593 goto nosideret;
9594 else
9595 return arg1;
9596
9597 case UNOP_ABS:
9598 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9599 if (noside == EVAL_SKIP)
9600 goto nosideret;
f44316fa 9601 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 9602 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 9603 return value_neg (arg1);
14f9c5c9 9604 else
4c4b4cd2 9605 return arg1;
14f9c5c9
AS
9606
9607 case UNOP_IND:
6b0d7253 9608 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 9609 if (noside == EVAL_SKIP)
4c4b4cd2 9610 goto nosideret;
df407dfe 9611 type = ada_check_typedef (value_type (arg1));
14f9c5c9 9612 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
9613 {
9614 if (ada_is_array_descriptor_type (type))
9615 /* GDB allows dereferencing GNAT array descriptors. */
9616 {
9617 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 9618
4c4b4cd2 9619 if (arrType == NULL)
323e0a4a 9620 error (_("Attempt to dereference null array pointer."));
00a4c844 9621 return value_at_lazy (arrType, 0);
4c4b4cd2
PH
9622 }
9623 else if (TYPE_CODE (type) == TYPE_CODE_PTR
9624 || TYPE_CODE (type) == TYPE_CODE_REF
9625 /* In C you can dereference an array to get the 1st elt. */
9626 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
714e53ab
PH
9627 {
9628 type = to_static_fixed_type
9629 (ada_aligned_type
9630 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
9631 check_size (type);
9632 return value_zero (type, lval_memory);
9633 }
4c4b4cd2 9634 else if (TYPE_CODE (type) == TYPE_CODE_INT)
6b0d7253
JB
9635 {
9636 /* GDB allows dereferencing an int. */
9637 if (expect_type == NULL)
9638 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
9639 lval_memory);
9640 else
9641 {
9642 expect_type =
9643 to_static_fixed_type (ada_aligned_type (expect_type));
9644 return value_zero (expect_type, lval_memory);
9645 }
9646 }
4c4b4cd2 9647 else
323e0a4a 9648 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 9649 }
76a01679 9650 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 9651 type = ada_check_typedef (value_type (arg1));
d2e4a39e 9652
96967637
JB
9653 if (TYPE_CODE (type) == TYPE_CODE_INT)
9654 /* GDB allows dereferencing an int. If we were given
9655 the expect_type, then use that as the target type.
9656 Otherwise, assume that the target type is an int. */
9657 {
9658 if (expect_type != NULL)
9659 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
9660 arg1));
9661 else
9662 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
9663 (CORE_ADDR) value_as_address (arg1));
9664 }
6b0d7253 9665
4c4b4cd2
PH
9666 if (ada_is_array_descriptor_type (type))
9667 /* GDB allows dereferencing GNAT array descriptors. */
9668 return ada_coerce_to_simple_array (arg1);
14f9c5c9 9669 else
4c4b4cd2 9670 return ada_value_ind (arg1);
14f9c5c9
AS
9671
9672 case STRUCTOP_STRUCT:
9673 tem = longest_to_int (exp->elts[pc + 1].longconst);
9674 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
9675 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
9676 if (noside == EVAL_SKIP)
4c4b4cd2 9677 goto nosideret;
14f9c5c9 9678 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 9679 {
df407dfe 9680 struct type *type1 = value_type (arg1);
5b4ee69b 9681
76a01679
JB
9682 if (ada_is_tagged_type (type1, 1))
9683 {
9684 type = ada_lookup_struct_elt_type (type1,
9685 &exp->elts[pc + 2].string,
9686 1, 1, NULL);
9687 if (type == NULL)
9688 /* In this case, we assume that the field COULD exist
9689 in some extension of the type. Return an object of
9690 "type" void, which will match any formal
9691 (see ada_type_match). */
30b15541
UW
9692 return value_zero (builtin_type (exp->gdbarch)->builtin_void,
9693 lval_memory);
76a01679
JB
9694 }
9695 else
9696 type =
9697 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
9698 0, NULL);
9699
9700 return value_zero (ada_aligned_type (type), lval_memory);
9701 }
14f9c5c9 9702 else
284614f0
JB
9703 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
9704 arg1 = unwrap_value (arg1);
9705 return ada_to_fixed_value (arg1);
9706
14f9c5c9 9707 case OP_TYPE:
4c4b4cd2
PH
9708 /* The value is not supposed to be used. This is here to make it
9709 easier to accommodate expressions that contain types. */
14f9c5c9
AS
9710 (*pos) += 2;
9711 if (noside == EVAL_SKIP)
4c4b4cd2 9712 goto nosideret;
14f9c5c9 9713 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 9714 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 9715 else
323e0a4a 9716 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
9717
9718 case OP_AGGREGATE:
9719 case OP_CHOICES:
9720 case OP_OTHERS:
9721 case OP_DISCRETE_RANGE:
9722 case OP_POSITIONAL:
9723 case OP_NAME:
9724 if (noside == EVAL_NORMAL)
9725 switch (op)
9726 {
9727 case OP_NAME:
9728 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 9729 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
9730 case OP_AGGREGATE:
9731 error (_("Aggregates only allowed on the right of an assignment"));
9732 default:
e1d5a0d2 9733 internal_error (__FILE__, __LINE__, _("aggregate apparently mangled"));
52ce6436
PH
9734 }
9735
9736 ada_forward_operator_length (exp, pc, &oplen, &nargs);
9737 *pos += oplen - 1;
9738 for (tem = 0; tem < nargs; tem += 1)
9739 ada_evaluate_subexp (NULL, exp, pos, noside);
9740 goto nosideret;
14f9c5c9
AS
9741 }
9742
9743nosideret:
22601c15 9744 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
14f9c5c9 9745}
14f9c5c9 9746\f
d2e4a39e 9747
4c4b4cd2 9748 /* Fixed point */
14f9c5c9
AS
9749
9750/* If TYPE encodes an Ada fixed-point type, return the suffix of the
9751 type name that encodes the 'small and 'delta information.
4c4b4cd2 9752 Otherwise, return NULL. */
14f9c5c9 9753
d2e4a39e 9754static const char *
ebf56fd3 9755fixed_type_info (struct type *type)
14f9c5c9 9756{
d2e4a39e 9757 const char *name = ada_type_name (type);
14f9c5c9
AS
9758 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
9759
d2e4a39e
AS
9760 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
9761 {
14f9c5c9 9762 const char *tail = strstr (name, "___XF_");
5b4ee69b 9763
14f9c5c9 9764 if (tail == NULL)
4c4b4cd2 9765 return NULL;
d2e4a39e 9766 else
4c4b4cd2 9767 return tail + 5;
14f9c5c9
AS
9768 }
9769 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
9770 return fixed_type_info (TYPE_TARGET_TYPE (type));
9771 else
9772 return NULL;
9773}
9774
4c4b4cd2 9775/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
9776
9777int
ebf56fd3 9778ada_is_fixed_point_type (struct type *type)
14f9c5c9
AS
9779{
9780 return fixed_type_info (type) != NULL;
9781}
9782
4c4b4cd2
PH
9783/* Return non-zero iff TYPE represents a System.Address type. */
9784
9785int
9786ada_is_system_address_type (struct type *type)
9787{
9788 return (TYPE_NAME (type)
9789 && strcmp (TYPE_NAME (type), "system__address") == 0);
9790}
9791
14f9c5c9
AS
9792/* Assuming that TYPE is the representation of an Ada fixed-point
9793 type, return its delta, or -1 if the type is malformed and the
4c4b4cd2 9794 delta cannot be determined. */
14f9c5c9
AS
9795
9796DOUBLEST
ebf56fd3 9797ada_delta (struct type *type)
14f9c5c9
AS
9798{
9799 const char *encoding = fixed_type_info (type);
facc390f 9800 DOUBLEST num, den;
14f9c5c9 9801
facc390f
JB
9802 /* Strictly speaking, num and den are encoded as integer. However,
9803 they may not fit into a long, and they will have to be converted
9804 to DOUBLEST anyway. So scan them as DOUBLEST. */
9805 if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9806 &num, &den) < 2)
14f9c5c9 9807 return -1.0;
d2e4a39e 9808 else
facc390f 9809 return num / den;
14f9c5c9
AS
9810}
9811
9812/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
4c4b4cd2 9813 factor ('SMALL value) associated with the type. */
14f9c5c9
AS
9814
9815static DOUBLEST
ebf56fd3 9816scaling_factor (struct type *type)
14f9c5c9
AS
9817{
9818 const char *encoding = fixed_type_info (type);
facc390f 9819 DOUBLEST num0, den0, num1, den1;
14f9c5c9 9820 int n;
d2e4a39e 9821
facc390f
JB
9822 /* Strictly speaking, num's and den's are encoded as integer. However,
9823 they may not fit into a long, and they will have to be converted
9824 to DOUBLEST anyway. So scan them as DOUBLEST. */
9825 n = sscanf (encoding,
9826 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT
9827 "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT,
9828 &num0, &den0, &num1, &den1);
14f9c5c9
AS
9829
9830 if (n < 2)
9831 return 1.0;
9832 else if (n == 4)
facc390f 9833 return num1 / den1;
d2e4a39e 9834 else
facc390f 9835 return num0 / den0;
14f9c5c9
AS
9836}
9837
9838
9839/* Assuming that X is the representation of a value of fixed-point
4c4b4cd2 9840 type TYPE, return its floating-point equivalent. */
14f9c5c9
AS
9841
9842DOUBLEST
ebf56fd3 9843ada_fixed_to_float (struct type *type, LONGEST x)
14f9c5c9 9844{
d2e4a39e 9845 return (DOUBLEST) x *scaling_factor (type);
14f9c5c9
AS
9846}
9847
4c4b4cd2
PH
9848/* The representation of a fixed-point value of type TYPE
9849 corresponding to the value X. */
14f9c5c9
AS
9850
9851LONGEST
ebf56fd3 9852ada_float_to_fixed (struct type *type, DOUBLEST x)
14f9c5c9
AS
9853{
9854 return (LONGEST) (x / scaling_factor (type) + 0.5);
9855}
9856
14f9c5c9 9857\f
d2e4a39e 9858
4c4b4cd2 9859 /* Range types */
14f9c5c9
AS
9860
9861/* Scan STR beginning at position K for a discriminant name, and
9862 return the value of that discriminant field of DVAL in *PX. If
9863 PNEW_K is not null, put the position of the character beyond the
9864 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 9865 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
9866
9867static int
07d8f827 9868scan_discrim_bound (char *str, int k, struct value *dval, LONGEST * px,
76a01679 9869 int *pnew_k)
14f9c5c9
AS
9870{
9871 static char *bound_buffer = NULL;
9872 static size_t bound_buffer_len = 0;
9873 char *bound;
9874 char *pend;
d2e4a39e 9875 struct value *bound_val;
14f9c5c9
AS
9876
9877 if (dval == NULL || str == NULL || str[k] == '\0')
9878 return 0;
9879
d2e4a39e 9880 pend = strstr (str + k, "__");
14f9c5c9
AS
9881 if (pend == NULL)
9882 {
d2e4a39e 9883 bound = str + k;
14f9c5c9
AS
9884 k += strlen (bound);
9885 }
d2e4a39e 9886 else
14f9c5c9 9887 {
d2e4a39e 9888 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str + k) + 1);
14f9c5c9 9889 bound = bound_buffer;
d2e4a39e
AS
9890 strncpy (bound_buffer, str + k, pend - (str + k));
9891 bound[pend - (str + k)] = '\0';
9892 k = pend - str;
14f9c5c9 9893 }
d2e4a39e 9894
df407dfe 9895 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
9896 if (bound_val == NULL)
9897 return 0;
9898
9899 *px = value_as_long (bound_val);
9900 if (pnew_k != NULL)
9901 *pnew_k = k;
9902 return 1;
9903}
9904
9905/* Value of variable named NAME in the current environment. If
9906 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
9907 otherwise causes an error with message ERR_MSG. */
9908
d2e4a39e
AS
9909static struct value *
9910get_var_value (char *name, char *err_msg)
14f9c5c9 9911{
4c4b4cd2 9912 struct ada_symbol_info *syms;
14f9c5c9
AS
9913 int nsyms;
9914
4c4b4cd2
PH
9915 nsyms = ada_lookup_symbol_list (name, get_selected_block (0), VAR_DOMAIN,
9916 &syms);
14f9c5c9
AS
9917
9918 if (nsyms != 1)
9919 {
9920 if (err_msg == NULL)
4c4b4cd2 9921 return 0;
14f9c5c9 9922 else
8a3fe4f8 9923 error (("%s"), err_msg);
14f9c5c9
AS
9924 }
9925
4c4b4cd2 9926 return value_of_variable (syms[0].sym, syms[0].block);
14f9c5c9 9927}
d2e4a39e 9928
14f9c5c9 9929/* Value of integer variable named NAME in the current environment. If
4c4b4cd2
PH
9930 no such variable found, returns 0, and sets *FLAG to 0. If
9931 successful, sets *FLAG to 1. */
9932
14f9c5c9 9933LONGEST
4c4b4cd2 9934get_int_var_value (char *name, int *flag)
14f9c5c9 9935{
4c4b4cd2 9936 struct value *var_val = get_var_value (name, 0);
d2e4a39e 9937
14f9c5c9
AS
9938 if (var_val == 0)
9939 {
9940 if (flag != NULL)
4c4b4cd2 9941 *flag = 0;
14f9c5c9
AS
9942 return 0;
9943 }
9944 else
9945 {
9946 if (flag != NULL)
4c4b4cd2 9947 *flag = 1;
14f9c5c9
AS
9948 return value_as_long (var_val);
9949 }
9950}
d2e4a39e 9951
14f9c5c9
AS
9952
9953/* Return a range type whose base type is that of the range type named
9954 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 9955 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
9956 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
9957 corresponding range type from debug information; fall back to using it
9958 if symbol lookup fails. If a new type must be created, allocate it
9959 like ORIG_TYPE was. The bounds information, in general, is encoded
9960 in NAME, the base type given in the named range type. */
14f9c5c9 9961
d2e4a39e 9962static struct type *
28c85d6c 9963to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 9964{
28c85d6c 9965 char *name;
14f9c5c9 9966 struct type *base_type;
d2e4a39e 9967 char *subtype_info;
14f9c5c9 9968
28c85d6c
JB
9969 gdb_assert (raw_type != NULL);
9970 gdb_assert (TYPE_NAME (raw_type) != NULL);
dddfab26 9971
1ce677a4 9972 if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
14f9c5c9
AS
9973 base_type = TYPE_TARGET_TYPE (raw_type);
9974 else
9975 base_type = raw_type;
9976
28c85d6c 9977 name = TYPE_NAME (raw_type);
14f9c5c9
AS
9978 subtype_info = strstr (name, "___XD");
9979 if (subtype_info == NULL)
690cc4eb 9980 {
43bbcdc2
PH
9981 LONGEST L = ada_discrete_type_low_bound (raw_type);
9982 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 9983
690cc4eb
PH
9984 if (L < INT_MIN || U > INT_MAX)
9985 return raw_type;
9986 else
28c85d6c 9987 return create_range_type (alloc_type_copy (raw_type), raw_type,
43bbcdc2
PH
9988 ada_discrete_type_low_bound (raw_type),
9989 ada_discrete_type_high_bound (raw_type));
690cc4eb 9990 }
14f9c5c9
AS
9991 else
9992 {
9993 static char *name_buf = NULL;
9994 static size_t name_len = 0;
9995 int prefix_len = subtype_info - name;
9996 LONGEST L, U;
9997 struct type *type;
9998 char *bounds_str;
9999 int n;
10000
10001 GROW_VECT (name_buf, name_len, prefix_len + 5);
10002 strncpy (name_buf, name, prefix_len);
10003 name_buf[prefix_len] = '\0';
10004
10005 subtype_info += 5;
10006 bounds_str = strchr (subtype_info, '_');
10007 n = 1;
10008
d2e4a39e 10009 if (*subtype_info == 'L')
4c4b4cd2
PH
10010 {
10011 if (!ada_scan_number (bounds_str, n, &L, &n)
10012 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
10013 return raw_type;
10014 if (bounds_str[n] == '_')
10015 n += 2;
10016 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
10017 n += 1;
10018 subtype_info += 1;
10019 }
d2e4a39e 10020 else
4c4b4cd2
PH
10021 {
10022 int ok;
5b4ee69b 10023
4c4b4cd2
PH
10024 strcpy (name_buf + prefix_len, "___L");
10025 L = get_int_var_value (name_buf, &ok);
10026 if (!ok)
10027 {
323e0a4a 10028 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
10029 L = 1;
10030 }
10031 }
14f9c5c9 10032
d2e4a39e 10033 if (*subtype_info == 'U')
4c4b4cd2
PH
10034 {
10035 if (!ada_scan_number (bounds_str, n, &U, &n)
10036 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
10037 return raw_type;
10038 }
d2e4a39e 10039 else
4c4b4cd2
PH
10040 {
10041 int ok;
5b4ee69b 10042
4c4b4cd2
PH
10043 strcpy (name_buf + prefix_len, "___U");
10044 U = get_int_var_value (name_buf, &ok);
10045 if (!ok)
10046 {
323e0a4a 10047 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
10048 U = L;
10049 }
10050 }
14f9c5c9 10051
28c85d6c 10052 type = create_range_type (alloc_type_copy (raw_type), base_type, L, U);
d2e4a39e 10053 TYPE_NAME (type) = name;
14f9c5c9
AS
10054 return type;
10055 }
10056}
10057
4c4b4cd2
PH
10058/* True iff NAME is the name of a range type. */
10059
14f9c5c9 10060int
d2e4a39e 10061ada_is_range_type_name (const char *name)
14f9c5c9
AS
10062{
10063 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 10064}
14f9c5c9 10065\f
d2e4a39e 10066
4c4b4cd2
PH
10067 /* Modular types */
10068
10069/* True iff TYPE is an Ada modular type. */
14f9c5c9 10070
14f9c5c9 10071int
d2e4a39e 10072ada_is_modular_type (struct type *type)
14f9c5c9 10073{
4c4b4cd2 10074 struct type *subranged_type = base_type (type);
14f9c5c9
AS
10075
10076 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
690cc4eb 10077 && TYPE_CODE (subranged_type) == TYPE_CODE_INT
4c4b4cd2 10078 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
10079}
10080
0056e4d5
JB
10081/* Try to determine the lower and upper bounds of the given modular type
10082 using the type name only. Return non-zero and set L and U as the lower
10083 and upper bounds (respectively) if successful. */
10084
10085int
10086ada_modulus_from_name (struct type *type, ULONGEST *modulus)
10087{
10088 char *name = ada_type_name (type);
10089 char *suffix;
10090 int k;
10091 LONGEST U;
10092
10093 if (name == NULL)
10094 return 0;
10095
10096 /* Discrete type bounds are encoded using an __XD suffix. In our case,
10097 we are looking for static bounds, which means an __XDLU suffix.
10098 Moreover, we know that the lower bound of modular types is always
10099 zero, so the actual suffix should start with "__XDLU_0__", and
10100 then be followed by the upper bound value. */
10101 suffix = strstr (name, "__XDLU_0__");
10102 if (suffix == NULL)
10103 return 0;
10104 k = 10;
10105 if (!ada_scan_number (suffix, k, &U, NULL))
10106 return 0;
10107
10108 *modulus = (ULONGEST) U + 1;
10109 return 1;
10110}
10111
4c4b4cd2
PH
10112/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
10113
61ee279c 10114ULONGEST
0056e4d5 10115ada_modulus (struct type *type)
14f9c5c9 10116{
43bbcdc2 10117 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 10118}
d2e4a39e 10119\f
f7f9143b
JB
10120
10121/* Ada exception catchpoint support:
10122 ---------------------------------
10123
10124 We support 3 kinds of exception catchpoints:
10125 . catchpoints on Ada exceptions
10126 . catchpoints on unhandled Ada exceptions
10127 . catchpoints on failed assertions
10128
10129 Exceptions raised during failed assertions, or unhandled exceptions
10130 could perfectly be caught with the general catchpoint on Ada exceptions.
10131 However, we can easily differentiate these two special cases, and having
10132 the option to distinguish these two cases from the rest can be useful
10133 to zero-in on certain situations.
10134
10135 Exception catchpoints are a specialized form of breakpoint,
10136 since they rely on inserting breakpoints inside known routines
10137 of the GNAT runtime. The implementation therefore uses a standard
10138 breakpoint structure of the BP_BREAKPOINT type, but with its own set
10139 of breakpoint_ops.
10140
0259addd
JB
10141 Support in the runtime for exception catchpoints have been changed
10142 a few times already, and these changes affect the implementation
10143 of these catchpoints. In order to be able to support several
10144 variants of the runtime, we use a sniffer that will determine
10145 the runtime variant used by the program being debugged.
10146
f7f9143b
JB
10147 At this time, we do not support the use of conditions on Ada exception
10148 catchpoints. The COND and COND_STRING fields are therefore set
10149 to NULL (most of the time, see below).
10150
10151 Conditions where EXP_STRING, COND, and COND_STRING are used:
10152
10153 When a user specifies the name of a specific exception in the case
10154 of catchpoints on Ada exceptions, we store the name of that exception
10155 in the EXP_STRING. We then translate this request into an actual
10156 condition stored in COND_STRING, and then parse it into an expression
10157 stored in COND. */
10158
10159/* The different types of catchpoints that we introduced for catching
10160 Ada exceptions. */
10161
10162enum exception_catchpoint_kind
10163{
10164 ex_catch_exception,
10165 ex_catch_exception_unhandled,
10166 ex_catch_assert
10167};
10168
3d0b0fa3
JB
10169/* Ada's standard exceptions. */
10170
10171static char *standard_exc[] = {
10172 "constraint_error",
10173 "program_error",
10174 "storage_error",
10175 "tasking_error"
10176};
10177
0259addd
JB
10178typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
10179
10180/* A structure that describes how to support exception catchpoints
10181 for a given executable. */
10182
10183struct exception_support_info
10184{
10185 /* The name of the symbol to break on in order to insert
10186 a catchpoint on exceptions. */
10187 const char *catch_exception_sym;
10188
10189 /* The name of the symbol to break on in order to insert
10190 a catchpoint on unhandled exceptions. */
10191 const char *catch_exception_unhandled_sym;
10192
10193 /* The name of the symbol to break on in order to insert
10194 a catchpoint on failed assertions. */
10195 const char *catch_assert_sym;
10196
10197 /* Assuming that the inferior just triggered an unhandled exception
10198 catchpoint, this function is responsible for returning the address
10199 in inferior memory where the name of that exception is stored.
10200 Return zero if the address could not be computed. */
10201 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
10202};
10203
10204static CORE_ADDR ada_unhandled_exception_name_addr (void);
10205static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
10206
10207/* The following exception support info structure describes how to
10208 implement exception catchpoints with the latest version of the
10209 Ada runtime (as of 2007-03-06). */
10210
10211static const struct exception_support_info default_exception_support_info =
10212{
10213 "__gnat_debug_raise_exception", /* catch_exception_sym */
10214 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10215 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
10216 ada_unhandled_exception_name_addr
10217};
10218
10219/* The following exception support info structure describes how to
10220 implement exception catchpoints with a slightly older version
10221 of the Ada runtime. */
10222
10223static const struct exception_support_info exception_support_info_fallback =
10224{
10225 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
10226 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
10227 "system__assertions__raise_assert_failure", /* catch_assert_sym */
10228 ada_unhandled_exception_name_addr_from_raise
10229};
10230
10231/* For each executable, we sniff which exception info structure to use
10232 and cache it in the following global variable. */
10233
10234static const struct exception_support_info *exception_info = NULL;
10235
10236/* Inspect the Ada runtime and determine which exception info structure
10237 should be used to provide support for exception catchpoints.
10238
10239 This function will always set exception_info, or raise an error. */
10240
10241static void
10242ada_exception_support_info_sniffer (void)
10243{
10244 struct symbol *sym;
10245
10246 /* If the exception info is already known, then no need to recompute it. */
10247 if (exception_info != NULL)
10248 return;
10249
10250 /* Check the latest (default) exception support info. */
10251 sym = standard_lookup (default_exception_support_info.catch_exception_sym,
10252 NULL, VAR_DOMAIN);
10253 if (sym != NULL)
10254 {
10255 exception_info = &default_exception_support_info;
10256 return;
10257 }
10258
10259 /* Try our fallback exception suport info. */
10260 sym = standard_lookup (exception_support_info_fallback.catch_exception_sym,
10261 NULL, VAR_DOMAIN);
10262 if (sym != NULL)
10263 {
10264 exception_info = &exception_support_info_fallback;
10265 return;
10266 }
10267
10268 /* Sometimes, it is normal for us to not be able to find the routine
10269 we are looking for. This happens when the program is linked with
10270 the shared version of the GNAT runtime, and the program has not been
10271 started yet. Inform the user of these two possible causes if
10272 applicable. */
10273
ccefe4c4 10274 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
10275 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
10276
10277 /* If the symbol does not exist, then check that the program is
10278 already started, to make sure that shared libraries have been
10279 loaded. If it is not started, this may mean that the symbol is
10280 in a shared library. */
10281
10282 if (ptid_get_pid (inferior_ptid) == 0)
10283 error (_("Unable to insert catchpoint. Try to start the program first."));
10284
10285 /* At this point, we know that we are debugging an Ada program and
10286 that the inferior has been started, but we still are not able to
10287 find the run-time symbols. That can mean that we are in
10288 configurable run time mode, or that a-except as been optimized
10289 out by the linker... In any case, at this point it is not worth
10290 supporting this feature. */
10291
10292 error (_("Cannot insert catchpoints in this configuration."));
10293}
10294
10295/* An observer of "executable_changed" events.
10296 Its role is to clear certain cached values that need to be recomputed
10297 each time a new executable is loaded by GDB. */
10298
10299static void
781b42b0 10300ada_executable_changed_observer (void)
0259addd
JB
10301{
10302 /* If the executable changed, then it is possible that the Ada runtime
10303 is different. So we need to invalidate the exception support info
10304 cache. */
10305 exception_info = NULL;
10306}
10307
f7f9143b
JB
10308/* True iff FRAME is very likely to be that of a function that is
10309 part of the runtime system. This is all very heuristic, but is
10310 intended to be used as advice as to what frames are uninteresting
10311 to most users. */
10312
10313static int
10314is_known_support_routine (struct frame_info *frame)
10315{
4ed6b5be 10316 struct symtab_and_line sal;
f7f9143b 10317 char *func_name;
692465f1 10318 enum language func_lang;
f7f9143b 10319 int i;
f7f9143b 10320
4ed6b5be
JB
10321 /* If this code does not have any debugging information (no symtab),
10322 This cannot be any user code. */
f7f9143b 10323
4ed6b5be 10324 find_frame_sal (frame, &sal);
f7f9143b
JB
10325 if (sal.symtab == NULL)
10326 return 1;
10327
4ed6b5be
JB
10328 /* If there is a symtab, but the associated source file cannot be
10329 located, then assume this is not user code: Selecting a frame
10330 for which we cannot display the code would not be very helpful
10331 for the user. This should also take care of case such as VxWorks
10332 where the kernel has some debugging info provided for a few units. */
f7f9143b 10333
9bbc9174 10334 if (symtab_to_fullname (sal.symtab) == NULL)
f7f9143b
JB
10335 return 1;
10336
4ed6b5be
JB
10337 /* Check the unit filename againt the Ada runtime file naming.
10338 We also check the name of the objfile against the name of some
10339 known system libraries that sometimes come with debugging info
10340 too. */
10341
f7f9143b
JB
10342 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
10343 {
10344 re_comp (known_runtime_file_name_patterns[i]);
10345 if (re_exec (sal.symtab->filename))
10346 return 1;
4ed6b5be
JB
10347 if (sal.symtab->objfile != NULL
10348 && re_exec (sal.symtab->objfile->name))
10349 return 1;
f7f9143b
JB
10350 }
10351
4ed6b5be 10352 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 10353
e9e07ba6 10354 find_frame_funname (frame, &func_name, &func_lang, NULL);
f7f9143b
JB
10355 if (func_name == NULL)
10356 return 1;
10357
10358 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
10359 {
10360 re_comp (known_auxiliary_function_name_patterns[i]);
10361 if (re_exec (func_name))
10362 return 1;
10363 }
10364
10365 return 0;
10366}
10367
10368/* Find the first frame that contains debugging information and that is not
10369 part of the Ada run-time, starting from FI and moving upward. */
10370
0ef643c8 10371void
f7f9143b
JB
10372ada_find_printable_frame (struct frame_info *fi)
10373{
10374 for (; fi != NULL; fi = get_prev_frame (fi))
10375 {
10376 if (!is_known_support_routine (fi))
10377 {
10378 select_frame (fi);
10379 break;
10380 }
10381 }
10382
10383}
10384
10385/* Assuming that the inferior just triggered an unhandled exception
10386 catchpoint, return the address in inferior memory where the name
10387 of the exception is stored.
10388
10389 Return zero if the address could not be computed. */
10390
10391static CORE_ADDR
10392ada_unhandled_exception_name_addr (void)
0259addd
JB
10393{
10394 return parse_and_eval_address ("e.full_name");
10395}
10396
10397/* Same as ada_unhandled_exception_name_addr, except that this function
10398 should be used when the inferior uses an older version of the runtime,
10399 where the exception name needs to be extracted from a specific frame
10400 several frames up in the callstack. */
10401
10402static CORE_ADDR
10403ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
10404{
10405 int frame_level;
10406 struct frame_info *fi;
10407
10408 /* To determine the name of this exception, we need to select
10409 the frame corresponding to RAISE_SYM_NAME. This frame is
10410 at least 3 levels up, so we simply skip the first 3 frames
10411 without checking the name of their associated function. */
10412 fi = get_current_frame ();
10413 for (frame_level = 0; frame_level < 3; frame_level += 1)
10414 if (fi != NULL)
10415 fi = get_prev_frame (fi);
10416
10417 while (fi != NULL)
10418 {
692465f1
JB
10419 char *func_name;
10420 enum language func_lang;
10421
e9e07ba6 10422 find_frame_funname (fi, &func_name, &func_lang, NULL);
f7f9143b 10423 if (func_name != NULL
0259addd 10424 && strcmp (func_name, exception_info->catch_exception_sym) == 0)
f7f9143b
JB
10425 break; /* We found the frame we were looking for... */
10426 fi = get_prev_frame (fi);
10427 }
10428
10429 if (fi == NULL)
10430 return 0;
10431
10432 select_frame (fi);
10433 return parse_and_eval_address ("id.full_name");
10434}
10435
10436/* Assuming the inferior just triggered an Ada exception catchpoint
10437 (of any type), return the address in inferior memory where the name
10438 of the exception is stored, if applicable.
10439
10440 Return zero if the address could not be computed, or if not relevant. */
10441
10442static CORE_ADDR
10443ada_exception_name_addr_1 (enum exception_catchpoint_kind ex,
10444 struct breakpoint *b)
10445{
10446 switch (ex)
10447 {
10448 case ex_catch_exception:
10449 return (parse_and_eval_address ("e.full_name"));
10450 break;
10451
10452 case ex_catch_exception_unhandled:
0259addd 10453 return exception_info->unhandled_exception_name_addr ();
f7f9143b
JB
10454 break;
10455
10456 case ex_catch_assert:
10457 return 0; /* Exception name is not relevant in this case. */
10458 break;
10459
10460 default:
10461 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10462 break;
10463 }
10464
10465 return 0; /* Should never be reached. */
10466}
10467
10468/* Same as ada_exception_name_addr_1, except that it intercepts and contains
10469 any error that ada_exception_name_addr_1 might cause to be thrown.
10470 When an error is intercepted, a warning with the error message is printed,
10471 and zero is returned. */
10472
10473static CORE_ADDR
10474ada_exception_name_addr (enum exception_catchpoint_kind ex,
10475 struct breakpoint *b)
10476{
10477 struct gdb_exception e;
10478 CORE_ADDR result = 0;
10479
10480 TRY_CATCH (e, RETURN_MASK_ERROR)
10481 {
10482 result = ada_exception_name_addr_1 (ex, b);
10483 }
10484
10485 if (e.reason < 0)
10486 {
10487 warning (_("failed to get exception name: %s"), e.message);
10488 return 0;
10489 }
10490
10491 return result;
10492}
10493
10494/* Implement the PRINT_IT method in the breakpoint_ops structure
10495 for all exception catchpoint kinds. */
10496
10497static enum print_stop_action
10498print_it_exception (enum exception_catchpoint_kind ex, struct breakpoint *b)
10499{
10500 const CORE_ADDR addr = ada_exception_name_addr (ex, b);
10501 char exception_name[256];
10502
10503 if (addr != 0)
10504 {
10505 read_memory (addr, exception_name, sizeof (exception_name) - 1);
10506 exception_name [sizeof (exception_name) - 1] = '\0';
10507 }
10508
10509 ada_find_printable_frame (get_current_frame ());
10510
10511 annotate_catchpoint (b->number);
10512 switch (ex)
10513 {
10514 case ex_catch_exception:
10515 if (addr != 0)
10516 printf_filtered (_("\nCatchpoint %d, %s at "),
10517 b->number, exception_name);
10518 else
10519 printf_filtered (_("\nCatchpoint %d, exception at "), b->number);
10520 break;
10521 case ex_catch_exception_unhandled:
10522 if (addr != 0)
10523 printf_filtered (_("\nCatchpoint %d, unhandled %s at "),
10524 b->number, exception_name);
10525 else
10526 printf_filtered (_("\nCatchpoint %d, unhandled exception at "),
10527 b->number);
10528 break;
10529 case ex_catch_assert:
10530 printf_filtered (_("\nCatchpoint %d, failed assertion at "),
10531 b->number);
10532 break;
10533 }
10534
10535 return PRINT_SRC_AND_LOC;
10536}
10537
10538/* Implement the PRINT_ONE method in the breakpoint_ops structure
10539 for all exception catchpoint kinds. */
10540
10541static void
10542print_one_exception (enum exception_catchpoint_kind ex,
a6d9a66e 10543 struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 10544{
79a45b7d
TT
10545 struct value_print_options opts;
10546
10547 get_user_print_options (&opts);
10548 if (opts.addressprint)
f7f9143b
JB
10549 {
10550 annotate_field (4);
5af949e3 10551 ui_out_field_core_addr (uiout, "addr", b->loc->gdbarch, b->loc->address);
f7f9143b
JB
10552 }
10553
10554 annotate_field (5);
a6d9a66e 10555 *last_loc = b->loc;
f7f9143b
JB
10556 switch (ex)
10557 {
10558 case ex_catch_exception:
10559 if (b->exp_string != NULL)
10560 {
10561 char *msg = xstrprintf (_("`%s' Ada exception"), b->exp_string);
10562
10563 ui_out_field_string (uiout, "what", msg);
10564 xfree (msg);
10565 }
10566 else
10567 ui_out_field_string (uiout, "what", "all Ada exceptions");
10568
10569 break;
10570
10571 case ex_catch_exception_unhandled:
10572 ui_out_field_string (uiout, "what", "unhandled Ada exceptions");
10573 break;
10574
10575 case ex_catch_assert:
10576 ui_out_field_string (uiout, "what", "failed Ada assertions");
10577 break;
10578
10579 default:
10580 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10581 break;
10582 }
10583}
10584
10585/* Implement the PRINT_MENTION method in the breakpoint_ops structure
10586 for all exception catchpoint kinds. */
10587
10588static void
10589print_mention_exception (enum exception_catchpoint_kind ex,
10590 struct breakpoint *b)
10591{
10592 switch (ex)
10593 {
10594 case ex_catch_exception:
10595 if (b->exp_string != NULL)
10596 printf_filtered (_("Catchpoint %d: `%s' Ada exception"),
10597 b->number, b->exp_string);
10598 else
10599 printf_filtered (_("Catchpoint %d: all Ada exceptions"), b->number);
10600
10601 break;
10602
10603 case ex_catch_exception_unhandled:
10604 printf_filtered (_("Catchpoint %d: unhandled Ada exceptions"),
10605 b->number);
10606 break;
10607
10608 case ex_catch_assert:
10609 printf_filtered (_("Catchpoint %d: failed Ada assertions"), b->number);
10610 break;
10611
10612 default:
10613 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10614 break;
10615 }
10616}
10617
6149aea9
PA
10618/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
10619 for all exception catchpoint kinds. */
10620
10621static void
10622print_recreate_exception (enum exception_catchpoint_kind ex,
10623 struct breakpoint *b, struct ui_file *fp)
10624{
10625 switch (ex)
10626 {
10627 case ex_catch_exception:
10628 fprintf_filtered (fp, "catch exception");
10629 if (b->exp_string != NULL)
10630 fprintf_filtered (fp, " %s", b->exp_string);
10631 break;
10632
10633 case ex_catch_exception_unhandled:
78076abc 10634 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
10635 break;
10636
10637 case ex_catch_assert:
10638 fprintf_filtered (fp, "catch assert");
10639 break;
10640
10641 default:
10642 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
10643 }
10644}
10645
f7f9143b
JB
10646/* Virtual table for "catch exception" breakpoints. */
10647
10648static enum print_stop_action
10649print_it_catch_exception (struct breakpoint *b)
10650{
10651 return print_it_exception (ex_catch_exception, b);
10652}
10653
10654static void
a6d9a66e 10655print_one_catch_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 10656{
a6d9a66e 10657 print_one_exception (ex_catch_exception, b, last_loc);
f7f9143b
JB
10658}
10659
10660static void
10661print_mention_catch_exception (struct breakpoint *b)
10662{
10663 print_mention_exception (ex_catch_exception, b);
10664}
10665
6149aea9
PA
10666static void
10667print_recreate_catch_exception (struct breakpoint *b, struct ui_file *fp)
10668{
10669 print_recreate_exception (ex_catch_exception, b, fp);
10670}
10671
f7f9143b
JB
10672static struct breakpoint_ops catch_exception_breakpoint_ops =
10673{
ce78b96d
JB
10674 NULL, /* insert */
10675 NULL, /* remove */
10676 NULL, /* breakpoint_hit */
f7f9143b
JB
10677 print_it_catch_exception,
10678 print_one_catch_exception,
6149aea9
PA
10679 print_mention_catch_exception,
10680 print_recreate_catch_exception
f7f9143b
JB
10681};
10682
10683/* Virtual table for "catch exception unhandled" breakpoints. */
10684
10685static enum print_stop_action
10686print_it_catch_exception_unhandled (struct breakpoint *b)
10687{
10688 return print_it_exception (ex_catch_exception_unhandled, b);
10689}
10690
10691static void
a6d9a66e
UW
10692print_one_catch_exception_unhandled (struct breakpoint *b,
10693 struct bp_location **last_loc)
f7f9143b 10694{
a6d9a66e 10695 print_one_exception (ex_catch_exception_unhandled, b, last_loc);
f7f9143b
JB
10696}
10697
10698static void
10699print_mention_catch_exception_unhandled (struct breakpoint *b)
10700{
10701 print_mention_exception (ex_catch_exception_unhandled, b);
10702}
10703
6149aea9
PA
10704static void
10705print_recreate_catch_exception_unhandled (struct breakpoint *b,
10706 struct ui_file *fp)
10707{
10708 print_recreate_exception (ex_catch_exception_unhandled, b, fp);
10709}
10710
f7f9143b 10711static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops = {
ce78b96d
JB
10712 NULL, /* insert */
10713 NULL, /* remove */
10714 NULL, /* breakpoint_hit */
f7f9143b
JB
10715 print_it_catch_exception_unhandled,
10716 print_one_catch_exception_unhandled,
6149aea9
PA
10717 print_mention_catch_exception_unhandled,
10718 print_recreate_catch_exception_unhandled
f7f9143b
JB
10719};
10720
10721/* Virtual table for "catch assert" breakpoints. */
10722
10723static enum print_stop_action
10724print_it_catch_assert (struct breakpoint *b)
10725{
10726 return print_it_exception (ex_catch_assert, b);
10727}
10728
10729static void
a6d9a66e 10730print_one_catch_assert (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 10731{
a6d9a66e 10732 print_one_exception (ex_catch_assert, b, last_loc);
f7f9143b
JB
10733}
10734
10735static void
10736print_mention_catch_assert (struct breakpoint *b)
10737{
10738 print_mention_exception (ex_catch_assert, b);
10739}
10740
6149aea9
PA
10741static void
10742print_recreate_catch_assert (struct breakpoint *b, struct ui_file *fp)
10743{
10744 print_recreate_exception (ex_catch_assert, b, fp);
10745}
10746
f7f9143b 10747static struct breakpoint_ops catch_assert_breakpoint_ops = {
ce78b96d
JB
10748 NULL, /* insert */
10749 NULL, /* remove */
10750 NULL, /* breakpoint_hit */
f7f9143b
JB
10751 print_it_catch_assert,
10752 print_one_catch_assert,
6149aea9
PA
10753 print_mention_catch_assert,
10754 print_recreate_catch_assert
f7f9143b
JB
10755};
10756
10757/* Return non-zero if B is an Ada exception catchpoint. */
10758
10759int
10760ada_exception_catchpoint_p (struct breakpoint *b)
10761{
10762 return (b->ops == &catch_exception_breakpoint_ops
10763 || b->ops == &catch_exception_unhandled_breakpoint_ops
10764 || b->ops == &catch_assert_breakpoint_ops);
10765}
10766
f7f9143b
JB
10767/* Return a newly allocated copy of the first space-separated token
10768 in ARGSP, and then adjust ARGSP to point immediately after that
10769 token.
10770
10771 Return NULL if ARGPS does not contain any more tokens. */
10772
10773static char *
10774ada_get_next_arg (char **argsp)
10775{
10776 char *args = *argsp;
10777 char *end;
10778 char *result;
10779
10780 /* Skip any leading white space. */
10781
10782 while (isspace (*args))
10783 args++;
10784
10785 if (args[0] == '\0')
10786 return NULL; /* No more arguments. */
10787
10788 /* Find the end of the current argument. */
10789
10790 end = args;
10791 while (*end != '\0' && !isspace (*end))
10792 end++;
10793
10794 /* Adjust ARGSP to point to the start of the next argument. */
10795
10796 *argsp = end;
10797
10798 /* Make a copy of the current argument and return it. */
10799
10800 result = xmalloc (end - args + 1);
10801 strncpy (result, args, end - args);
10802 result[end - args] = '\0';
10803
10804 return result;
10805}
10806
10807/* Split the arguments specified in a "catch exception" command.
10808 Set EX to the appropriate catchpoint type.
10809 Set EXP_STRING to the name of the specific exception if
10810 specified by the user. */
10811
10812static void
10813catch_ada_exception_command_split (char *args,
10814 enum exception_catchpoint_kind *ex,
10815 char **exp_string)
10816{
10817 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
10818 char *exception_name;
10819
10820 exception_name = ada_get_next_arg (&args);
10821 make_cleanup (xfree, exception_name);
10822
10823 /* Check that we do not have any more arguments. Anything else
10824 is unexpected. */
10825
10826 while (isspace (*args))
10827 args++;
10828
10829 if (args[0] != '\0')
10830 error (_("Junk at end of expression"));
10831
10832 discard_cleanups (old_chain);
10833
10834 if (exception_name == NULL)
10835 {
10836 /* Catch all exceptions. */
10837 *ex = ex_catch_exception;
10838 *exp_string = NULL;
10839 }
10840 else if (strcmp (exception_name, "unhandled") == 0)
10841 {
10842 /* Catch unhandled exceptions. */
10843 *ex = ex_catch_exception_unhandled;
10844 *exp_string = NULL;
10845 }
10846 else
10847 {
10848 /* Catch a specific exception. */
10849 *ex = ex_catch_exception;
10850 *exp_string = exception_name;
10851 }
10852}
10853
10854/* Return the name of the symbol on which we should break in order to
10855 implement a catchpoint of the EX kind. */
10856
10857static const char *
10858ada_exception_sym_name (enum exception_catchpoint_kind ex)
10859{
0259addd
JB
10860 gdb_assert (exception_info != NULL);
10861
f7f9143b
JB
10862 switch (ex)
10863 {
10864 case ex_catch_exception:
0259addd 10865 return (exception_info->catch_exception_sym);
f7f9143b
JB
10866 break;
10867 case ex_catch_exception_unhandled:
0259addd 10868 return (exception_info->catch_exception_unhandled_sym);
f7f9143b
JB
10869 break;
10870 case ex_catch_assert:
0259addd 10871 return (exception_info->catch_assert_sym);
f7f9143b
JB
10872 break;
10873 default:
10874 internal_error (__FILE__, __LINE__,
10875 _("unexpected catchpoint kind (%d)"), ex);
10876 }
10877}
10878
10879/* Return the breakpoint ops "virtual table" used for catchpoints
10880 of the EX kind. */
10881
10882static struct breakpoint_ops *
4b9eee8c 10883ada_exception_breakpoint_ops (enum exception_catchpoint_kind ex)
f7f9143b
JB
10884{
10885 switch (ex)
10886 {
10887 case ex_catch_exception:
10888 return (&catch_exception_breakpoint_ops);
10889 break;
10890 case ex_catch_exception_unhandled:
10891 return (&catch_exception_unhandled_breakpoint_ops);
10892 break;
10893 case ex_catch_assert:
10894 return (&catch_assert_breakpoint_ops);
10895 break;
10896 default:
10897 internal_error (__FILE__, __LINE__,
10898 _("unexpected catchpoint kind (%d)"), ex);
10899 }
10900}
10901
10902/* Return the condition that will be used to match the current exception
10903 being raised with the exception that the user wants to catch. This
10904 assumes that this condition is used when the inferior just triggered
10905 an exception catchpoint.
10906
10907 The string returned is a newly allocated string that needs to be
10908 deallocated later. */
10909
10910static char *
10911ada_exception_catchpoint_cond_string (const char *exp_string)
10912{
3d0b0fa3
JB
10913 int i;
10914
10915 /* The standard exceptions are a special case. They are defined in
10916 runtime units that have been compiled without debugging info; if
10917 EXP_STRING is the not-fully-qualified name of a standard
10918 exception (e.g. "constraint_error") then, during the evaluation
10919 of the condition expression, the symbol lookup on this name would
10920 *not* return this standard exception. The catchpoint condition
10921 may then be set only on user-defined exceptions which have the
10922 same not-fully-qualified name (e.g. my_package.constraint_error).
10923
10924 To avoid this unexcepted behavior, these standard exceptions are
10925 systematically prefixed by "standard". This means that "catch
10926 exception constraint_error" is rewritten into "catch exception
10927 standard.constraint_error".
10928
10929 If an exception named contraint_error is defined in another package of
10930 the inferior program, then the only way to specify this exception as a
10931 breakpoint condition is to use its fully-qualified named:
10932 e.g. my_package.constraint_error. */
10933
10934 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
10935 {
10936 if (strcmp (standard_exc [i], exp_string) == 0)
10937 {
10938 return xstrprintf ("long_integer (e) = long_integer (&standard.%s)",
10939 exp_string);
10940 }
10941 }
f7f9143b
JB
10942 return xstrprintf ("long_integer (e) = long_integer (&%s)", exp_string);
10943}
10944
10945/* Return the expression corresponding to COND_STRING evaluated at SAL. */
10946
10947static struct expression *
10948ada_parse_catchpoint_condition (char *cond_string,
10949 struct symtab_and_line sal)
10950{
10951 return (parse_exp_1 (&cond_string, block_for_pc (sal.pc), 0));
10952}
10953
10954/* Return the symtab_and_line that should be used to insert an exception
10955 catchpoint of the TYPE kind.
10956
10957 EX_STRING should contain the name of a specific exception
10958 that the catchpoint should catch, or NULL otherwise.
10959
10960 The idea behind all the remaining parameters is that their names match
10961 the name of certain fields in the breakpoint structure that are used to
10962 handle exception catchpoints. This function returns the value to which
10963 these fields should be set, depending on the type of catchpoint we need
10964 to create.
10965
10966 If COND and COND_STRING are both non-NULL, any value they might
10967 hold will be free'ed, and then replaced by newly allocated ones.
10968 These parameters are left untouched otherwise. */
10969
10970static struct symtab_and_line
10971ada_exception_sal (enum exception_catchpoint_kind ex, char *exp_string,
10972 char **addr_string, char **cond_string,
10973 struct expression **cond, struct breakpoint_ops **ops)
10974{
10975 const char *sym_name;
10976 struct symbol *sym;
10977 struct symtab_and_line sal;
10978
0259addd
JB
10979 /* First, find out which exception support info to use. */
10980 ada_exception_support_info_sniffer ();
10981
10982 /* Then lookup the function on which we will break in order to catch
f7f9143b
JB
10983 the Ada exceptions requested by the user. */
10984
10985 sym_name = ada_exception_sym_name (ex);
10986 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
10987
10988 /* The symbol we're looking up is provided by a unit in the GNAT runtime
10989 that should be compiled with debugging information. As a result, we
10990 expect to find that symbol in the symtabs. If we don't find it, then
10991 the target most likely does not support Ada exceptions, or we cannot
10992 insert exception breakpoints yet, because the GNAT runtime hasn't been
10993 loaded yet. */
10994
10995 /* brobecker/2006-12-26: It is conceivable that the runtime was compiled
10996 in such a way that no debugging information is produced for the symbol
10997 we are looking for. In this case, we could search the minimal symbols
10998 as a fall-back mechanism. This would still be operating in degraded
10999 mode, however, as we would still be missing the debugging information
11000 that is needed in order to extract the name of the exception being
11001 raised (this name is printed in the catchpoint message, and is also
11002 used when trying to catch a specific exception). We do not handle
11003 this case for now. */
11004
11005 if (sym == NULL)
0259addd 11006 error (_("Unable to break on '%s' in this configuration."), sym_name);
f7f9143b
JB
11007
11008 /* Make sure that the symbol we found corresponds to a function. */
11009 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11010 error (_("Symbol \"%s\" is not a function (class = %d)"),
11011 sym_name, SYMBOL_CLASS (sym));
11012
11013 sal = find_function_start_sal (sym, 1);
11014
11015 /* Set ADDR_STRING. */
11016
11017 *addr_string = xstrdup (sym_name);
11018
11019 /* Set the COND and COND_STRING (if not NULL). */
11020
11021 if (cond_string != NULL && cond != NULL)
11022 {
11023 if (*cond_string != NULL)
11024 {
11025 xfree (*cond_string);
11026 *cond_string = NULL;
11027 }
11028 if (*cond != NULL)
11029 {
11030 xfree (*cond);
11031 *cond = NULL;
11032 }
11033 if (exp_string != NULL)
11034 {
11035 *cond_string = ada_exception_catchpoint_cond_string (exp_string);
11036 *cond = ada_parse_catchpoint_condition (*cond_string, sal);
11037 }
11038 }
11039
11040 /* Set OPS. */
4b9eee8c 11041 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b
JB
11042
11043 return sal;
11044}
11045
11046/* Parse the arguments (ARGS) of the "catch exception" command.
11047
11048 Set TYPE to the appropriate exception catchpoint type.
11049 If the user asked the catchpoint to catch only a specific
11050 exception, then save the exception name in ADDR_STRING.
11051
11052 See ada_exception_sal for a description of all the remaining
11053 function arguments of this function. */
11054
11055struct symtab_and_line
11056ada_decode_exception_location (char *args, char **addr_string,
11057 char **exp_string, char **cond_string,
11058 struct expression **cond,
11059 struct breakpoint_ops **ops)
11060{
11061 enum exception_catchpoint_kind ex;
11062
11063 catch_ada_exception_command_split (args, &ex, exp_string);
11064 return ada_exception_sal (ex, *exp_string, addr_string, cond_string,
11065 cond, ops);
11066}
11067
11068struct symtab_and_line
11069ada_decode_assert_location (char *args, char **addr_string,
11070 struct breakpoint_ops **ops)
11071{
11072 /* Check that no argument where provided at the end of the command. */
11073
11074 if (args != NULL)
11075 {
11076 while (isspace (*args))
11077 args++;
11078 if (*args != '\0')
11079 error (_("Junk at end of arguments."));
11080 }
11081
11082 return ada_exception_sal (ex_catch_assert, NULL, addr_string, NULL, NULL,
11083 ops);
11084}
11085
4c4b4cd2
PH
11086 /* Operators */
11087/* Information about operators given special treatment in functions
11088 below. */
11089/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
11090
11091#define ADA_OPERATORS \
11092 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
11093 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
11094 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
11095 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
11096 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
11097 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
11098 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
11099 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
11100 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
11101 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
11102 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
11103 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
11104 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
11105 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
11106 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
11107 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
11108 OP_DEFN (OP_OTHERS, 1, 1, 0) \
11109 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
11110 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
11111
11112static void
554794dc
SDJ
11113ada_operator_length (const struct expression *exp, int pc, int *oplenp,
11114 int *argsp)
4c4b4cd2
PH
11115{
11116 switch (exp->elts[pc - 1].opcode)
11117 {
76a01679 11118 default:
4c4b4cd2
PH
11119 operator_length_standard (exp, pc, oplenp, argsp);
11120 break;
11121
11122#define OP_DEFN(op, len, args, binop) \
11123 case op: *oplenp = len; *argsp = args; break;
11124 ADA_OPERATORS;
11125#undef OP_DEFN
52ce6436
PH
11126
11127 case OP_AGGREGATE:
11128 *oplenp = 3;
11129 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
11130 break;
11131
11132 case OP_CHOICES:
11133 *oplenp = 3;
11134 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
11135 break;
4c4b4cd2
PH
11136 }
11137}
11138
c0201579
JK
11139/* Implementation of the exp_descriptor method operator_check. */
11140
11141static int
11142ada_operator_check (struct expression *exp, int pos,
11143 int (*objfile_func) (struct objfile *objfile, void *data),
11144 void *data)
11145{
11146 const union exp_element *const elts = exp->elts;
11147 struct type *type = NULL;
11148
11149 switch (elts[pos].opcode)
11150 {
11151 case UNOP_IN_RANGE:
11152 case UNOP_QUAL:
11153 type = elts[pos + 1].type;
11154 break;
11155
11156 default:
11157 return operator_check_standard (exp, pos, objfile_func, data);
11158 }
11159
11160 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
11161
11162 if (type && TYPE_OBJFILE (type)
11163 && (*objfile_func) (TYPE_OBJFILE (type), data))
11164 return 1;
11165
11166 return 0;
11167}
11168
4c4b4cd2
PH
11169static char *
11170ada_op_name (enum exp_opcode opcode)
11171{
11172 switch (opcode)
11173 {
76a01679 11174 default:
4c4b4cd2 11175 return op_name_standard (opcode);
52ce6436 11176
4c4b4cd2
PH
11177#define OP_DEFN(op, len, args, binop) case op: return #op;
11178 ADA_OPERATORS;
11179#undef OP_DEFN
52ce6436
PH
11180
11181 case OP_AGGREGATE:
11182 return "OP_AGGREGATE";
11183 case OP_CHOICES:
11184 return "OP_CHOICES";
11185 case OP_NAME:
11186 return "OP_NAME";
4c4b4cd2
PH
11187 }
11188}
11189
11190/* As for operator_length, but assumes PC is pointing at the first
11191 element of the operator, and gives meaningful results only for the
52ce6436 11192 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
11193
11194static void
76a01679
JB
11195ada_forward_operator_length (struct expression *exp, int pc,
11196 int *oplenp, int *argsp)
4c4b4cd2 11197{
76a01679 11198 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
11199 {
11200 default:
11201 *oplenp = *argsp = 0;
11202 break;
52ce6436 11203
4c4b4cd2
PH
11204#define OP_DEFN(op, len, args, binop) \
11205 case op: *oplenp = len; *argsp = args; break;
11206 ADA_OPERATORS;
11207#undef OP_DEFN
52ce6436
PH
11208
11209 case OP_AGGREGATE:
11210 *oplenp = 3;
11211 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
11212 break;
11213
11214 case OP_CHOICES:
11215 *oplenp = 3;
11216 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
11217 break;
11218
11219 case OP_STRING:
11220 case OP_NAME:
11221 {
11222 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 11223
52ce6436
PH
11224 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
11225 *argsp = 0;
11226 break;
11227 }
4c4b4cd2
PH
11228 }
11229}
11230
11231static int
11232ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
11233{
11234 enum exp_opcode op = exp->elts[elt].opcode;
11235 int oplen, nargs;
11236 int pc = elt;
11237 int i;
76a01679 11238
4c4b4cd2
PH
11239 ada_forward_operator_length (exp, elt, &oplen, &nargs);
11240
76a01679 11241 switch (op)
4c4b4cd2 11242 {
76a01679 11243 /* Ada attributes ('Foo). */
4c4b4cd2
PH
11244 case OP_ATR_FIRST:
11245 case OP_ATR_LAST:
11246 case OP_ATR_LENGTH:
11247 case OP_ATR_IMAGE:
11248 case OP_ATR_MAX:
11249 case OP_ATR_MIN:
11250 case OP_ATR_MODULUS:
11251 case OP_ATR_POS:
11252 case OP_ATR_SIZE:
11253 case OP_ATR_TAG:
11254 case OP_ATR_VAL:
11255 break;
11256
11257 case UNOP_IN_RANGE:
11258 case UNOP_QUAL:
323e0a4a
AC
11259 /* XXX: gdb_sprint_host_address, type_sprint */
11260 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
11261 gdb_print_host_address (exp->elts[pc + 1].type, stream);
11262 fprintf_filtered (stream, " (");
11263 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
11264 fprintf_filtered (stream, ")");
11265 break;
11266 case BINOP_IN_BOUNDS:
52ce6436
PH
11267 fprintf_filtered (stream, " (%d)",
11268 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
11269 break;
11270 case TERNOP_IN_RANGE:
11271 break;
11272
52ce6436
PH
11273 case OP_AGGREGATE:
11274 case OP_OTHERS:
11275 case OP_DISCRETE_RANGE:
11276 case OP_POSITIONAL:
11277 case OP_CHOICES:
11278 break;
11279
11280 case OP_NAME:
11281 case OP_STRING:
11282 {
11283 char *name = &exp->elts[elt + 2].string;
11284 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 11285
52ce6436
PH
11286 fprintf_filtered (stream, "Text: `%.*s'", len, name);
11287 break;
11288 }
11289
4c4b4cd2
PH
11290 default:
11291 return dump_subexp_body_standard (exp, stream, elt);
11292 }
11293
11294 elt += oplen;
11295 for (i = 0; i < nargs; i += 1)
11296 elt = dump_subexp (exp, stream, elt);
11297
11298 return elt;
11299}
11300
11301/* The Ada extension of print_subexp (q.v.). */
11302
76a01679
JB
11303static void
11304ada_print_subexp (struct expression *exp, int *pos,
11305 struct ui_file *stream, enum precedence prec)
4c4b4cd2 11306{
52ce6436 11307 int oplen, nargs, i;
4c4b4cd2
PH
11308 int pc = *pos;
11309 enum exp_opcode op = exp->elts[pc].opcode;
11310
11311 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11312
52ce6436 11313 *pos += oplen;
4c4b4cd2
PH
11314 switch (op)
11315 {
11316 default:
52ce6436 11317 *pos -= oplen;
4c4b4cd2
PH
11318 print_subexp_standard (exp, pos, stream, prec);
11319 return;
11320
11321 case OP_VAR_VALUE:
4c4b4cd2
PH
11322 fputs_filtered (SYMBOL_NATURAL_NAME (exp->elts[pc + 2].symbol), stream);
11323 return;
11324
11325 case BINOP_IN_BOUNDS:
323e0a4a 11326 /* XXX: sprint_subexp */
4c4b4cd2 11327 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 11328 fputs_filtered (" in ", stream);
4c4b4cd2 11329 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 11330 fputs_filtered ("'range", stream);
4c4b4cd2 11331 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
11332 fprintf_filtered (stream, "(%ld)",
11333 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
11334 return;
11335
11336 case TERNOP_IN_RANGE:
4c4b4cd2 11337 if (prec >= PREC_EQUAL)
76a01679 11338 fputs_filtered ("(", stream);
323e0a4a 11339 /* XXX: sprint_subexp */
4c4b4cd2 11340 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 11341 fputs_filtered (" in ", stream);
4c4b4cd2
PH
11342 print_subexp (exp, pos, stream, PREC_EQUAL);
11343 fputs_filtered (" .. ", stream);
11344 print_subexp (exp, pos, stream, PREC_EQUAL);
11345 if (prec >= PREC_EQUAL)
76a01679
JB
11346 fputs_filtered (")", stream);
11347 return;
4c4b4cd2
PH
11348
11349 case OP_ATR_FIRST:
11350 case OP_ATR_LAST:
11351 case OP_ATR_LENGTH:
11352 case OP_ATR_IMAGE:
11353 case OP_ATR_MAX:
11354 case OP_ATR_MIN:
11355 case OP_ATR_MODULUS:
11356 case OP_ATR_POS:
11357 case OP_ATR_SIZE:
11358 case OP_ATR_TAG:
11359 case OP_ATR_VAL:
4c4b4cd2 11360 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679
JB
11361 {
11362 if (TYPE_CODE (exp->elts[*pos + 1].type) != TYPE_CODE_VOID)
11363 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0);
11364 *pos += 3;
11365 }
4c4b4cd2 11366 else
76a01679 11367 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
11368 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
11369 if (nargs > 1)
76a01679
JB
11370 {
11371 int tem;
5b4ee69b 11372
76a01679
JB
11373 for (tem = 1; tem < nargs; tem += 1)
11374 {
11375 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
11376 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
11377 }
11378 fputs_filtered (")", stream);
11379 }
4c4b4cd2 11380 return;
14f9c5c9 11381
4c4b4cd2 11382 case UNOP_QUAL:
4c4b4cd2
PH
11383 type_print (exp->elts[pc + 1].type, "", stream, 0);
11384 fputs_filtered ("'(", stream);
11385 print_subexp (exp, pos, stream, PREC_PREFIX);
11386 fputs_filtered (")", stream);
11387 return;
14f9c5c9 11388
4c4b4cd2 11389 case UNOP_IN_RANGE:
323e0a4a 11390 /* XXX: sprint_subexp */
4c4b4cd2 11391 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 11392 fputs_filtered (" in ", stream);
4c4b4cd2
PH
11393 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0);
11394 return;
52ce6436
PH
11395
11396 case OP_DISCRETE_RANGE:
11397 print_subexp (exp, pos, stream, PREC_SUFFIX);
11398 fputs_filtered ("..", stream);
11399 print_subexp (exp, pos, stream, PREC_SUFFIX);
11400 return;
11401
11402 case OP_OTHERS:
11403 fputs_filtered ("others => ", stream);
11404 print_subexp (exp, pos, stream, PREC_SUFFIX);
11405 return;
11406
11407 case OP_CHOICES:
11408 for (i = 0; i < nargs-1; i += 1)
11409 {
11410 if (i > 0)
11411 fputs_filtered ("|", stream);
11412 print_subexp (exp, pos, stream, PREC_SUFFIX);
11413 }
11414 fputs_filtered (" => ", stream);
11415 print_subexp (exp, pos, stream, PREC_SUFFIX);
11416 return;
11417
11418 case OP_POSITIONAL:
11419 print_subexp (exp, pos, stream, PREC_SUFFIX);
11420 return;
11421
11422 case OP_AGGREGATE:
11423 fputs_filtered ("(", stream);
11424 for (i = 0; i < nargs; i += 1)
11425 {
11426 if (i > 0)
11427 fputs_filtered (", ", stream);
11428 print_subexp (exp, pos, stream, PREC_SUFFIX);
11429 }
11430 fputs_filtered (")", stream);
11431 return;
4c4b4cd2
PH
11432 }
11433}
14f9c5c9
AS
11434
11435/* Table mapping opcodes into strings for printing operators
11436 and precedences of the operators. */
11437
d2e4a39e
AS
11438static const struct op_print ada_op_print_tab[] = {
11439 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
11440 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
11441 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
11442 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
11443 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
11444 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
11445 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
11446 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
11447 {"<=", BINOP_LEQ, PREC_ORDER, 0},
11448 {">=", BINOP_GEQ, PREC_ORDER, 0},
11449 {">", BINOP_GTR, PREC_ORDER, 0},
11450 {"<", BINOP_LESS, PREC_ORDER, 0},
11451 {">>", BINOP_RSH, PREC_SHIFT, 0},
11452 {"<<", BINOP_LSH, PREC_SHIFT, 0},
11453 {"+", BINOP_ADD, PREC_ADD, 0},
11454 {"-", BINOP_SUB, PREC_ADD, 0},
11455 {"&", BINOP_CONCAT, PREC_ADD, 0},
11456 {"*", BINOP_MUL, PREC_MUL, 0},
11457 {"/", BINOP_DIV, PREC_MUL, 0},
11458 {"rem", BINOP_REM, PREC_MUL, 0},
11459 {"mod", BINOP_MOD, PREC_MUL, 0},
11460 {"**", BINOP_EXP, PREC_REPEAT, 0},
11461 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
11462 {"-", UNOP_NEG, PREC_PREFIX, 0},
11463 {"+", UNOP_PLUS, PREC_PREFIX, 0},
11464 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
11465 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
11466 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
11467 {".all", UNOP_IND, PREC_SUFFIX, 1},
11468 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
11469 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
d2e4a39e 11470 {NULL, 0, 0, 0}
14f9c5c9
AS
11471};
11472\f
72d5681a
PH
11473enum ada_primitive_types {
11474 ada_primitive_type_int,
11475 ada_primitive_type_long,
11476 ada_primitive_type_short,
11477 ada_primitive_type_char,
11478 ada_primitive_type_float,
11479 ada_primitive_type_double,
11480 ada_primitive_type_void,
11481 ada_primitive_type_long_long,
11482 ada_primitive_type_long_double,
11483 ada_primitive_type_natural,
11484 ada_primitive_type_positive,
11485 ada_primitive_type_system_address,
11486 nr_ada_primitive_types
11487};
6c038f32
PH
11488
11489static void
d4a9a881 11490ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
11491 struct language_arch_info *lai)
11492{
d4a9a881 11493 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 11494
72d5681a 11495 lai->primitive_type_vector
d4a9a881 11496 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 11497 struct type *);
e9bb382b
UW
11498
11499 lai->primitive_type_vector [ada_primitive_type_int]
11500 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11501 0, "integer");
11502 lai->primitive_type_vector [ada_primitive_type_long]
11503 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
11504 0, "long_integer");
11505 lai->primitive_type_vector [ada_primitive_type_short]
11506 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
11507 0, "short_integer");
11508 lai->string_char_type
11509 = lai->primitive_type_vector [ada_primitive_type_char]
11510 = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
11511 lai->primitive_type_vector [ada_primitive_type_float]
11512 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
11513 "float", NULL);
11514 lai->primitive_type_vector [ada_primitive_type_double]
11515 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11516 "long_float", NULL);
11517 lai->primitive_type_vector [ada_primitive_type_long_long]
11518 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
11519 0, "long_long_integer");
11520 lai->primitive_type_vector [ada_primitive_type_long_double]
11521 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
11522 "long_long_float", NULL);
11523 lai->primitive_type_vector [ada_primitive_type_natural]
11524 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11525 0, "natural");
11526 lai->primitive_type_vector [ada_primitive_type_positive]
11527 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
11528 0, "positive");
11529 lai->primitive_type_vector [ada_primitive_type_void]
11530 = builtin->builtin_void;
11531
11532 lai->primitive_type_vector [ada_primitive_type_system_address]
11533 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"));
72d5681a
PH
11534 TYPE_NAME (lai->primitive_type_vector [ada_primitive_type_system_address])
11535 = "system__address";
fbb06eb1 11536
47e729a8 11537 lai->bool_type_symbol = NULL;
fbb06eb1 11538 lai->bool_type_default = builtin->builtin_bool;
6c038f32 11539}
6c038f32
PH
11540\f
11541 /* Language vector */
11542
11543/* Not really used, but needed in the ada_language_defn. */
11544
11545static void
6c7a06a3 11546emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 11547{
6c7a06a3 11548 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
11549}
11550
11551static int
11552parse (void)
11553{
11554 warnings_issued = 0;
11555 return ada_parse ();
11556}
11557
11558static const struct exp_descriptor ada_exp_descriptor = {
11559 ada_print_subexp,
11560 ada_operator_length,
c0201579 11561 ada_operator_check,
6c038f32
PH
11562 ada_op_name,
11563 ada_dump_subexp_body,
11564 ada_evaluate_subexp
11565};
11566
11567const struct language_defn ada_language_defn = {
11568 "ada", /* Language name */
11569 language_ada,
6c038f32
PH
11570 range_check_off,
11571 type_check_off,
11572 case_sensitive_on, /* Yes, Ada is case-insensitive, but
11573 that's not quite what this means. */
6c038f32 11574 array_row_major,
9a044a89 11575 macro_expansion_no,
6c038f32
PH
11576 &ada_exp_descriptor,
11577 parse,
11578 ada_error,
11579 resolve,
11580 ada_printchar, /* Print a character constant */
11581 ada_printstr, /* Function to print string constant */
11582 emit_char, /* Function to print single char (not used) */
6c038f32 11583 ada_print_type, /* Print a type using appropriate syntax */
be942545 11584 ada_print_typedef, /* Print a typedef using appropriate syntax */
6c038f32
PH
11585 ada_val_print, /* Print a value using appropriate syntax */
11586 ada_value_print, /* Print a top-level value */
11587 NULL, /* Language specific skip_trampoline */
2b2d9e11 11588 NULL, /* name_of_this */
6c038f32
PH
11589 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
11590 basic_lookup_transparent_type, /* lookup_transparent_type */
11591 ada_la_decode, /* Language specific symbol demangler */
11592 NULL, /* Language specific class_name_from_physname */
11593 ada_op_print_tab, /* expression operators for printing */
11594 0, /* c-style arrays */
11595 1, /* String lower bound */
6c038f32 11596 ada_get_gdb_completer_word_break_characters,
41d27058 11597 ada_make_symbol_completion_list,
72d5681a 11598 ada_language_arch_info,
e79af960 11599 ada_print_array_index,
41f1b697 11600 default_pass_by_reference,
ae6a3a4c 11601 c_get_string,
6c038f32
PH
11602 LANG_MAGIC
11603};
11604
2c0b251b
PA
11605/* Provide a prototype to silence -Wmissing-prototypes. */
11606extern initialize_file_ftype _initialize_ada_language;
11607
5bf03f13
JB
11608/* Command-list for the "set/show ada" prefix command. */
11609static struct cmd_list_element *set_ada_list;
11610static struct cmd_list_element *show_ada_list;
11611
11612/* Implement the "set ada" prefix command. */
11613
11614static void
11615set_ada_command (char *arg, int from_tty)
11616{
11617 printf_unfiltered (_(\
11618"\"set ada\" must be followed by the name of a setting.\n"));
11619 help_list (set_ada_list, "set ada ", -1, gdb_stdout);
11620}
11621
11622/* Implement the "show ada" prefix command. */
11623
11624static void
11625show_ada_command (char *args, int from_tty)
11626{
11627 cmd_show_list (show_ada_list, from_tty, "");
11628}
11629
d2e4a39e 11630void
6c038f32 11631_initialize_ada_language (void)
14f9c5c9 11632{
6c038f32
PH
11633 add_language (&ada_language_defn);
11634
5bf03f13
JB
11635 add_prefix_cmd ("ada", no_class, set_ada_command,
11636 _("Prefix command for changing Ada-specfic settings"),
11637 &set_ada_list, "set ada ", 0, &setlist);
11638
11639 add_prefix_cmd ("ada", no_class, show_ada_command,
11640 _("Generic command for showing Ada-specific settings."),
11641 &show_ada_list, "show ada ", 0, &showlist);
11642
11643 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
11644 &trust_pad_over_xvs, _("\
11645Enable or disable an optimization trusting PAD types over XVS types"), _("\
11646Show whether an optimization trusting PAD types over XVS types is activated"),
11647 _("\
11648This is related to the encoding used by the GNAT compiler. The debugger\n\
11649should normally trust the contents of PAD types, but certain older versions\n\
11650of GNAT have a bug that sometimes causes the information in the PAD type\n\
11651to be incorrect. Turning this setting \"off\" allows the debugger to\n\
11652work around this bug. It is always safe to turn this option \"off\", but\n\
11653this incurs a slight performance penalty, so it is recommended to NOT change\n\
11654this option to \"off\" unless necessary."),
11655 NULL, NULL, &set_ada_list, &show_ada_list);
11656
6c038f32 11657 varsize_limit = 65536;
6c038f32
PH
11658
11659 obstack_init (&symbol_list_obstack);
11660
11661 decoded_names_store = htab_create_alloc
11662 (256, htab_hash_string, (int (*)(const void *, const void *)) streq,
11663 NULL, xcalloc, xfree);
6b69afc4
JB
11664
11665 observer_attach_executable_changed (ada_executable_changed_observer);
e802dbe0
JB
11666
11667 /* Setup per-inferior data. */
11668 observer_attach_inferior_exit (ada_inferior_exit);
11669 ada_inferior_data
11670 = register_inferior_data_with_cleanup (ada_inferior_data_cleanup);
14f9c5c9 11671}