OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [gdb/] [ada-lang.c] - Blame information for rev 227

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.