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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [gdb/] [ada-lang.c] - Blame information for rev 309

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

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

powered by: WebSVN 2.1.0

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