2002-06-21 Michal Ludvig <mludvig@suse.cz>
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
14f9c5c9
AS
1/* Ada language support routines for GDB, the GNU debugger. Copyright
2 1992, 1993, 1994, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20#include <stdio.h>
21#include <string.h>
22#include <ctype.h>
23#include <stdarg.h>
24#include "demangle.h"
25#include "defs.h"
26#include "symtab.h"
27#include "gdbtypes.h"
28#include "gdbcmd.h"
29#include "expression.h"
30#include "parser-defs.h"
31#include "language.h"
32#include "c-lang.h"
33#include "inferior.h"
34#include "symfile.h"
35#include "objfiles.h"
36#include "breakpoint.h"
37#include "gdbcore.h"
38#include "ada-lang.h"
39#ifdef UI_OUT
40#include "ui-out.h"
41#endif
42
43struct cleanup* unresolved_names;
44
45void extract_string (CORE_ADDR addr, char *buf);
46
47static struct type * ada_create_fundamental_type (struct objfile *, int);
48
49static void modify_general_field (char *, LONGEST, int, int);
50
51static struct type* desc_base_type (struct type*);
52
53static struct type* desc_bounds_type (struct type*);
54
55static struct value* desc_bounds (struct value*);
56
57static int fat_pntr_bounds_bitpos (struct type*);
58
59static int fat_pntr_bounds_bitsize (struct type*);
60
61static struct type* desc_data_type (struct type*);
62
63static struct value* desc_data (struct value*);
64
65static int fat_pntr_data_bitpos (struct type*);
66
67static int fat_pntr_data_bitsize (struct type*);
68
69static struct value* desc_one_bound (struct value*, int, int);
70
71static int desc_bound_bitpos (struct type*, int, int);
72
73static int desc_bound_bitsize (struct type*, int, int);
74
75static struct type* desc_index_type (struct type*, int);
76
77static int desc_arity (struct type*);
78
79static int ada_type_match (struct type*, struct type*, int);
80
81static int ada_args_match (struct symbol*, struct value**, int);
82
83static struct value* place_on_stack (struct value*, CORE_ADDR*);
84
85static struct value* convert_actual (struct value*, struct type*, CORE_ADDR*);
86
87static struct value* make_array_descriptor (struct type*, struct value*, CORE_ADDR*);
88
89static void ada_add_block_symbols (struct block*, const char*,
90 namespace_enum, struct objfile*, int);
91
92static void fill_in_ada_prototype (struct symbol*);
93
94static int is_nonfunction (struct symbol**, int);
95
96static void add_defn_to_vec (struct symbol*, struct block*);
97
98static struct partial_symbol*
99ada_lookup_partial_symbol (struct partial_symtab*, const char*,
100 int, namespace_enum, int);
101
102static struct symtab* symtab_for_sym (struct symbol*);
103
104static struct value* ada_resolve_subexp (struct expression**, int*, int, struct type*);
105
106static void replace_operator_with_call (struct expression**, int, int, int,
107 struct symbol*, struct block*);
108
109static int possible_user_operator_p (enum exp_opcode, struct value**);
110
111static const char* ada_op_name (enum exp_opcode);
112
113static int numeric_type_p (struct type*);
114
115static int integer_type_p (struct type*);
116
117static int scalar_type_p (struct type*);
118
119static int discrete_type_p (struct type*);
120
121static char* extended_canonical_line_spec (struct symtab_and_line, const char*);
122
123static struct value* evaluate_subexp (struct type*, struct expression*, int*, enum noside);
124
125static struct value* evaluate_subexp_type (struct expression*, int*);
126
127static struct type * ada_create_fundamental_type (struct objfile*, int);
128
129static int is_dynamic_field (struct type *, int);
130
131static struct type*
132to_fixed_variant_branch_type (struct type*, char*, CORE_ADDR, struct value*);
133
134static struct type* to_fixed_range_type (char*, struct value*, struct objfile*);
135
136static struct type* to_static_fixed_type (struct type*);
137
138static struct value* unwrap_value (struct value*);
139
140static struct type* packed_array_type (struct type*, long*);
141
142static struct type* decode_packed_array_type (struct type*);
143
144static struct value* decode_packed_array (struct value*);
145
146static struct value* value_subscript_packed (struct value*, int, struct value**);
147
148static struct value* coerce_unspec_val_to_type (struct value*, long, struct type*);
149
150static struct value* get_var_value (char*, char*);
151
152static int lesseq_defined_than (struct symbol*, struct symbol*);
153
154static int equiv_types (struct type*, struct type*);
155
156static int is_name_suffix (const char*);
157
158static int wild_match (const char*, int, const char*);
159
160static struct symtabs_and_lines find_sal_from_funcs_and_line (const char*, int, struct symbol**, int);
161
162static int
163find_line_in_linetable (struct linetable*, int, struct symbol**, int, int*);
164
165static int find_next_line_in_linetable (struct linetable*, int, int, int);
166
167static struct symtabs_and_lines all_sals_for_line (const char*, int, char***);
168
169static void read_all_symtabs (const char*);
170
171static int is_plausible_func_for_line (struct symbol*, int);
172
173static struct value* ada_coerce_ref (struct value*);
174
175static struct value* value_pos_atr (struct value*);
176
177static struct value* value_val_atr (struct type*, struct value*);
178
179static struct symbol* standard_lookup (const char*, namespace_enum);
180
181extern void markTimeStart (int index);
182extern void markTimeStop (int index);
183
184\f
185
186/* Maximum-sized dynamic type. */
187static unsigned int varsize_limit;
188
189static const char* ada_completer_word_break_characters =
190 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
191
192/* The name of the symbol to use to get the name of the main subprogram */
193#define ADA_MAIN_PROGRAM_SYMBOL_NAME "__gnat_ada_main_program_name"
194
195 /* Utilities */
196
197/* extract_string
198 *
199 * read the string located at ADDR from the inferior and store the
200 * result into BUF
201 */
202void
203extract_string (CORE_ADDR addr, char *buf)
204{
205 int char_index = 0;
206
207 /* Loop, reading one byte at a time, until we reach the '\000'
208 end-of-string marker */
209 do
210 {
211 target_read_memory (addr + char_index * sizeof (char),
212 buf + char_index * sizeof (char),
213 sizeof (char));
214 char_index++;
215 }
216 while (buf[char_index - 1] != '\000');
217}
218
219/* Assuming *OLD_VECT points to an array of *SIZE objects of size
220 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
221 updating *OLD_VECT and *SIZE as necessary. */
222
223void
224grow_vect (old_vect, size, min_size, element_size)
225 void** old_vect;
226 size_t* size;
227 size_t min_size;
228 int element_size;
229{
230 if (*size < min_size) {
231 *size *= 2;
232 if (*size < min_size)
233 *size = min_size;
234 *old_vect = xrealloc (*old_vect, *size * element_size);
235 }
236}
237
238/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
239 suffix of FIELD_NAME beginning "___" */
240
241static int
242field_name_match (field_name, target)
243 const char *field_name;
244 const char *target;
245{
246 int len = strlen (target);
247 return
248 STREQN (field_name, target, len)
249 && (field_name[len] == '\0'
250 || (STREQN (field_name + len, "___", 3)
251 && ! STREQ (field_name + strlen (field_name) - 6, "___XVN")));
252}
253
254
255/* The length of the prefix of NAME prior to any "___" suffix. */
256
257int
258ada_name_prefix_len (name)
259 const char* name;
260{
261 if (name == NULL)
262 return 0;
263 else
264 {
265 const char* p = strstr (name, "___");
266 if (p == NULL)
267 return strlen (name);
268 else
269 return p - name;
270 }
271}
272
273/* SUFFIX is a suffix of STR. False if STR is null. */
274static int
275is_suffix (const char* str, const char* suffix)
276{
277 int len1, len2;
278 if (str == NULL)
279 return 0;
280 len1 = strlen (str);
281 len2 = strlen (suffix);
282 return (len1 >= len2 && STREQ (str + len1 - len2, suffix));
283}
284
285/* Create a value of type TYPE whose contents come from VALADDR, if it
286 * is non-null, and whose memory address (in the inferior) is
287 * ADDRESS. */
288struct value*
289value_from_contents_and_address (type, valaddr, address)
290 struct type* type;
291 char* valaddr;
292 CORE_ADDR address;
293{
294 struct value* v = allocate_value (type);
295 if (valaddr == NULL)
296 VALUE_LAZY (v) = 1;
297 else
298 memcpy (VALUE_CONTENTS_RAW (v), valaddr, TYPE_LENGTH (type));
299 VALUE_ADDRESS (v) = address;
300 if (address != 0)
301 VALUE_LVAL (v) = lval_memory;
302 return v;
303}
304
305/* The contents of value VAL, beginning at offset OFFSET, treated as a
306 value of type TYPE. The result is an lval in memory if VAL is. */
307
308static struct value*
309coerce_unspec_val_to_type (val, offset, type)
310 struct value* val;
311 long offset;
312 struct type *type;
313{
314 CHECK_TYPEDEF (type);
315 if (VALUE_LVAL (val) == lval_memory)
316 return value_at_lazy (type,
317 VALUE_ADDRESS (val) + VALUE_OFFSET (val) + offset, NULL);
318 else
319 {
320 struct value* result = allocate_value (type);
321 VALUE_LVAL (result) = not_lval;
322 if (VALUE_ADDRESS (val) == 0)
323 memcpy (VALUE_CONTENTS_RAW (result), VALUE_CONTENTS (val) + offset,
324 TYPE_LENGTH (type) > TYPE_LENGTH (VALUE_TYPE (val))
325 ? TYPE_LENGTH (VALUE_TYPE (val)) : TYPE_LENGTH (type));
326 else
327 {
328 VALUE_ADDRESS (result) =
329 VALUE_ADDRESS (val) + VALUE_OFFSET (val) + offset;
330 VALUE_LAZY (result) = 1;
331 }
332 return result;
333 }
334}
335
336static char*
337cond_offset_host (valaddr, offset)
338 char* valaddr;
339 long offset;
340{
341 if (valaddr == NULL)
342 return NULL;
343 else
344 return valaddr + offset;
345}
346
347static CORE_ADDR
348cond_offset_target (address, offset)
349 CORE_ADDR address;
350 long offset;
351{
352 if (address == 0)
353 return 0;
354 else
355 return address + offset;
356}
357
358/* Perform execute_command on the result of concatenating all
359 arguments up to NULL. */
360static void
361do_command (const char* arg, ...)
362{
363 int len;
364 char* cmd;
365 const char* s;
366 va_list ap;
367
368 va_start (ap, arg);
369 len = 0;
370 s = arg;
371 cmd = "";
372 for (; s != NULL; s = va_arg (ap, const char*))
373 {
374 char* cmd1;
375 len += strlen (s);
376 cmd1 = alloca (len+1);
377 strcpy (cmd1, cmd);
378 strcat (cmd1, s);
379 cmd = cmd1;
380 }
381 va_end (ap);
382 execute_command (cmd, 0);
383}
384
385\f
386 /* Language Selection */
387
388/* If the main program is in Ada, return language_ada, otherwise return LANG
389 (the main program is in Ada iif the adainit symbol is found).
390
391 MAIN_PST is not used. */
392
393enum language
394ada_update_initial_language (lang, main_pst)
395 enum language lang;
396 struct partial_symtab* main_pst;
397{
398 if (lookup_minimal_symbol ("adainit", (const char*) NULL,
399 (struct objfile*) NULL) != NULL)
400 /* return language_ada; */
401 /* FIXME: language_ada should be defined in defs.h */
402 return language_unknown;
403
404 return lang;
405}
406
407\f
408 /* Symbols */
409
410/* Table of Ada operators and their GNAT-mangled names. Last entry is pair
411 of NULLs. */
412
413const struct ada_opname_map ada_opname_table[] =
414{
415 { "Oadd", "\"+\"", BINOP_ADD },
416 { "Osubtract", "\"-\"", BINOP_SUB },
417 { "Omultiply", "\"*\"", BINOP_MUL },
418 { "Odivide", "\"/\"", BINOP_DIV },
419 { "Omod", "\"mod\"", BINOP_MOD },
420 { "Orem", "\"rem\"", BINOP_REM },
421 { "Oexpon", "\"**\"", BINOP_EXP },
422 { "Olt", "\"<\"", BINOP_LESS },
423 { "Ole", "\"<=\"", BINOP_LEQ },
424 { "Ogt", "\">\"", BINOP_GTR },
425 { "Oge", "\">=\"", BINOP_GEQ },
426 { "Oeq", "\"=\"", BINOP_EQUAL },
427 { "One", "\"/=\"", BINOP_NOTEQUAL },
428 { "Oand", "\"and\"", BINOP_BITWISE_AND },
429 { "Oor", "\"or\"", BINOP_BITWISE_IOR },
430 { "Oxor", "\"xor\"", BINOP_BITWISE_XOR },
431 { "Oconcat", "\"&\"", BINOP_CONCAT },
432 { "Oabs", "\"abs\"", UNOP_ABS },
433 { "Onot", "\"not\"", UNOP_LOGICAL_NOT },
434 { "Oadd", "\"+\"", UNOP_PLUS },
435 { "Osubtract", "\"-\"", UNOP_NEG },
436 { NULL, NULL }
437};
438
439/* True if STR should be suppressed in info listings. */
440static int
441is_suppressed_name (str)
442 const char* str;
443{
444 if (STREQN (str, "_ada_", 5))
445 str += 5;
446 if (str[0] == '_' || str[0] == '\000')
447 return 1;
448 else
449 {
450 const char* p;
451 const char* suffix = strstr (str, "___");
452 if (suffix != NULL && suffix[3] != 'X')
453 return 1;
454 if (suffix == NULL)
455 suffix = str + strlen (str);
456 for (p = suffix-1; p != str; p -= 1)
457 if (isupper (*p))
458 {
459 int i;
460 if (p[0] == 'X' && p[-1] != '_')
461 goto OK;
462 if (*p != 'O')
463 return 1;
464 for (i = 0; ada_opname_table[i].mangled != NULL; i += 1)
465 if (STREQN (ada_opname_table[i].mangled, p,
466 strlen (ada_opname_table[i].mangled)))
467 goto OK;
468 return 1;
469 OK: ;
470 }
471 return 0;
472 }
473}
474
475/* The "mangled" form of DEMANGLED, according to GNAT conventions.
476 * The result is valid until the next call to ada_mangle. */
477char *
478ada_mangle (demangled)
479 const char* demangled;
480{
481 static char* mangling_buffer = NULL;
482 static size_t mangling_buffer_size = 0;
483 const char* p;
484 int k;
485
486 if (demangled == NULL)
487 return NULL;
488
489 GROW_VECT (mangling_buffer, mangling_buffer_size, 2*strlen (demangled) + 10);
490
491 k = 0;
492 for (p = demangled; *p != '\0'; p += 1)
493 {
494 if (*p == '.')
495 {
496 mangling_buffer[k] = mangling_buffer[k+1] = '_';
497 k += 2;
498 }
499 else if (*p == '"')
500 {
501 const struct ada_opname_map* mapping;
502
503 for (mapping = ada_opname_table;
504 mapping->mangled != NULL &&
505 ! STREQN (mapping->demangled, p, strlen (mapping->demangled));
506 p += 1)
507 ;
508 if (mapping->mangled == NULL)
509 error ("invalid Ada operator name: %s", p);
510 strcpy (mangling_buffer+k, mapping->mangled);
511 k += strlen (mapping->mangled);
512 break;
513 }
514 else
515 {
516 mangling_buffer[k] = *p;
517 k += 1;
518 }
519 }
520
521 mangling_buffer[k] = '\0';
522 return mangling_buffer;
523}
524
525/* Return NAME folded to lower case, or, if surrounded by single
526 * quotes, unfolded, but with the quotes stripped away. Result good
527 * to next call. */
528char*
529ada_fold_name (const char* name)
530{
531 static char* fold_buffer = NULL;
532 static size_t fold_buffer_size = 0;
533
534 int len = strlen (name);
535 GROW_VECT (fold_buffer, fold_buffer_size, len+1);
536
537 if (name[0] == '\'')
538 {
539 strncpy (fold_buffer, name+1, len-2);
540 fold_buffer[len-2] = '\000';
541 }
542 else
543 {
544 int i;
545 for (i = 0; i <= len; i += 1)
546 fold_buffer[i] = tolower (name[i]);
547 }
548
549 return fold_buffer;
550}
551
552/* Demangle:
553 1. Discard final __{DIGIT}+ or ${DIGIT}+
554 2. Convert other instances of embedded "__" to `.'.
555 3. Discard leading _ada_.
556 4. Convert operator names to the appropriate quoted symbols.
557 5. Remove everything after first ___ if it is followed by
558 'X'.
559 6. Replace TK__ with __, and a trailing B or TKB with nothing.
560 7. Put symbols that should be suppressed in <...> brackets.
561 8. Remove trailing X[bn]* suffix (indicating names in package bodies).
562 The resulting string is valid until the next call of ada_demangle.
563 */
564
565char *
566ada_demangle (mangled)
567 const char* mangled;
568{
569 int i, j;
570 int len0;
571 const char* p;
572 char* demangled;
573 int at_start_name;
574 static char* demangling_buffer = NULL;
575 static size_t demangling_buffer_size = 0;
576
577 if (STREQN (mangled, "_ada_", 5))
578 mangled += 5;
579
580 if (mangled[0] == '_' || mangled[0] == '<')
581 goto Suppress;
582
583 p = strstr (mangled, "___");
584 if (p == NULL)
585 len0 = strlen (mangled);
586 else
587 {
588 if (p[3] == 'X')
589 len0 = p - mangled;
590 else
591 goto Suppress;
592 }
593 if (len0 > 3 && STREQ (mangled + len0 - 3, "TKB"))
594 len0 -= 3;
595 if (len0 > 1 && STREQ (mangled + len0 - 1, "B"))
596 len0 -= 1;
597
598 /* Make demangled big enough for possible expansion by operator name. */
599 GROW_VECT (demangling_buffer, demangling_buffer_size, 2*len0+1);
600 demangled = demangling_buffer;
601
602 if (isdigit (mangled[len0 - 1])) {
603 for (i = len0-2; i >= 0 && isdigit (mangled[i]); i -= 1)
604 ;
605 if (i > 1 && mangled[i] == '_' && mangled[i-1] == '_')
606 len0 = i - 1;
607 else if (mangled[i] == '$')
608 len0 = i;
609 }
610
611 for (i = 0, j = 0; i < len0 && ! isalpha (mangled[i]); i += 1, j += 1)
612 demangled[j] = mangled[i];
613
614 at_start_name = 1;
615 while (i < len0)
616 {
617 if (at_start_name && mangled[i] == 'O')
618 {
619 int k;
620 for (k = 0; ada_opname_table[k].mangled != NULL; k += 1)
621 {
622 int op_len = strlen (ada_opname_table[k].mangled);
623 if (STREQN (ada_opname_table[k].mangled+1, mangled+i+1, op_len-1)
624 && ! isalnum (mangled[i + op_len]))
625 {
626 strcpy (demangled + j, ada_opname_table[k].demangled);
627 at_start_name = 0;
628 i += op_len;
629 j += strlen (ada_opname_table[k].demangled);
630 break;
631 }
632 }
633 if (ada_opname_table[k].mangled != NULL)
634 continue;
635 }
636 at_start_name = 0;
637
638 if (i < len0-4 && STREQN (mangled+i, "TK__", 4))
639 i += 2;
640 if (mangled[i] == 'X' && i != 0 && isalnum (mangled[i-1]))
641 {
642 do
643 i += 1;
644 while (i < len0 && (mangled[i] == 'b' || mangled[i] == 'n'));
645 if (i < len0)
646 goto Suppress;
647 }
648 else if (i < len0-2 && mangled[i] == '_' && mangled[i+1] == '_')
649 {
650 demangled[j] = '.';
651 at_start_name = 1;
652 i += 2; j += 1;
653 }
654 else
655 {
656 demangled[j] = mangled[i];
657 i += 1; j += 1;
658 }
659 }
660 demangled[j] = '\000';
661
662 for (i = 0; demangled[i] != '\0'; i += 1)
663 if (isupper (demangled[i]) || demangled[i] == ' ')
664 goto Suppress;
665
666 return demangled;
667
668Suppress:
669 GROW_VECT (demangling_buffer, demangling_buffer_size,
670 strlen (mangled) + 3);
671 demangled = demangling_buffer;
672 if (mangled[0] == '<')
673 strcpy (demangled, mangled);
674 else
675 sprintf (demangled, "<%s>", mangled);
676 return demangled;
677
678}
679
680/* Returns non-zero iff SYM_NAME matches NAME, ignoring any trailing
681 * suffixes that encode debugging information or leading _ada_ on
682 * SYM_NAME (see is_name_suffix commentary for the debugging
683 * information that is ignored). If WILD, then NAME need only match a
684 * suffix of SYM_NAME minus the same suffixes. Also returns 0 if
685 * either argument is NULL. */
686
687int
688ada_match_name (sym_name, name, wild)
689 const char* sym_name;
690 const char* name;
691 int wild;
692{
693 if (sym_name == NULL || name == NULL)
694 return 0;
695 else if (wild)
696 return wild_match (name, strlen (name), sym_name);
697 else {
698 int len_name = strlen (name);
699 return (STREQN (sym_name, name, len_name)
700 && is_name_suffix (sym_name+len_name))
701 || (STREQN (sym_name, "_ada_", 5)
702 && STREQN (sym_name+5, name, len_name)
703 && is_name_suffix (sym_name+len_name+5));
704 }
705}
706
707/* True (non-zero) iff in Ada mode, the symbol SYM should be
708 suppressed in info listings. */
709
710int
711ada_suppress_symbol_printing (sym)
712 struct symbol *sym;
713{
714 if (SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE)
715 return 1;
716 else
717 return is_suppressed_name (SYMBOL_NAME (sym));
718}
719
720\f
721 /* Arrays */
722
723/* Names of MAX_ADA_DIMENS bounds in P_BOUNDS fields of
724 array descriptors. */
725
726static char* bound_name[] = {
727 "LB0", "UB0", "LB1", "UB1", "LB2", "UB2", "LB3", "UB3",
728 "LB4", "UB4", "LB5", "UB5", "LB6", "UB6", "LB7", "UB7"
729};
730
731/* Maximum number of array dimensions we are prepared to handle. */
732
733#define MAX_ADA_DIMENS (sizeof(bound_name) / (2*sizeof(char*)))
734
735/* Like modify_field, but allows bitpos > wordlength. */
736
737static void
738modify_general_field (addr, fieldval, bitpos, bitsize)
739 char *addr;
740 LONGEST fieldval;
741 int bitpos, bitsize;
742{
743 modify_field (addr + sizeof (LONGEST) * bitpos / (8 * sizeof (LONGEST)),
744 fieldval, bitpos % (8 * sizeof (LONGEST)),
745 bitsize);
746}
747
748
749/* The desc_* routines return primitive portions of array descriptors
750 (fat pointers). */
751
752/* The descriptor or array type, if any, indicated by TYPE; removes
753 level of indirection, if needed. */
754static struct type*
755desc_base_type (type)
756 struct type* type;
757{
758 if (type == NULL)
759 return NULL;
760 CHECK_TYPEDEF (type);
761 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_PTR)
762 return check_typedef (TYPE_TARGET_TYPE (type));
763 else
764 return type;
765}
766
767/* True iff TYPE indicates a "thin" array pointer type. */
768static int
769is_thin_pntr (struct type* type)
770{
771 return
772 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
773 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
774}
775
776/* The descriptor type for thin pointer type TYPE. */
777static struct type*
778thin_descriptor_type (struct type* type)
779{
780 struct type* base_type = desc_base_type (type);
781 if (base_type == NULL)
782 return NULL;
783 if (is_suffix (ada_type_name (base_type), "___XVE"))
784 return base_type;
785 else
786 {
787 struct type* alt_type =
788 ada_find_parallel_type (base_type, "___XVE");
789 if (alt_type == NULL)
790 return base_type;
791 else
792 return alt_type;
793 }
794}
795
796/* A pointer to the array data for thin-pointer value VAL. */
797static struct value*
798thin_data_pntr (struct value* val)
799{
800 struct type* type = VALUE_TYPE (val);
801 if (TYPE_CODE (type) == TYPE_CODE_PTR)
802 return value_cast (desc_data_type (thin_descriptor_type (type)),
803 value_copy (val));
804 else
805 return value_from_longest (desc_data_type (thin_descriptor_type (type)),
806 VALUE_ADDRESS (val) + VALUE_OFFSET (val));
807}
808
809/* True iff TYPE indicates a "thick" array pointer type. */
810static int
811is_thick_pntr (struct type* type)
812{
813 type = desc_base_type (type);
814 return (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT
815 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
816}
817
818/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
819 pointer to one, the type of its bounds data; otherwise, NULL. */
820static struct type*
821desc_bounds_type (type)
822 struct type* type;
823{
824 struct type* r;
825
826 type = desc_base_type (type);
827
828 if (type == NULL)
829 return NULL;
830 else if (is_thin_pntr (type))
831 {
832 type = thin_descriptor_type (type);
833 if (type == NULL)
834 return NULL;
835 r = lookup_struct_elt_type (type, "BOUNDS", 1);
836 if (r != NULL)
837 return check_typedef (r);
838 }
839 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
840 {
841 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
842 if (r != NULL)
843 return check_typedef (TYPE_TARGET_TYPE (check_typedef (r)));
844 }
845 return NULL;
846}
847
848/* If ARR is an array descriptor (fat or thin pointer), or pointer to
849 one, a pointer to its bounds data. Otherwise NULL. */
850static struct value*
851desc_bounds (arr)
852 struct value* arr;
853{
854 struct type* type = check_typedef (VALUE_TYPE (arr));
855 if (is_thin_pntr (type))
856 {
857 struct type* bounds_type = desc_bounds_type (thin_descriptor_type (type));
858 LONGEST addr;
859
860 if (desc_bounds_type == NULL)
861 error ("Bad GNAT array descriptor");
862
863 /* NOTE: The following calculation is not really kosher, but
864 since desc_type is an XVE-encoded type (and shouldn't be),
865 the correct calculation is a real pain. FIXME (and fix GCC). */
866 if (TYPE_CODE (type) == TYPE_CODE_PTR)
867 addr = value_as_long (arr);
868 else
869 addr = VALUE_ADDRESS (arr) + VALUE_OFFSET (arr);
870
871 return
872 value_from_longest (lookup_pointer_type (bounds_type),
873 addr - TYPE_LENGTH (bounds_type));
874 }
875
876 else if (is_thick_pntr (type))
877 return value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
878 "Bad GNAT array descriptor");
879 else
880 return NULL;
881}
882
883/* If TYPE is the type of an array-descriptor (fat pointer), the bit
884 position of the field containing the address of the bounds data. */
885static int
886fat_pntr_bounds_bitpos (type)
887 struct type* type;
888{
889 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
890}
891
892/* If TYPE is the type of an array-descriptor (fat pointer), the bit
893 size of the field containing the address of the bounds data. */
894static int
895fat_pntr_bounds_bitsize (type)
896 struct type* type;
897{
898 type = desc_base_type (type);
899
900 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
901 return TYPE_FIELD_BITSIZE (type, 1);
902 else
903 return 8 * TYPE_LENGTH (check_typedef (TYPE_FIELD_TYPE (type, 1)));
904}
905
906/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
907 pointer to one, the type of its array data (a
908 pointer-to-array-with-no-bounds type); otherwise, NULL. Use
909 ada_type_of_array to get an array type with bounds data. */
910static struct type*
911desc_data_type (type)
912 struct type* type;
913{
914 type = desc_base_type (type);
915
916 /* NOTE: The following is bogus; see comment in desc_bounds. */
917 if (is_thin_pntr (type))
918 return lookup_pointer_type
919 (desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type),1)));
920 else if (is_thick_pntr (type))
921 return lookup_struct_elt_type (type, "P_ARRAY", 1);
922 else
923 return NULL;
924}
925
926/* If ARR is an array descriptor (fat or thin pointer), a pointer to
927 its array data. */
928static struct value*
929desc_data (arr)
930 struct value* arr;
931{
932 struct type* type = VALUE_TYPE (arr);
933 if (is_thin_pntr (type))
934 return thin_data_pntr (arr);
935 else if (is_thick_pntr (type))
936 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
937 "Bad GNAT array descriptor");
938 else
939 return NULL;
940}
941
942
943/* If TYPE is the type of an array-descriptor (fat pointer), the bit
944 position of the field containing the address of the data. */
945static int
946fat_pntr_data_bitpos (type)
947 struct type* type;
948{
949 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
950}
951
952/* If TYPE is the type of an array-descriptor (fat pointer), the bit
953 size of the field containing the address of the data. */
954static int
955fat_pntr_data_bitsize (type)
956 struct type* type;
957{
958 type = desc_base_type (type);
959
960 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
961 return TYPE_FIELD_BITSIZE (type, 0);
962 else
963 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
964}
965
966/* If BOUNDS is an array-bounds structure (or pointer to one), return
967 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
968 bound, if WHICH is 1. The first bound is I=1. */
969static struct value*
970desc_one_bound (bounds, i, which)
971 struct value* bounds;
972 int i;
973 int which;
974{
975 return value_struct_elt (&bounds, NULL, bound_name[2*i+which-2], NULL,
976 "Bad GNAT array descriptor bounds");
977}
978
979/* If BOUNDS is an array-bounds structure type, return the bit position
980 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
981 bound, if WHICH is 1. The first bound is I=1. */
982static int
983desc_bound_bitpos (type, i, which)
984 struct type* type;
985 int i;
986 int which;
987{
988 return TYPE_FIELD_BITPOS (desc_base_type (type), 2*i+which-2);
989}
990
991/* If BOUNDS is an array-bounds structure type, return the bit field size
992 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
993 bound, if WHICH is 1. The first bound is I=1. */
994static int
995desc_bound_bitsize (type, i, which)
996 struct type* type;
997 int i;
998 int which;
999{
1000 type = desc_base_type (type);
1001
1002 if (TYPE_FIELD_BITSIZE (type, 2*i+which-2) > 0)
1003 return TYPE_FIELD_BITSIZE (type, 2*i+which-2);
1004 else
1005 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2*i+which-2));
1006}
1007
1008/* If TYPE is the type of an array-bounds structure, the type of its
1009 Ith bound (numbering from 1). Otherwise, NULL. */
1010static struct type*
1011desc_index_type (type, i)
1012 struct type* type;
1013 int i;
1014{
1015 type = desc_base_type (type);
1016
1017 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1018 return lookup_struct_elt_type (type, bound_name[2*i-2], 1);
1019 else
1020 return NULL;
1021}
1022
1023/* The number of index positions in the array-bounds type TYPE. 0
1024 if TYPE is NULL. */
1025static int
1026desc_arity (type)
1027 struct type* type;
1028{
1029 type = desc_base_type (type);
1030
1031 if (type != NULL)
1032 return TYPE_NFIELDS (type) / 2;
1033 return 0;
1034}
1035
1036
1037/* Non-zero iff type is a simple array type (or pointer to one). */
1038int
1039ada_is_simple_array (type)
1040 struct type* type;
1041{
1042 if (type == NULL)
1043 return 0;
1044 CHECK_TYPEDEF (type);
1045 return (TYPE_CODE (type) == TYPE_CODE_ARRAY
1046 || (TYPE_CODE (type) == TYPE_CODE_PTR
1047 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY));
1048}
1049
1050/* Non-zero iff type belongs to a GNAT array descriptor. */
1051int
1052ada_is_array_descriptor (type)
1053 struct type* type;
1054{
1055 struct type* data_type = desc_data_type (type);
1056
1057 if (type == NULL)
1058 return 0;
1059 CHECK_TYPEDEF (type);
1060 return
1061 data_type != NULL
1062 && ((TYPE_CODE (data_type) == TYPE_CODE_PTR
1063 && TYPE_TARGET_TYPE (data_type) != NULL
1064 && TYPE_CODE (TYPE_TARGET_TYPE (data_type)) == TYPE_CODE_ARRAY)
1065 ||
1066 TYPE_CODE (data_type) == TYPE_CODE_ARRAY)
1067 && desc_arity (desc_bounds_type (type)) > 0;
1068}
1069
1070/* Non-zero iff type is a partially mal-formed GNAT array
1071 descriptor. (FIXME: This is to compensate for some problems with
1072 debugging output from GNAT. Re-examine periodically to see if it
1073 is still needed. */
1074int
1075ada_is_bogus_array_descriptor (type)
1076 struct type *type;
1077{
1078 return
1079 type != NULL
1080 && TYPE_CODE (type) == TYPE_CODE_STRUCT
1081 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
1082 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1083 && ! ada_is_array_descriptor (type);
1084}
1085
1086
1087/* If ARR has a record type in the form of a standard GNAT array descriptor,
1088 (fat pointer) returns the type of the array data described---specifically,
1089 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
1090 in from the descriptor; otherwise, they are left unspecified. If
1091 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1092 returns NULL. The result is simply the type of ARR if ARR is not
1093 a descriptor. */
1094struct type*
1095ada_type_of_array (arr, bounds)
1096 struct value* arr;
1097 int bounds;
1098{
1099 if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1100 return decode_packed_array_type (VALUE_TYPE (arr));
1101
1102 if (! ada_is_array_descriptor (VALUE_TYPE (arr)))
1103 return VALUE_TYPE (arr);
1104
1105 if (! bounds)
1106 return check_typedef (TYPE_TARGET_TYPE (desc_data_type (VALUE_TYPE (arr))));
1107 else
1108 {
1109 struct type* elt_type;
1110 int arity;
1111 struct value* descriptor;
1112 struct objfile *objf = TYPE_OBJFILE (VALUE_TYPE (arr));
1113
1114 elt_type = ada_array_element_type (VALUE_TYPE (arr), -1);
1115 arity = ada_array_arity (VALUE_TYPE (arr));
1116
1117 if (elt_type == NULL || arity == 0)
1118 return check_typedef (VALUE_TYPE (arr));
1119
1120 descriptor = desc_bounds (arr);
1121 if (value_as_long (descriptor) == 0)
1122 return NULL;
1123 while (arity > 0) {
1124 struct type* range_type = alloc_type (objf);
1125 struct type* array_type = alloc_type (objf);
1126 struct value* low = desc_one_bound (descriptor, arity, 0);
1127 struct value* high = desc_one_bound (descriptor, arity, 1);
1128 arity -= 1;
1129
1130 create_range_type (range_type, VALUE_TYPE (low),
1131 (int) value_as_long (low),
1132 (int) value_as_long (high));
1133 elt_type = create_array_type (array_type, elt_type, range_type);
1134 }
1135
1136 return lookup_pointer_type (elt_type);
1137 }
1138}
1139
1140/* If ARR does not represent an array, returns ARR unchanged.
1141 Otherwise, returns either a standard GDB array with bounds set
1142 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1143 GDB array. Returns NULL if ARR is a null fat pointer. */
1144struct value*
1145ada_coerce_to_simple_array_ptr (arr)
1146 struct value* arr;
1147{
1148 if (ada_is_array_descriptor (VALUE_TYPE (arr)))
1149 {
1150 struct type* arrType = ada_type_of_array (arr, 1);
1151 if (arrType == NULL)
1152 return NULL;
1153 return value_cast (arrType, value_copy (desc_data (arr)));
1154 }
1155 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1156 return decode_packed_array (arr);
1157 else
1158 return arr;
1159}
1160
1161/* If ARR does not represent an array, returns ARR unchanged.
1162 Otherwise, returns a standard GDB array describing ARR (which may
1163 be ARR itself if it already is in the proper form). */
1164struct value*
1165ada_coerce_to_simple_array (arr)
1166 struct value* arr;
1167{
1168 if (ada_is_array_descriptor (VALUE_TYPE (arr)))
1169 {
1170 struct value* arrVal = ada_coerce_to_simple_array_ptr (arr);
1171 if (arrVal == NULL)
1172 error ("Bounds unavailable for null array pointer.");
1173 return value_ind (arrVal);
1174 }
1175 else if (ada_is_packed_array_type (VALUE_TYPE (arr)))
1176 return decode_packed_array (arr);
1177 else
1178 return arr;
1179}
1180
1181/* If TYPE represents a GNAT array type, return it translated to an
1182 ordinary GDB array type (possibly with BITSIZE fields indicating
1183 packing). For other types, is the identity. */
1184struct type*
1185ada_coerce_to_simple_array_type (type)
1186 struct type* type;
1187{
1188 struct value* mark = value_mark ();
1189 struct value* dummy = value_from_longest (builtin_type_long, 0);
1190 struct type* result;
1191 VALUE_TYPE (dummy) = type;
1192 result = ada_type_of_array (dummy, 0);
1193 value_free_to_mark (dummy);
1194 return result;
1195}
1196
1197/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1198int
1199ada_is_packed_array_type (type)
1200 struct type* type;
1201{
1202 if (type == NULL)
1203 return 0;
1204 CHECK_TYPEDEF (type);
1205 return
1206 ada_type_name (type) != NULL
1207 && strstr (ada_type_name (type), "___XP") != NULL;
1208}
1209
1210/* Given that TYPE is a standard GDB array type with all bounds filled
1211 in, and that the element size of its ultimate scalar constituents
1212 (that is, either its elements, or, if it is an array of arrays, its
1213 elements' elements, etc.) is *ELT_BITS, return an identical type,
1214 but with the bit sizes of its elements (and those of any
1215 constituent arrays) recorded in the BITSIZE components of its
1216 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
1217 in bits. */
1218static struct type*
1219packed_array_type (type, elt_bits)
1220 struct type* type;
1221 long* elt_bits;
1222{
1223 struct type* new_elt_type;
1224 struct type* new_type;
1225 LONGEST low_bound, high_bound;
1226
1227 CHECK_TYPEDEF (type);
1228 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1229 return type;
1230
1231 new_type = alloc_type (TYPE_OBJFILE (type));
1232 new_elt_type = packed_array_type (check_typedef (TYPE_TARGET_TYPE (type)),
1233 elt_bits);
1234 create_array_type (new_type, new_elt_type, TYPE_FIELD_TYPE (type, 0));
1235 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
1236 TYPE_NAME (new_type) = ada_type_name (type);
1237
1238 if (get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
1239 &low_bound, &high_bound) < 0)
1240 low_bound = high_bound = 0;
1241 if (high_bound < low_bound)
1242 *elt_bits = TYPE_LENGTH (new_type) = 0;
1243 else
1244 {
1245 *elt_bits *= (high_bound - low_bound + 1);
1246 TYPE_LENGTH (new_type) =
1247 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
1248 }
1249
1250 /* TYPE_FLAGS (new_type) |= TYPE_FLAG_FIXED_INSTANCE; */
1251 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
1252 return new_type;
1253}
1254
1255/* The array type encoded by TYPE, where ada_is_packed_array_type (TYPE).
1256 */
1257static struct type*
1258decode_packed_array_type (type)
1259 struct type* type;
1260{
1261 struct symbol** syms;
1262 struct block** blocks;
1263 const char* raw_name = ada_type_name (check_typedef (type));
1264 char* name = (char*) alloca (strlen (raw_name) + 1);
1265 char* tail = strstr (raw_name, "___XP");
1266 struct type* shadow_type;
1267 long bits;
1268 int i, n;
1269
1270 memcpy (name, raw_name, tail - raw_name);
1271 name[tail - raw_name] = '\000';
1272
1273 /* NOTE: Use ada_lookup_symbol_list because of bug in some versions
1274 * of gcc (Solaris, e.g.). FIXME when compiler is fixed. */
1275 n = ada_lookup_symbol_list (name, get_selected_block (NULL),
1276 VAR_NAMESPACE, &syms, &blocks);
1277 for (i = 0; i < n; i += 1)
1278 if (syms[i] != NULL && SYMBOL_CLASS (syms[i]) == LOC_TYPEDEF
1279 && STREQ (name, ada_type_name (SYMBOL_TYPE (syms[i]))))
1280 break;
1281 if (i >= n)
1282 {
1283 warning ("could not find bounds information on packed array");
1284 return NULL;
1285 }
1286 shadow_type = SYMBOL_TYPE (syms[i]);
1287
1288 if (TYPE_CODE (shadow_type) != TYPE_CODE_ARRAY)
1289 {
1290 warning ("could not understand bounds information on packed array");
1291 return NULL;
1292 }
1293
1294 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
1295 {
1296 warning ("could not understand bit size information on packed array");
1297 return NULL;
1298 }
1299
1300 return packed_array_type (shadow_type, &bits);
1301}
1302
1303/* Given that ARR is a struct value* indicating a GNAT packed array,
1304 returns a simple array that denotes that array. Its type is a
1305 standard GDB array type except that the BITSIZEs of the array
1306 target types are set to the number of bits in each element, and the
1307 type length is set appropriately. */
1308
1309static struct value*
1310decode_packed_array (arr)
1311 struct value* arr;
1312{
1313 struct type* type = decode_packed_array_type (VALUE_TYPE (arr));
1314
1315 if (type == NULL)
1316 {
1317 error ("can't unpack array");
1318 return NULL;
1319 }
1320 else
1321 return coerce_unspec_val_to_type (arr, 0, type);
1322}
1323
1324
1325/* The value of the element of packed array ARR at the ARITY indices
1326 given in IND. ARR must be a simple array. */
1327
1328static struct value*
1329value_subscript_packed (arr, arity, ind)
1330 struct value* arr;
1331 int arity;
1332 struct value** ind;
1333{
1334 int i;
1335 int bits, elt_off, bit_off;
1336 long elt_total_bit_offset;
1337 struct type* elt_type;
1338 struct value* v;
1339
1340 bits = 0;
1341 elt_total_bit_offset = 0;
1342 elt_type = check_typedef (VALUE_TYPE (arr));
1343 for (i = 0; i < arity; i += 1)
1344 {
1345 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY
1346 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
1347 error ("attempt to do packed indexing of something other than a packed array");
1348 else
1349 {
1350 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
1351 LONGEST lowerbound, upperbound;
1352 LONGEST idx;
1353
1354 if (get_discrete_bounds (range_type, &lowerbound,
1355 &upperbound) < 0)
1356 {
1357 warning ("don't know bounds of array");
1358 lowerbound = upperbound = 0;
1359 }
1360
1361 idx = value_as_long (value_pos_atr (ind[i]));
1362 if (idx < lowerbound || idx > upperbound)
1363 warning ("packed array index %ld out of bounds", (long) idx);
1364 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
1365 elt_total_bit_offset += (idx - lowerbound) * bits;
1366 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
1367 }
1368 }
1369 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
1370 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
1371
1372 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
1373 bits, elt_type);
1374 if (VALUE_LVAL (arr) == lval_internalvar)
1375 VALUE_LVAL (v) = lval_internalvar_component;
1376 else
1377 VALUE_LVAL (v) = VALUE_LVAL (arr);
1378 return v;
1379}
1380
1381/* Non-zero iff TYPE includes negative integer values. */
1382
1383static int
1384has_negatives (type)
1385 struct type* type;
1386{
1387 switch (TYPE_CODE (type)) {
1388 default:
1389 return 0;
1390 case TYPE_CODE_INT:
1391 return ! TYPE_UNSIGNED (type);
1392 case TYPE_CODE_RANGE:
1393 return TYPE_LOW_BOUND (type) < 0;
1394 }
1395}
1396
1397
1398/* Create a new value of type TYPE from the contents of OBJ starting
1399 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
1400 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
1401 assigning through the result will set the field fetched from. OBJ
1402 may also be NULL, in which case, VALADDR+OFFSET must address the
1403 start of storage containing the packed value. The value returned
1404 in this case is never an lval.
1405 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
1406
1407struct value*
1408ada_value_primitive_packed_val (obj, valaddr, offset, bit_offset,
1409 bit_size, type)
1410 struct value* obj;
1411 char* valaddr;
1412 long offset;
1413 int bit_offset;
1414 int bit_size;
1415 struct type* type;
1416{
1417 struct value* v;
1418 int src, /* Index into the source area. */
1419 targ, /* Index into the target area. */
1420 i,
1421 srcBitsLeft, /* Number of source bits left to move. */
1422 nsrc, ntarg, /* Number of source and target bytes. */
1423 unusedLS, /* Number of bits in next significant
1424 * byte of source that are unused. */
1425 accumSize; /* Number of meaningful bits in accum */
1426 unsigned char* bytes; /* First byte containing data to unpack. */
1427 unsigned char* unpacked;
1428 unsigned long accum; /* Staging area for bits being transferred */
1429 unsigned char sign;
1430 int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
1431 /* Transmit bytes from least to most significant; delta is the
1432 * direction the indices move. */
1433 int delta = BITS_BIG_ENDIAN ? -1 : 1;
1434
1435 CHECK_TYPEDEF (type);
1436
1437 if (obj == NULL)
1438 {
1439 v = allocate_value (type);
1440 bytes = (unsigned char*) (valaddr + offset);
1441 }
1442 else if (VALUE_LAZY (obj))
1443 {
1444 v = value_at (type,
1445 VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset, NULL);
1446 bytes = (unsigned char*) alloca (len);
1447 read_memory (VALUE_ADDRESS (v), bytes, len);
1448 }
1449 else
1450 {
1451 v = allocate_value (type);
1452 bytes = (unsigned char*) VALUE_CONTENTS (obj) + offset;
1453 }
1454
1455 if (obj != NULL)
1456 {
1457 VALUE_LVAL (v) = VALUE_LVAL (obj);
1458 if (VALUE_LVAL (obj) == lval_internalvar)
1459 VALUE_LVAL (v) = lval_internalvar_component;
1460 VALUE_ADDRESS (v) = VALUE_ADDRESS (obj) + VALUE_OFFSET (obj) + offset;
1461 VALUE_BITPOS (v) = bit_offset + VALUE_BITPOS (obj);
1462 VALUE_BITSIZE (v) = bit_size;
1463 if (VALUE_BITPOS (v) >= HOST_CHAR_BIT)
1464 {
1465 VALUE_ADDRESS (v) += 1;
1466 VALUE_BITPOS (v) -= HOST_CHAR_BIT;
1467 }
1468 }
1469 else
1470 VALUE_BITSIZE (v) = bit_size;
1471 unpacked = (unsigned char*) VALUE_CONTENTS (v);
1472
1473 srcBitsLeft = bit_size;
1474 nsrc = len;
1475 ntarg = TYPE_LENGTH (type);
1476 sign = 0;
1477 if (bit_size == 0)
1478 {
1479 memset (unpacked, 0, TYPE_LENGTH (type));
1480 return v;
1481 }
1482 else if (BITS_BIG_ENDIAN)
1483 {
1484 src = len-1;
1485 if (has_negatives (type) &&
1486 ((bytes[0] << bit_offset) & (1 << (HOST_CHAR_BIT-1))))
1487 sign = ~0;
1488
1489 unusedLS =
1490 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
1491 % HOST_CHAR_BIT;
1492
1493 switch (TYPE_CODE (type))
1494 {
1495 case TYPE_CODE_ARRAY:
1496 case TYPE_CODE_UNION:
1497 case TYPE_CODE_STRUCT:
1498 /* Non-scalar values must be aligned at a byte boundary. */
1499 accumSize =
1500 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
1501 /* And are placed at the beginning (most-significant) bytes
1502 * of the target. */
1503 targ = src;
1504 break;
1505 default:
1506 accumSize = 0;
1507 targ = TYPE_LENGTH (type) - 1;
1508 break;
1509 }
1510 }
1511 else
1512 {
1513 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
1514
1515 src = targ = 0;
1516 unusedLS = bit_offset;
1517 accumSize = 0;
1518
1519 if (has_negatives (type) && (bytes[len-1] & (1 << sign_bit_offset)))
1520 sign = ~0;
1521 }
1522
1523 accum = 0;
1524 while (nsrc > 0)
1525 {
1526 /* Mask for removing bits of the next source byte that are not
1527 * part of the value. */
1528 unsigned int unusedMSMask =
1529 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft))-1;
1530 /* Sign-extend bits for this byte. */
1531 unsigned int signMask = sign & ~unusedMSMask;
1532 accum |=
1533 (((bytes[src] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
1534 accumSize += HOST_CHAR_BIT - unusedLS;
1535 if (accumSize >= HOST_CHAR_BIT)
1536 {
1537 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1538 accumSize -= HOST_CHAR_BIT;
1539 accum >>= HOST_CHAR_BIT;
1540 ntarg -= 1;
1541 targ += delta;
1542 }
1543 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
1544 unusedLS = 0;
1545 nsrc -= 1;
1546 src += delta;
1547 }
1548 while (ntarg > 0)
1549 {
1550 accum |= sign << accumSize;
1551 unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT);
1552 accumSize -= HOST_CHAR_BIT;
1553 accum >>= HOST_CHAR_BIT;
1554 ntarg -= 1;
1555 targ += delta;
1556 }
1557
1558 return v;
1559}
1560
1561/* Move N bits from SOURCE, starting at bit offset SRC_OFFSET to
1562 TARGET, starting at bit offset TARG_OFFSET. SOURCE and TARGET must
1563 not overlap. */
1564static void
1565move_bits (char* target, int targ_offset, char* source, int src_offset, int n)
1566{
1567 unsigned int accum, mask;
1568 int accum_bits, chunk_size;
1569
1570 target += targ_offset / HOST_CHAR_BIT;
1571 targ_offset %= HOST_CHAR_BIT;
1572 source += src_offset / HOST_CHAR_BIT;
1573 src_offset %= HOST_CHAR_BIT;
1574 if (BITS_BIG_ENDIAN)
1575 {
1576 accum = (unsigned char) *source;
1577 source += 1;
1578 accum_bits = HOST_CHAR_BIT - src_offset;
1579
1580 while (n > 0)
1581 {
1582 int unused_right;
1583 accum = (accum << HOST_CHAR_BIT) + (unsigned char) *source;
1584 accum_bits += HOST_CHAR_BIT;
1585 source += 1;
1586 chunk_size = HOST_CHAR_BIT - targ_offset;
1587 if (chunk_size > n)
1588 chunk_size = n;
1589 unused_right = HOST_CHAR_BIT - (chunk_size + targ_offset);
1590 mask = ((1 << chunk_size) - 1) << unused_right;
1591 *target =
1592 (*target & ~mask)
1593 | ((accum >> (accum_bits - chunk_size - unused_right)) & mask);
1594 n -= chunk_size;
1595 accum_bits -= chunk_size;
1596 target += 1;
1597 targ_offset = 0;
1598 }
1599 }
1600 else
1601 {
1602 accum = (unsigned char) *source >> src_offset;
1603 source += 1;
1604 accum_bits = HOST_CHAR_BIT - src_offset;
1605
1606 while (n > 0)
1607 {
1608 accum = accum + ((unsigned char) *source << accum_bits);
1609 accum_bits += HOST_CHAR_BIT;
1610 source += 1;
1611 chunk_size = HOST_CHAR_BIT - targ_offset;
1612 if (chunk_size > n)
1613 chunk_size = n;
1614 mask = ((1 << chunk_size) - 1) << targ_offset;
1615 *target =
1616 (*target & ~mask) | ((accum << targ_offset) & mask);
1617 n -= chunk_size;
1618 accum_bits -= chunk_size;
1619 accum >>= chunk_size;
1620 target += 1;
1621 targ_offset = 0;
1622 }
1623 }
1624}
1625
1626
1627/* Store the contents of FROMVAL into the location of TOVAL.
1628 Return a new value with the location of TOVAL and contents of
1629 FROMVAL. Handles assignment into packed fields that have
1630 floating-point or non-scalar types. */
1631
1632static struct value*
1633ada_value_assign (struct value* toval, struct value* fromval)
1634{
1635 struct type* type = VALUE_TYPE (toval);
1636 int bits = VALUE_BITSIZE (toval);
1637
1638 if (!toval->modifiable)
1639 error ("Left operand of assignment is not a modifiable lvalue.");
1640
1641 COERCE_REF (toval);
1642
1643 if (VALUE_LVAL (toval) == lval_memory
1644 && bits > 0
1645 && (TYPE_CODE (type) == TYPE_CODE_FLT
1646 || TYPE_CODE (type) == TYPE_CODE_STRUCT))
1647 {
1648 int len =
1649 (VALUE_BITPOS (toval) + bits + HOST_CHAR_BIT - 1)
1650 / HOST_CHAR_BIT;
1651 char* buffer = (char*) alloca (len);
1652 struct value* val;
1653
1654 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1655 fromval = value_cast (type, fromval);
1656
1657 read_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer, len);
1658 if (BITS_BIG_ENDIAN)
1659 move_bits (buffer, VALUE_BITPOS (toval),
1660 VALUE_CONTENTS (fromval),
1661 TYPE_LENGTH (VALUE_TYPE (fromval)) * TARGET_CHAR_BIT - bits,
1662 bits);
1663 else
1664 move_bits (buffer, VALUE_BITPOS (toval), VALUE_CONTENTS (fromval),
1665 0, bits);
1666 write_memory (VALUE_ADDRESS (toval) + VALUE_OFFSET (toval), buffer, len);
1667
1668 val = value_copy (toval);
1669 memcpy (VALUE_CONTENTS_RAW (val), VALUE_CONTENTS (fromval),
1670 TYPE_LENGTH (type));
1671 VALUE_TYPE (val) = type;
1672
1673 return val;
1674 }
1675
1676 return value_assign (toval, fromval);
1677}
1678
1679
1680/* The value of the element of array ARR at the ARITY indices given in IND.
1681 ARR may be either a simple array, GNAT array descriptor, or pointer
1682 thereto. */
1683
1684struct value*
1685ada_value_subscript (arr, arity, ind)
1686 struct value* arr;
1687 int arity;
1688 struct value** ind;
1689{
1690 int k;
1691 struct value* elt;
1692 struct type* elt_type;
1693
1694 elt = ada_coerce_to_simple_array (arr);
1695
1696 elt_type = check_typedef (VALUE_TYPE (elt));
1697 if (TYPE_CODE (elt_type) == TYPE_CODE_ARRAY
1698 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
1699 return value_subscript_packed (elt, arity, ind);
1700
1701 for (k = 0; k < arity; k += 1)
1702 {
1703 if (TYPE_CODE (elt_type) != TYPE_CODE_ARRAY)
1704 error("too many subscripts (%d expected)", k);
1705 elt = value_subscript (elt, value_pos_atr (ind[k]));
1706 }
1707 return elt;
1708}
1709
1710/* Assuming ARR is a pointer to a standard GDB array of type TYPE, the
1711 value of the element of *ARR at the ARITY indices given in
1712 IND. Does not read the entire array into memory. */
1713
1714struct value*
1715ada_value_ptr_subscript (arr, type, arity, ind)
1716 struct value* arr;
1717 struct type* type;
1718 int arity;
1719 struct value** ind;
1720{
1721 int k;
1722
1723 for (k = 0; k < arity; k += 1)
1724 {
1725 LONGEST lwb, upb;
1726 struct value* idx;
1727
1728 if (TYPE_CODE (type) != TYPE_CODE_ARRAY)
1729 error("too many subscripts (%d expected)", k);
1730 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
1731 value_copy (arr));
1732 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
1733 if (lwb == 0)
1734 idx = ind[k];
1735 else
1736 idx = value_sub (ind[k], value_from_longest (builtin_type_int, lwb));
1737 arr = value_add (arr, idx);
1738 type = TYPE_TARGET_TYPE (type);
1739 }
1740
1741 return value_ind (arr);
1742}
1743
1744/* If type is a record type in the form of a standard GNAT array
1745 descriptor, returns the number of dimensions for type. If arr is a
1746 simple array, returns the number of "array of"s that prefix its
1747 type designation. Otherwise, returns 0. */
1748
1749int
1750ada_array_arity (type)
1751 struct type* type;
1752{
1753 int arity;
1754
1755 if (type == NULL)
1756 return 0;
1757
1758 type = desc_base_type (type);
1759
1760 arity = 0;
1761 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1762 return desc_arity (desc_bounds_type (type));
1763 else
1764 while (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1765 {
1766 arity += 1;
1767 type = check_typedef (TYPE_TARGET_TYPE (type));
1768 }
1769
1770 return arity;
1771}
1772
1773/* If TYPE is a record type in the form of a standard GNAT array
1774 descriptor or a simple array type, returns the element type for
1775 TYPE after indexing by NINDICES indices, or by all indices if
1776 NINDICES is -1. Otherwise, returns NULL. */
1777
1778struct type*
1779ada_array_element_type (type, nindices)
1780 struct type* type;
1781 int nindices;
1782{
1783 type = desc_base_type (type);
1784
1785 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
1786 {
1787 int k;
1788 struct type* p_array_type;
1789
1790 p_array_type = desc_data_type (type);
1791
1792 k = ada_array_arity (type);
1793 if (k == 0)
1794 return NULL;
1795
1796 /* Initially p_array_type = elt_type(*)[]...(k times)...[] */
1797 if (nindices >= 0 && k > nindices)
1798 k = nindices;
1799 p_array_type = TYPE_TARGET_TYPE (p_array_type);
1800 while (k > 0 && p_array_type != NULL)
1801 {
1802 p_array_type = check_typedef (TYPE_TARGET_TYPE (p_array_type));
1803 k -= 1;
1804 }
1805 return p_array_type;
1806 }
1807 else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
1808 {
1809 while (nindices != 0 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
1810 {
1811 type = TYPE_TARGET_TYPE (type);
1812 nindices -= 1;
1813 }
1814 return type;
1815 }
1816
1817 return NULL;
1818}
1819
1820/* The type of nth index in arrays of given type (n numbering from 1). Does
1821 not examine memory. */
1822
1823struct type*
1824ada_index_type (type, n)
1825 struct type* type;
1826 int n;
1827{
1828 type = desc_base_type (type);
1829
1830 if (n > ada_array_arity (type))
1831 return NULL;
1832
1833 if (ada_is_simple_array (type))
1834 {
1835 int i;
1836
1837 for (i = 1; i < n; i += 1)
1838 type = TYPE_TARGET_TYPE (type);
1839
1840 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 0));
1841 }
1842 else
1843 return desc_index_type (desc_bounds_type (type), n);
1844}
1845
1846/* Given that arr is an array type, returns the lower bound of the
1847 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
1848 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1849 array-descriptor type. If TYPEP is non-null, *TYPEP is set to the
1850 bounds type. It works for other arrays with bounds supplied by
1851 run-time quantities other than discriminants. */
1852
1853LONGEST
1854ada_array_bound_from_type (arr_type, n, which, typep)
1855 struct type* arr_type;
1856 int n;
1857 int which;
1858 struct type** typep;
1859{
1860 struct type* type;
1861 struct type* index_type_desc;
1862
1863 if (ada_is_packed_array_type (arr_type))
1864 arr_type = decode_packed_array_type (arr_type);
1865
1866 if (arr_type == NULL || ! ada_is_simple_array (arr_type))
1867 {
1868 if (typep != NULL)
1869 *typep = builtin_type_int;
1870 return (LONGEST) -which;
1871 }
1872
1873 if (TYPE_CODE (arr_type) == TYPE_CODE_PTR)
1874 type = TYPE_TARGET_TYPE (arr_type);
1875 else
1876 type = arr_type;
1877
1878 index_type_desc = ada_find_parallel_type (type, "___XA");
1879 if (index_type_desc == NULL)
1880 {
1881 struct type* range_type;
1882 struct type* index_type;
1883
1884 while (n > 1)
1885 {
1886 type = TYPE_TARGET_TYPE (type);
1887 n -= 1;
1888 }
1889
1890 range_type = TYPE_INDEX_TYPE (type);
1891 index_type = TYPE_TARGET_TYPE (range_type);
1892 if (TYPE_CODE (index_type) == TYPE_CODE_UNDEF)
1893 index_type = builtin_type_long;
1894 if (typep != NULL)
1895 *typep = index_type;
1896 return
1897 (LONGEST) (which == 0
1898 ? TYPE_LOW_BOUND (range_type)
1899 : TYPE_HIGH_BOUND (range_type));
1900 }
1901 else
1902 {
1903 struct type* index_type =
1904 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, n-1),
1905 NULL, TYPE_OBJFILE (arr_type));
1906 if (typep != NULL)
1907 *typep = TYPE_TARGET_TYPE (index_type);
1908 return
1909 (LONGEST) (which == 0
1910 ? TYPE_LOW_BOUND (index_type)
1911 : TYPE_HIGH_BOUND (index_type));
1912 }
1913}
1914
1915/* Given that arr is an array value, returns the lower bound of the
1916 nth index (numbering from 1) if which is 0, and the upper bound if
1917 which is 1. This routine will also work for arrays with bounds
1918 supplied by run-time quantities other than discriminants. */
1919
1920struct value*
1921ada_array_bound (arr, n, which)
1922 struct value* arr;
1923 int n;
1924 int which;
1925{
1926 struct type* arr_type = VALUE_TYPE (arr);
1927
1928 if (ada_is_packed_array_type (arr_type))
1929 return ada_array_bound (decode_packed_array (arr), n, which);
1930 else if (ada_is_simple_array (arr_type))
1931 {
1932 struct type* type;
1933 LONGEST v = ada_array_bound_from_type (arr_type, n, which, &type);
1934 return value_from_longest (type, v);
1935 }
1936 else
1937 return desc_one_bound (desc_bounds (arr), n, which);
1938}
1939
1940/* Given that arr is an array value, returns the length of the
1941 nth index. This routine will also work for arrays with bounds
1942 supplied by run-time quantities other than discriminants. Does not
1943 work for arrays indexed by enumeration types with representation
1944 clauses at the moment. */
1945
1946struct value*
1947ada_array_length (arr, n)
1948 struct value* arr;
1949 int n;
1950{
1951 struct type* arr_type = check_typedef (VALUE_TYPE (arr));
1952 struct type* index_type_desc;
1953
1954 if (ada_is_packed_array_type (arr_type))
1955 return ada_array_length (decode_packed_array (arr), n);
1956
1957 if (ada_is_simple_array (arr_type))
1958 {
1959 struct type* type;
1960 LONGEST v =
1961 ada_array_bound_from_type (arr_type, n, 1, &type) -
1962 ada_array_bound_from_type (arr_type, n, 0, NULL) + 1;
1963 return value_from_longest (type, v);
1964 }
1965 else
1966 return
1967 value_from_longest (builtin_type_ada_int,
1968 value_as_long (desc_one_bound (desc_bounds (arr),
1969 n, 1))
1970 - value_as_long (desc_one_bound (desc_bounds (arr),
1971 n, 0))
1972 + 1);
1973}
1974
1975\f
1976 /* Name resolution */
1977
1978/* The "demangled" name for the user-definable Ada operator corresponding
1979 to op. */
1980
1981static const char*
1982ada_op_name (op)
1983 enum exp_opcode op;
1984{
1985 int i;
1986
1987 for (i = 0; ada_opname_table[i].mangled != NULL; i += 1)
1988 {
1989 if (ada_opname_table[i].op == op)
1990 return ada_opname_table[i].demangled;
1991 }
1992 error ("Could not find operator name for opcode");
1993}
1994
1995
1996/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
1997 references (OP_UNRESOLVED_VALUES) and converts operators that are
1998 user-defined into appropriate function calls. If CONTEXT_TYPE is
1999 non-null, it provides a preferred result type [at the moment, only
2000 type void has any effect---causing procedures to be preferred over
2001 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
2002 return type is preferred. The variable unresolved_names contains a list
2003 of character strings referenced by expout that should be freed.
2004 May change (expand) *EXP. */
2005
2006void
2007ada_resolve (expp, context_type)
2008 struct expression** expp;
2009 struct type* context_type;
2010{
2011 int pc;
2012 pc = 0;
2013 ada_resolve_subexp (expp, &pc, 1, context_type);
2014}
2015
2016/* Resolve the operator of the subexpression beginning at
2017 position *POS of *EXPP. "Resolving" consists of replacing
2018 OP_UNRESOLVED_VALUE with an appropriate OP_VAR_VALUE, replacing
2019 built-in operators with function calls to user-defined operators,
2020 where appropriate, and (when DEPROCEDURE_P is non-zero), converting
2021 function-valued variables into parameterless calls. May expand
2022 EXP. The CONTEXT_TYPE functions as in ada_resolve, above. */
2023
2024static struct value*
2025ada_resolve_subexp (expp, pos, deprocedure_p, context_type)
2026 struct expression** expp;
2027 int *pos;
2028 int deprocedure_p;
2029 struct type* context_type;
2030{
2031 int pc = *pos;
2032 int i;
2033 struct expression* exp; /* Convenience: == *expp */
2034 enum exp_opcode op = (*expp)->elts[pc].opcode;
2035 struct value** argvec; /* Vector of operand types (alloca'ed). */
2036 int nargs; /* Number of operands */
2037
2038 argvec = NULL;
2039 nargs = 0;
2040 exp = *expp;
2041
2042 /* Pass one: resolve operands, saving their types and updating *pos. */
2043 switch (op)
2044 {
2045 case OP_VAR_VALUE:
2046 /* case OP_UNRESOLVED_VALUE:*/
2047 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
2048 *pos += 4;
2049 break;
2050
2051 case OP_FUNCALL:
2052 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
2053 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
2054 /* if (exp->elts[pc+3].opcode == OP_UNRESOLVED_VALUE)
2055 {
2056 *pos += 7;
2057
2058 argvec = (struct value* *) alloca (sizeof (struct value*) * (nargs + 1));
2059 for (i = 0; i < nargs-1; i += 1)
2060 argvec[i] = ada_resolve_subexp (expp, pos, 1, NULL);
2061 argvec[i] = NULL;
2062 }
2063 else
2064 {
2065 *pos += 3;
2066 ada_resolve_subexp (expp, pos, 0, NULL);
2067 for (i = 1; i < nargs; i += 1)
2068 ada_resolve_subexp (expp, pos, 1, NULL);
2069 }
2070 */
2071 exp = *expp;
2072 break;
2073
2074 /* FIXME: UNOP_QUAL should be defined in expression.h */
2075 /* case UNOP_QUAL:
2076 nargs = 1;
2077 *pos += 3;
2078 ada_resolve_subexp (expp, pos, 1, exp->elts[pc + 1].type);
2079 exp = *expp;
2080 break;
2081 */
2082 /* FIXME: OP_ATTRIBUTE should be defined in expression.h */
2083 /* case OP_ATTRIBUTE:
2084 nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
2085 *pos += 4;
2086 for (i = 0; i < nargs; i += 1)
2087 ada_resolve_subexp (expp, pos, 1, NULL);
2088 exp = *expp;
2089 break;
2090 */
2091 case UNOP_ADDR:
2092 nargs = 1;
2093 *pos += 1;
2094 ada_resolve_subexp (expp, pos, 0, NULL);
2095 exp = *expp;
2096 break;
2097
2098 case BINOP_ASSIGN:
2099 {
2100 struct value* arg1;
2101 nargs = 2;
2102 *pos += 1;
2103 arg1 = ada_resolve_subexp (expp, pos, 0, NULL);
2104 if (arg1 == NULL)
2105 ada_resolve_subexp (expp, pos, 1, NULL);
2106 else
2107 ada_resolve_subexp (expp, pos, 1, VALUE_TYPE (arg1));
2108 break;
2109 }
2110
2111 default:
2112 switch (op)
2113 {
2114 default:
2115 error ("Unexpected operator during name resolution");
2116 case UNOP_CAST:
2117 /* case UNOP_MBR:
2118 nargs = 1;
2119 *pos += 3;
2120 break;
2121 */
2122 case BINOP_ADD:
2123 case BINOP_SUB:
2124 case BINOP_MUL:
2125 case BINOP_DIV:
2126 case BINOP_REM:
2127 case BINOP_MOD:
2128 case BINOP_EXP:
2129 case BINOP_CONCAT:
2130 case BINOP_LOGICAL_AND:
2131 case BINOP_LOGICAL_OR:
2132 case BINOP_BITWISE_AND:
2133 case BINOP_BITWISE_IOR:
2134 case BINOP_BITWISE_XOR:
2135
2136 case BINOP_EQUAL:
2137 case BINOP_NOTEQUAL:
2138 case BINOP_LESS:
2139 case BINOP_GTR:
2140 case BINOP_LEQ:
2141 case BINOP_GEQ:
2142
2143 case BINOP_REPEAT:
2144 case BINOP_SUBSCRIPT:
2145 case BINOP_COMMA:
2146 nargs = 2;
2147 *pos += 1;
2148 break;
2149
2150 case UNOP_NEG:
2151 case UNOP_PLUS:
2152 case UNOP_LOGICAL_NOT:
2153 case UNOP_ABS:
2154 case UNOP_IND:
2155 nargs = 1;
2156 *pos += 1;
2157 break;
2158
2159 case OP_LONG:
2160 case OP_DOUBLE:
2161 case OP_VAR_VALUE:
2162 *pos += 4;
2163 break;
2164
2165 case OP_TYPE:
2166 case OP_BOOL:
2167 case OP_LAST:
2168 case OP_REGISTER:
2169 case OP_INTERNALVAR:
2170 *pos += 3;
2171 break;
2172
2173 case UNOP_MEMVAL:
2174 *pos += 3;
2175 nargs = 1;
2176 break;
2177
2178 case STRUCTOP_STRUCT:
2179 case STRUCTOP_PTR:
2180 nargs = 1;
2181 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
2182 break;
2183
2184 case OP_ARRAY:
2185 *pos += 4;
2186 nargs = longest_to_int (exp->elts[pc + 2].longconst) + 1;
2187 nargs -= longest_to_int (exp->elts[pc + 1].longconst);
2188 /* A null array contains one dummy element to give the type. */
2189 /* if (nargs == 0)
2190 nargs = 1;
2191 break;*/
2192
2193 case TERNOP_SLICE:
2194 /* FIXME: TERNOP_MBR should be defined in expression.h */
2195 /* case TERNOP_MBR:
2196 *pos += 1;
2197 nargs = 3;
2198 break;
2199 */
2200 /* FIXME: BINOP_MBR should be defined in expression.h */
2201 /* case BINOP_MBR:
2202 *pos += 3;
2203 nargs = 2;
2204 break;*/
2205 }
2206
2207 argvec = (struct value* *) alloca (sizeof (struct value*) * (nargs + 1));
2208 for (i = 0; i < nargs; i += 1)
2209 argvec[i] = ada_resolve_subexp (expp, pos, 1, NULL);
2210 argvec[i] = NULL;
2211 exp = *expp;
2212 break;
2213 }
2214
2215 /* Pass two: perform any resolution on principal operator. */
2216 switch (op)
2217 {
2218 default:
2219 break;
2220
2221 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
2222 /* case OP_UNRESOLVED_VALUE:
2223 {
2224 struct symbol** candidate_syms;
2225 struct block** candidate_blocks;
2226 int n_candidates;
2227
2228 n_candidates = ada_lookup_symbol_list (exp->elts[pc + 2].name,
2229 exp->elts[pc + 1].block,
2230 VAR_NAMESPACE,
2231 &candidate_syms,
2232 &candidate_blocks);
2233
2234 if (n_candidates > 1)
2235 {*/
2236 /* Types tend to get re-introduced locally, so if there
2237 are any local symbols that are not types, first filter
2238 out all types.*/ /*
2239 int j;
2240 for (j = 0; j < n_candidates; j += 1)
2241 switch (SYMBOL_CLASS (candidate_syms[j]))
2242 {
2243 case LOC_REGISTER:
2244 case LOC_ARG:
2245 case LOC_REF_ARG:
2246 case LOC_REGPARM:
2247 case LOC_REGPARM_ADDR:
2248 case LOC_LOCAL:
2249 case LOC_LOCAL_ARG:
2250 case LOC_BASEREG:
2251 case LOC_BASEREG_ARG:
2252 goto FoundNonType;
2253 default:
2254 break;
2255 }
2256 FoundNonType:
2257 if (j < n_candidates)
2258 {
2259 j = 0;
2260 while (j < n_candidates)
2261 {
2262 if (SYMBOL_CLASS (candidate_syms[j]) == LOC_TYPEDEF)
2263 {
2264 candidate_syms[j] = candidate_syms[n_candidates-1];
2265 candidate_blocks[j] = candidate_blocks[n_candidates-1];
2266 n_candidates -= 1;
2267 }
2268 else
2269 j += 1;
2270 }
2271 }
2272 }
2273
2274 if (n_candidates == 0)
2275 error ("No definition found for %s",
2276 ada_demangle (exp->elts[pc + 2].name));
2277 else if (n_candidates == 1)
2278 i = 0;
2279 else if (deprocedure_p
2280 && ! is_nonfunction (candidate_syms, n_candidates))
2281 {
2282 i = ada_resolve_function (candidate_syms, candidate_blocks,
2283 n_candidates, NULL, 0,
2284 exp->elts[pc + 2].name, context_type);
2285 if (i < 0)
2286 error ("Could not find a match for %s",
2287 ada_demangle (exp->elts[pc + 2].name));
2288 }
2289 else
2290 {
2291 printf_filtered ("Multiple matches for %s\n",
2292 ada_demangle (exp->elts[pc+2].name));
2293 user_select_syms (candidate_syms, candidate_blocks,
2294 n_candidates, 1);
2295 i = 0;
2296 }
2297
2298 exp->elts[pc].opcode = exp->elts[pc + 3].opcode = OP_VAR_VALUE;
2299 exp->elts[pc + 1].block = candidate_blocks[i];
2300 exp->elts[pc + 2].symbol = candidate_syms[i];
2301 if (innermost_block == NULL ||
2302 contained_in (candidate_blocks[i], innermost_block))
2303 innermost_block = candidate_blocks[i];
2304 }*/
2305 /* FALL THROUGH */
2306
2307 case OP_VAR_VALUE:
2308 if (deprocedure_p &&
2309 TYPE_CODE (SYMBOL_TYPE (exp->elts[pc+2].symbol)) == TYPE_CODE_FUNC)
2310 {
2311 replace_operator_with_call (expp, pc, 0, 0,
2312 exp->elts[pc+2].symbol,
2313 exp->elts[pc+1].block);
2314 exp = *expp;
2315 }
2316 break;
2317
2318 case OP_FUNCALL:
2319 {
2320 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
2321 /* if (exp->elts[pc+3].opcode == OP_UNRESOLVED_VALUE)
2322 {
2323 struct symbol** candidate_syms;
2324 struct block** candidate_blocks;
2325 int n_candidates;
2326
2327 n_candidates = ada_lookup_symbol_list (exp->elts[pc + 5].name,
2328 exp->elts[pc + 4].block,
2329 VAR_NAMESPACE,
2330 &candidate_syms,
2331 &candidate_blocks);
2332 if (n_candidates == 1)
2333 i = 0;
2334 else
2335 {
2336 i = ada_resolve_function (candidate_syms, candidate_blocks,
2337 n_candidates, argvec, nargs-1,
2338 exp->elts[pc + 5].name, context_type);
2339 if (i < 0)
2340 error ("Could not find a match for %s",
2341 ada_demangle (exp->elts[pc + 5].name));
2342 }
2343
2344 exp->elts[pc + 3].opcode = exp->elts[pc + 6].opcode = OP_VAR_VALUE;
2345 exp->elts[pc + 4].block = candidate_blocks[i];
2346 exp->elts[pc + 5].symbol = candidate_syms[i];
2347 if (innermost_block == NULL ||
2348 contained_in (candidate_blocks[i], innermost_block))
2349 innermost_block = candidate_blocks[i];
2350 }*/
2351
2352 }
2353 break;
2354 case BINOP_ADD:
2355 case BINOP_SUB:
2356 case BINOP_MUL:
2357 case BINOP_DIV:
2358 case BINOP_REM:
2359 case BINOP_MOD:
2360 case BINOP_CONCAT:
2361 case BINOP_BITWISE_AND:
2362 case BINOP_BITWISE_IOR:
2363 case BINOP_BITWISE_XOR:
2364 case BINOP_EQUAL:
2365 case BINOP_NOTEQUAL:
2366 case BINOP_LESS:
2367 case BINOP_GTR:
2368 case BINOP_LEQ:
2369 case BINOP_GEQ:
2370 case BINOP_EXP:
2371 case UNOP_NEG:
2372 case UNOP_PLUS:
2373 case UNOP_LOGICAL_NOT:
2374 case UNOP_ABS:
2375 if (possible_user_operator_p (op, argvec))
2376 {
2377 struct symbol** candidate_syms;
2378 struct block** candidate_blocks;
2379 int n_candidates;
2380
2381 n_candidates = ada_lookup_symbol_list (ada_mangle (ada_op_name (op)),
2382 (struct block*) NULL,
2383 VAR_NAMESPACE,
2384 &candidate_syms,
2385 &candidate_blocks);
2386 i = ada_resolve_function (candidate_syms, candidate_blocks,
2387 n_candidates, argvec, nargs,
2388 ada_op_name (op), NULL);
2389 if (i < 0)
2390 break;
2391
2392 replace_operator_with_call (expp, pc, nargs, 1,
2393 candidate_syms[i], candidate_blocks[i]);
2394 exp = *expp;
2395 }
2396 break;
2397 }
2398
2399 *pos = pc;
2400 return evaluate_subexp_type (exp, pos);
2401}
2402
2403/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
2404 MAY_DEREF is non-zero, the formal may be a pointer and the actual
2405 a non-pointer. */
2406/* The term "match" here is rather loose. The match is heuristic and
2407 liberal. FIXME: TOO liberal, in fact. */
2408
2409static int
2410ada_type_match (ftype, atype, may_deref)
2411 struct type* ftype;
2412 struct type* atype;
2413 int may_deref;
2414{
2415 CHECK_TYPEDEF (ftype);
2416 CHECK_TYPEDEF (atype);
2417
2418 if (TYPE_CODE (ftype) == TYPE_CODE_REF)
2419 ftype = TYPE_TARGET_TYPE (ftype);
2420 if (TYPE_CODE (atype) == TYPE_CODE_REF)
2421 atype = TYPE_TARGET_TYPE (atype);
2422
2423 if (TYPE_CODE (ftype) == TYPE_CODE_VOID
2424 || TYPE_CODE (atype) == TYPE_CODE_VOID)
2425 return 1;
2426
2427 switch (TYPE_CODE (ftype))
2428 {
2429 default:
2430 return 1;
2431 case TYPE_CODE_PTR:
2432 if (TYPE_CODE (atype) == TYPE_CODE_PTR)
2433 return ada_type_match (TYPE_TARGET_TYPE (ftype),
2434 TYPE_TARGET_TYPE (atype), 0);
2435 else return (may_deref &&
2436 ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
2437 case TYPE_CODE_INT:
2438 case TYPE_CODE_ENUM:
2439 case TYPE_CODE_RANGE:
2440 switch (TYPE_CODE (atype))
2441 {
2442 case TYPE_CODE_INT:
2443 case TYPE_CODE_ENUM:
2444 case TYPE_CODE_RANGE:
2445 return 1;
2446 default:
2447 return 0;
2448 }
2449
2450 case TYPE_CODE_ARRAY:
2451 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2452 || ada_is_array_descriptor (atype));
2453
2454 case TYPE_CODE_STRUCT:
2455 if (ada_is_array_descriptor (ftype))
2456 return (TYPE_CODE (atype) == TYPE_CODE_ARRAY
2457 || ada_is_array_descriptor (atype));
2458 else
2459 return (TYPE_CODE (atype) == TYPE_CODE_STRUCT
2460 && ! ada_is_array_descriptor (atype));
2461
2462 case TYPE_CODE_UNION:
2463 case TYPE_CODE_FLT:
2464 return (TYPE_CODE (atype) == TYPE_CODE (ftype));
2465 }
2466}
2467
2468/* Return non-zero if the formals of FUNC "sufficiently match" the
2469 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
2470 may also be an enumeral, in which case it is treated as a 0-
2471 argument function. */
2472
2473static int
2474ada_args_match (func, actuals, n_actuals)
2475 struct symbol* func;
2476 struct value** actuals;
2477 int n_actuals;
2478{
2479 int i;
2480 struct type* func_type = SYMBOL_TYPE (func);
2481
2482 if (SYMBOL_CLASS (func) == LOC_CONST &&
2483 TYPE_CODE (func_type) == TYPE_CODE_ENUM)
2484 return (n_actuals == 0);
2485 else if (func_type == NULL || TYPE_CODE (func_type) != TYPE_CODE_FUNC)
2486 return 0;
2487
2488 if (TYPE_NFIELDS (func_type) != n_actuals)
2489 return 0;
2490
2491 for (i = 0; i < n_actuals; i += 1)
2492 {
2493 struct type* ftype = check_typedef (TYPE_FIELD_TYPE (func_type, i));
2494 struct type* atype = check_typedef (VALUE_TYPE (actuals[i]));
2495
2496 if (! ada_type_match (TYPE_FIELD_TYPE (func_type, i),
2497 VALUE_TYPE (actuals[i]), 1))
2498 return 0;
2499 }
2500 return 1;
2501}
2502
2503/* False iff function type FUNC_TYPE definitely does not produce a value
2504 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
2505 FUNC_TYPE is not a valid function type with a non-null return type
2506 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
2507
2508static int
2509return_match (func_type, context_type)
2510 struct type* func_type;
2511 struct type* context_type;
2512{
2513 struct type* return_type;
2514
2515 if (func_type == NULL)
2516 return 1;
2517
2518 /* FIXME: base_type should be declared in gdbtypes.h, implemented in valarith.c */
2519 /* if (TYPE_CODE (func_type) == TYPE_CODE_FUNC)
2520 return_type = base_type (TYPE_TARGET_TYPE (func_type));
2521 else
2522 return_type = base_type (func_type);*/
2523 if (return_type == NULL)
2524 return 1;
2525
2526 /* FIXME: base_type should be declared in gdbtypes.h, implemented in valarith.c */
2527 /* context_type = base_type (context_type);*/
2528
2529 if (TYPE_CODE (return_type) == TYPE_CODE_ENUM)
2530 return context_type == NULL || return_type == context_type;
2531 else if (context_type == NULL)
2532 return TYPE_CODE (return_type) != TYPE_CODE_VOID;
2533 else
2534 return TYPE_CODE (return_type) == TYPE_CODE (context_type);
2535}
2536
2537
2538/* Return the index in SYMS[0..NSYMS-1] of symbol for the
2539 function (if any) that matches the types of the NARGS arguments in
2540 ARGS. If CONTEXT_TYPE is non-null, and there is at least one match
2541 that returns type CONTEXT_TYPE, then eliminate other matches. If
2542 CONTEXT_TYPE is null, prefer a non-void-returning function.
2543 Asks the user if there is more than one match remaining. Returns -1
2544 if there is no such symbol or none is selected. NAME is used
2545 solely for messages. May re-arrange and modify SYMS in
2546 the process; the index returned is for the modified vector. BLOCKS
2547 is modified in parallel to SYMS. */
2548
2549int
2550ada_resolve_function (syms, blocks, nsyms, args, nargs, name, context_type)
2551 struct symbol* syms[];
2552 struct block* blocks[];
2553 struct value** args;
2554 int nsyms, nargs;
2555 const char* name;
2556 struct type* context_type;
2557{
2558 int k;
2559 int m; /* Number of hits */
2560 struct type* fallback;
2561 struct type* return_type;
2562
2563 return_type = context_type;
2564 if (context_type == NULL)
2565 fallback = builtin_type_void;
2566 else
2567 fallback = NULL;
2568
2569 m = 0;
2570 while (1)
2571 {
2572 for (k = 0; k < nsyms; k += 1)
2573 {
2574 struct type* type = check_typedef (SYMBOL_TYPE (syms[k]));
2575
2576 if (ada_args_match (syms[k], args, nargs)
2577 && return_match (SYMBOL_TYPE (syms[k]), return_type))
2578 {
2579 syms[m] = syms[k];
2580 if (blocks != NULL)
2581 blocks[m] = blocks[k];
2582 m += 1;
2583 }
2584 }
2585 if (m > 0 || return_type == fallback)
2586 break;
2587 else
2588 return_type = fallback;
2589 }
2590
2591 if (m == 0)
2592 return -1;
2593 else if (m > 1)
2594 {
2595 printf_filtered ("Multiple matches for %s\n", name);
2596 user_select_syms (syms, blocks, m, 1);
2597 return 0;
2598 }
2599 return 0;
2600}
2601
2602/* Returns true (non-zero) iff demangled name N0 should appear before N1 */
2603/* in a listing of choices during disambiguation (see sort_choices, below). */
2604/* The idea is that overloadings of a subprogram name from the */
2605/* same package should sort in their source order. We settle for ordering */
2606/* such symbols by their trailing number (__N or $N). */
2607static int
2608mangled_ordered_before (char* N0, char* N1)
2609{
2610 if (N1 == NULL)
2611 return 0;
2612 else if (N0 == NULL)
2613 return 1;
2614 else
2615 {
2616 int k0, k1;
2617 for (k0 = strlen (N0)-1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
2618 ;
2619 for (k1 = strlen (N1)-1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
2620 ;
2621 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0+1] != '\000'
2622 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1+1] != '\000')
2623 {
2624 int n0, n1;
2625 n0 = k0;
2626 while (N0[n0] == '_' && n0 > 0 && N0[n0-1] == '_')
2627 n0 -= 1;
2628 n1 = k1;
2629 while (N1[n1] == '_' && n1 > 0 && N1[n1-1] == '_')
2630 n1 -= 1;
2631 if (n0 == n1 && STREQN (N0, N1, n0))
2632 return (atoi (N0+k0+1) < atoi (N1+k1+1));
2633 }
2634 return (strcmp (N0, N1) < 0);
2635 }
2636}
2637
2638/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by their */
2639/* mangled names, rearranging BLOCKS[0..NSYMS-1] according to the same */
2640/* permutation. */
2641static void
2642sort_choices (syms, blocks, nsyms)
2643 struct symbol* syms[];
2644 struct block* blocks[];
2645 int nsyms;
2646{
2647 int i, j;
2648 for (i = 1; i < nsyms; i += 1)
2649 {
2650 struct symbol* sym = syms[i];
2651 struct block* block = blocks[i];
2652 int j;
2653
2654 for (j = i-1; j >= 0; j -= 1)
2655 {
2656 if (mangled_ordered_before (SYMBOL_NAME (syms[j]),
2657 SYMBOL_NAME (sym)))
2658 break;
2659 syms[j+1] = syms[j];
2660 blocks[j+1] = blocks[j];
2661 }
2662 syms[j+1] = sym;
2663 blocks[j+1] = block;
2664 }
2665}
2666
2667/* Given a list of NSYMS symbols in SYMS and corresponding blocks in */
2668/* BLOCKS, select up to MAX_RESULTS>0 by asking the user (if */
2669/* necessary), returning the number selected, and setting the first */
2670/* elements of SYMS and BLOCKS to the selected symbols and */
2671/* corresponding blocks. Error if no symbols selected. BLOCKS may */
2672/* be NULL, in which case it is ignored. */
2673
2674/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
2675 to be re-integrated one of these days. */
2676
2677int
2678user_select_syms (syms, blocks, nsyms, max_results)
2679 struct symbol* syms[];
2680 struct block* blocks[];
2681 int nsyms;
2682 int max_results;
2683{
2684 int i;
2685 int* chosen = (int*) alloca (sizeof(int) * nsyms);
2686 int n_chosen;
2687 int first_choice = (max_results == 1) ? 1 : 2;
2688
2689 if (max_results < 1)
2690 error ("Request to select 0 symbols!");
2691 if (nsyms <= 1)
2692 return nsyms;
2693
2694 printf_unfiltered("[0] cancel\n");
2695 if (max_results > 1)
2696 printf_unfiltered("[1] all\n");
2697
2698 sort_choices (syms, blocks, nsyms);
2699
2700 for (i = 0; i < nsyms; i += 1)
2701 {
2702 if (syms[i] == NULL)
2703 continue;
2704
2705 if (SYMBOL_CLASS (syms[i]) == LOC_BLOCK)
2706 {
2707 struct symtab_and_line sal = find_function_start_sal (syms[i], 1);
2708 printf_unfiltered ("[%d] %s at %s:%d\n",
2709 i + first_choice,
2710 SYMBOL_SOURCE_NAME (syms[i]),
2711 sal.symtab == NULL
2712 ? "<no source file available>"
2713 : sal.symtab->filename,
2714 sal.line);
2715 continue;
2716 }
2717 else
2718 {
2719 int is_enumeral =
2720 (SYMBOL_CLASS (syms[i]) == LOC_CONST
2721 && SYMBOL_TYPE (syms[i]) != NULL
2722 && TYPE_CODE (SYMBOL_TYPE (syms[i]))
2723 == TYPE_CODE_ENUM);
2724 struct symtab* symtab = symtab_for_sym (syms[i]);
2725
2726 if (SYMBOL_LINE (syms[i]) != 0 && symtab != NULL)
2727 printf_unfiltered ("[%d] %s at %s:%d\n",
2728 i + first_choice,
2729 SYMBOL_SOURCE_NAME (syms[i]),
2730 symtab->filename, SYMBOL_LINE (syms[i]));
2731 else if (is_enumeral &&
2732 TYPE_NAME (SYMBOL_TYPE (syms[i])) != NULL)
2733 {
2734 printf_unfiltered ("[%d] ", i + first_choice);
2735 ada_print_type (SYMBOL_TYPE (syms[i]), NULL, gdb_stdout, -1, 0);
2736 printf_unfiltered ("'(%s) (enumeral)\n",
2737 SYMBOL_SOURCE_NAME (syms[i]));
2738 }
2739 else if (symtab != NULL)
2740 printf_unfiltered (is_enumeral
2741 ? "[%d] %s in %s (enumeral)\n"
2742 : "[%d] %s at %s:?\n",
2743 i + first_choice,
2744 SYMBOL_SOURCE_NAME (syms[i]),
2745 symtab->filename);
2746 else
2747 printf_unfiltered (is_enumeral
2748 ? "[%d] %s (enumeral)\n"
2749 : "[%d] %s at ?\n",
2750 i + first_choice, SYMBOL_SOURCE_NAME (syms[i]));
2751 }
2752 }
2753
2754 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
2755 "overload-choice");
2756
2757 for (i = 0; i < n_chosen; i += 1)
2758 {
2759 syms[i] = syms[chosen[i]];
2760 if (blocks != NULL)
2761 blocks[i] = blocks[chosen[i]];
2762 }
2763
2764 return n_chosen;
2765}
2766
2767/* Read and validate a set of numeric choices from the user in the
2768 range 0 .. N_CHOICES-1. Place the results in increasing
2769 order in CHOICES[0 .. N-1], and return N.
2770
2771 The user types choices as a sequence of numbers on one line
2772 separated by blanks, encoding them as follows:
2773
2774 + A choice of 0 means to cancel the selection, throwing an error.
2775 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
2776 + The user chooses k by typing k+IS_ALL_CHOICE+1.
2777
2778 The user is not allowed to choose more than MAX_RESULTS values.
2779
2780 ANNOTATION_SUFFIX, if present, is used to annotate the input
2781 prompts (for use with the -f switch). */
2782
2783int
2784get_selections (choices, n_choices, max_results, is_all_choice,
2785 annotation_suffix)
2786 int* choices;
2787 int n_choices;
2788 int max_results;
2789 int is_all_choice;
2790 char* annotation_suffix;
2791{
2792 int i;
2793 char* args;
2794 const char* prompt;
2795 int n_chosen;
2796 int first_choice = is_all_choice ? 2 : 1;
2797
2798 prompt = getenv ("PS2");
2799 if (prompt == NULL)
2800 prompt = ">";
2801
2802 printf_unfiltered ("%s ", prompt);
2803 gdb_flush (gdb_stdout);
2804
2805 args = command_line_input ((char *) NULL, 0, annotation_suffix);
2806
2807 if (args == NULL)
2808 error_no_arg ("one or more choice numbers");
2809
2810 n_chosen = 0;
2811
2812 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
2813 order, as given in args. Choices are validated. */
2814 while (1)
2815 {
2816 char* args2;
2817 int choice, j;
2818
2819 while (isspace (*args))
2820 args += 1;
2821 if (*args == '\0' && n_chosen == 0)
2822 error_no_arg ("one or more choice numbers");
2823 else if (*args == '\0')
2824 break;
2825
2826 choice = strtol (args, &args2, 10);
2827 if (args == args2 || choice < 0 || choice > n_choices + first_choice - 1)
2828 error ("Argument must be choice number");
2829 args = args2;
2830
2831 if (choice == 0)
2832 error ("cancelled");
2833
2834 if (choice < first_choice)
2835 {
2836 n_chosen = n_choices;
2837 for (j = 0; j < n_choices; j += 1)
2838 choices[j] = j;
2839 break;
2840 }
2841 choice -= first_choice;
2842
2843 for (j = n_chosen-1; j >= 0 && choice < choices[j]; j -= 1)
2844 {}
2845
2846 if (j < 0 || choice != choices[j])
2847 {
2848 int k;
2849 for (k = n_chosen-1; k > j; k -= 1)
2850 choices[k+1] = choices[k];
2851 choices[j+1] = choice;
2852 n_chosen += 1;
2853 }
2854 }
2855
2856 if (n_chosen > max_results)
2857 error ("Select no more than %d of the above", max_results);
2858
2859 return n_chosen;
2860}
2861
2862/* Replace the operator of length OPLEN at position PC in *EXPP with a call */
2863/* on the function identified by SYM and BLOCK, and taking NARGS */
2864/* arguments. Update *EXPP as needed to hold more space. */
2865
2866static void
2867replace_operator_with_call (expp, pc, nargs, oplen, sym, block)
2868 struct expression** expp;
2869 int pc, nargs, oplen;
2870 struct symbol* sym;
2871 struct block* block;
2872{
2873 /* A new expression, with 6 more elements (3 for funcall, 4 for function
2874 symbol, -oplen for operator being replaced). */
2875 struct expression* newexp = (struct expression*)
2876 xmalloc (sizeof (struct expression)
2877 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
2878 struct expression* exp = *expp;
2879
2880 newexp->nelts = exp->nelts + 7 - oplen;
2881 newexp->language_defn = exp->language_defn;
2882 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
2883 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
2884 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
2885
2886 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
2887 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
2888
2889 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
2890 newexp->elts[pc + 4].block = block;
2891 newexp->elts[pc + 5].symbol = sym;
2892
2893 *expp = newexp;
2894 free (exp);
2895}
2896
2897/* Type-class predicates */
2898
2899/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type), or */
2900/* FLOAT.) */
2901
2902static int
2903numeric_type_p (type)
2904 struct type* type;
2905{
2906 if (type == NULL)
2907 return 0;
2908 else {
2909 switch (TYPE_CODE (type))
2910 {
2911 case TYPE_CODE_INT:
2912 case TYPE_CODE_FLT:
2913 return 1;
2914 case TYPE_CODE_RANGE:
2915 return (type == TYPE_TARGET_TYPE (type)
2916 || numeric_type_p (TYPE_TARGET_TYPE (type)));
2917 default:
2918 return 0;
2919 }
2920 }
2921}
2922
2923/* True iff TYPE is integral (an INT or RANGE of INTs). */
2924
2925static int
2926integer_type_p (type)
2927 struct type* type;
2928{
2929 if (type == NULL)
2930 return 0;
2931 else {
2932 switch (TYPE_CODE (type))
2933 {
2934 case TYPE_CODE_INT:
2935 return 1;
2936 case TYPE_CODE_RANGE:
2937 return (type == TYPE_TARGET_TYPE (type)
2938 || integer_type_p (TYPE_TARGET_TYPE (type)));
2939 default:
2940 return 0;
2941 }
2942 }
2943}
2944
2945/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
2946
2947static int
2948scalar_type_p (type)
2949 struct type* type;
2950{
2951 if (type == NULL)
2952 return 0;
2953 else {
2954 switch (TYPE_CODE (type))
2955 {
2956 case TYPE_CODE_INT:
2957 case TYPE_CODE_RANGE:
2958 case TYPE_CODE_ENUM:
2959 case TYPE_CODE_FLT:
2960 return 1;
2961 default:
2962 return 0;
2963 }
2964 }
2965}
2966
2967/* True iff TYPE is discrete (INT, RANGE, ENUM). */
2968
2969static int
2970discrete_type_p (type)
2971 struct type* type;
2972{
2973 if (type == NULL)
2974 return 0;
2975 else {
2976 switch (TYPE_CODE (type))
2977 {
2978 case TYPE_CODE_INT:
2979 case TYPE_CODE_RANGE:
2980 case TYPE_CODE_ENUM:
2981 return 1;
2982 default:
2983 return 0;
2984 }
2985 }
2986}
2987
2988/* Returns non-zero if OP with operatands in the vector ARGS could be
2989 a user-defined function. Errs on the side of pre-defined operators
2990 (i.e., result 0). */
2991
2992static int
2993possible_user_operator_p (op, args)
2994 enum exp_opcode op;
2995 struct value* args[];
2996{
2997 struct type* type0 = check_typedef (VALUE_TYPE (args[0]));
2998 struct type* type1 =
2999 (args[1] == NULL) ? NULL : check_typedef (VALUE_TYPE (args[1]));
3000
3001 switch (op)
3002 {
3003 default:
3004 return 0;
3005
3006 case BINOP_ADD:
3007 case BINOP_SUB:
3008 case BINOP_MUL:
3009 case BINOP_DIV:
3010 return (! (numeric_type_p (type0) && numeric_type_p (type1)));
3011
3012 case BINOP_REM:
3013 case BINOP_MOD:
3014 case BINOP_BITWISE_AND:
3015 case BINOP_BITWISE_IOR:
3016 case BINOP_BITWISE_XOR:
3017 return (! (integer_type_p (type0) && integer_type_p (type1)));
3018
3019 case BINOP_EQUAL:
3020 case BINOP_NOTEQUAL:
3021 case BINOP_LESS:
3022 case BINOP_GTR:
3023 case BINOP_LEQ:
3024 case BINOP_GEQ:
3025 return (! (scalar_type_p (type0) && scalar_type_p (type1)));
3026
3027 case BINOP_CONCAT:
3028 return ((TYPE_CODE (type0) != TYPE_CODE_ARRAY &&
3029 (TYPE_CODE (type0) != TYPE_CODE_PTR ||
3030 TYPE_CODE (TYPE_TARGET_TYPE (type0))
3031 != TYPE_CODE_ARRAY))
3032 || (TYPE_CODE (type1) != TYPE_CODE_ARRAY &&
3033 (TYPE_CODE (type1) != TYPE_CODE_PTR ||
3034 TYPE_CODE (TYPE_TARGET_TYPE (type1))
3035 != TYPE_CODE_ARRAY)));
3036
3037 case BINOP_EXP:
3038 return (! (numeric_type_p (type0) && integer_type_p (type1)));
3039
3040 case UNOP_NEG:
3041 case UNOP_PLUS:
3042 case UNOP_LOGICAL_NOT:
3043 case UNOP_ABS:
3044 return (! numeric_type_p (type0));
3045
3046 }
3047}
3048\f
3049 /* Renaming */
3050
3051/** NOTE: In the following, we assume that a renaming type's name may
3052 * have an ___XD suffix. It would be nice if this went away at some
3053 * point. */
3054
3055/* If TYPE encodes a renaming, returns the renaming suffix, which
3056 * is XR for an object renaming, XRP for a procedure renaming, XRE for
3057 * an exception renaming, and XRS for a subprogram renaming. Returns
3058 * NULL if NAME encodes none of these. */
3059const char*
3060ada_renaming_type (type)
3061 struct type* type;
3062{
3063 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_ENUM)
3064 {
3065 const char* name = type_name_no_tag (type);
3066 const char* suffix = (name == NULL) ? NULL : strstr (name, "___XR");
3067 if (suffix == NULL
3068 || (suffix[5] != '\000' && strchr ("PES_", suffix[5]) == NULL))
3069 return NULL;
3070 else
3071 return suffix + 3;
3072 }
3073 else
3074 return NULL;
3075}
3076
3077/* Return non-zero iff SYM encodes an object renaming. */
3078int
3079ada_is_object_renaming (sym)
3080 struct symbol* sym;
3081{
3082 const char* renaming_type = ada_renaming_type (SYMBOL_TYPE (sym));
3083 return renaming_type != NULL
3084 && (renaming_type[2] == '\0' || renaming_type[2] == '_');
3085}
3086
3087/* Assuming that SYM encodes a non-object renaming, returns the original
3088 * name of the renamed entity. The name is good until the end of
3089 * parsing. */
3090const char*
3091ada_simple_renamed_entity (sym)
3092 struct symbol* sym;
3093{
3094 struct type* type;
3095 const char* raw_name;
3096 int len;
3097 char* result;
3098
3099 type = SYMBOL_TYPE (sym);
3100 if (type == NULL || TYPE_NFIELDS (type) < 1)
3101 error ("Improperly encoded renaming.");
3102
3103 raw_name = TYPE_FIELD_NAME (type, 0);
3104 len = (raw_name == NULL ? 0 : strlen (raw_name)) - 5;
3105 if (len <= 0)
3106 error ("Improperly encoded renaming.");
3107
3108 result = xmalloc (len + 1);
3109 /* FIXME: add_name_string_cleanup should be defined in parse.c */
3110 /* add_name_string_cleanup (result);*/
3111 strncpy (result, raw_name, len);
3112 result[len] = '\000';
3113 return result;
3114}
3115
3116\f
3117 /* Evaluation: Function Calls */
3118
3119/* Copy VAL onto the stack, using and updating *SP as the stack
3120 pointer. Return VAL as an lvalue. */
3121
3122static struct value*
3123place_on_stack (val, sp)
3124 struct value* val;
3125 CORE_ADDR* sp;
3126{
3127 CORE_ADDR old_sp = *sp;
3128
3129#ifdef STACK_ALIGN
3130 *sp = push_bytes (*sp, VALUE_CONTENTS_RAW (val),
3131 STACK_ALIGN (TYPE_LENGTH (check_typedef (VALUE_TYPE (val)))));
3132#else
3133 *sp = push_bytes (*sp, VALUE_CONTENTS_RAW (val),
3134 TYPE_LENGTH (check_typedef (VALUE_TYPE (val))));
3135#endif
3136
3137 VALUE_LVAL (val) = lval_memory;
3138 if (INNER_THAN (1, 2))
3139 VALUE_ADDRESS (val) = *sp;
3140 else
3141 VALUE_ADDRESS (val) = old_sp;
3142
3143 return val;
3144}
3145
3146/* Return the value ACTUAL, converted to be an appropriate value for a
3147 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
3148 allocating any necessary descriptors (fat pointers), or copies of
3149 values not residing in memory, updating it as needed. */
3150
3151static struct value*
3152convert_actual (actual, formal_type0, sp)
3153 struct value* actual;
3154 struct type* formal_type0;
3155 CORE_ADDR* sp;
3156{
3157 struct type* actual_type = check_typedef (VALUE_TYPE (actual));
3158 struct type* formal_type = check_typedef (formal_type0);
3159 struct type* formal_target =
3160 TYPE_CODE (formal_type) == TYPE_CODE_PTR
3161 ? check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
3162 struct type* actual_target =
3163 TYPE_CODE (actual_type) == TYPE_CODE_PTR
3164 ? check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
3165
3166 if (ada_is_array_descriptor (formal_target)
3167 && TYPE_CODE (actual_target) == TYPE_CODE_ARRAY)
3168 return make_array_descriptor (formal_type, actual, sp);
3169 else if (TYPE_CODE (formal_type) == TYPE_CODE_PTR)
3170 {
3171 if (TYPE_CODE (formal_target) == TYPE_CODE_ARRAY
3172 && ada_is_array_descriptor (actual_target))
3173 return desc_data (actual);
3174 else if (TYPE_CODE (actual_type) != TYPE_CODE_PTR)
3175 {
3176 if (VALUE_LVAL (actual) != lval_memory)
3177 {
3178 struct value* val;
3179 actual_type = check_typedef (VALUE_TYPE (actual));
3180 val = allocate_value (actual_type);
3181 memcpy ((char*) VALUE_CONTENTS_RAW (val),
3182 (char*) VALUE_CONTENTS (actual),
3183 TYPE_LENGTH (actual_type));
3184 actual = place_on_stack (val, sp);
3185 }
3186 return value_addr (actual);
3187 }
3188 }
3189 else if (TYPE_CODE (actual_type) == TYPE_CODE_PTR)
3190 return ada_value_ind (actual);
3191
3192 return actual;
3193}
3194
3195
3196/* Push a descriptor of type TYPE for array value ARR on the stack at
3197 *SP, updating *SP to reflect the new descriptor. Return either
3198 an lvalue representing the new descriptor, or (if TYPE is a pointer-
3199 to-descriptor type rather than a descriptor type), a struct value*
3200 representing a pointer to this descriptor. */
3201
3202static struct value*
3203make_array_descriptor (type, arr, sp)
3204 struct type* type;
3205 struct value* arr;
3206 CORE_ADDR* sp;
3207{
3208 struct type* bounds_type = desc_bounds_type (type);
3209 struct type* desc_type = desc_base_type (type);
3210 struct value* descriptor = allocate_value (desc_type);
3211 struct value* bounds = allocate_value (bounds_type);
3212 CORE_ADDR bounds_addr;
3213 int i;
3214
3215 for (i = ada_array_arity (check_typedef (VALUE_TYPE (arr))); i > 0; i -= 1)
3216 {
3217 modify_general_field (VALUE_CONTENTS (bounds),
3218 value_as_long (ada_array_bound (arr, i, 0)),
3219 desc_bound_bitpos (bounds_type, i, 0),
3220 desc_bound_bitsize (bounds_type, i, 0));
3221 modify_general_field (VALUE_CONTENTS (bounds),
3222 value_as_long (ada_array_bound (arr, i, 1)),
3223 desc_bound_bitpos (bounds_type, i, 1),
3224 desc_bound_bitsize (bounds_type, i, 1));
3225 }
3226
3227 bounds = place_on_stack (bounds, sp);
3228
3229 modify_general_field (VALUE_CONTENTS (descriptor),
3230 arr,
3231 fat_pntr_data_bitpos (desc_type),
3232 fat_pntr_data_bitsize (desc_type));
3233 modify_general_field (VALUE_CONTENTS (descriptor),
3234 VALUE_ADDRESS (bounds),
3235 fat_pntr_bounds_bitpos (desc_type),
3236 fat_pntr_bounds_bitsize (desc_type));
3237
3238 descriptor = place_on_stack (descriptor, sp);
3239
3240 if (TYPE_CODE (type) == TYPE_CODE_PTR)
3241 return value_addr (descriptor);
3242 else
3243 return descriptor;
3244}
3245
3246
3247/* Assuming a dummy frame has been established on the target, perform any
3248 conversions needed for calling function FUNC on the NARGS actual
3249 parameters in ARGS, other than standard C conversions. Does
3250 nothing if FUNC does not have Ada-style prototype data, or if NARGS
3251 does not match the number of arguments expected. Use *SP as a
3252 stack pointer for additional data that must be pushed, updating its
3253 value as needed. */
3254
3255void
3256ada_convert_actuals (func, nargs, args, sp)
3257 struct value* func;
3258 int nargs;
3259 struct value* args[];
3260 CORE_ADDR* sp;
3261{
3262 int i;
3263
3264 if (TYPE_NFIELDS (VALUE_TYPE (func)) == 0
3265 || nargs != TYPE_NFIELDS (VALUE_TYPE (func)))
3266 return;
3267
3268 for (i = 0; i < nargs; i += 1)
3269 args[i] =
3270 convert_actual (args[i],
3271 TYPE_FIELD_TYPE (VALUE_TYPE (func), i),
3272 sp);
3273}
3274
3275\f
3276 /* Symbol Lookup */
3277
3278
3279/* The vectors of symbols and blocks ultimately returned from */
3280/* ada_lookup_symbol_list. */
3281
3282/* Current size of defn_symbols and defn_blocks */
3283static size_t defn_vector_size = 0;
3284
3285/* Current number of symbols found. */
3286static int ndefns = 0;
3287
3288static struct symbol** defn_symbols = NULL;
3289static struct block** defn_blocks = NULL;
3290
3291/* Return the result of a standard (literal, C-like) lookup of NAME in
3292 * given NAMESPACE. */
3293
3294static struct symbol*
3295standard_lookup (name, namespace)
3296 const char* name;
3297 namespace_enum namespace;
3298{
3299 struct symbol* sym;
3300 struct symtab* symtab;
3301 sym = lookup_symbol (name, (struct block*) NULL, namespace, 0, &symtab);
3302 return sym;
3303}
3304
3305
3306/* Non-zero iff there is at least one non-function/non-enumeral symbol */
3307/* in SYMS[0..N-1]. We treat enumerals as functions, since they */
3308/* contend in overloading in the same way. */
3309static int
3310is_nonfunction (syms, n)
3311 struct symbol* syms[];
3312 int n;
3313{
3314 int i;
3315
3316 for (i = 0; i < n; i += 1)
3317 if (TYPE_CODE (SYMBOL_TYPE (syms[i])) != TYPE_CODE_FUNC
3318 && TYPE_CODE (SYMBOL_TYPE (syms[i])) != TYPE_CODE_ENUM)
3319 return 1;
3320
3321 return 0;
3322}
3323
3324/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
3325 struct types. Otherwise, they may not. */
3326
3327static int
3328equiv_types (type0, type1)
3329 struct type* type0;
3330 struct type* type1;
3331{
3332 if (type0 == type1)
3333 return 1;
3334 if (type0 == NULL || type1 == NULL
3335 || TYPE_CODE (type0) != TYPE_CODE (type1))
3336 return 0;
3337 if ((TYPE_CODE (type0) == TYPE_CODE_STRUCT
3338 || TYPE_CODE (type0) == TYPE_CODE_ENUM)
3339 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
3340 && STREQ (ada_type_name (type0), ada_type_name (type1)))
3341 return 1;
3342
3343 return 0;
3344}
3345
3346/* True iff SYM0 represents the same entity as SYM1, or one that is
3347 no more defined than that of SYM1. */
3348
3349static int
3350lesseq_defined_than (sym0, sym1)
3351 struct symbol* sym0;
3352 struct symbol* sym1;
3353{
3354 if (sym0 == sym1)
3355 return 1;
3356 if (SYMBOL_NAMESPACE (sym0) != SYMBOL_NAMESPACE (sym1)
3357 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
3358 return 0;
3359
3360 switch (SYMBOL_CLASS (sym0))
3361 {
3362 case LOC_UNDEF:
3363 return 1;
3364 case LOC_TYPEDEF:
3365 {
3366 struct type* type0 = SYMBOL_TYPE (sym0);
3367 struct type* type1 = SYMBOL_TYPE (sym1);
3368 char* name0 = SYMBOL_NAME (sym0);
3369 char* name1 = SYMBOL_NAME (sym1);
3370 int len0 = strlen (name0);
3371 return
3372 TYPE_CODE (type0) == TYPE_CODE (type1)
3373 && (equiv_types (type0, type1)
3374 || (len0 < strlen (name1) && STREQN (name0, name1, len0)
3375 && STREQN (name1 + len0, "___XV", 5)));
3376 }
3377 case LOC_CONST:
3378 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
3379 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
3380 default:
3381 return 0;
3382 }
3383}
3384
3385/* Append SYM to the end of defn_symbols, and BLOCK to the end of
3386 defn_blocks, updating ndefns, and expanding defn_symbols and
3387 defn_blocks as needed. Do not include SYM if it is a duplicate. */
3388
3389static void
3390add_defn_to_vec (sym, block)
3391 struct symbol* sym;
3392 struct block* block;
3393{
3394 int i;
3395 size_t tmp;
3396
3397 if (SYMBOL_TYPE (sym) != NULL)
3398 CHECK_TYPEDEF (SYMBOL_TYPE (sym));
3399 for (i = 0; i < ndefns; i += 1)
3400 {
3401 if (lesseq_defined_than (sym, defn_symbols[i]))
3402 return;
3403 else if (lesseq_defined_than (defn_symbols[i], sym))
3404 {
3405 defn_symbols[i] = sym;
3406 defn_blocks[i] = block;
3407 return;
3408 }
3409 }
3410
3411 tmp = defn_vector_size;
3412 GROW_VECT (defn_symbols, tmp, ndefns+2);
3413 GROW_VECT (defn_blocks, defn_vector_size, ndefns+2);
3414
3415 defn_symbols[ndefns] = sym;
3416 defn_blocks[ndefns] = block;
3417 ndefns += 1;
3418}
3419
3420/* Look, in partial_symtab PST, for symbol NAME in given namespace.
3421 Check the global symbols if GLOBAL, the static symbols if not. Do
3422 wild-card match if WILD. */
3423
3424static struct partial_symbol *
3425ada_lookup_partial_symbol (pst, name, global, namespace, wild)
3426 struct partial_symtab *pst;
3427 const char *name;
3428 int global;
3429 namespace_enum namespace;
3430 int wild;
3431{
3432 struct partial_symbol **start;
3433 int name_len = strlen (name);
3434 int length = (global ? pst->n_global_syms : pst->n_static_syms);
3435 int i;
3436
3437 if (length == 0)
3438 {
3439 return (NULL);
3440 }
3441
3442 start = (global ?
3443 pst->objfile->global_psymbols.list + pst->globals_offset :
3444 pst->objfile->static_psymbols.list + pst->statics_offset );
3445
3446 if (wild)
3447 {
3448 for (i = 0; i < length; i += 1)
3449 {
3450 struct partial_symbol* psym = start[i];
3451
3452 if (SYMBOL_NAMESPACE (psym) == namespace &&
3453 wild_match (name, name_len, SYMBOL_NAME (psym)))
3454 return psym;
3455 }
3456 return NULL;
3457 }
3458 else
3459 {
3460 if (global)
3461 {
3462 int U;
3463 i = 0; U = length-1;
3464 while (U - i > 4)
3465 {
3466 int M = (U+i) >> 1;
3467 struct partial_symbol* psym = start[M];
3468 if (SYMBOL_NAME (psym)[0] < name[0])
3469 i = M+1;
3470 else if (SYMBOL_NAME (psym)[0] > name[0])
3471 U = M-1;
3472 else if (strcmp (SYMBOL_NAME (psym), name) < 0)
3473 i = M+1;
3474 else
3475 U = M;
3476 }
3477 }
3478 else
3479 i = 0;
3480
3481 while (i < length)
3482 {
3483 struct partial_symbol *psym = start[i];
3484
3485 if (SYMBOL_NAMESPACE (psym) == namespace)
3486 {
3487 int cmp = strncmp (name, SYMBOL_NAME (psym), name_len);
3488
3489 if (cmp < 0)
3490 {
3491 if (global)
3492 break;
3493 }
3494 else if (cmp == 0
3495 && is_name_suffix (SYMBOL_NAME (psym) + name_len))
3496 return psym;
3497 }
3498 i += 1;
3499 }
3500
3501 if (global)
3502 {
3503 int U;
3504 i = 0; U = length-1;
3505 while (U - i > 4)
3506 {
3507 int M = (U+i) >> 1;
3508 struct partial_symbol *psym = start[M];
3509 if (SYMBOL_NAME (psym)[0] < '_')
3510 i = M+1;
3511 else if (SYMBOL_NAME (psym)[0] > '_')
3512 U = M-1;
3513 else if (strcmp (SYMBOL_NAME (psym), "_ada_") < 0)
3514 i = M+1;
3515 else
3516 U = M;
3517 }
3518 }
3519 else
3520 i = 0;
3521
3522 while (i < length)
3523 {
3524 struct partial_symbol* psym = start[i];
3525
3526 if (SYMBOL_NAMESPACE (psym) == namespace)
3527 {
3528 int cmp;
3529
3530 cmp = (int) '_' - (int) SYMBOL_NAME (psym)[0];
3531 if (cmp == 0)
3532 {
3533 cmp = strncmp ("_ada_", SYMBOL_NAME (psym), 5);
3534 if (cmp == 0)
3535 cmp = strncmp (name, SYMBOL_NAME (psym) + 5, name_len);
3536 }
3537
3538 if (cmp < 0)
3539 {
3540 if (global)
3541 break;
3542 }
3543 else if (cmp == 0
3544 && is_name_suffix (SYMBOL_NAME (psym) + name_len + 5))
3545 return psym;
3546 }
3547 i += 1;
3548 }
3549
3550 }
3551 return NULL;
3552}
3553
3554
3555/* Find a symbol table containing symbol SYM or NULL if none. */
3556static struct symtab*
3557symtab_for_sym (sym)
3558 struct symbol* sym;
3559{
3560 struct symtab* s;
3561 struct objfile *objfile;
3562 struct block *b;
3563 int i, j;
3564
3565 ALL_SYMTABS (objfile, s)
3566 {
3567 switch (SYMBOL_CLASS (sym))
3568 {
3569 case LOC_CONST:
3570 case LOC_STATIC:
3571 case LOC_TYPEDEF:
3572 case LOC_REGISTER:
3573 case LOC_LABEL:
3574 case LOC_BLOCK:
3575 case LOC_CONST_BYTES:
3576 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
3577 for (i = 0; i < BLOCK_NSYMS (b); i += 1)
3578 if (sym == BLOCK_SYM (b, i))
3579 return s;
3580 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
3581 for (i = 0; i < BLOCK_NSYMS (b); i += 1)
3582 if (sym == BLOCK_SYM (b, i))
3583 return s;
3584 break;
3585 default:
3586 break;
3587 }
3588 switch (SYMBOL_CLASS (sym))
3589 {
3590 case LOC_REGISTER:
3591 case LOC_ARG:
3592 case LOC_REF_ARG:
3593 case LOC_REGPARM:
3594 case LOC_REGPARM_ADDR:
3595 case LOC_LOCAL:
3596 case LOC_TYPEDEF:
3597 case LOC_LOCAL_ARG:
3598 case LOC_BASEREG:
3599 case LOC_BASEREG_ARG:
3600 for (j = FIRST_LOCAL_BLOCK;
3601 j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
3602 {
3603 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
3604 for (i = 0; i < BLOCK_NSYMS (b); i += 1)
3605 if (sym == BLOCK_SYM (b, i))
3606 return s;
3607 }
3608 break;
3609 default:
3610 break;
3611 }
3612 }
3613 return NULL;
3614}
3615
3616/* Return a minimal symbol matching NAME according to Ada demangling
3617 rules. Returns NULL if there is no such minimal symbol. */
3618
3619struct minimal_symbol*
3620ada_lookup_minimal_symbol (name)
3621 const char* name;
3622{
3623 struct objfile* objfile;
3624 struct minimal_symbol* msymbol;
3625 int wild_match = (strstr (name, "__") == NULL);
3626
3627 ALL_MSYMBOLS (objfile, msymbol)
3628 {
3629 if (ada_match_name (SYMBOL_NAME (msymbol), name, wild_match)
3630 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
3631 return msymbol;
3632 }
3633
3634 return NULL;
3635}
3636
3637/* For all subprograms that statically enclose the subprogram of the
3638 * selected frame, add symbols matching identifier NAME in NAMESPACE
3639 * and their blocks to vectors *defn_symbols and *defn_blocks, as for
3640 * ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
3641 * wildcard prefix. At the moment, this function uses a heuristic to
3642 * find the frames of enclosing subprograms: it treats the
3643 * pointer-sized value at location 0 from the local-variable base of a
3644 * frame as a static link, and then searches up the call stack for a
3645 * frame with that same local-variable base. */
3646static void
3647add_symbols_from_enclosing_procs (name, namespace, wild_match)
3648 const char* name;
3649 namespace_enum namespace;
3650 int wild_match;
3651{
3652#ifdef i386
3653 static struct symbol static_link_sym;
3654 static struct symbol *static_link;
3655
3656 struct cleanup* old_chain = make_cleanup (null_cleanup, NULL);
3657 struct frame_info* frame;
3658 struct frame_info* target_frame;
3659
3660 if (static_link == NULL)
3661 {
3662 /* Initialize the local variable symbol that stands for the
3663 * static link (when it exists). */
3664 static_link = &static_link_sym;
3665 SYMBOL_NAME (static_link) = "";
3666 SYMBOL_LANGUAGE (static_link) = language_unknown;
3667 SYMBOL_CLASS (static_link) = LOC_LOCAL;
3668 SYMBOL_NAMESPACE (static_link) = VAR_NAMESPACE;
3669 SYMBOL_TYPE (static_link) = lookup_pointer_type (builtin_type_void);
3670 SYMBOL_VALUE (static_link) =
3671 - (long) TYPE_LENGTH (SYMBOL_TYPE (static_link));
3672 }
3673
3674 frame = selected_frame;
3675 while (frame != NULL && ndefns == 0)
3676 {
3677 struct block* block;
3678 struct value* target_link_val = read_var_value (static_link, frame);
3679 CORE_ADDR target_link;
3680
3681 if (target_link_val == NULL)
3682 break;
3683 QUIT;
3684
3685 target_link = target_link_val;
3686 do {
3687 QUIT;
3688 frame = get_prev_frame (frame);
3689 } while (frame != NULL && FRAME_LOCALS_ADDRESS (frame) != target_link);
3690
3691 if (frame == NULL)
3692 break;
3693
3694 block = get_frame_block (frame, 0);
3695 while (block != NULL && block_function (block) != NULL && ndefns == 0)
3696 {
3697 ada_add_block_symbols (block, name, namespace, NULL, wild_match);
3698
3699 block = BLOCK_SUPERBLOCK (block);
3700 }
3701 }
3702
3703 do_cleanups (old_chain);
3704#endif
3705}
3706
3707/* True if TYPE is definitely an artificial type supplied to a symbol
3708 * for which no debugging information was given in the symbol file. */
3709static int
3710is_nondebugging_type (type)
3711 struct type* type;
3712{
3713 char* name = ada_type_name (type);
3714 return (name != NULL && STREQ (name, "<variable, no debug info>"));
3715}
3716
3717/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
3718 * duplicate other symbols in the list. (The only case I know of where
3719 * this happens is when object files containing stabs-in-ecoff are
3720 * linked with files containing ordinary ecoff debugging symbols (or no
3721 * debugging symbols)). Modifies SYMS to squeeze out deleted symbols,
3722 * and applies the same modification to BLOCKS to maintain the
3723 * correspondence between SYMS[i] and BLOCKS[i]. Returns the number
3724 * of symbols in the modified list. */
3725static int
3726remove_extra_symbols (syms, blocks, nsyms)
3727 struct symbol** syms;
3728 struct block** blocks;
3729 int nsyms;
3730{
3731 int i, j;
3732
3733 i = 0;
3734 while (i < nsyms)
3735 {
3736 if (SYMBOL_NAME (syms[i]) != NULL && SYMBOL_CLASS (syms[i]) == LOC_STATIC
3737 && is_nondebugging_type (SYMBOL_TYPE (syms[i])))
3738 {
3739 for (j = 0; j < nsyms; j += 1)
3740 {
3741 if (i != j
3742 && SYMBOL_NAME (syms[j]) != NULL
3743 && STREQ (SYMBOL_NAME (syms[i]), SYMBOL_NAME (syms[j]))
3744 && SYMBOL_CLASS (syms[i]) == SYMBOL_CLASS (syms[j])
3745 && SYMBOL_VALUE_ADDRESS (syms[i])
3746 == SYMBOL_VALUE_ADDRESS (syms[j]))
3747 {
3748 int k;
3749 for (k = i+1; k < nsyms; k += 1)
3750 {
3751 syms[k-1] = syms[k];
3752 blocks[k-1] = blocks[k];
3753 }
3754 nsyms -= 1;
3755 goto NextSymbol;
3756 }
3757 }
3758 }
3759 i += 1;
3760 NextSymbol:
3761 ;
3762 }
3763 return nsyms;
3764}
3765
3766/* Find symbols in NAMESPACE matching NAME, in BLOCK0 and enclosing
3767 scope and in global scopes, returning the number of matches. Sets
3768 *SYMS to point to a vector of matching symbols, with *BLOCKS
3769 pointing to the vector of corresponding blocks in which those
3770 symbols reside. These two vectors are transient---good only to the
3771 next call of ada_lookup_symbol_list. Any non-function/non-enumeral symbol
3772 match within the nest of blocks whose innermost member is BLOCK0,
3773 is the outermost match returned (no other matches in that or
3774 enclosing blocks is returned). If there are any matches in or
3775 surrounding BLOCK0, then these alone are returned. */
3776
3777int
3778ada_lookup_symbol_list (name, block0, namespace, syms, blocks)
3779 const char *name;
3780 struct block *block0;
3781 namespace_enum namespace;
3782 struct symbol*** syms;
3783 struct block*** blocks;
3784{
3785 struct symbol *sym;
3786 struct symtab *s;
3787 struct partial_symtab *ps;
3788 struct blockvector *bv;
3789 struct objfile *objfile;
3790 struct block *b;
3791 struct block *block;
3792 struct minimal_symbol *msymbol;
3793 int wild_match = (strstr (name, "__") == NULL);
3794 int cacheIfUnique;
3795
3796#ifdef TIMING
3797 markTimeStart (0);
3798#endif
3799
3800 ndefns = 0;
3801 cacheIfUnique = 0;
3802
3803 /* Search specified block and its superiors. */
3804
3805 block = block0;
3806 while (block != NULL)
3807 {
3808 ada_add_block_symbols (block, name, namespace, NULL, wild_match);
3809
3810 /* If we found a non-function match, assume that's the one. */
3811 if (is_nonfunction (defn_symbols, ndefns))
3812 goto done;
3813
3814 block = BLOCK_SUPERBLOCK (block);
3815 }
3816
3817 /* If we found ANY matches in the specified BLOCK, we're done. */
3818
3819 if (ndefns > 0)
3820 goto done;
3821
3822 cacheIfUnique = 1;
3823
3824 /* Now add symbols from all global blocks: symbol tables, minimal symbol
3825 tables, and psymtab's */
3826
3827 ALL_SYMTABS (objfile, s)
3828 {
3829 QUIT;
3830 if (! s->primary)
3831 continue;
3832 bv = BLOCKVECTOR (s);
3833 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3834 ada_add_block_symbols (block, name, namespace, objfile, wild_match);
3835 }
3836
3837 if (namespace == VAR_NAMESPACE)
3838 {
3839 ALL_MSYMBOLS (objfile, msymbol)
3840 {
3841 if (ada_match_name (SYMBOL_NAME (msymbol), name, wild_match))
3842 {
3843 switch (MSYMBOL_TYPE (msymbol))
3844 {
3845 case mst_solib_trampoline:
3846 break;
3847 default:
3848 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
3849 if (s != NULL)
3850 {
3851 int old_ndefns = ndefns;
3852 QUIT;
3853 bv = BLOCKVECTOR (s);
3854 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3855 ada_add_block_symbols (block,
3856 SYMBOL_NAME (msymbol),
3857 namespace, objfile, wild_match);
3858 if (ndefns == old_ndefns)
3859 {
3860 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3861 ada_add_block_symbols (block,
3862 SYMBOL_NAME (msymbol),
3863 namespace, objfile,
3864 wild_match);
3865 }
3866 }
3867 }
3868 }
3869 }
3870 }
3871
3872 ALL_PSYMTABS (objfile, ps)
3873 {
3874 QUIT;
3875 if (!ps->readin
3876 && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
3877 {
3878 s = PSYMTAB_TO_SYMTAB (ps);
3879 if (! s->primary)
3880 continue;
3881 bv = BLOCKVECTOR (s);
3882 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3883 ada_add_block_symbols (block, name, namespace, objfile, wild_match);
3884 }
3885 }
3886
3887 /* Now add symbols from all per-file blocks if we've gotten no hits.
3888 (Not strictly correct, but perhaps better than an error).
3889 Do the symtabs first, then check the psymtabs */
3890
3891 if (ndefns == 0)
3892 {
3893
3894 ALL_SYMTABS (objfile, s)
3895 {
3896 QUIT;
3897 if (! s->primary)
3898 continue;
3899 bv = BLOCKVECTOR (s);
3900 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3901 ada_add_block_symbols (block, name, namespace, objfile, wild_match);
3902 }
3903
3904 ALL_PSYMTABS (objfile, ps)
3905 {
3906 QUIT;
3907 if (!ps->readin
3908 && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
3909 {
3910 s = PSYMTAB_TO_SYMTAB(ps);
3911 bv = BLOCKVECTOR (s);
3912 if (! s->primary)
3913 continue;
3914 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3915 ada_add_block_symbols (block, name, namespace,
3916 objfile, wild_match);
3917 }
3918 }
3919 }
3920
3921 /* Finally, we try to find NAME as a local symbol in some lexically
3922 enclosing block. We do this last, expecting this case to be
3923 rare. */
3924 if (ndefns == 0)
3925 {
3926 add_symbols_from_enclosing_procs (name, namespace, wild_match);
3927 if (ndefns > 0)
3928 goto done;
3929 }
3930
3931 done:
3932 ndefns = remove_extra_symbols (defn_symbols, defn_blocks, ndefns);
3933
3934
3935 *syms = defn_symbols;
3936 *blocks = defn_blocks;
3937#ifdef TIMING
3938 markTimeStop (0);
3939#endif
3940 return ndefns;
3941}
3942
3943/* Return a symbol in NAMESPACE matching NAME, in BLOCK0 and enclosing
3944 * scope and in global scopes, or NULL if none. NAME is folded to
3945 * lower case first, unless it is surrounded in single quotes.
3946 * Otherwise, the result is as for ada_lookup_symbol_list, but is
3947 * disambiguated by user query if needed. */
3948
3949struct symbol*
3950ada_lookup_symbol (name, block0, namespace)
3951 const char *name;
3952 struct block *block0;
3953 namespace_enum namespace;
3954{
3955 struct symbol** candidate_syms;
3956 struct block** candidate_blocks;
3957 int n_candidates;
3958
3959 n_candidates = ada_lookup_symbol_list (name,
3960 block0, namespace,
3961 &candidate_syms, &candidate_blocks);
3962
3963 if (n_candidates == 0)
3964 return NULL;
3965 else if (n_candidates != 1)
3966 user_select_syms (candidate_syms, candidate_blocks, n_candidates, 1);
3967
3968 return candidate_syms[0];
3969}
3970
3971
3972/* True iff STR is a possible encoded suffix of a normal Ada name
3973 * that is to be ignored for matching purposes. Suffixes of parallel
3974 * names (e.g., XVE) are not included here. Currently, the possible suffixes
3975 * are given by the regular expression:
3976 * (X[nb]*)?(__[0-9]+|\$[0-9]+|___(LJM|X([FDBUP].*|R[^T]?)))?$
3977 *
3978 */
3979static int
3980is_name_suffix (str)
3981 const char* str;
3982{
3983 int k;
3984 if (str[0] == 'X')
3985 {
3986 str += 1;
3987 while (str[0] != '_' && str[0] != '\0')
3988 {
3989 if (str[0] != 'n' && str[0] != 'b')
3990 return 0;
3991 str += 1;
3992 }
3993 }
3994 if (str[0] == '\000')
3995 return 1;
3996 if (str[0] == '_')
3997 {
3998 if (str[1] != '_' || str[2] == '\000')
3999 return 0;
4000 if (str[2] == '_')
4001 {
4002 if (STREQ (str+3, "LJM"))
4003 return 1;
4004 if (str[3] != 'X')
4005 return 0;
4006 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B' ||
4007 str[4] == 'U' || str[4] == 'P')
4008 return 1;
4009 if (str[4] == 'R' && str[5] != 'T')
4010 return 1;
4011 return 0;
4012 }
4013 for (k = 2; str[k] != '\0'; k += 1)
4014 if (!isdigit (str[k]))
4015 return 0;
4016 return 1;
4017 }
4018 if (str[0] == '$' && str[1] != '\000')
4019 {
4020 for (k = 1; str[k] != '\0'; k += 1)
4021 if (!isdigit (str[k]))
4022 return 0;
4023 return 1;
4024 }
4025 return 0;
4026}
4027
4028/* True if NAME represents a name of the form A1.A2....An, n>=1 and
4029 * PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1. Ignores
4030 * informational suffixes of NAME (i.e., for which is_name_suffix is
4031 * true). */
4032static int
4033wild_match (patn, patn_len, name)
4034 const char* patn;
4035 int patn_len;
4036 const char* name;
4037{
4038 int name_len;
4039 int s, e;
4040
4041 name_len = strlen (name);
4042 if (name_len >= patn_len+5 && STREQN (name, "_ada_", 5)
4043 && STREQN (patn, name+5, patn_len)
4044 && is_name_suffix (name+patn_len+5))
4045 return 1;
4046
4047 while (name_len >= patn_len)
4048 {
4049 if (STREQN (patn, name, patn_len)
4050 && is_name_suffix (name+patn_len))
4051 return 1;
4052 do {
4053 name += 1; name_len -= 1;
4054 } while (name_len > 0
4055 && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
4056 if (name_len <= 0)
4057 return 0;
4058 if (name[0] == '_')
4059 {
4060 if (! islower (name[2]))
4061 return 0;
4062 name += 2; name_len -= 2;
4063 }
4064 else
4065 {
4066 if (! islower (name[1]))
4067 return 0;
4068 name += 1; name_len -= 1;
4069 }
4070 }
4071
4072 return 0;
4073}
4074
4075
4076/* Add symbols from BLOCK matching identifier NAME in NAMESPACE to
4077 vector *defn_symbols, updating *defn_symbols (if necessary), *SZ (the size of
4078 the vector *defn_symbols), and *ndefns (the number of symbols
4079 currently stored in *defn_symbols). If WILD, treat as NAME with a
4080 wildcard prefix. OBJFILE is the section containing BLOCK. */
4081
4082static void
4083ada_add_block_symbols (block, name, namespace, objfile, wild)
4084 struct block* block;
4085 const char* name;
4086 namespace_enum namespace;
4087 struct objfile* objfile;
4088 int wild;
4089{
4090 int i;
4091 int name_len = strlen (name);
4092 /* A matching argument symbol, if any. */
4093 struct symbol *arg_sym;
4094 /* Set true when we find a matching non-argument symbol */
4095 int found_sym;
4096 int is_sorted = BLOCK_SHOULD_SORT (block);
4097
4098 arg_sym = NULL; found_sym = 0;
4099 if (wild)
4100 {
4101 for (i = 0; i < BLOCK_NSYMS (block); i += 1)
4102 {
4103 struct symbol *sym = BLOCK_SYM (block, i);
4104
4105 if (SYMBOL_NAMESPACE (sym) == namespace &&
4106 wild_match (name, name_len, SYMBOL_NAME (sym)))
4107 {
4108 switch (SYMBOL_CLASS (sym))
4109 {
4110 case LOC_ARG:
4111 case LOC_LOCAL_ARG:
4112 case LOC_REF_ARG:
4113 case LOC_REGPARM:
4114 case LOC_REGPARM_ADDR:
4115 case LOC_BASEREG_ARG:
4116 arg_sym = sym;
4117 break;
4118 case LOC_UNRESOLVED:
4119 continue;
4120 default:
4121 found_sym = 1;
4122 fill_in_ada_prototype (sym);
4123 add_defn_to_vec (fixup_symbol_section (sym, objfile), block);
4124 break;
4125 }
4126 }
4127 }
4128 }
4129 else
4130 {
4131 if (is_sorted)
4132 {
4133 int U;
4134 i = 0; U = BLOCK_NSYMS (block)-1;
4135 while (U - i > 4)
4136 {
4137 int M = (U+i) >> 1;
4138 struct symbol *sym = BLOCK_SYM (block, M);
4139 if (SYMBOL_NAME (sym)[0] < name[0])
4140 i = M+1;
4141 else if (SYMBOL_NAME (sym)[0] > name[0])
4142 U = M-1;
4143 else if (strcmp (SYMBOL_NAME (sym), name) < 0)
4144 i = M+1;
4145 else
4146 U = M;
4147 }
4148 }
4149 else
4150 i = 0;
4151
4152 for (; i < BLOCK_NSYMS (block); i += 1)
4153 {
4154 struct symbol *sym = BLOCK_SYM (block, i);
4155
4156 if (SYMBOL_NAMESPACE (sym) == namespace)
4157 {
4158 int cmp = strncmp (name, SYMBOL_NAME (sym), name_len);
4159
4160 if (cmp < 0)
4161 {
4162 if (is_sorted)
4163 break;
4164 }
4165 else if (cmp == 0
4166 && is_name_suffix (SYMBOL_NAME (sym) + name_len))
4167 {
4168 switch (SYMBOL_CLASS (sym))
4169 {
4170 case LOC_ARG:
4171 case LOC_LOCAL_ARG:
4172 case LOC_REF_ARG:
4173 case LOC_REGPARM:
4174 case LOC_REGPARM_ADDR:
4175 case LOC_BASEREG_ARG:
4176 arg_sym = sym;
4177 break;
4178 case LOC_UNRESOLVED:
4179 break;
4180 default:
4181 found_sym = 1;
4182 fill_in_ada_prototype (sym);
4183 add_defn_to_vec (fixup_symbol_section (sym, objfile),
4184 block);
4185 break;
4186 }
4187 }
4188 }
4189 }
4190 }
4191
4192 if (! found_sym && arg_sym != NULL)
4193 {
4194 fill_in_ada_prototype (arg_sym);
4195 add_defn_to_vec (fixup_symbol_section (arg_sym, objfile), block);
4196 }
4197
4198 if (! wild)
4199 {
4200 arg_sym = NULL; found_sym = 0;
4201 if (is_sorted)
4202 {
4203 int U;
4204 i = 0; U = BLOCK_NSYMS (block)-1;
4205 while (U - i > 4)
4206 {
4207 int M = (U+i) >> 1;
4208 struct symbol *sym = BLOCK_SYM (block, M);
4209 if (SYMBOL_NAME (sym)[0] < '_')
4210 i = M+1;
4211 else if (SYMBOL_NAME (sym)[0] > '_')
4212 U = M-1;
4213 else if (strcmp (SYMBOL_NAME (sym), "_ada_") < 0)
4214 i = M+1;
4215 else
4216 U = M;
4217 }
4218 }
4219 else
4220 i = 0;
4221
4222 for (; i < BLOCK_NSYMS (block); i += 1)
4223 {
4224 struct symbol *sym = BLOCK_SYM (block, i);
4225
4226 if (SYMBOL_NAMESPACE (sym) == namespace)
4227 {
4228 int cmp;
4229
4230 cmp = (int) '_' - (int) SYMBOL_NAME (sym)[0];
4231 if (cmp == 0)
4232 {
4233 cmp = strncmp ("_ada_", SYMBOL_NAME (sym), 5);
4234 if (cmp == 0)
4235 cmp = strncmp (name, SYMBOL_NAME (sym) + 5, name_len);
4236 }
4237
4238 if (cmp < 0)
4239 {
4240 if (is_sorted)
4241 break;
4242 }
4243 else if (cmp == 0
4244 && is_name_suffix (SYMBOL_NAME (sym) + name_len + 5))
4245 {
4246 switch (SYMBOL_CLASS (sym))
4247 {
4248 case LOC_ARG:
4249 case LOC_LOCAL_ARG:
4250 case LOC_REF_ARG:
4251 case LOC_REGPARM:
4252 case LOC_REGPARM_ADDR:
4253 case LOC_BASEREG_ARG:
4254 arg_sym = sym;
4255 break;
4256 case LOC_UNRESOLVED:
4257 break;
4258 default:
4259 found_sym = 1;
4260 fill_in_ada_prototype (sym);
4261 add_defn_to_vec (fixup_symbol_section (sym, objfile),
4262 block);
4263 break;
4264 }
4265 }
4266 }
4267 }
4268
4269 /* NOTE: This really shouldn't be needed for _ada_ symbols.
4270 They aren't parameters, right? */
4271 if (! found_sym && arg_sym != NULL)
4272 {
4273 fill_in_ada_prototype (arg_sym);
4274 add_defn_to_vec (fixup_symbol_section (arg_sym, objfile), block);
4275 }
4276 }
4277}
4278
4279\f
4280 /* Function Types */
4281
4282/* Assuming that SYM is the symbol for a function, fill in its type
170911c7 4283 with prototype information, if it is not already there. */
14f9c5c9
AS
4284
4285static void
4286fill_in_ada_prototype (func)
4287 struct symbol* func;
4288{
4289 struct block* b;
4290 int nargs, nsyms;
4291 int i;
4292 struct type* ftype;
4293 struct type* rtype;
4294 size_t max_fields;
4295
4296 if (func == NULL
4297 || TYPE_CODE (SYMBOL_TYPE (func)) != TYPE_CODE_FUNC
4298 || TYPE_FIELDS (SYMBOL_TYPE (func)) != NULL)
4299 return;
4300
4301 /* We make each function type unique, so that each may have its own */
4302 /* parameter types. This particular way of doing so wastes space: */
4303 /* it would be nicer to build the argument types while the original */
4304 /* function type is being built (FIXME). */
4305 rtype = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (func)));
4306 ftype = alloc_type (TYPE_OBJFILE (SYMBOL_TYPE (func)));
4307 make_function_type (rtype, &ftype);
4308 SYMBOL_TYPE (func) = ftype;
4309
4310 b = SYMBOL_BLOCK_VALUE (func);
4311 nsyms = BLOCK_NSYMS (b);
4312
4313 nargs = 0;
4314 max_fields = 8;
4315 TYPE_FIELDS (ftype) =
4316 (struct field*) xmalloc (sizeof (struct field) * max_fields);
4317 for (i = 0; i < nsyms; i += 1)
4318 {
4319 struct symbol *sym = BLOCK_SYM (b, i);
4320
4321 GROW_VECT (TYPE_FIELDS (ftype), max_fields, nargs+1);
4322
4323 switch (SYMBOL_CLASS (sym))
4324 {
4325 case LOC_REF_ARG:
4326 case LOC_REGPARM_ADDR:
4327 TYPE_FIELD_BITPOS (ftype, nargs) = nargs;
4328 TYPE_FIELD_BITSIZE (ftype, nargs) = 0;
4329 TYPE_FIELD_TYPE (ftype, nargs) =
4330 lookup_pointer_type (check_typedef (SYMBOL_TYPE (sym)));
4331 TYPE_FIELD_NAME (ftype, nargs) = SYMBOL_NAME (sym);
4332 nargs += 1;
4333
4334 break;
4335
4336 case LOC_ARG:
4337 case LOC_REGPARM:
4338 case LOC_LOCAL_ARG:
4339 case LOC_BASEREG_ARG:
4340 TYPE_FIELD_BITPOS (ftype, nargs) = nargs;
4341 TYPE_FIELD_BITSIZE (ftype, nargs) = 0;
4342 TYPE_FIELD_TYPE (ftype, nargs) = check_typedef (SYMBOL_TYPE (sym));
4343 TYPE_FIELD_NAME (ftype, nargs) = SYMBOL_NAME (sym);
4344 nargs += 1;
4345
4346 break;
4347
4348 default:
4349 break;
4350 }
4351 }
4352
4353 /* Re-allocate fields vector; if there are no fields, make the */
4354 /* fields pointer non-null anyway, to mark that this function type */
4355 /* has been filled in. */
4356
4357 TYPE_NFIELDS (ftype) = nargs;
4358 if (nargs == 0)
4359 {
4360 static struct field dummy_field = {0, 0, 0, 0};
4361 free (TYPE_FIELDS (ftype));
4362 TYPE_FIELDS (ftype) = &dummy_field;
4363 }
4364 else
4365 {
4366 struct field* fields =
4367 (struct field*) TYPE_ALLOC (ftype, nargs * sizeof (struct field));
4368 memcpy ((char*) fields,
4369 (char*) TYPE_FIELDS (ftype),
4370 nargs * sizeof (struct field));
4371 free (TYPE_FIELDS (ftype));
4372 TYPE_FIELDS (ftype) = fields;
4373 }
4374}
4375
4376\f
4377 /* Breakpoint-related */
4378
4379char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
4380
4381/* Assuming that LINE is pointing at the beginning of an argument to
4382 'break', return a pointer to the delimiter for the initial segment
4383 of that name. This is the first ':', ' ', or end of LINE.
4384*/
4385char*
4386ada_start_decode_line_1 (line)
4387 char* line;
4388{
4389 /* [NOTE: strpbrk would be more elegant, but I am reluctant to be
4390 the first to use such a library function in GDB code.] */
4391 char* p;
4392 for (p = line; *p != '\000' && *p != ' ' && *p != ':'; p += 1)
4393 ;
4394 return p;
4395}
4396
4397/* *SPEC points to a function and line number spec (as in a break
4398 command), following any initial file name specification.
4399
4400 Return all symbol table/line specfications (sals) consistent with the
4401 information in *SPEC and FILE_TABLE in the
4402 following sense:
4403 + FILE_TABLE is null, or the sal refers to a line in the file
4404 named by FILE_TABLE.
4405 + If *SPEC points to an argument with a trailing ':LINENUM',
4406 then the sal refers to that line (or one following it as closely as
4407 possible).
4408 + If *SPEC does not start with '*', the sal is in a function with
4409 that name.
4410
4411 Returns with 0 elements if no matching non-minimal symbols found.
4412
4413 If *SPEC begins with a function name of the form <NAME>, then NAME
4414 is taken as a literal name; otherwise the function name is subject
4415 to the usual mangling.
4416
4417 *SPEC is updated to point after the function/line number specification.
4418
4419 FUNFIRSTLINE is non-zero if we desire the first line of real code
4420 in each function (this is ignored in the presence of a LINENUM spec.).
4421
4422 If CANONICAL is non-NULL, and if any of the sals require a
4423 'canonical line spec', then *CANONICAL is set to point to an array
4424 of strings, corresponding to and equal in length to the returned
4425 list of sals, such that (*CANONICAL)[i] is non-null and contains a
4426 canonical line spec for the ith returned sal, if needed. If no
4427 canonical line specs are required and CANONICAL is non-null,
4428 *CANONICAL is set to NULL.
4429
4430 A 'canonical line spec' is simply a name (in the format of the
4431 breakpoint command) that uniquely identifies a breakpoint position,
4432 with no further contextual information or user selection. It is
4433 needed whenever the file name, function name, and line number
4434 information supplied is insufficient for this unique
4435 identification. Currently overloaded functions, the name '*',
4436 or static functions without a filename yield a canonical line spec.
4437 The array and the line spec strings are allocated on the heap; it
4438 is the caller's responsibility to free them. */
4439
4440struct symtabs_and_lines
4441ada_finish_decode_line_1 (spec, file_table, funfirstline, canonical)
4442 char** spec;
4443 struct symtab* file_table;
4444 int funfirstline;
4445 char*** canonical;
4446{
4447 struct symbol** symbols;
4448 struct block** blocks;
4449 struct block* block;
4450 int n_matches, i, line_num;
4451 struct symtabs_and_lines selected;
4452 struct cleanup* old_chain = make_cleanup (null_cleanup, NULL);
4453 char* name;
4454
4455 int len;
4456 char* lower_name;
4457 char* unquoted_name;
4458
4459 if (file_table == NULL)
4460 block = get_selected_block (NULL);
4461 else
4462 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_table), STATIC_BLOCK);
4463
4464 if (canonical != NULL)
4465 *canonical = (char**) NULL;
4466
4467 name = *spec;
4468 if (**spec == '*')
4469 *spec += 1;
4470 else
4471 {
4472 while (**spec != '\000' &&
4473 ! strchr (ada_completer_word_break_characters, **spec))
4474 *spec += 1;
4475 }
4476 len = *spec - name;
4477
4478 line_num = -1;
4479 if (file_table != NULL && (*spec)[0] == ':' && isdigit ((*spec)[1]))
4480 {
4481 line_num = strtol (*spec + 1, spec, 10);
4482 while (**spec == ' ' || **spec == '\t')
4483 *spec += 1;
4484 }
4485
4486 if (name[0] == '*')
4487 {
4488 if (line_num == -1)
4489 error ("Wild-card function with no line number or file name.");
4490
4491 return all_sals_for_line (file_table->filename, line_num, canonical);
4492 }
4493
4494 if (name[0] == '\'')
4495 {
4496 name += 1;
4497 len -= 2;
4498 }
4499
4500 if (name[0] == '<')
4501 {
4502 unquoted_name = (char*) alloca (len-1);
4503 memcpy (unquoted_name, name+1, len-2);
4504 unquoted_name[len-2] = '\000';
4505 lower_name = NULL;
4506 }
4507 else
4508 {
4509 unquoted_name = (char*) alloca (len+1);
4510 memcpy (unquoted_name, name, len);
4511 unquoted_name[len] = '\000';
4512 lower_name = (char*) alloca (len + 1);
4513 for (i = 0; i < len; i += 1)
4514 lower_name[i] = tolower (name[i]);
4515 lower_name[len] = '\000';
4516 }
4517
4518 n_matches = 0;
4519 if (lower_name != NULL)
4520 n_matches = ada_lookup_symbol_list (ada_mangle (lower_name), block,
4521 VAR_NAMESPACE, &symbols, &blocks);
4522 if (n_matches == 0)
4523 n_matches = ada_lookup_symbol_list (unquoted_name, block,
4524 VAR_NAMESPACE, &symbols, &blocks);
4525 if (n_matches == 0 && line_num >= 0)
4526 error ("No line number information found for %s.", unquoted_name);
4527 else if (n_matches == 0)
4528 {
4529#ifdef HPPA_COMPILER_BUG
4530 /* FIXME: See comment in symtab.c::decode_line_1 */
4531#undef volatile
4532 volatile struct symtab_and_line val;
4533#define volatile /*nothing*/
4534#else
4535 struct symtab_and_line val;
4536#endif
4537 struct minimal_symbol* msymbol;
4538
4539 INIT_SAL (&val);
4540
4541 msymbol = NULL;
4542 if (lower_name != NULL)
4543 msymbol = ada_lookup_minimal_symbol (ada_mangle (lower_name));
4544 if (msymbol == NULL)
4545 msymbol = ada_lookup_minimal_symbol (unquoted_name);
4546 if (msymbol != NULL)
4547 {
4548 val.pc = SYMBOL_VALUE_ADDRESS (msymbol);
4549 val.section = SYMBOL_BFD_SECTION (msymbol);
4550 if (funfirstline)
4551 {
4552 val.pc += FUNCTION_START_OFFSET;
4553 SKIP_PROLOGUE (val.pc);
4554 }
4555 selected.sals = (struct symtab_and_line *)
4556 xmalloc (sizeof (struct symtab_and_line));
4557 selected.sals[0] = val;
4558 selected.nelts = 1;
4559 return selected;
4560 }
4561
4562 if (!have_full_symbols () &&
4563 !have_partial_symbols () && !have_minimal_symbols ())
4564 error (no_symtab_msg);
4565
4566 error ("Function \"%s\" not defined.", unquoted_name);
4567 return selected; /* for lint */
4568 }
4569
4570 if (line_num >= 0)
4571 {
4572 return
4573 find_sal_from_funcs_and_line (file_table->filename, line_num,
4574 symbols, n_matches);
4575 }
4576 else
4577 {
4578 selected.nelts = user_select_syms (symbols, blocks, n_matches, n_matches);
4579 }
4580
4581 selected.sals = (struct symtab_and_line*)
4582 xmalloc (sizeof (struct symtab_and_line) * selected.nelts);
4583 memset (selected.sals, 0, selected.nelts * sizeof (selected.sals[i]));
4584 make_cleanup (free, selected.sals);
4585
4586 i = 0;
4587 while (i < selected.nelts)
4588 {
4589 if (SYMBOL_CLASS (symbols[i]) == LOC_BLOCK)
4590 selected.sals[i] = find_function_start_sal (symbols[i], funfirstline);
4591 else if (SYMBOL_LINE (symbols[i]) != 0)
4592 {
4593 selected.sals[i].symtab = symtab_for_sym (symbols[i]);
4594 selected.sals[i].line = SYMBOL_LINE (symbols[i]);
4595 }
4596 else if (line_num >= 0)
4597 {
4598 /* Ignore this choice */
4599 symbols[i] = symbols[selected.nelts-1];
4600 blocks[i] = blocks[selected.nelts-1];
4601 selected.nelts -= 1;
4602 continue;
4603 }
4604 else
4605 error ("Line number not known for symbol \"%s\"", unquoted_name);
4606 i += 1;
4607 }
4608
4609 if (canonical != NULL && (line_num >= 0 || n_matches > 1))
4610 {
4611 *canonical = (char**) xmalloc (sizeof(char*) * selected.nelts);
4612 for (i = 0; i < selected.nelts; i += 1)
4613 (*canonical)[i] =
4614 extended_canonical_line_spec (selected.sals[i],
4615 SYMBOL_SOURCE_NAME (symbols[i]));
4616 }
4617
4618 discard_cleanups (old_chain);
4619 return selected;
4620}
4621
4622/* The (single) sal corresponding to line LINE_NUM in a symbol table
4623 with file name FILENAME that occurs in one of the functions listed
4624 in SYMBOLS[0 .. NSYMS-1]. */
4625static struct symtabs_and_lines
4626find_sal_from_funcs_and_line (filename, line_num, symbols, nsyms)
4627 const char* filename;
4628 int line_num;
4629 struct symbol** symbols;
4630 int nsyms;
4631{
4632 struct symtabs_and_lines sals;
4633 int best_index, best;
4634 struct linetable* best_linetable;
4635 struct objfile* objfile;
4636 struct symtab* s;
4637 struct symtab* best_symtab;
4638
4639 read_all_symtabs (filename);
4640
4641 best_index = 0; best_linetable = NULL; best_symtab = NULL;
4642 best = 0;
4643 ALL_SYMTABS (objfile, s)
4644 {
4645 struct linetable *l;
4646 int ind, exact;
4647
4648 QUIT;
4649
4650 if (!STREQ (filename, s->filename))
4651 continue;
4652 l = LINETABLE (s);
4653 ind = find_line_in_linetable (l, line_num, symbols, nsyms, &exact);
4654 if (ind >= 0)
4655 {
4656 if (exact)
4657 {
4658 best_index = ind;
4659 best_linetable = l;
4660 best_symtab = s;
4661 goto done;
4662 }
4663 if (best == 0 || l->item[ind].line < best)
4664 {
4665 best = l->item[ind].line;
4666 best_index = ind;
4667 best_linetable = l;
4668 best_symtab = s;
4669 }
4670 }
4671 }
4672
4673 if (best == 0)
4674 error ("Line number not found in designated function.");
4675
4676 done:
4677
4678 sals.nelts = 1;
4679 sals.sals = (struct symtab_and_line*) xmalloc (sizeof (sals.sals[0]));
4680
4681 INIT_SAL (&sals.sals[0]);
4682
4683 sals.sals[0].line = best_linetable->item[best_index].line;
4684 sals.sals[0].pc = best_linetable->item[best_index].pc;
4685 sals.sals[0].symtab = best_symtab;
4686
4687 return sals;
4688}
4689
4690/* Return the index in LINETABLE of the best match for LINE_NUM whose
4691 pc falls within one of the functions denoted by SYMBOLS[0..NSYMS-1].
4692 Set *EXACTP to the 1 if the match is exact, and 0 otherwise. */
4693static int
4694find_line_in_linetable (linetable, line_num, symbols, nsyms, exactp)
4695 struct linetable* linetable;
4696 int line_num;
4697 struct symbol** symbols;
4698 int nsyms;
4699 int* exactp;
4700{
4701 int i, len, best_index, best;
4702
4703 if (line_num <= 0 || linetable == NULL)
4704 return -1;
4705
4706 len = linetable->nitems;
4707 for (i = 0, best_index = -1, best = 0; i < len; i += 1)
4708 {
4709 int k;
4710 struct linetable_entry* item = &(linetable->item[i]);
4711
4712 for (k = 0; k < nsyms; k += 1)
4713 {
4714 if (symbols[k] != NULL && SYMBOL_CLASS (symbols[k]) == LOC_BLOCK
4715 && item->pc >= BLOCK_START (SYMBOL_BLOCK_VALUE (symbols[k]))
4716 && item->pc < BLOCK_END (SYMBOL_BLOCK_VALUE (symbols[k])))
4717 goto candidate;
4718 }
4719 continue;
4720
4721 candidate:
4722
4723 if (item->line == line_num)
4724 {
4725 *exactp = 1;
4726 return i;
4727 }
4728
4729 if (item->line > line_num && (best == 0 || item->line < best))
4730 {
4731 best = item->line;
4732 best_index = i;
4733 }
4734 }
4735
4736 *exactp = 0;
4737 return best_index;
4738}
4739
4740/* Find the smallest k >= LINE_NUM such that k is a line number in
4741 LINETABLE, and k falls strictly within a named function that begins at
4742 or before LINE_NUM. Return -1 if there is no such k. */
4743static int
4744nearest_line_number_in_linetable (linetable, line_num)
4745 struct linetable* linetable;
4746 int line_num;
4747{
4748 int i, len, best;
4749
4750 if (line_num <= 0 || linetable == NULL || linetable->nitems == 0)
4751 return -1;
4752 len = linetable->nitems;
4753
4754 i = 0; best = INT_MAX;
4755 while (i < len)
4756 {
4757 int k;
4758 struct linetable_entry* item = &(linetable->item[i]);
4759
4760 if (item->line >= line_num && item->line < best)
4761 {
4762 char* func_name;
4763 CORE_ADDR start, end;
4764
4765 func_name = NULL;
4766 find_pc_partial_function (item->pc, &func_name, &start, &end);
4767
4768 if (func_name != NULL && item->pc < end)
4769 {
4770 if (item->line == line_num)
4771 return line_num;
4772 else
4773 {
4774 struct symbol* sym =
4775 standard_lookup (func_name, VAR_NAMESPACE);
4776 if (is_plausible_func_for_line (sym, line_num))
4777 best = item->line;
4778 else
4779 {
4780 do
4781 i += 1;
4782 while (i < len && linetable->item[i].pc < end);
4783 continue;
4784 }
4785 }
4786 }
4787 }
4788
4789 i += 1;
4790 }
4791
4792 return (best == INT_MAX) ? -1 : best;
4793}
4794
4795
4796/* Return the next higher index, k, into LINETABLE such that k > IND,
4797 entry k in LINETABLE has a line number equal to LINE_NUM, k
4798 corresponds to a PC that is in a function different from that
4799 corresponding to IND, and falls strictly within a named function
4800 that begins at a line at or preceding STARTING_LINE.
4801 Return -1 if there is no such k.
4802 IND == -1 corresponds to no function. */
4803
4804static int
4805find_next_line_in_linetable (linetable, line_num, starting_line, ind)
4806 struct linetable* linetable;
4807 int line_num;
4808 int starting_line;
4809 int ind;
4810{
4811 int i, len;
4812
4813 if (line_num <= 0 || linetable == NULL || ind >= linetable->nitems)
4814 return -1;
4815 len = linetable->nitems;
4816
4817 if (ind >= 0)
4818 {
4819 CORE_ADDR start, end;
4820
4821 if (find_pc_partial_function (linetable->item[ind].pc,
4822 (char**) NULL, &start, &end))
4823 {
4824 while (ind < len && linetable->item[ind].pc < end)
4825 ind += 1;
4826 }
4827 else
4828 ind += 1;
4829 }
4830 else
4831 ind = 0;
4832
4833 i = ind;
4834 while (i < len)
4835 {
4836 int k;
4837 struct linetable_entry* item = &(linetable->item[i]);
4838
4839 if (item->line >= line_num)
4840 {
4841 char* func_name;
4842 CORE_ADDR start, end;
4843
4844 func_name = NULL;
4845 find_pc_partial_function (item->pc, &func_name, &start, &end);
4846
4847 if (func_name != NULL && item->pc < end)
4848 {
4849 if (item->line == line_num)
4850 {
4851 struct symbol* sym =
4852 standard_lookup (func_name, VAR_NAMESPACE);
4853 if (is_plausible_func_for_line (sym, starting_line))
4854 return i;
4855 else
4856 {
4857 while ((i+1) < len && linetable->item[i+1].pc < end)
4858 i += 1;
4859 }
4860 }
4861 }
4862 }
4863 i += 1;
4864 }
4865
4866 return -1;
4867}
4868
4869/* True iff function symbol SYM starts somewhere at or before line #
4870 LINE_NUM. */
4871static int
4872is_plausible_func_for_line (sym, line_num)
4873 struct symbol* sym;
4874 int line_num;
4875{
4876 struct symtab_and_line start_sal;
4877
4878 if (sym == NULL)
4879 return 0;
4880
4881 start_sal = find_function_start_sal (sym, 0);
4882
4883 return (start_sal.line != 0 && line_num >= start_sal.line);
4884}
4885
4886static void
4887debug_print_lines (lt)
4888 struct linetable* lt;
4889{
4890 int i;
4891
4892 if (lt == NULL)
4893 return;
4894
4895 fprintf (stderr, "\t");
4896 for (i = 0; i < lt->nitems; i += 1)
4897 fprintf (stderr, "(%d->%p) ", lt->item[i].line, (void *) lt->item[i].pc);
4898 fprintf (stderr, "\n");
4899}
4900
4901static void
4902debug_print_block (b)
4903 struct block* b;
4904{
4905 int i;
4906 fprintf (stderr, "Block: %p; [0x%lx, 0x%lx]",
4907 b, BLOCK_START(b), BLOCK_END(b));
4908 if (BLOCK_FUNCTION(b) != NULL)
4909 fprintf (stderr, " Function: %s", SYMBOL_NAME (BLOCK_FUNCTION(b)));
4910 fprintf (stderr, "\n");
4911 fprintf (stderr, "\t Superblock: %p\n", BLOCK_SUPERBLOCK(b));
4912 fprintf (stderr, "\t Symbols:");
4913 for (i = 0; i < BLOCK_NSYMS (b); i += 1)
4914 {
4915 if (i > 0 && i % 4 == 0)
4916 fprintf (stderr, "\n\t\t ");
4917 fprintf (stderr, " %s", SYMBOL_NAME (BLOCK_SYM (b, i)));
4918 }
4919 fprintf (stderr, "\n");
4920}
4921
4922static void
4923debug_print_blocks (bv)
4924 struct blockvector* bv;
4925{
4926 int i;
4927
4928 if (bv == NULL)
4929 return;
4930 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i += 1) {
4931 fprintf (stderr, "%6d. ", i);
4932 debug_print_block (BLOCKVECTOR_BLOCK (bv, i));
4933 }
4934}
4935
4936static void
4937debug_print_symtab (s)
4938 struct symtab* s;
4939{
4940 fprintf (stderr, "Symtab %p\n File: %s; Dir: %s\n", s,
4941 s->filename, s->dirname);
4942 fprintf (stderr, " Blockvector: %p, Primary: %d\n",
4943 BLOCKVECTOR(s), s->primary);
4944 debug_print_blocks (BLOCKVECTOR(s));
4945 fprintf (stderr, " Line table: %p\n", LINETABLE (s));
4946 debug_print_lines (LINETABLE(s));
4947}
4948
4949/* Read in all symbol tables corresponding to partial symbol tables
4950 with file name FILENAME. */
4951static void
4952read_all_symtabs (filename)
4953 const char* filename;
4954{
4955 struct partial_symtab* ps;
4956 struct objfile* objfile;
4957
4958 ALL_PSYMTABS (objfile, ps)
4959 {
4960 QUIT;
4961
4962 if (STREQ (filename, ps->filename))
4963 PSYMTAB_TO_SYMTAB (ps);
4964 }
4965}
4966
4967/* All sals corresponding to line LINE_NUM in a symbol table from file
4968 FILENAME, as filtered by the user. If CANONICAL is not null, set
4969 it to a corresponding array of canonical line specs. */
4970static struct symtabs_and_lines
4971all_sals_for_line (filename, line_num, canonical)
4972 const char* filename;
4973 int line_num;
4974 char*** canonical;
4975{
4976 struct symtabs_and_lines result;
4977 struct objfile* objfile;
4978 struct symtab* s;
4979 struct cleanup* old_chain = make_cleanup (null_cleanup, NULL);
4980 size_t len;
4981
4982 read_all_symtabs (filename);
4983
4984 result.sals = (struct symtab_and_line*) xmalloc (4 * sizeof (result.sals[0]));
4985 result.nelts = 0;
4986 len = 4;
4987 make_cleanup (free_current_contents, &result.sals);
4988
4989 ALL_SYMTABS (objfile, s)
4990 {
4991 int ind, target_line_num;
4992
4993 QUIT;
4994
4995 if (!STREQ (s->filename, filename))
4996 continue;
4997
4998 target_line_num =
4999 nearest_line_number_in_linetable (LINETABLE (s), line_num);
5000 if (target_line_num == -1)
5001 continue;
5002
5003 ind = -1;
5004 while (1)
5005 {
5006 ind =
5007 find_next_line_in_linetable (LINETABLE (s),
5008 target_line_num, line_num, ind);
5009
5010 if (ind < 0)
5011 break;
5012
5013 GROW_VECT (result.sals, len, result.nelts+1);
5014 INIT_SAL (&result.sals[result.nelts]);
5015 result.sals[result.nelts].line = LINETABLE(s)->item[ind].line;
5016 result.sals[result.nelts].pc = LINETABLE(s)->item[ind].pc;
5017 result.sals[result.nelts].symtab = s;
5018 result.nelts += 1;
5019 }
5020 }
5021
5022 if (canonical != NULL || result.nelts > 1)
5023 {
5024 int k;
5025 char** func_names = (char**) alloca (result.nelts * sizeof (char*));
5026 int first_choice = (result.nelts > 1) ? 2 : 1;
5027 int n;
5028 int* choices = (int*) alloca (result.nelts * sizeof (int));
5029
5030 for (k = 0; k < result.nelts; k += 1)
5031 {
5032 find_pc_partial_function (result.sals[k].pc, &func_names[k],
5033 (CORE_ADDR*) NULL, (CORE_ADDR*) NULL);
5034 if (func_names[k] == NULL)
5035 error ("Could not find function for one or more breakpoints.");
5036 }
5037
5038 if (result.nelts > 1)
5039 {
5040 printf_unfiltered("[0] cancel\n");
5041 if (result.nelts > 1)
5042 printf_unfiltered("[1] all\n");
5043 for (k = 0; k < result.nelts; k += 1)
5044 printf_unfiltered ("[%d] %s\n", k + first_choice,
5045 ada_demangle (func_names[k]));
5046
5047 n = get_selections (choices, result.nelts, result.nelts,
5048 result.nelts > 1, "instance-choice");
5049
5050 for (k = 0; k < n; k += 1)
5051 {
5052 result.sals[k] = result.sals[choices[k]];
5053 func_names[k] = func_names[choices[k]];
5054 }
5055 result.nelts = n;
5056 }
5057
5058 if (canonical != NULL)
5059 {
5060 *canonical = (char**) xmalloc (result.nelts * sizeof (char**));
5061 make_cleanup (free, *canonical);
5062 for (k = 0; k < result.nelts; k += 1)
5063 {
5064 (*canonical)[k] =
5065 extended_canonical_line_spec (result.sals[k], func_names[k]);
5066 if ((*canonical)[k] == NULL)
5067 error ("Could not locate one or more breakpoints.");
5068 make_cleanup (free, (*canonical)[k]);
5069 }
5070 }
5071 }
5072
5073 discard_cleanups (old_chain);
5074 return result;
5075}
5076
5077
5078/* A canonical line specification of the form FILE:NAME:LINENUM for
5079 symbol table and line data SAL. NULL if insufficient
5080 information. The caller is responsible for releasing any space
5081 allocated. */
5082
5083static char*
5084extended_canonical_line_spec (sal, name)
5085 struct symtab_and_line sal;
5086 const char* name;
5087{
5088 char* r;
5089
5090 if (sal.symtab == NULL || sal.symtab->filename == NULL ||
5091 sal.line <= 0)
5092 return NULL;
5093
5094 r = (char*) xmalloc (strlen (name) + strlen (sal.symtab->filename)
5095 + sizeof(sal.line)*3 + 3);
5096 sprintf (r, "%s:'%s':%d", sal.symtab->filename, name, sal.line);
5097 return r;
5098}
5099
5100#if 0
5101int begin_bnum = -1;
5102#endif
5103int begin_annotate_level = 0;
5104
5105static void
5106begin_cleanup (void* dummy)
5107{
5108 begin_annotate_level = 0;
5109}
5110
5111static void
5112begin_command (args, from_tty)
5113 char *args;
5114 int from_tty;
5115{
5116 struct minimal_symbol *msym;
5117 CORE_ADDR main_program_name_addr;
5118 char main_program_name[1024];
5119 struct cleanup* old_chain = make_cleanup (begin_cleanup, NULL);
5120 begin_annotate_level = 2;
5121
5122 /* Check that there is a program to debug */
5123 if (!have_full_symbols () && !have_partial_symbols ())
5124 error ("No symbol table is loaded. Use the \"file\" command.");
5125
5126 /* Check that we are debugging an Ada program */
5127 /* if (ada_update_initial_language (language_unknown, NULL) != language_ada)
5128 error ("Cannot find the Ada initialization procedure. Is this an Ada main program?");
5129 */
5130 /* FIXME: language_ada should be defined in defs.h */
5131
5132 /* Get the address of the name of the main procedure */
5133 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
5134
5135 if (msym != NULL)
5136 {
5137 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
5138 if (main_program_name_addr == 0)
5139 error ("Invalid address for Ada main program name.");
5140
5141 /* Read the name of the main procedure */
5142 extract_string (main_program_name_addr, main_program_name);
5143
5144 /* Put a temporary breakpoint in the Ada main program and run */
5145 do_command ("tbreak ", main_program_name, 0);
5146 do_command ("run ", args, 0);
5147 }
5148 else
5149 {
5150 /* If we could not find the symbol containing the name of the
5151 main program, that means that the compiler that was used to build
5152 was not recent enough. In that case, we fallback to the previous
5153 mechanism, which is a little bit less reliable, but has proved to work
5154 in most cases. The only cases where it will fail is when the user
5155 has set some breakpoints which will be hit before the end of the
5156 begin command processing (eg in the initialization code).
5157
5158 The begining of the main Ada subprogram is located by breaking
5159 on the adainit procedure. Since we know that the binder generates
5160 the call to this procedure exactly 2 calls before the call to the
5161 Ada main subprogram, it is then easy to put a breakpoint on this
5162 Ada main subprogram once we hit adainit.
5163 */
5164 do_command ("tbreak adainit", 0);
5165 do_command ("run ", args, 0);
5166 do_command ("up", 0);
5167 do_command ("tbreak +2", 0);
5168 do_command ("continue", 0);
5169 do_command ("step", 0);
5170 }
5171
5172 do_cleanups (old_chain);
5173}
5174
5175int
5176is_ada_runtime_file (filename)
5177 char *filename;
5178{
5179 return (STREQN (filename, "s-", 2) ||
5180 STREQN (filename, "a-", 2) ||
5181 STREQN (filename, "g-", 2) ||
5182 STREQN (filename, "i-", 2));
5183}
5184
5185/* find the first frame that contains debugging information and that is not
5186 part of the Ada run-time, starting from fi and moving upward. */
5187
5188int
5189find_printable_frame (fi, level)
5190 struct frame_info *fi;
5191 int level;
5192{
5193 struct symtab_and_line sal;
5194
5195 for (; fi != NULL; level += 1, fi = get_prev_frame (fi))
5196 {
5197 /* If fi is not the innermost frame, that normally means that fi->pc
5198 points to *after* the call instruction, and we want to get the line
5199 containing the call, never the next line. But if the next frame is
5200 a signal_handler_caller or a dummy frame, then the next frame was
5201 not entered as the result of a call, and we want to get the line
5202 containing fi->pc. */
5203 sal =
5204 find_pc_line (fi->pc,
5205 fi->next != NULL
5206 && !fi->next->signal_handler_caller
5207 && !frame_in_dummy (fi->next));
5208 if (sal.symtab && !is_ada_runtime_file (sal.symtab->filename))
5209 {
5210#if defined(__alpha__) && defined(__osf__) && !defined(VXWORKS_TARGET)
5211 /* libpthread.so contains some debugging information that prevents us
5212 from finding the right frame */
5213
5214 if (sal.symtab->objfile &&
5215 STREQ (sal.symtab->objfile->name, "/usr/shlib/libpthread.so"))
5216 continue;
5217#endif
5218 selected_frame = fi;
5219 break;
5220 }
5221 }
5222
5223 return level;
5224}
5225
5226void
5227ada_report_exception_break (b)
5228 struct breakpoint *b;
5229{
5230#ifdef UI_OUT
5231 /* FIXME: break_on_exception should be defined in breakpoint.h */
5232 /* if (b->break_on_exception == 1)
5233 {
5234 /* Assume that cond has 16 elements, the 15th
5235 being the exception */ /*
5236 if (b->cond && b->cond->nelts == 16)
5237 {
5238 ui_out_text (uiout, "on ");
5239 ui_out_field_string (uiout, "exception",
5240 SYMBOL_NAME (b->cond->elts[14].symbol));
5241 }
5242 else
5243 ui_out_text (uiout, "on all exceptions");
5244 }
5245 else if (b->break_on_exception == 2)
5246 ui_out_text (uiout, "on unhandled exception");
5247 else if (b->break_on_exception == 3)
5248 ui_out_text (uiout, "on assert failure");
5249#else
5250 if (b->break_on_exception == 1)
5251 {*/
5252 /* Assume that cond has 16 elements, the 15th
5253 being the exception */ /*
5254 if (b->cond && b->cond->nelts == 16)
5255 {
5256 fputs_filtered ("on ", gdb_stdout);
5257 fputs_filtered (SYMBOL_NAME
5258 (b->cond->elts[14].symbol), gdb_stdout);
5259 }
5260 else
5261 fputs_filtered ("on all exceptions", gdb_stdout);
5262 }
5263 else if (b->break_on_exception == 2)
5264 fputs_filtered ("on unhandled exception", gdb_stdout);
5265 else if (b->break_on_exception == 3)
5266 fputs_filtered ("on assert failure", gdb_stdout);
5267*/
5268#endif
5269}
5270
5271int
5272ada_is_exception_sym (struct symbol* sym)
5273{
5274 char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
5275
5276 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
5277 && SYMBOL_CLASS (sym) != LOC_BLOCK
5278 && SYMBOL_CLASS (sym) != LOC_CONST
5279 && type_name != NULL
5280 && STREQ (type_name, "exception"));
5281}
5282
5283int
5284ada_maybe_exception_partial_symbol (struct partial_symbol* sym)
5285{
5286 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
5287 && SYMBOL_CLASS (sym) != LOC_BLOCK
5288 && SYMBOL_CLASS (sym) != LOC_CONST);
5289}
5290
5291/* If ARG points to an Ada exception or assert breakpoint, rewrite
5292 into equivalent form. Return resulting argument string. Set
5293 *BREAK_ON_EXCEPTIONP to 1 for ordinary break on exception, 2 for
5294 break on unhandled, 3 for assert, 0 otherwise. */
5295char* ada_breakpoint_rewrite (char* arg, int* break_on_exceptionp)
5296{
5297 if (arg == NULL)
5298 return arg;
5299 *break_on_exceptionp = 0;
5300 /* FIXME: language_ada should be defined in defs.h */
5301 /* if (current_language->la_language == language_ada
5302 && STREQN (arg, "exception", 9) &&
5303 (arg[9] == ' ' || arg[9] == '\t' || arg[9] == '\0'))
5304 {
5305 char *tok, *end_tok;
5306 int toklen;
5307
5308 *break_on_exceptionp = 1;
5309
5310 tok = arg+9;
5311 while (*tok == ' ' || *tok == '\t')
5312 tok += 1;
5313
5314 end_tok = tok;
5315
5316 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
5317 end_tok += 1;
5318
5319 toklen = end_tok - tok;
5320
5321 arg = (char*) xmalloc (sizeof ("__gnat_raise_nodefer_with_msg if "
5322 "long_integer(e) = long_integer(&)")
5323 + toklen + 1);
5324 make_cleanup (free, arg);
5325 if (toklen == 0)
5326 strcpy (arg, "__gnat_raise_nodefer_with_msg");
5327 else if (STREQN (tok, "unhandled", toklen))
5328 {
5329 *break_on_exceptionp = 2;
5330 strcpy (arg, "__gnat_unhandled_exception");
5331 }
5332 else
5333 {
5334 sprintf (arg, "__gnat_raise_nodefer_with_msg if "
5335 "long_integer(e) = long_integer(&%.*s)",
5336 toklen, tok);
5337 }
5338 }
5339 else if (current_language->la_language == language_ada
5340 && STREQN (arg, "assert", 6) &&
5341 (arg[6] == ' ' || arg[6] == '\t' || arg[6] == '\0'))
5342 {
5343 char *tok = arg + 6;
5344
5345 *break_on_exceptionp = 3;
5346
5347 arg = (char*)
5348 xmalloc (sizeof ("system__assertions__raise_assert_failure")
5349 + strlen (tok) + 1);
5350 make_cleanup (free, arg);
5351 sprintf (arg, "system__assertions__raise_assert_failure%s", tok);
5352 }
5353 */
5354 return arg;
5355}
5356
5357\f
5358 /* Field Access */
5359
5360/* True if field number FIELD_NUM in struct or union type TYPE is supposed
5361 to be invisible to users. */
5362
5363int
5364ada_is_ignored_field (type, field_num)
5365 struct type *type;
5366 int field_num;
5367{
5368 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5369 return 1;
5370 else
5371 {
5372 const char* name = TYPE_FIELD_NAME (type, field_num);
5373 return (name == NULL
5374 || (name[0] == '_' && ! STREQN (name, "_parent", 7)));
5375 }
5376}
5377
5378/* True iff structure type TYPE has a tag field. */
5379
5380int
5381ada_is_tagged_type (type)
5382 struct type *type;
5383{
5384 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5385 return 0;
5386
5387 return (ada_lookup_struct_elt_type (type, "_tag", 1, NULL) != NULL);
5388}
5389
5390/* The type of the tag on VAL. */
5391
5392struct type*
5393ada_tag_type (val)
5394 struct value* val;
5395{
5396 return ada_lookup_struct_elt_type (VALUE_TYPE (val), "_tag", 0, NULL);
5397}
5398
5399/* The value of the tag on VAL. */
5400
5401struct value*
5402ada_value_tag (val)
5403 struct value* val;
5404{
5405 return ada_value_struct_elt (val, "_tag", "record");
5406}
5407
5408/* The parent type of TYPE, or NULL if none. */
5409
5410struct type*
5411ada_parent_type (type)
5412 struct type *type;
5413{
5414 int i;
5415
5416 CHECK_TYPEDEF (type);
5417
5418 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5419 return NULL;
5420
5421 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5422 if (ada_is_parent_field (type, i))
5423 return check_typedef (TYPE_FIELD_TYPE (type, i));
5424
5425 return NULL;
5426}
5427
5428/* True iff field number FIELD_NUM of structure type TYPE contains the
5429 parent-type (inherited) fields of a derived type. Assumes TYPE is
5430 a structure type with at least FIELD_NUM+1 fields. */
5431
5432int
5433ada_is_parent_field (type, field_num)
5434 struct type *type;
5435 int field_num;
5436{
5437 const char* name = TYPE_FIELD_NAME (check_typedef (type), field_num);
5438 return (name != NULL &&
5439 (STREQN (name, "PARENT", 6) || STREQN (name, "_parent", 7)));
5440}
5441
5442/* True iff field number FIELD_NUM of structure type TYPE is a
5443 transparent wrapper field (which should be silently traversed when doing
5444 field selection and flattened when printing). Assumes TYPE is a
5445 structure type with at least FIELD_NUM+1 fields. Such fields are always
5446 structures. */
5447
5448int
5449ada_is_wrapper_field (type, field_num)
5450 struct type *type;
5451 int field_num;
5452{
5453 const char* name = TYPE_FIELD_NAME (type, field_num);
5454 return (name != NULL
5455 && (STREQN (name, "PARENT", 6) || STREQ (name, "REP")
5456 || STREQN (name, "_parent", 7)
5457 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5458}
5459
5460/* True iff field number FIELD_NUM of structure or union type TYPE
5461 is a variant wrapper. Assumes TYPE is a structure type with at least
5462 FIELD_NUM+1 fields. */
5463
5464int
5465ada_is_variant_part (type, field_num)
5466 struct type *type;
5467 int field_num;
5468{
5469 struct type* field_type = TYPE_FIELD_TYPE (type, field_num);
5470 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5471 || (is_dynamic_field (type, field_num)
5472 && TYPE_CODE (TYPE_TARGET_TYPE (field_type)) == TYPE_CODE_UNION));
5473}
5474
5475/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5476 whose discriminants are contained in the record type OUTER_TYPE,
5477 returns the type of the controlling discriminant for the variant. */
5478
5479struct type*
5480ada_variant_discrim_type (var_type, outer_type)
5481 struct type *var_type;
5482 struct type *outer_type;
5483{
5484 char* name = ada_variant_discrim_name (var_type);
5485 struct type *type =
5486 ada_lookup_struct_elt_type (outer_type, name, 1, NULL);
5487 if (type == NULL)
5488 return builtin_type_int;
5489 else
5490 return type;
5491}
5492
5493/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5494 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5495 represents a 'when others' clause; otherwise 0. */
5496
5497int
5498ada_is_others_clause (type, field_num)
5499 struct type *type;
5500 int field_num;
5501{
5502 const char* name = TYPE_FIELD_NAME (type, field_num);
5503 return (name != NULL && name[0] == 'O');
5504}
5505
5506/* Assuming that TYPE0 is the type of the variant part of a record,
5507 returns the name of the discriminant controlling the variant. The
5508 value is valid until the next call to ada_variant_discrim_name. */
5509
5510char *
5511ada_variant_discrim_name (type0)
5512 struct type *type0;
5513{
5514 static char* result = NULL;
5515 static size_t result_len = 0;
5516 struct type* type;
5517 const char* name;
5518 const char* discrim_end;
5519 const char* discrim_start;
5520
5521 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5522 type = TYPE_TARGET_TYPE (type0);
5523 else
5524 type = type0;
5525
5526 name = ada_type_name (type);
5527
5528 if (name == NULL || name[0] == '\000')
5529 return "";
5530
5531 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5532 discrim_end -= 1)
5533 {
5534 if (STREQN (discrim_end, "___XVN", 6))
5535 break;
5536 }
5537 if (discrim_end == name)
5538 return "";
5539
5540 for (discrim_start = discrim_end; discrim_start != name+3;
5541 discrim_start -= 1)
5542 {
5543 if (discrim_start == name+1)
5544 return "";
5545 if ((discrim_start > name+3 && STREQN (discrim_start-3, "___", 3))
5546 || discrim_start[-1] == '.')
5547 break;
5548 }
5549
5550 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5551 strncpy (result, discrim_start, discrim_end - discrim_start);
5552 result[discrim_end-discrim_start] = '\0';
5553 return result;
5554}
5555
5556/* Scan STR for a subtype-encoded number, beginning at position K. Put the
5557 position of the character just past the number scanned in *NEW_K,
5558 if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL. Return 1
5559 if there was a valid number at the given position, and 0 otherwise. A
5560 "subtype-encoded" number consists of the absolute value in decimal,
5561 followed by the letter 'm' to indicate a negative number. Assumes 0m
5562 does not occur. */
5563
5564int
5565ada_scan_number (str, k, R, new_k)
5566 const char str[];
5567 int k;
5568 LONGEST *R;
5569 int *new_k;
5570{
5571 ULONGEST RU;
5572
5573 if (! isdigit (str[k]))
5574 return 0;
5575
5576 /* Do it the hard way so as not to make any assumption about
5577 the relationship of unsigned long (%lu scan format code) and
5578 LONGEST. */
5579 RU = 0;
5580 while (isdigit (str[k]))
5581 {
5582 RU = RU*10 + (str[k] - '0');
5583 k += 1;
5584 }
5585
5586 if (str[k] == 'm')
5587 {
5588 if (R != NULL)
5589 *R = (- (LONGEST) (RU-1)) - 1;
5590 k += 1;
5591 }
5592 else if (R != NULL)
5593 *R = (LONGEST) RU;
5594
5595 /* NOTE on the above: Technically, C does not say what the results of
5596 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5597 number representable as a LONGEST (although either would probably work
5598 in most implementations). When RU>0, the locution in the then branch
5599 above is always equivalent to the negative of RU. */
5600
5601 if (new_k != NULL)
5602 *new_k = k;
5603 return 1;
5604}
5605
5606/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5607 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5608 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
5609
5610int
5611ada_in_variant (val, type, field_num)
5612 LONGEST val;
5613 struct type *type;
5614 int field_num;
5615{
5616 const char* name = TYPE_FIELD_NAME (type, field_num);
5617 int p;
5618
5619 p = 0;
5620 while (1)
5621 {
5622 switch (name[p])
5623 {
5624 case '\0':
5625 return 0;
5626 case 'S':
5627 {
5628 LONGEST W;
5629 if (! ada_scan_number (name, p + 1, &W, &p))
5630 return 0;
5631 if (val == W)
5632 return 1;
5633 break;
5634 }
5635 case 'R':
5636 {
5637 LONGEST L, U;
5638 if (! ada_scan_number (name, p + 1, &L, &p)
5639 || name[p] != 'T'
5640 || ! ada_scan_number (name, p + 1, &U, &p))
5641 return 0;
5642 if (val >= L && val <= U)
5643 return 1;
5644 break;
5645 }
5646 case 'O':
5647 return 1;
5648 default:
5649 return 0;
5650 }
5651 }
5652}
5653
5654/* Given a value ARG1 (offset by OFFSET bytes)
5655 of a struct or union type ARG_TYPE,
5656 extract and return the value of one of its (non-static) fields.
5657 FIELDNO says which field. Differs from value_primitive_field only
5658 in that it can handle packed values of arbitrary type. */
5659
5660struct value*
5661ada_value_primitive_field (arg1, offset, fieldno, arg_type)
5662 struct value* arg1;
5663 int offset;
5664 int fieldno;
5665 struct type *arg_type;
5666{
5667 struct value* v;
5668 struct type *type;
5669
5670 CHECK_TYPEDEF (arg_type);
5671 type = TYPE_FIELD_TYPE (arg_type, fieldno);
5672
5673 /* Handle packed fields */
5674
5675 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5676 {
5677 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5678 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5679
5680 return ada_value_primitive_packed_val (arg1, VALUE_CONTENTS (arg1),
5681 offset + bit_pos/8, bit_pos % 8,
5682 bit_size, type);
5683 }
5684 else
5685 return value_primitive_field (arg1, offset, fieldno, arg_type);
5686}
5687
5688
5689/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
5690 and search in it assuming it has (class) type TYPE.
5691 If found, return value, else return NULL.
5692
5693 Searches recursively through wrapper fields (e.g., '_parent'). */
5694
5695struct value*
5696ada_search_struct_field (name, arg, offset, type)
5697 char *name;
5698 struct value* arg;
5699 int offset;
5700 struct type *type;
5701{
5702 int i;
5703 CHECK_TYPEDEF (type);
5704
5705 for (i = TYPE_NFIELDS (type)-1; i >= 0; i -= 1)
5706 {
5707 char *t_field_name = TYPE_FIELD_NAME (type, i);
5708
5709 if (t_field_name == NULL)
5710 continue;
5711
5712 else if (field_name_match (t_field_name, name))
5713 return ada_value_primitive_field (arg, offset, i, type);
5714
5715 else if (ada_is_wrapper_field (type, i))
5716 {
5717 struct value* v =
5718 ada_search_struct_field (name, arg,
5719 offset + TYPE_FIELD_BITPOS (type, i) / 8,
5720 TYPE_FIELD_TYPE (type, i));
5721 if (v != NULL)
5722 return v;
5723 }
5724
5725 else if (ada_is_variant_part (type, i))
5726 {
5727 int j;
5728 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
5729 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
5730
5731 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5732 {
5733 struct value* v =
5734 ada_search_struct_field (name, arg,
5735 var_offset
5736 + TYPE_FIELD_BITPOS (field_type, j)/8,
5737 TYPE_FIELD_TYPE (field_type, j));
5738 if (v != NULL)
5739 return v;
5740 }
5741 }
5742 }
5743 return NULL;
5744}
5745
5746/* Given ARG, a value of type (pointer to a)* structure/union,
5747 extract the component named NAME from the ultimate target structure/union
5748 and return it as a value with its appropriate type.
5749
5750 The routine searches for NAME among all members of the structure itself
5751 and (recursively) among all members of any wrapper members
5752 (e.g., '_parent').
5753
5754 ERR is a name (for use in error messages) that identifies the class
5755 of entity that ARG is supposed to be. */
5756
5757struct value*
5758ada_value_struct_elt (arg, name, err)
5759 struct value* arg;
5760 char *name;
5761 char *err;
5762{
5763 struct type *t;
5764 struct value* v;
5765
5766 arg = ada_coerce_ref (arg);
5767 t = check_typedef (VALUE_TYPE (arg));
5768
5769 /* Follow pointers until we get to a non-pointer. */
5770
5771 while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_CODE (t) == TYPE_CODE_REF)
5772 {
5773 arg = ada_value_ind (arg);
5774 t = check_typedef (VALUE_TYPE (arg));
5775 }
5776
5777 if ( TYPE_CODE (t) != TYPE_CODE_STRUCT
5778 && TYPE_CODE (t) != TYPE_CODE_UNION)
5779 error ("Attempt to extract a component of a value that is not a %s.", err);
5780
5781 v = ada_search_struct_field (name, arg, 0, t);
5782 if (v == NULL)
5783 error ("There is no member named %s.", name);
5784
5785 return v;
5786}
5787
5788/* Given a type TYPE, look up the type of the component of type named NAME.
5789 If DISPP is non-null, add its byte displacement from the beginning of a
5790 structure (pointed to by a value) of type TYPE to *DISPP (does not
5791 work for packed fields).
5792
5793 Matches any field whose name has NAME as a prefix, possibly
5794 followed by "___".
5795
5796 TYPE can be either a struct or union, or a pointer or reference to
5797 a struct or union. If it is a pointer or reference, its target
5798 type is automatically used.
5799
5800 Looks recursively into variant clauses and parent types.
5801
5802 If NOERR is nonzero, return NULL if NAME is not suitably defined. */
5803
5804struct type *
5805ada_lookup_struct_elt_type (type, name, noerr, dispp)
5806 struct type *type;
5807 char *name;
5808 int noerr;
5809 int *dispp;
5810{
5811 int i;
5812
5813 if (name == NULL)
5814 goto BadName;
5815
5816 while (1)
5817 {
5818 CHECK_TYPEDEF (type);
5819 if (TYPE_CODE (type) != TYPE_CODE_PTR
5820 && TYPE_CODE (type) != TYPE_CODE_REF)
5821 break;
5822 type = TYPE_TARGET_TYPE (type);
5823 }
5824
5825 if (TYPE_CODE (type) != TYPE_CODE_STRUCT &&
5826 TYPE_CODE (type) != TYPE_CODE_UNION)
5827 {
5828 target_terminal_ours ();
5829 gdb_flush (gdb_stdout);
5830 fprintf_unfiltered (gdb_stderr, "Type ");
5831 type_print (type, "", gdb_stderr, -1);
5832 error (" is not a structure or union type");
5833 }
5834
5835 type = to_static_fixed_type (type);
5836
5837 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5838 {
5839 char *t_field_name = TYPE_FIELD_NAME (type, i);
5840 struct type *t;
5841 int disp;
5842
5843 if (t_field_name == NULL)
5844 continue;
5845
5846 else if (field_name_match (t_field_name, name))
5847 {
5848 if (dispp != NULL)
5849 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
5850 return check_typedef (TYPE_FIELD_TYPE (type, i));
5851 }
5852
5853 else if (ada_is_wrapper_field (type, i))
5854 {
5855 disp = 0;
5856 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
5857 1, &disp);
5858 if (t != NULL)
5859 {
5860 if (dispp != NULL)
5861 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5862 return t;
5863 }
5864 }
5865
5866 else if (ada_is_variant_part (type, i))
5867 {
5868 int j;
5869 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
5870
5871 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5872 {
5873 disp = 0;
5874 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
5875 name, 1, &disp);
5876 if (t != NULL)
5877 {
5878 if (dispp != NULL)
5879 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5880 return t;
5881 }
5882 }
5883 }
5884
5885 }
5886
5887BadName:
5888 if (! noerr)
5889 {
5890 target_terminal_ours ();
5891 gdb_flush (gdb_stdout);
5892 fprintf_unfiltered (gdb_stderr, "Type ");
5893 type_print (type, "", gdb_stderr, -1);
5894 fprintf_unfiltered (gdb_stderr, " has no component named ");
5895 error ("%s", name == NULL ? "<null>" : name);
5896 }
5897
5898 return NULL;
5899}
5900
5901/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
5902 within a value of type OUTER_TYPE that is stored in GDB at
5903 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
5904 numbering from 0) is applicable. Returns -1 if none are. */
5905
5906int
5907ada_which_variant_applies (var_type, outer_type, outer_valaddr)
5908 struct type *var_type;
5909 struct type *outer_type;
5910 char* outer_valaddr;
5911{
5912 int others_clause;
5913 int i;
5914 int disp;
5915 struct type* discrim_type;
5916 char* discrim_name = ada_variant_discrim_name (var_type);
5917 LONGEST discrim_val;
5918
5919 disp = 0;
5920 discrim_type =
5921 ada_lookup_struct_elt_type (outer_type, discrim_name, 1, &disp);
5922 if (discrim_type == NULL)
5923 return -1;
5924 discrim_val = unpack_long (discrim_type, outer_valaddr + disp);
5925
5926 others_clause = -1;
5927 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
5928 {
5929 if (ada_is_others_clause (var_type, i))
5930 others_clause = i;
5931 else if (ada_in_variant (discrim_val, var_type, i))
5932 return i;
5933 }
5934
5935 return others_clause;
5936}
5937
5938
5939\f
5940 /* Dynamic-Sized Records */
5941
5942/* Strategy: The type ostensibly attached to a value with dynamic size
5943 (i.e., a size that is not statically recorded in the debugging
5944 data) does not accurately reflect the size or layout of the value.
5945 Our strategy is to convert these values to values with accurate,
5946 conventional types that are constructed on the fly. */
5947
5948/* There is a subtle and tricky problem here. In general, we cannot
5949 determine the size of dynamic records without its data. However,
5950 the 'struct value' data structure, which GDB uses to represent
5951 quantities in the inferior process (the target), requires the size
5952 of the type at the time of its allocation in order to reserve space
5953 for GDB's internal copy of the data. That's why the
5954 'to_fixed_xxx_type' routines take (target) addresses as parameters,
5955 rather than struct value*s.
5956
5957 However, GDB's internal history variables ($1, $2, etc.) are
5958 struct value*s containing internal copies of the data that are not, in
5959 general, the same as the data at their corresponding addresses in
5960 the target. Fortunately, the types we give to these values are all
5961 conventional, fixed-size types (as per the strategy described
5962 above), so that we don't usually have to perform the
5963 'to_fixed_xxx_type' conversions to look at their values.
5964 Unfortunately, there is one exception: if one of the internal
5965 history variables is an array whose elements are unconstrained
5966 records, then we will need to create distinct fixed types for each
5967 element selected. */
5968
5969/* The upshot of all of this is that many routines take a (type, host
5970 address, target address) triple as arguments to represent a value.
5971 The host address, if non-null, is supposed to contain an internal
5972 copy of the relevant data; otherwise, the program is to consult the
5973 target at the target address. */
5974
5975/* Assuming that VAL0 represents a pointer value, the result of
5976 dereferencing it. Differs from value_ind in its treatment of
5977 dynamic-sized types. */
5978
5979struct value*
5980ada_value_ind (val0)
5981 struct value* val0;
5982{
5983 struct value* val = unwrap_value (value_ind (val0));
5984 return ada_to_fixed_value (VALUE_TYPE (val), 0,
5985 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
5986 val);
5987}
5988
5989/* The value resulting from dereferencing any "reference to"
5990 * qualifiers on VAL0. */
5991static struct value*
5992ada_coerce_ref (val0)
5993 struct value* val0;
5994{
5995 if (TYPE_CODE (VALUE_TYPE (val0)) == TYPE_CODE_REF) {
5996 struct value* val = val0;
5997 COERCE_REF (val);
5998 val = unwrap_value (val);
5999 return ada_to_fixed_value (VALUE_TYPE (val), 0,
6000 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
6001 val);
6002 } else
6003 return val0;
6004}
6005
6006/* Return OFF rounded upward if necessary to a multiple of
6007 ALIGNMENT (a power of 2). */
6008
6009static unsigned int
6010align_value (off, alignment)
6011 unsigned int off;
6012 unsigned int alignment;
6013{
6014 return (off + alignment - 1) & ~(alignment - 1);
6015}
6016
6017/* Return the additional bit offset required by field F of template
6018 type TYPE. */
6019
6020static unsigned int
6021field_offset (type, f)
6022 struct type *type;
6023 int f;
6024{
6025 int n = TYPE_FIELD_BITPOS (type, f);
6026 /* Kludge (temporary?) to fix problem with dwarf output. */
6027 if (n < 0)
6028 return (unsigned int) n & 0xffff;
6029 else
6030 return n;
6031}
6032
6033
6034/* Return the bit alignment required for field #F of template type TYPE. */
6035
6036static unsigned int
6037field_alignment (type, f)
6038 struct type *type;
6039 int f;
6040{
6041 const char* name = TYPE_FIELD_NAME (type, f);
6042 int len = (name == NULL) ? 0 : strlen (name);
6043 int align_offset;
6044
6045 if (len < 8 || ! isdigit (name[len-1]))
6046 return TARGET_CHAR_BIT;
6047
6048 if (isdigit (name[len-2]))
6049 align_offset = len - 2;
6050 else
6051 align_offset = len - 1;
6052
6053 if (align_offset < 7 || ! STREQN ("___XV", name+align_offset-6, 5))
6054 return TARGET_CHAR_BIT;
6055
6056 return atoi (name+align_offset) * TARGET_CHAR_BIT;
6057}
6058
6059/* Find a type named NAME. Ignores ambiguity. */
6060struct type*
6061ada_find_any_type (name)
6062 const char *name;
6063{
6064 struct symbol* sym;
6065
6066 sym = standard_lookup (name, VAR_NAMESPACE);
6067 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6068 return SYMBOL_TYPE (sym);
6069
6070 sym = standard_lookup (name, STRUCT_NAMESPACE);
6071 if (sym != NULL)
6072 return SYMBOL_TYPE (sym);
6073
6074 return NULL;
6075}
6076
6077/* Because of GNAT encoding conventions, several GDB symbols may match a
6078 given type name. If the type denoted by TYPE0 is to be preferred to
6079 that of TYPE1 for purposes of type printing, return non-zero;
6080 otherwise return 0. */
6081int
6082ada_prefer_type (type0, type1)
6083 struct type* type0;
6084 struct type* type1;
6085{
6086 if (type1 == NULL)
6087 return 1;
6088 else if (type0 == NULL)
6089 return 0;
6090 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6091 return 1;
6092 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6093 return 0;
6094 else if (ada_is_packed_array_type (type0))
6095 return 1;
6096 else if (ada_is_array_descriptor (type0) && ! ada_is_array_descriptor (type1))
6097 return 1;
6098 else if (ada_renaming_type (type0) != NULL
6099 && ada_renaming_type (type1) == NULL)
6100 return 1;
6101 return 0;
6102}
6103
6104/* The name of TYPE, which is either its TYPE_NAME, or, if that is
6105 null, its TYPE_TAG_NAME. Null if TYPE is null. */
6106char*
6107ada_type_name (type)
6108 struct type* type;
6109{
6110 if (type == NULL)
6111 return NULL;
6112 else if (TYPE_NAME (type) != NULL)
6113 return TYPE_NAME (type);
6114 else
6115 return TYPE_TAG_NAME (type);
6116}
6117
6118/* Find a parallel type to TYPE whose name is formed by appending
6119 SUFFIX to the name of TYPE. */
6120
6121struct type*
6122ada_find_parallel_type (type, suffix)
6123 struct type *type;
6124 const char *suffix;
6125{
6126 static char* name;
6127 static size_t name_len = 0;
6128 struct symbol** syms;
6129 struct block** blocks;
6130 int nsyms;
6131 int len;
6132 char* typename = ada_type_name (type);
6133
6134 if (typename == NULL)
6135 return NULL;
6136
6137 len = strlen (typename);
6138
6139 GROW_VECT (name, name_len, len+strlen (suffix)+1);
6140
6141 strcpy (name, typename);
6142 strcpy (name + len, suffix);
6143
6144 return ada_find_any_type (name);
6145}
6146
6147
6148/* If TYPE is a variable-size record type, return the corresponding template
6149 type describing its fields. Otherwise, return NULL. */
6150
6151static struct type*
6152dynamic_template_type (type)
6153 struct type* type;
6154{
6155 CHECK_TYPEDEF (type);
6156
6157 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6158 || ada_type_name (type) == NULL)
6159 return NULL;
6160 else
6161 {
6162 int len = strlen (ada_type_name (type));
6163 if (len > 6 && STREQ (ada_type_name (type) + len - 6, "___XVE"))
6164 return type;
6165 else
6166 return ada_find_parallel_type (type, "___XVE");
6167 }
6168}
6169
6170/* Assuming that TEMPL_TYPE is a union or struct type, returns
6171 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
6172
6173static int
6174is_dynamic_field (templ_type, field_num)
6175 struct type* templ_type;
6176 int field_num;
6177{
6178 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6179 return name != NULL
6180 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6181 && strstr (name, "___XVL") != NULL;
6182}
6183
6184/* Assuming that TYPE is a struct type, returns non-zero iff TYPE
6185 contains a variant part. */
6186
6187static int
6188contains_variant_part (type)
6189 struct type* type;
6190{
6191 int f;
6192
6193 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6194 || TYPE_NFIELDS (type) <= 0)
6195 return 0;
6196 return ada_is_variant_part (type, TYPE_NFIELDS (type) - 1);
6197}
6198
6199/* A record type with no fields, . */
6200static struct type*
6201empty_record (objfile)
6202 struct objfile* objfile;
6203{
6204 struct type* type = alloc_type (objfile);
6205 TYPE_CODE (type) = TYPE_CODE_STRUCT;
6206 TYPE_NFIELDS (type) = 0;
6207 TYPE_FIELDS (type) = NULL;
6208 TYPE_NAME (type) = "<empty>";
6209 TYPE_TAG_NAME (type) = NULL;
6210 TYPE_FLAGS (type) = 0;
6211 TYPE_LENGTH (type) = 0;
6212 return type;
6213}
6214
6215/* An ordinary record type (with fixed-length fields) that describes
6216 the value of type TYPE at VALADDR or ADDRESS (see comments at
6217 the beginning of this section) VAL according to GNAT conventions.
6218 DVAL0 should describe the (portion of a) record that contains any
6219 necessary discriminants. It should be NULL if VALUE_TYPE (VAL) is
6220 an outer-level type (i.e., as opposed to a branch of a variant.) A
6221 variant field (unless unchecked) is replaced by a particular branch
6222 of the variant. */
6223/* NOTE: Limitations: For now, we assume that dynamic fields and
6224 * variants occupy whole numbers of bytes. However, they need not be
6225 * byte-aligned. */
6226
6227static struct type*
6228template_to_fixed_record_type (type, valaddr, address, dval0)
6229 struct type* type;
6230 char* valaddr;
6231 CORE_ADDR address;
6232 struct value* dval0;
6233
6234{
6235 struct value* mark = value_mark();
6236 struct value* dval;
6237 struct type* rtype;
6238 int nfields, bit_len;
6239 long off;
6240 int f;
6241
6242 nfields = TYPE_NFIELDS (type);
6243 rtype = alloc_type (TYPE_OBJFILE (type));
6244 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6245 INIT_CPLUS_SPECIFIC (rtype);
6246 TYPE_NFIELDS (rtype) = nfields;
6247 TYPE_FIELDS (rtype) = (struct field*)
6248 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6249 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6250 TYPE_NAME (rtype) = ada_type_name (type);
6251 TYPE_TAG_NAME (rtype) = NULL;
6252 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in
6253 gdbtypes.h */
6254 /* TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;*/
6255
6256 off = 0; bit_len = 0;
6257 for (f = 0; f < nfields; f += 1)
6258 {
6259 int fld_bit_len, bit_incr;
6260 off =
6261 align_value (off, field_alignment (type, f))+TYPE_FIELD_BITPOS (type,f);
6262 /* NOTE: used to use field_offset above, but that causes
6263 * problems with really negative bit positions. So, let's
6264 * rediscover why we needed field_offset and fix it properly. */
6265 TYPE_FIELD_BITPOS (rtype, f) = off;
6266 TYPE_FIELD_BITSIZE (rtype, f) = 0;
6267
6268 if (ada_is_variant_part (type, f))
6269 {
6270 struct type *branch_type;
6271
6272 if (dval0 == NULL)
6273 dval =
6274 value_from_contents_and_address (rtype, valaddr, address);
6275 else
6276 dval = dval0;
6277
6278 branch_type =
6279 to_fixed_variant_branch_type
6280 (TYPE_FIELD_TYPE (type, f),
6281 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6282 cond_offset_target (address, off / TARGET_CHAR_BIT),
6283 dval);
6284 if (branch_type == NULL)
6285 TYPE_NFIELDS (rtype) -= 1;
6286 else
6287 {
6288 TYPE_FIELD_TYPE (rtype, f) = branch_type;
6289 TYPE_FIELD_NAME (rtype, f) = "S";
6290 }
6291 bit_incr = 0;
6292 fld_bit_len =
6293 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6294 }
6295 else if (is_dynamic_field (type, f))
6296 {
6297 if (dval0 == NULL)
6298 dval =
6299 value_from_contents_and_address (rtype, valaddr, address);
6300 else
6301 dval = dval0;
6302
6303 TYPE_FIELD_TYPE (rtype, f) =
6304 ada_to_fixed_type
6305 (ada_get_base_type
6306 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
6307 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6308 cond_offset_target (address, off / TARGET_CHAR_BIT),
6309 dval);
6310 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6311 bit_incr = fld_bit_len =
6312 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6313 }
6314 else
6315 {
6316 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6317 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6318 if (TYPE_FIELD_BITSIZE (type, f) > 0)
6319 bit_incr = fld_bit_len =
6320 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6321 else
6322 bit_incr = fld_bit_len =
6323 TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6324 }
6325 if (off + fld_bit_len > bit_len)
6326 bit_len = off + fld_bit_len;
6327 off += bit_incr;
6328 TYPE_LENGTH (rtype) = bit_len / TARGET_CHAR_BIT;
6329 }
6330 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype), TYPE_LENGTH (type));
6331
6332 value_free_to_mark (mark);
6333 if (TYPE_LENGTH (rtype) > varsize_limit)
6334 error ("record type with dynamic size is larger than varsize-limit");
6335 return rtype;
6336}
6337
6338/* As for template_to_fixed_record_type, but uses no run-time values.
6339 As a result, this type can only be approximate, but that's OK,
6340 since it is used only for type determinations. Works on both
6341 structs and unions.
6342 Representation note: to save space, we memoize the result of this
6343 function in the TYPE_TARGET_TYPE of the template type. */
6344
6345static struct type*
6346template_to_static_fixed_type (templ_type)
6347 struct type* templ_type;
6348{
6349 struct type *type;
6350 int nfields;
6351 int f;
6352
6353 if (TYPE_TARGET_TYPE (templ_type) != NULL)
6354 return TYPE_TARGET_TYPE (templ_type);
6355
6356 nfields = TYPE_NFIELDS (templ_type);
6357 TYPE_TARGET_TYPE (templ_type) = type = alloc_type (TYPE_OBJFILE (templ_type));
6358 TYPE_CODE (type) = TYPE_CODE (templ_type);
6359 INIT_CPLUS_SPECIFIC (type);
6360 TYPE_NFIELDS (type) = nfields;
6361 TYPE_FIELDS (type) = (struct field*)
6362 TYPE_ALLOC (type, nfields * sizeof (struct field));
6363 memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
6364 TYPE_NAME (type) = ada_type_name (templ_type);
6365 TYPE_TAG_NAME (type) = NULL;
6366 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6367 /* TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE; */
6368 TYPE_LENGTH (type) = 0;
6369
6370 for (f = 0; f < nfields; f += 1)
6371 {
6372 TYPE_FIELD_BITPOS (type, f) = 0;
6373 TYPE_FIELD_BITSIZE (type, f) = 0;
6374
6375 if (is_dynamic_field (templ_type, f))
6376 {
6377 TYPE_FIELD_TYPE (type, f) =
6378 to_static_fixed_type (TYPE_TARGET_TYPE
6379 (TYPE_FIELD_TYPE (templ_type, f)));
6380 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (templ_type, f);
6381 }
6382 else
6383 {
6384 TYPE_FIELD_TYPE (type, f) =
6385 check_typedef (TYPE_FIELD_TYPE (templ_type, f));
6386 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (templ_type, f);
6387 }
6388 }
6389
6390 return type;
6391}
6392
6393/* A revision of TYPE0 -- a non-dynamic-sized record with a variant
6394 part -- in which the variant part is replaced with the appropriate
6395 branch. */
6396static struct type*
6397to_record_with_fixed_variant_part (type, valaddr, address, dval)
6398 struct type* type;
6399 char* valaddr;
6400 CORE_ADDR address;
6401 struct value* dval;
6402{
6403 struct value* mark = value_mark();
6404 struct type* rtype;
6405 struct type *branch_type;
6406 int nfields = TYPE_NFIELDS (type);
6407
6408 if (dval == NULL)
6409 return type;
6410
6411 rtype = alloc_type (TYPE_OBJFILE (type));
6412 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6413 INIT_CPLUS_SPECIFIC (type);
6414 TYPE_NFIELDS (rtype) = TYPE_NFIELDS (type);
6415 TYPE_FIELDS (rtype) =
6416 (struct field*) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6417 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
6418 sizeof (struct field) * nfields);
6419 TYPE_NAME (rtype) = ada_type_name (type);
6420 TYPE_TAG_NAME (rtype) = NULL;
6421 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6422 /* TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE; */
6423 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
6424
6425 branch_type =
6426 to_fixed_variant_branch_type
6427 (TYPE_FIELD_TYPE (type, nfields - 1),
6428 cond_offset_host (valaddr,
6429 TYPE_FIELD_BITPOS (type, nfields-1) / TARGET_CHAR_BIT),
6430 cond_offset_target (address,
6431 TYPE_FIELD_BITPOS (type, nfields-1) / TARGET_CHAR_BIT),
6432 dval);
6433 if (branch_type == NULL)
6434 {
6435 TYPE_NFIELDS (rtype) -= 1;
6436 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, nfields - 1));
6437 }
6438 else
6439 {
6440 TYPE_FIELD_TYPE (rtype, nfields-1) = branch_type;
6441 TYPE_FIELD_NAME (rtype, nfields-1) = "S";
6442 TYPE_FIELD_BITSIZE (rtype, nfields-1) = 0;
6443 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
6444 - TYPE_LENGTH (TYPE_FIELD_TYPE (type, nfields - 1));
6445 }
6446
6447 return rtype;
6448}
6449
6450/* An ordinary record type (with fixed-length fields) that describes
6451 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
6452 beginning of this section]. Any necessary discriminants' values
6453 should be in DVAL, a record value; it should be NULL if the object
6454 at ADDR itself contains any necessary discriminant values. A
6455 variant field (unless unchecked) is replaced by a particular branch
6456 of the variant. */
6457
6458static struct type*
6459to_fixed_record_type (type0, valaddr, address, dval)
6460 struct type* type0;
6461 char* valaddr;
6462 CORE_ADDR address;
6463 struct value* dval;
6464{
6465 struct type* templ_type;
6466
6467 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6468 /* if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6469 return type0;
6470 */
6471 templ_type = dynamic_template_type (type0);
6472
6473 if (templ_type != NULL)
6474 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
6475 else if (contains_variant_part (type0))
6476 return to_record_with_fixed_variant_part (type0, valaddr, address, dval);
6477 else
6478 {
6479 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6480 /* TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE; */
6481 return type0;
6482 }
6483
6484}
6485
6486/* An ordinary record type (with fixed-length fields) that describes
6487 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
6488 union type. Any necessary discriminants' values should be in DVAL,
6489 a record value. That is, this routine selects the appropriate
6490 branch of the union at ADDR according to the discriminant value
6491 indicated in the union's type name. */
6492
6493static struct type*
6494to_fixed_variant_branch_type (var_type0, valaddr, address, dval)
6495 struct type* var_type0;
6496 char* valaddr;
6497 CORE_ADDR address;
6498 struct value* dval;
6499{
6500 int which;
6501 struct type* templ_type;
6502 struct type* var_type;
6503
6504 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
6505 var_type = TYPE_TARGET_TYPE (var_type0);
6506 else
6507 var_type = var_type0;
6508
6509 templ_type = ada_find_parallel_type (var_type, "___XVU");
6510
6511 if (templ_type != NULL)
6512 var_type = templ_type;
6513
6514 which =
6515 ada_which_variant_applies (var_type,
6516 VALUE_TYPE (dval), VALUE_CONTENTS (dval));
6517
6518 if (which < 0)
6519 return empty_record (TYPE_OBJFILE (var_type));
6520 else if (is_dynamic_field (var_type, which))
6521 return
6522 to_fixed_record_type
6523 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
6524 valaddr, address, dval);
6525 else if (contains_variant_part (TYPE_FIELD_TYPE (var_type, which)))
6526 return
6527 to_fixed_record_type
6528 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
6529 else
6530 return TYPE_FIELD_TYPE (var_type, which);
6531}
6532
6533/* Assuming that TYPE0 is an array type describing the type of a value
6534 at ADDR, and that DVAL describes a record containing any
6535 discriminants used in TYPE0, returns a type for the value that
6536 contains no dynamic components (that is, no components whose sizes
6537 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
6538 true, gives an error message if the resulting type's size is over
6539 varsize_limit.
6540*/
6541
6542static struct type*
6543to_fixed_array_type (type0, dval, ignore_too_big)
6544 struct type* type0;
6545 struct value* dval;
6546 int ignore_too_big;
6547{
6548 struct type* index_type_desc;
6549 struct type* result;
6550
6551 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6552 /* if (ada_is_packed_array_type (type0) /* revisit? */ /*
6553 || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
6554 return type0;*/
6555
6556 index_type_desc = ada_find_parallel_type (type0, "___XA");
6557 if (index_type_desc == NULL)
6558 {
6559 struct type *elt_type0 = check_typedef (TYPE_TARGET_TYPE (type0));
6560 /* NOTE: elt_type---the fixed version of elt_type0---should never
6561 * depend on the contents of the array in properly constructed
6562 * debugging data. */
6563 struct type *elt_type =
6564 ada_to_fixed_type (elt_type0, 0, 0, dval);
6565
6566 if (elt_type0 == elt_type)
6567 result = type0;
6568 else
6569 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6570 elt_type, TYPE_INDEX_TYPE (type0));
6571 }
6572 else
6573 {
6574 int i;
6575 struct type *elt_type0;
6576
6577 elt_type0 = type0;
6578 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
6579 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
6580
6581 /* NOTE: result---the fixed version of elt_type0---should never
6582 * depend on the contents of the array in properly constructed
6583 * debugging data. */
6584 result =
6585 ada_to_fixed_type (check_typedef (elt_type0), 0, 0, dval);
6586 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
6587 {
6588 struct type *range_type =
6589 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
6590 dval, TYPE_OBJFILE (type0));
6591 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6592 result, range_type);
6593 }
6594 if (! ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
6595 error ("array type with dynamic size is larger than varsize-limit");
6596 }
6597
6598/* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6599/* TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE; */
6600 return result;
6601}
6602
6603
6604/* A standard type (containing no dynamically sized components)
6605 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
6606 DVAL describes a record containing any discriminants used in TYPE0,
6607 and may be NULL if there are none. */
6608
6609struct type*
6610ada_to_fixed_type (type, valaddr, address, dval)
6611 struct type* type;
6612 char* valaddr;
6613 CORE_ADDR address;
6614 struct value* dval;
6615{
6616 CHECK_TYPEDEF (type);
6617 switch (TYPE_CODE (type)) {
6618 default:
6619 return type;
6620 case TYPE_CODE_STRUCT:
6621 return to_fixed_record_type (type, valaddr, address, NULL);
6622 case TYPE_CODE_ARRAY:
6623 return to_fixed_array_type (type, dval, 0);
6624 case TYPE_CODE_UNION:
6625 if (dval == NULL)
6626 return type;
6627 else
6628 return to_fixed_variant_branch_type (type, valaddr, address, dval);
6629 }
6630}
6631
6632/* A standard (static-sized) type corresponding as well as possible to
6633 TYPE0, but based on no runtime data. */
6634
6635static struct type*
6636to_static_fixed_type (type0)
6637 struct type* type0;
6638{
6639 struct type* type;
6640
6641 if (type0 == NULL)
6642 return NULL;
6643
6644 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6645 /* if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6646 return type0;
6647 */
6648 CHECK_TYPEDEF (type0);
6649
6650 switch (TYPE_CODE (type0))
6651 {
6652 default:
6653 return type0;
6654 case TYPE_CODE_STRUCT:
6655 type = dynamic_template_type (type0);
6656 if (type != NULL)
6657 return template_to_static_fixed_type (type);
6658 return type0;
6659 case TYPE_CODE_UNION:
6660 type = ada_find_parallel_type (type0, "___XVU");
6661 if (type != NULL)
6662 return template_to_static_fixed_type (type);
6663 return type0;
6664 }
6665}
6666
6667/* A static approximation of TYPE with all type wrappers removed. */
6668static struct type*
6669static_unwrap_type (type)
6670 struct type* type;
6671{
6672 if (ada_is_aligner_type (type))
6673 {
6674 struct type* type1 = TYPE_FIELD_TYPE (check_typedef (type), 0);
6675 if (ada_type_name (type1) == NULL)
6676 TYPE_NAME (type1) = ada_type_name (type);
6677
6678 return static_unwrap_type (type1);
6679 }
6680 else
6681 {
6682 struct type* raw_real_type = ada_get_base_type (type);
6683 if (raw_real_type == type)
6684 return type;
6685 else
6686 return to_static_fixed_type (raw_real_type);
6687 }
6688}
6689
6690/* In some cases, incomplete and private types require
6691 cross-references that are not resolved as records (for example,
6692 type Foo;
6693 type FooP is access Foo;
6694 V: FooP;
6695 type Foo is array ...;
6696 ). In these cases, since there is no mechanism for producing
6697 cross-references to such types, we instead substitute for FooP a
6698 stub enumeration type that is nowhere resolved, and whose tag is
6699 the name of the actual type. Call these types "non-record stubs". */
6700
6701/* A type equivalent to TYPE that is not a non-record stub, if one
6702 exists, otherwise TYPE. */
6703struct type*
6704ada_completed_type (type)
6705 struct type* type;
6706{
6707 CHECK_TYPEDEF (type);
6708 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
6709 || (TYPE_FLAGS (type) & TYPE_FLAG_STUB) == 0
6710 || TYPE_TAG_NAME (type) == NULL)
6711 return type;
6712 else
6713 {
6714 char* name = TYPE_TAG_NAME (type);
6715 struct type* type1 = ada_find_any_type (name);
6716 return (type1 == NULL) ? type : type1;
6717 }
6718}
6719
6720/* A value representing the data at VALADDR/ADDRESS as described by
6721 type TYPE0, but with a standard (static-sized) type that correctly
6722 describes it. If VAL0 is not NULL and TYPE0 already is a standard
6723 type, then return VAL0 [this feature is simply to avoid redundant
6724 creation of struct values]. */
6725
6726struct value*
6727ada_to_fixed_value (type0, valaddr, address, val0)
6728 struct type* type0;
6729 char* valaddr;
6730 CORE_ADDR address;
6731 struct value* val0;
6732{
6733 struct type* type = ada_to_fixed_type (type0, valaddr, address, NULL);
6734 if (type == type0 && val0 != NULL)
6735 return val0;
6736 else return value_from_contents_and_address (type, valaddr, address);
6737}
6738
6739/* A value representing VAL, but with a standard (static-sized) type
6740 chosen to approximate the real type of VAL as well as possible, but
6741 without consulting any runtime values. For Ada dynamic-sized
6742 types, therefore, the type of the result is likely to be inaccurate. */
6743
6744struct value*
6745ada_to_static_fixed_value (val)
6746 struct value* val;
6747{
6748 struct type *type =
6749 to_static_fixed_type (static_unwrap_type (VALUE_TYPE (val)));
6750 if (type == VALUE_TYPE (val))
6751 return val;
6752 else
6753 return coerce_unspec_val_to_type (val, 0, type);
6754}
6755
6756
6757\f
6758
6759
6760/* Attributes */
6761
6762/* Table mapping attribute numbers to names */
6763/* NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h */
6764
6765static const char* attribute_names[] = {
6766 "<?>",
6767
6768 "first",
6769 "last",
6770 "length",
6771 "image",
6772 "img",
6773 "max",
6774 "min",
6775 "pos"
6776 "tag",
6777 "val",
6778
6779 0
6780};
6781
6782const char*
6783ada_attribute_name (n)
6784 int n;
6785{
6786 if (n > 0 && n < (int) ATR_END)
6787 return attribute_names[n];
6788 else
6789 return attribute_names[0];
6790}
6791
6792/* Evaluate the 'POS attribute applied to ARG. */
6793
6794static struct value*
6795value_pos_atr (arg)
6796 struct value* arg;
6797{
6798 struct type *type = VALUE_TYPE (arg);
6799
6800 if (! discrete_type_p (type))
6801 error ("'POS only defined on discrete types");
6802
6803 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6804 {
6805 int i;
6806 LONGEST v = value_as_long (arg);
6807
6808 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6809 {
6810 if (v == TYPE_FIELD_BITPOS (type, i))
6811 return value_from_longest (builtin_type_ada_int, i);
6812 }
6813 error ("enumeration value is invalid: can't find 'POS");
6814 }
6815 else
6816 return value_from_longest (builtin_type_ada_int, value_as_long (arg));
6817}
6818
6819/* Evaluate the TYPE'VAL attribute applied to ARG. */
6820
6821static struct value*
6822value_val_atr (type, arg)
6823 struct type *type;
6824 struct value* arg;
6825{
6826 if (! discrete_type_p (type))
6827 error ("'VAL only defined on discrete types");
6828 if (! integer_type_p (VALUE_TYPE (arg)))
6829 error ("'VAL requires integral argument");
6830
6831 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6832 {
6833 long pos = value_as_long (arg);
6834 if (pos < 0 || pos >= TYPE_NFIELDS (type))
6835 error ("argument to 'VAL out of range");
6836 return
6837 value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
6838 }
6839 else
6840 return value_from_longest (type, value_as_long (arg));
6841}
6842
6843\f
6844 /* Evaluation */
6845
6846/* True if TYPE appears to be an Ada character type.
6847 * [At the moment, this is true only for Character and Wide_Character;
6848 * It is a heuristic test that could stand improvement]. */
6849
6850int
6851ada_is_character_type (type)
6852 struct type* type;
6853{
6854 const char* name = ada_type_name (type);
6855 return
6856 name != NULL
6857 && (TYPE_CODE (type) == TYPE_CODE_CHAR
6858 || TYPE_CODE (type) == TYPE_CODE_INT
6859 || TYPE_CODE (type) == TYPE_CODE_RANGE)
6860 && (STREQ (name, "character") || STREQ (name, "wide_character")
6861 || STREQ (name, "unsigned char"));
6862}
6863
6864/* True if TYPE appears to be an Ada string type. */
6865
6866int
6867ada_is_string_type (type)
6868 struct type *type;
6869{
6870 CHECK_TYPEDEF (type);
6871 if (type != NULL
6872 && TYPE_CODE (type) != TYPE_CODE_PTR
6873 && (ada_is_simple_array (type) || ada_is_array_descriptor (type))
6874 && ada_array_arity (type) == 1)
6875 {
6876 struct type *elttype = ada_array_element_type (type, 1);
6877
6878 return ada_is_character_type (elttype);
6879 }
6880 else
6881 return 0;
6882}
6883
6884
6885/* True if TYPE is a struct type introduced by the compiler to force the
6886 alignment of a value. Such types have a single field with a
6887 distinctive name. */
6888
6889int
6890ada_is_aligner_type (type)
6891 struct type *type;
6892{
6893 CHECK_TYPEDEF (type);
6894 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
6895 && TYPE_NFIELDS (type) == 1
6896 && STREQ (TYPE_FIELD_NAME (type, 0), "F"));
6897}
6898
6899/* If there is an ___XVS-convention type parallel to SUBTYPE, return
6900 the parallel type. */
6901
6902struct type*
6903ada_get_base_type (raw_type)
6904 struct type* raw_type;
6905{
6906 struct type* real_type_namer;
6907 struct type* raw_real_type;
6908 struct type* real_type;
6909
6910 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
6911 return raw_type;
6912
6913 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
6914 if (real_type_namer == NULL
6915 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
6916 || TYPE_NFIELDS (real_type_namer) != 1)
6917 return raw_type;
6918
6919 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
6920 if (raw_real_type == NULL)
6921 return raw_type;
6922 else
6923 return raw_real_type;
6924}
6925
6926/* The type of value designated by TYPE, with all aligners removed. */
6927
6928struct type*
6929ada_aligned_type (type)
6930 struct type* type;
6931{
6932 if (ada_is_aligner_type (type))
6933 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
6934 else
6935 return ada_get_base_type (type);
6936}
6937
6938
6939/* The address of the aligned value in an object at address VALADDR
6940 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
6941
6942char*
6943ada_aligned_value_addr (type, valaddr)
6944 struct type *type;
6945 char *valaddr;
6946{
6947 if (ada_is_aligner_type (type))
6948 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
6949 valaddr +
6950 TYPE_FIELD_BITPOS (type, 0)/TARGET_CHAR_BIT);
6951 else
6952 return valaddr;
6953}
6954
6955/* The printed representation of an enumeration literal with encoded
6956 name NAME. The value is good to the next call of ada_enum_name. */
6957const char*
6958ada_enum_name (name)
6959 const char* name;
6960{
6961 char* tmp;
6962
6963 while (1)
6964 {
6965 if ((tmp = strstr (name, "__")) != NULL)
6966 name = tmp+2;
6967 else if ((tmp = strchr (name, '.')) != NULL)
6968 name = tmp+1;
6969 else
6970 break;
6971 }
6972
6973 if (name[0] == 'Q')
6974 {
6975 static char result[16];
6976 int v;
6977 if (name[1] == 'U' || name[1] == 'W')
6978 {
6979 if (sscanf (name+2, "%x", &v) != 1)
6980 return name;
6981 }
6982 else
6983 return name;
6984
6985 if (isascii (v) && isprint (v))
6986 sprintf (result, "'%c'", v);
6987 else if (name[1] == 'U')
6988 sprintf (result, "[\"%02x\"]", v);
6989 else
6990 sprintf (result, "[\"%04x\"]", v);
6991
6992 return result;
6993 }
6994 else
6995 return name;
6996}
6997
6998static struct value*
6999evaluate_subexp (expect_type, exp, pos, noside)
7000 struct type *expect_type;
7001 struct expression *exp;
7002 int *pos;
7003 enum noside noside;
7004{
7005 return (*exp->language_defn->evaluate_exp) (expect_type, exp, pos, noside);
7006}
7007
7008/* Evaluate the subexpression of EXP starting at *POS as for
7009 evaluate_type, updating *POS to point just past the evaluated
7010 expression. */
7011
7012static struct value*
7013evaluate_subexp_type (exp, pos)
7014 struct expression* exp;
7015 int* pos;
7016{
7017 return (*exp->language_defn->evaluate_exp)
7018 (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
7019}
7020
7021/* If VAL is wrapped in an aligner or subtype wrapper, return the
7022 value it wraps. */
7023
7024static struct value*
7025unwrap_value (val)
7026 struct value* val;
7027{
7028 struct type* type = check_typedef (VALUE_TYPE (val));
7029 if (ada_is_aligner_type (type))
7030 {
7031 struct value* v = value_struct_elt (&val, NULL, "F",
7032 NULL, "internal structure");
7033 struct type* val_type = check_typedef (VALUE_TYPE (v));
7034 if (ada_type_name (val_type) == NULL)
7035 TYPE_NAME (val_type) = ada_type_name (type);
7036
7037 return unwrap_value (v);
7038 }
7039 else
7040 {
7041 struct type* raw_real_type =
7042 ada_completed_type (ada_get_base_type (type));
7043
7044 if (type == raw_real_type)
7045 return val;
7046
7047 return
7048 coerce_unspec_val_to_type
7049 (val, 0, ada_to_fixed_type (raw_real_type, 0,
7050 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
7051 NULL));
7052 }
7053}
7054
7055static struct value*
7056cast_to_fixed (type, arg)
7057 struct type *type;
7058 struct value* arg;
7059{
7060 LONGEST val;
7061
7062 if (type == VALUE_TYPE (arg))
7063 return arg;
7064 else if (ada_is_fixed_point_type (VALUE_TYPE (arg)))
7065 val = ada_float_to_fixed (type,
7066 ada_fixed_to_float (VALUE_TYPE (arg),
7067 value_as_long (arg)));
7068 else
7069 {
7070 DOUBLEST argd =
7071 value_as_double (value_cast (builtin_type_double, value_copy (arg)));
7072 val = ada_float_to_fixed (type, argd);
7073 }
7074
7075 return value_from_longest (type, val);
7076}
7077
7078static struct value*
7079cast_from_fixed_to_double (arg)
7080 struct value* arg;
7081{
7082 DOUBLEST val = ada_fixed_to_float (VALUE_TYPE (arg),
7083 value_as_long (arg));
7084 return value_from_double (builtin_type_double, val);
7085}
7086
7087/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
7088 * return the converted value. */
7089static struct value*
7090coerce_for_assign (type, val)
7091 struct type* type;
7092 struct value* val;
7093{
7094 struct type* type2 = VALUE_TYPE (val);
7095 if (type == type2)
7096 return val;
7097
7098 CHECK_TYPEDEF (type2);
7099 CHECK_TYPEDEF (type);
7100
7101 if (TYPE_CODE (type2) == TYPE_CODE_PTR && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7102 {
7103 val = ada_value_ind (val);
7104 type2 = VALUE_TYPE (val);
7105 }
7106
7107 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
7108 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7109 {
7110 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
7111 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
7112 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
7113 error ("Incompatible types in assignment");
7114 VALUE_TYPE (val) = type;
7115 }
7116 return val;
7117}
7118
7119struct value*
7120ada_evaluate_subexp (expect_type, exp, pos, noside)
7121 struct type *expect_type;
7122 struct expression *exp;
7123 int *pos;
7124 enum noside noside;
7125{
7126 enum exp_opcode op;
7127 enum ada_attribute atr;
7128 int tem, tem2, tem3;
7129 int pc;
7130 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
7131 struct type *type;
7132 int nargs;
7133 struct value* *argvec;
7134
7135 pc = *pos; *pos += 1;
7136 op = exp->elts[pc].opcode;
7137
7138 switch (op)
7139 {
7140 default:
7141 *pos -= 1;
7142 return unwrap_value (evaluate_subexp_standard (expect_type, exp, pos, noside));
7143
7144 case UNOP_CAST:
7145 (*pos) += 2;
7146 type = exp->elts[pc + 1].type;
7147 arg1 = evaluate_subexp (type, exp, pos, noside);
7148 if (noside == EVAL_SKIP)
7149 goto nosideret;
7150 if (type != check_typedef (VALUE_TYPE (arg1)))
7151 {
7152 if (ada_is_fixed_point_type (type))
7153 arg1 = cast_to_fixed (type, arg1);
7154 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7155 arg1 = value_cast (type, cast_from_fixed_to_double (arg1));
7156 else if (VALUE_LVAL (arg1) == lval_memory)
7157 {
7158 /* This is in case of the really obscure (and undocumented,
7159 but apparently expected) case of (Foo) Bar.all, where Bar
7160 is an integer constant and Foo is a dynamic-sized type.
7161 If we don't do this, ARG1 will simply be relabeled with
7162 TYPE. */
7163 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7164 return value_zero (to_static_fixed_type (type), not_lval);
7165 arg1 =
7166 ada_to_fixed_value
7167 (type, 0, VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1), 0);
7168 }
7169 else
7170 arg1 = value_cast (type, arg1);
7171 }
7172 return arg1;
7173
7174 /* FIXME: UNOP_QUAL should be defined in expression.h */
7175 /* case UNOP_QUAL:
7176 (*pos) += 2;
7177 type = exp->elts[pc + 1].type;
7178 return ada_evaluate_subexp (type, exp, pos, noside);
7179 */
7180 case BINOP_ASSIGN:
7181 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7182 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
7183 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
7184 return arg1;
7185 if (binop_user_defined_p (op, arg1, arg2))
7186 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7187 else
7188 {
7189 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7190 arg2 = cast_to_fixed (VALUE_TYPE (arg1), arg2);
7191 else if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7192 error ("Fixed-point values must be assigned to fixed-point variables");
7193 else
7194 arg2 = coerce_for_assign (VALUE_TYPE (arg1), arg2);
7195 return ada_value_assign (arg1, arg2);
7196 }
7197
7198 case BINOP_ADD:
7199 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7200 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7201 if (noside == EVAL_SKIP)
7202 goto nosideret;
7203 if (binop_user_defined_p (op, arg1, arg2))
7204 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7205 else
7206 {
7207 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
7208 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7209 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
7210 error ("Operands of fixed-point addition must have the same type");
7211 return value_cast (VALUE_TYPE (arg1), value_add (arg1, arg2));
7212 }
7213
7214 case BINOP_SUB:
7215 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7216 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7217 if (noside == EVAL_SKIP)
7218 goto nosideret;
7219 if (binop_user_defined_p (op, arg1, arg2))
7220 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7221 else
7222 {
7223 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
7224 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7225 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
7226 error ("Operands of fixed-point subtraction must have the same type");
7227 return value_cast (VALUE_TYPE (arg1), value_sub (arg1, arg2));
7228 }
7229
7230 case BINOP_MUL:
7231 case BINOP_DIV:
7232 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7233 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7234 if (noside == EVAL_SKIP)
7235 goto nosideret;
7236 if (binop_user_defined_p (op, arg1, arg2))
7237 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7238 else
7239 if (noside == EVAL_AVOID_SIDE_EFFECTS
7240 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
7241 return value_zero (VALUE_TYPE (arg1), not_lval);
7242 else
7243 {
7244 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7245 arg1 = cast_from_fixed_to_double (arg1);
7246 if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7247 arg2 = cast_from_fixed_to_double (arg2);
7248 return value_binop (arg1, arg2, op);
7249 }
7250
7251 case UNOP_NEG:
7252 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7253 if (noside == EVAL_SKIP)
7254 goto nosideret;
7255 if (unop_user_defined_p (op, arg1))
7256 return value_x_unop (arg1, op, EVAL_NORMAL);
7257 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7258 return value_cast (VALUE_TYPE (arg1), value_neg (arg1));
7259 else
7260 return value_neg (arg1);
7261
7262 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
7263 /* case OP_UNRESOLVED_VALUE:
7264 /* Only encountered when an unresolved symbol occurs in a
7265 context other than a function call, in which case, it is
7266 illegal. *//*
7267 (*pos) += 3;
7268 if (noside == EVAL_SKIP)
7269 goto nosideret;
7270 else
7271 error ("Unexpected unresolved symbol, %s, during evaluation",
7272 ada_demangle (exp->elts[pc + 2].name));
7273 */
7274 case OP_VAR_VALUE:
7275 *pos -= 1;
7276 if (noside == EVAL_SKIP)
7277 {
7278 *pos += 4;
7279 goto nosideret;
7280 }
7281 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7282 {
7283 *pos += 4;
7284 return value_zero
7285 (to_static_fixed_type
7286 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc+2].symbol))),
7287 not_lval);
7288 }
7289 else
7290 {
7291 arg1 = unwrap_value (evaluate_subexp_standard (expect_type, exp, pos,
7292 noside));
7293 return ada_to_fixed_value (VALUE_TYPE (arg1), 0,
7294 VALUE_ADDRESS (arg1) + VALUE_OFFSET(arg1),
7295 arg1);
7296 }
7297
7298 case OP_ARRAY:
7299 (*pos) += 3;
7300 tem2 = longest_to_int (exp->elts[pc + 1].longconst);
7301 tem3 = longest_to_int (exp->elts[pc + 2].longconst);
7302 nargs = tem3 - tem2 + 1;
7303 type = expect_type ? check_typedef (expect_type) : NULL_TYPE;
7304
7305 argvec = (struct value* *) alloca (sizeof (struct value*) * (nargs + 1));
7306 for (tem = 0; tem == 0 || tem < nargs; tem += 1)
7307 /* At least one element gets inserted for the type */
7308 {
7309 /* Ensure that array expressions are coerced into pointer objects. */
7310 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
7311 }
7312 if (noside == EVAL_SKIP)
7313 goto nosideret;
7314 return value_array (tem2, tem3, argvec);
7315
7316 case OP_FUNCALL:
7317 (*pos) += 2;
7318
7319 /* Allocate arg vector, including space for the function to be
7320 called in argvec[0] and a terminating NULL */
7321 nargs = longest_to_int (exp->elts[pc + 1].longconst);
7322 argvec = (struct value* *) alloca (sizeof (struct value*) * (nargs + 2));
7323
7324 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
7325 /* FIXME: name should be defined in expresion.h */
7326 /* if (exp->elts[*pos].opcode == OP_UNRESOLVED_VALUE)
7327 error ("Unexpected unresolved symbol, %s, during evaluation",
7328 ada_demangle (exp->elts[pc + 5].name));
7329 */
7330 if (0)
7331 {
7332 error ("unexpected code path, FIXME");
7333 }
7334 else
7335 {
7336 for (tem = 0; tem <= nargs; tem += 1)
7337 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7338 argvec[tem] = 0;
7339
7340 if (noside == EVAL_SKIP)
7341 goto nosideret;
7342 }
7343
7344 if (TYPE_CODE (VALUE_TYPE (argvec[0])) == TYPE_CODE_REF)
7345 argvec[0] = value_addr (argvec[0]);
7346
7347 if (ada_is_packed_array_type (VALUE_TYPE (argvec[0])))
7348 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
7349
7350 type = check_typedef (VALUE_TYPE (argvec[0]));
7351 if (TYPE_CODE (type) == TYPE_CODE_PTR)
7352 {
7353 switch (TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (type))))
7354 {
7355 case TYPE_CODE_FUNC:
7356 type = check_typedef (TYPE_TARGET_TYPE (type));
7357 break;
7358 case TYPE_CODE_ARRAY:
7359 break;
7360 case TYPE_CODE_STRUCT:
7361 if (noside != EVAL_AVOID_SIDE_EFFECTS)
7362 argvec[0] = ada_value_ind (argvec[0]);
7363 type = check_typedef (TYPE_TARGET_TYPE (type));
7364 break;
7365 default:
7366 error ("cannot subscript or call something of type `%s'",
7367 ada_type_name (VALUE_TYPE (argvec[0])));
7368 break;
7369 }
7370 }
7371
7372 switch (TYPE_CODE (type))
7373 {
7374 case TYPE_CODE_FUNC:
7375 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7376 return allocate_value (TYPE_TARGET_TYPE (type));
7377 return call_function_by_hand (argvec[0], nargs, argvec + 1);
7378 case TYPE_CODE_STRUCT:
7379 {
7380 int arity = ada_array_arity (type);
7381 type = ada_array_element_type (type, nargs);
7382 if (type == NULL)
7383 error ("cannot subscript or call a record");
7384 if (arity != nargs)
7385 error ("wrong number of subscripts; expecting %d", arity);
7386 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7387 return allocate_value (ada_aligned_type (type));
7388 return unwrap_value (ada_value_subscript (argvec[0], nargs, argvec+1));
7389 }
7390 case TYPE_CODE_ARRAY:
7391 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7392 {
7393 type = ada_array_element_type (type, nargs);
7394 if (type == NULL)
7395 error ("element type of array unknown");
7396 else
7397 return allocate_value (ada_aligned_type (type));
7398 }
7399 return
7400 unwrap_value (ada_value_subscript
7401 (ada_coerce_to_simple_array (argvec[0]),
7402 nargs, argvec+1));
7403 case TYPE_CODE_PTR: /* Pointer to array */
7404 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
7405 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7406 {
7407 type = ada_array_element_type (type, nargs);
7408 if (type == NULL)
7409 error ("element type of array unknown");
7410 else
7411 return allocate_value (ada_aligned_type (type));
7412 }
7413 return
7414 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
7415 nargs, argvec+1));
7416
7417 default:
7418 error ("Internal error in evaluate_subexp");
7419 }
7420
7421 case TERNOP_SLICE:
7422 {
7423 struct value* array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7424 int lowbound
7425 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
7426 int upper
7427 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
7428 if (noside == EVAL_SKIP)
7429 goto nosideret;
7430
7431 /* If this is a reference to an array, then dereference it */
7432 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
7433 && TYPE_TARGET_TYPE (VALUE_TYPE (array)) != NULL
7434 && TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (array))) ==
7435 TYPE_CODE_ARRAY
7436 && !ada_is_array_descriptor (check_typedef (VALUE_TYPE
7437 (array))))
7438 {
7439 array = ada_coerce_ref (array);
7440 }
7441
7442 if (noside == EVAL_AVOID_SIDE_EFFECTS &&
7443 ada_is_array_descriptor (check_typedef (VALUE_TYPE (array))))
7444 {
7445 /* Try to dereference the array, in case it is an access to array */
7446 struct type * arrType = ada_type_of_array (array, 0);
7447 if (arrType != NULL)
7448 array = value_at_lazy (arrType, 0, NULL);
7449 }
7450 if (ada_is_array_descriptor (VALUE_TYPE (array)))
7451 array = ada_coerce_to_simple_array (array);
7452
7453 /* If at this point we have a pointer to an array, it means that
7454 it is a pointer to a simple (non-ada) array. We just then
7455 dereference it */
7456 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR
7457 && TYPE_TARGET_TYPE (VALUE_TYPE (array)) != NULL
7458 && TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (array))) ==
7459 TYPE_CODE_ARRAY)
7460 {
7461 array = ada_value_ind (array);
7462 }
7463
7464 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7465 /* The following will get the bounds wrong, but only in contexts
7466 where the value is not being requested (FIXME?). */
7467 return array;
7468 else
7469 return value_slice (array, lowbound, upper - lowbound + 1);
7470 }
7471
7472 /* FIXME: UNOP_MBR should be defined in expression.h */
7473 /* case UNOP_MBR:
7474 (*pos) += 2;
7475 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7476 type = exp->elts[pc + 1].type;
7477
7478 if (noside == EVAL_SKIP)
7479 goto nosideret;
7480
7481 switch (TYPE_CODE (type))
7482 {
7483 default:
7484 warning ("Membership test incompletely implemented; always returns true");
7485 return value_from_longest (builtin_type_int, (LONGEST) 1);
7486
7487 case TYPE_CODE_RANGE:
7488 arg2 = value_from_longest (builtin_type_int,
7489 (LONGEST) TYPE_LOW_BOUND (type));
7490 arg3 = value_from_longest (builtin_type_int,
7491 (LONGEST) TYPE_HIGH_BOUND (type));
7492 return
7493 value_from_longest (builtin_type_int,
7494 (value_less (arg1,arg3)
7495 || value_equal (arg1,arg3))
7496 && (value_less (arg2,arg1)
7497 || value_equal (arg2,arg1)));
7498 }
7499 */
7500 /* FIXME: BINOP_MBR should be defined in expression.h */
7501 /* case BINOP_MBR:
7502 (*pos) += 2;
7503 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7504 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7505
7506 if (noside == EVAL_SKIP)
7507 goto nosideret;
7508
7509 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7510 return value_zero (builtin_type_int, not_lval);
7511
7512 tem = longest_to_int (exp->elts[pc + 1].longconst);
7513
7514 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg2)))
7515 error ("invalid dimension number to '%s", "range");
7516
7517 arg3 = ada_array_bound (arg2, tem, 1);
7518 arg2 = ada_array_bound (arg2, tem, 0);
7519
7520 return
7521 value_from_longest (builtin_type_int,
7522 (value_less (arg1,arg3)
7523 || value_equal (arg1,arg3))
7524 && (value_less (arg2,arg1)
7525 || value_equal (arg2,arg1)));
7526 */
7527 /* FIXME: TERNOP_MBR should be defined in expression.h */
7528 /* case TERNOP_MBR:
7529 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7530 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7531 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7532
7533 if (noside == EVAL_SKIP)
7534 goto nosideret;
7535
7536 return
7537 value_from_longest (builtin_type_int,
7538 (value_less (arg1,arg3)
7539 || value_equal (arg1,arg3))
7540 && (value_less (arg2,arg1)
7541 || value_equal (arg2,arg1)));
7542 */
7543 /* FIXME: OP_ATTRIBUTE should be defined in expression.h */
7544 /* case OP_ATTRIBUTE:
7545 *pos += 3;
7546 atr = (enum ada_attribute) longest_to_int (exp->elts[pc + 2].longconst);
7547 switch (atr)
7548 {
7549 default:
7550 error ("unexpected attribute encountered");
7551
7552 case ATR_FIRST:
7553 case ATR_LAST:
7554 case ATR_LENGTH:
7555 {
7556 struct type* type_arg;
7557 if (exp->elts[*pos].opcode == OP_TYPE)
7558 {
7559 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7560 arg1 = NULL;
7561 type_arg = exp->elts[pc + 5].type;
7562 }
7563 else
7564 {
7565 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7566 type_arg = NULL;
7567 }
7568
7569 if (exp->elts[*pos].opcode != OP_LONG)
7570 error ("illegal operand to '%s", ada_attribute_name (atr));
7571 tem = longest_to_int (exp->elts[*pos+2].longconst);
7572 *pos += 4;
7573
7574 if (noside == EVAL_SKIP)
7575 goto nosideret;
7576
7577 if (type_arg == NULL)
7578 {
7579 arg1 = ada_coerce_ref (arg1);
7580
7581 if (ada_is_packed_array_type (VALUE_TYPE (arg1)))
7582 arg1 = ada_coerce_to_simple_array (arg1);
7583
7584 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg1)))
7585 error ("invalid dimension number to '%s",
7586 ada_attribute_name (atr));
7587
7588 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7589 {
7590 type = ada_index_type (VALUE_TYPE (arg1), tem);
7591 if (type == NULL)
7592 error ("attempt to take bound of something that is not an array");
7593 return allocate_value (type);
7594 }
7595
7596 switch (atr)
7597 {
7598 default:
7599 error ("unexpected attribute encountered");
7600 case ATR_FIRST:
7601 return ada_array_bound (arg1, tem, 0);
7602 case ATR_LAST:
7603 return ada_array_bound (arg1, tem, 1);
7604 case ATR_LENGTH:
7605 return ada_array_length (arg1, tem);
7606 }
7607 }
7608 else if (TYPE_CODE (type_arg) == TYPE_CODE_RANGE
7609 || TYPE_CODE (type_arg) == TYPE_CODE_INT)
7610 {
7611 struct type* range_type;
7612 char* name = ada_type_name (type_arg);
7613 if (name == NULL)
7614 {
7615 if (TYPE_CODE (type_arg) == TYPE_CODE_RANGE)
7616 range_type = type_arg;
7617 else
7618 error ("unimplemented type attribute");
7619 }
7620 else
7621 range_type =
7622 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
7623 switch (atr)
7624 {
7625 default:
7626 error ("unexpected attribute encountered");
7627 case ATR_FIRST:
7628 return value_from_longest (TYPE_TARGET_TYPE (range_type),
7629 TYPE_LOW_BOUND (range_type));
7630 case ATR_LAST:
7631 return value_from_longest (TYPE_TARGET_TYPE (range_type),
7632 TYPE_HIGH_BOUND (range_type));
7633 }
7634 }
7635 else if (TYPE_CODE (type_arg) == TYPE_CODE_ENUM)
7636 {
7637 switch (atr)
7638 {
7639 default:
7640 error ("unexpected attribute encountered");
7641 case ATR_FIRST:
7642 return value_from_longest
7643 (type_arg, TYPE_FIELD_BITPOS (type_arg, 0));
7644 case ATR_LAST:
7645 return value_from_longest
7646 (type_arg,
7647 TYPE_FIELD_BITPOS (type_arg,
7648 TYPE_NFIELDS (type_arg) - 1));
7649 }
7650 }
7651 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
7652 error ("unimplemented type attribute");
7653 else
7654 {
7655 LONGEST low, high;
7656
7657 if (ada_is_packed_array_type (type_arg))
7658 type_arg = decode_packed_array_type (type_arg);
7659
7660 if (tem < 1 || tem > ada_array_arity (type_arg))
7661 error ("invalid dimension number to '%s",
7662 ada_attribute_name (atr));
7663
7664 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7665 {
7666 type = ada_index_type (type_arg, tem);
7667 if (type == NULL)
7668 error ("attempt to take bound of something that is not an array");
7669 return allocate_value (type);
7670 }
7671
7672 switch (atr)
7673 {
7674 default:
7675 error ("unexpected attribute encountered");
7676 case ATR_FIRST:
7677 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7678 return value_from_longest (type, low);
7679 case ATR_LAST:
7680 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
7681 return value_from_longest (type, high);
7682 case ATR_LENGTH:
7683 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7684 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
7685 return value_from_longest (type, high-low+1);
7686 }
7687 }
7688 }
7689
7690 case ATR_TAG:
7691 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7692 if (noside == EVAL_SKIP)
7693 goto nosideret;
7694
7695 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7696 return
7697 value_zero (ada_tag_type (arg1), not_lval);
7698
7699 return ada_value_tag (arg1);
7700
7701 case ATR_MIN:
7702 case ATR_MAX:
7703 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7704 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7705 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7706 if (noside == EVAL_SKIP)
7707 goto nosideret;
7708 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7709 return value_zero (VALUE_TYPE (arg1), not_lval);
7710 else
7711 return value_binop (arg1, arg2,
7712 atr == ATR_MIN ? BINOP_MIN : BINOP_MAX);
7713
7714 case ATR_MODULUS:
7715 {
7716 struct type* type_arg = exp->elts[pc + 5].type;
7717 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7718 *pos += 4;
7719
7720 if (noside == EVAL_SKIP)
7721 goto nosideret;
7722
7723 if (! ada_is_modular_type (type_arg))
7724 error ("'modulus must be applied to modular type");
7725
7726 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
7727 ada_modulus (type_arg));
7728 }
7729
7730
7731 case ATR_POS:
7732 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7733 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7734 if (noside == EVAL_SKIP)
7735 goto nosideret;
7736 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7737 return value_zero (builtin_type_ada_int, not_lval);
7738 else
7739 return value_pos_atr (arg1);
7740
7741 case ATR_SIZE:
7742 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7743 if (noside == EVAL_SKIP)
7744 goto nosideret;
7745 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7746 return value_zero (builtin_type_ada_int, not_lval);
7747 else
7748 return value_from_longest (builtin_type_ada_int,
7749 TARGET_CHAR_BIT
7750 * TYPE_LENGTH (VALUE_TYPE (arg1)));
7751
7752 case ATR_VAL:
7753 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7754 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7755 type = exp->elts[pc + 5].type;
7756 if (noside == EVAL_SKIP)
7757 goto nosideret;
7758 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7759 return value_zero (type, not_lval);
7760 else
7761 return value_val_atr (type, arg1);
7762 }*/
7763 case BINOP_EXP:
7764 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7765 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7766 if (noside == EVAL_SKIP)
7767 goto nosideret;
7768 if (binop_user_defined_p (op, arg1, arg2))
7769 return unwrap_value (value_x_binop (arg1, arg2, op, OP_NULL,
7770 EVAL_NORMAL));
7771 else
7772 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7773 return value_zero (VALUE_TYPE (arg1), not_lval);
7774 else
7775 return value_binop (arg1, arg2, op);
7776
7777 case UNOP_PLUS:
7778 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7779 if (noside == EVAL_SKIP)
7780 goto nosideret;
7781 if (unop_user_defined_p (op, arg1))
7782 return unwrap_value (value_x_unop (arg1, op, EVAL_NORMAL));
7783 else
7784 return arg1;
7785
7786 case UNOP_ABS:
7787 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7788 if (noside == EVAL_SKIP)
7789 goto nosideret;
7790 if (value_less (arg1, value_zero (VALUE_TYPE (arg1), not_lval)))
7791 return value_neg (arg1);
7792 else
7793 return arg1;
7794
7795 case UNOP_IND:
7796 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
7797 expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
7798 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
7799 if (noside == EVAL_SKIP)
7800 goto nosideret;
7801 type = check_typedef (VALUE_TYPE (arg1));
7802 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7803 {
7804 if (ada_is_array_descriptor (type))
7805 /* GDB allows dereferencing GNAT array descriptors. */
7806 {
7807 struct type* arrType = ada_type_of_array (arg1, 0);
7808 if (arrType == NULL)
7809 error ("Attempt to dereference null array pointer.");
7810 return value_at_lazy (arrType, 0, NULL);
7811 }
7812 else if (TYPE_CODE (type) == TYPE_CODE_PTR
7813 || TYPE_CODE (type) == TYPE_CODE_REF
7814 /* In C you can dereference an array to get the 1st elt. */
7815 || TYPE_CODE (type) == TYPE_CODE_ARRAY
7816 )
7817 return
7818 value_zero
7819 (to_static_fixed_type
7820 (ada_aligned_type (check_typedef (TYPE_TARGET_TYPE (type)))),
7821 lval_memory);
7822 else if (TYPE_CODE (type) == TYPE_CODE_INT)
7823 /* GDB allows dereferencing an int. */
7824 return value_zero (builtin_type_int, lval_memory);
7825 else
7826 error ("Attempt to take contents of a non-pointer value.");
7827 }
7828 arg1 = ada_coerce_ref (arg1);
7829 type = check_typedef (VALUE_TYPE (arg1));
7830
7831 if (ada_is_array_descriptor (type))
7832 /* GDB allows dereferencing GNAT array descriptors. */
7833 return ada_coerce_to_simple_array (arg1);
7834 else
7835 return ada_value_ind (arg1);
7836
7837 case STRUCTOP_STRUCT:
7838 tem = longest_to_int (exp->elts[pc + 1].longconst);
7839 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
7840 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7841 if (noside == EVAL_SKIP)
7842 goto nosideret;
7843 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7844 return value_zero (ada_aligned_type
7845 (ada_lookup_struct_elt_type (VALUE_TYPE (arg1),
7846 &exp->elts[pc + 2].string,
7847 0, NULL)),
7848 lval_memory);
7849 else
7850 return unwrap_value (ada_value_struct_elt (arg1,
7851 &exp->elts[pc + 2].string,
7852 "record"));
7853 case OP_TYPE:
7854 /* The value is not supposed to be used. This is here to make it
7855 easier to accommodate expressions that contain types. */
7856 (*pos) += 2;
7857 if (noside == EVAL_SKIP)
7858 goto nosideret;
7859 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7860 return allocate_value (builtin_type_void);
7861 else
7862 error ("Attempt to use a type name as an expression");
7863
7864 case STRUCTOP_PTR:
7865 tem = longest_to_int (exp->elts[pc + 1].longconst);
7866 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
7867 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7868 if (noside == EVAL_SKIP)
7869 goto nosideret;
7870 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7871 return value_zero (ada_aligned_type
7872 (ada_lookup_struct_elt_type (VALUE_TYPE (arg1),
7873 &exp->elts[pc + 2].string,
7874 0, NULL)),
7875 lval_memory);
7876 else
7877 return unwrap_value (ada_value_struct_elt (arg1,
7878 &exp->elts[pc + 2].string,
7879 "record access"));
7880 }
7881
7882nosideret:
7883 return value_from_longest (builtin_type_long, (LONGEST) 1);
7884}
7885
7886\f
7887 /* Fixed point */
7888
7889/* If TYPE encodes an Ada fixed-point type, return the suffix of the
7890 type name that encodes the 'small and 'delta information.
7891 Otherwise, return NULL. */
7892
7893static const char*
7894fixed_type_info (type)
7895 struct type *type;
7896{
7897 const char* name = ada_type_name (type);
7898 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
7899
7900 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE)
7901 && name != NULL)
7902 {
7903 const char *tail = strstr (name, "___XF_");
7904 if (tail == NULL)
7905 return NULL;
7906 else
7907 return tail + 5;
7908 }
7909 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
7910 return fixed_type_info (TYPE_TARGET_TYPE (type));
7911 else
7912 return NULL;
7913}
7914
7915/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
7916
7917int
7918ada_is_fixed_point_type (type)
7919 struct type *type;
7920{
7921 return fixed_type_info (type) != NULL;
7922}
7923
7924/* Assuming that TYPE is the representation of an Ada fixed-point
7925 type, return its delta, or -1 if the type is malformed and the
7926 delta cannot be determined. */
7927
7928DOUBLEST
7929ada_delta (type)
7930 struct type *type;
7931{
7932 const char *encoding = fixed_type_info (type);
7933 long num, den;
7934
7935 if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
7936 return -1.0;
7937 else
7938 return (DOUBLEST) num / (DOUBLEST) den;
7939}
7940
7941/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
7942 factor ('SMALL value) associated with the type. */
7943
7944static DOUBLEST
7945scaling_factor (type)
7946 struct type *type;
7947{
7948 const char *encoding = fixed_type_info (type);
7949 unsigned long num0, den0, num1, den1;
7950 int n;
7951
7952 n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
7953
7954 if (n < 2)
7955 return 1.0;
7956 else if (n == 4)
7957 return (DOUBLEST) num1 / (DOUBLEST) den1;
7958 else
7959 return (DOUBLEST) num0 / (DOUBLEST) den0;
7960}
7961
7962
7963/* Assuming that X is the representation of a value of fixed-point
7964 type TYPE, return its floating-point equivalent. */
7965
7966DOUBLEST
7967ada_fixed_to_float (type, x)
7968 struct type *type;
7969 LONGEST x;
7970{
7971 return (DOUBLEST) x * scaling_factor (type);
7972}
7973
7974/* The representation of a fixed-point value of type TYPE
7975 corresponding to the value X. */
7976
7977LONGEST
7978ada_float_to_fixed (type, x)
7979 struct type *type;
7980 DOUBLEST x;
7981{
7982 return (LONGEST) (x / scaling_factor (type) + 0.5);
7983}
7984
7985
7986 /* VAX floating formats */
7987
7988/* Non-zero iff TYPE represents one of the special VAX floating-point
7989 types. */
7990int
7991ada_is_vax_floating_type (type)
7992 struct type* type;
7993{
7994 int name_len =
7995 (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
7996 return
7997 name_len > 6
7998 && (TYPE_CODE (type) == TYPE_CODE_INT
7999 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8000 && STREQN (ada_type_name (type) + name_len - 6, "___XF", 5);
8001}
8002
8003/* The type of special VAX floating-point type this is, assuming
8004 ada_is_vax_floating_point */
8005int
8006ada_vax_float_type_suffix (type)
8007 struct type* type;
8008{
8009 return ada_type_name (type)[strlen (ada_type_name (type))-1];
8010}
8011
8012/* A value representing the special debugging function that outputs
8013 VAX floating-point values of the type represented by TYPE. Assumes
8014 ada_is_vax_floating_type (TYPE). */
8015struct value*
8016ada_vax_float_print_function (type)
8017
8018 struct type* type;
8019{
8020 switch (ada_vax_float_type_suffix (type)) {
8021 case 'F':
8022 return
8023 get_var_value ("DEBUG_STRING_F", 0);
8024 case 'D':
8025 return
8026 get_var_value ("DEBUG_STRING_D", 0);
8027 case 'G':
8028 return
8029 get_var_value ("DEBUG_STRING_G", 0);
8030 default:
8031 error ("invalid VAX floating-point type");
8032 }
8033}
8034
8035\f
8036 /* Range types */
8037
8038/* Scan STR beginning at position K for a discriminant name, and
8039 return the value of that discriminant field of DVAL in *PX. If
8040 PNEW_K is not null, put the position of the character beyond the
8041 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
8042 not alter *PX and *PNEW_K if unsuccessful. */
8043
8044static int
8045scan_discrim_bound (str, k, dval, px, pnew_k)
8046 char *str;
8047 int k;
8048 struct value* dval;
8049 LONGEST *px;
8050 int *pnew_k;
8051{
8052 static char *bound_buffer = NULL;
8053 static size_t bound_buffer_len = 0;
8054 char *bound;
8055 char *pend;
8056 struct value* bound_val;
8057
8058 if (dval == NULL || str == NULL || str[k] == '\0')
8059 return 0;
8060
8061 pend = strstr (str+k, "__");
8062 if (pend == NULL)
8063 {
8064 bound = str+k;
8065 k += strlen (bound);
8066 }
8067 else
8068 {
8069 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str+k) + 1);
8070 bound = bound_buffer;
8071 strncpy (bound_buffer, str+k, pend-(str+k));
8072 bound[pend-(str+k)] = '\0';
8073 k = pend-str;
8074 }
8075
8076 bound_val =
8077 ada_search_struct_field (bound, dval, 0, VALUE_TYPE (dval));
8078 if (bound_val == NULL)
8079 return 0;
8080
8081 *px = value_as_long (bound_val);
8082 if (pnew_k != NULL)
8083 *pnew_k = k;
8084 return 1;
8085}
8086
8087/* Value of variable named NAME in the current environment. If
8088 no such variable found, then if ERR_MSG is null, returns 0, and
8089 otherwise causes an error with message ERR_MSG. */
8090static struct value*
8091get_var_value (name, err_msg)
8092 char* name;
8093 char* err_msg;
8094{
8095 struct symbol** syms;
8096 struct block** blocks;
8097 int nsyms;
8098
8099 nsyms = ada_lookup_symbol_list (name, get_selected_block (NULL), VAR_NAMESPACE,
8100 &syms, &blocks);
8101
8102 if (nsyms != 1)
8103 {
8104 if (err_msg == NULL)
8105 return 0;
8106 else
8107 error ("%s", err_msg);
8108 }
8109
8110 return value_of_variable (syms[0], blocks[0]);
8111}
8112
8113/* Value of integer variable named NAME in the current environment. If
8114 no such variable found, then if ERR_MSG is null, returns 0, and sets
8115 *FLAG to 0. If successful, sets *FLAG to 1. */
8116LONGEST
8117get_int_var_value (name, err_msg, flag)
8118 char* name;
8119 char* err_msg;
8120 int* flag;
8121{
8122 struct value* var_val = get_var_value (name, err_msg);
8123
8124 if (var_val == 0)
8125 {
8126 if (flag != NULL)
8127 *flag = 0;
8128 return 0;
8129 }
8130 else
8131 {
8132 if (flag != NULL)
8133 *flag = 1;
8134 return value_as_long (var_val);
8135 }
8136}
8137
8138
8139/* Return a range type whose base type is that of the range type named
8140 NAME in the current environment, and whose bounds are calculated
8141 from NAME according to the GNAT range encoding conventions.
8142 Extract discriminant values, if needed, from DVAL. If a new type
8143 must be created, allocate in OBJFILE's space. The bounds
8144 information, in general, is encoded in NAME, the base type given in
8145 the named range type. */
8146
8147static struct type*
8148to_fixed_range_type (name, dval, objfile)
8149 char *name;
8150 struct value *dval;
8151 struct objfile *objfile;
8152{
8153 struct type *raw_type = ada_find_any_type (name);
8154 struct type *base_type;
8155 LONGEST low, high;
8156 char* subtype_info;
8157
8158 if (raw_type == NULL)
8159 base_type = builtin_type_int;
8160 else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
8161 base_type = TYPE_TARGET_TYPE (raw_type);
8162 else
8163 base_type = raw_type;
8164
8165 subtype_info = strstr (name, "___XD");
8166 if (subtype_info == NULL)
8167 return raw_type;
8168 else
8169 {
8170 static char *name_buf = NULL;
8171 static size_t name_len = 0;
8172 int prefix_len = subtype_info - name;
8173 LONGEST L, U;
8174 struct type *type;
8175 char *bounds_str;
8176 int n;
8177
8178 GROW_VECT (name_buf, name_len, prefix_len + 5);
8179 strncpy (name_buf, name, prefix_len);
8180 name_buf[prefix_len] = '\0';
8181
8182 subtype_info += 5;
8183 bounds_str = strchr (subtype_info, '_');
8184 n = 1;
8185
8186 if (*subtype_info == 'L')
8187 {
8188 if (! ada_scan_number (bounds_str, n, &L, &n)
8189 && ! scan_discrim_bound (bounds_str, n, dval, &L, &n))
8190 return raw_type;
8191 if (bounds_str[n] == '_')
8192 n += 2;
8193 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
8194 n += 1;
8195 subtype_info += 1;
8196 }
8197 else
8198 {
8199 strcpy (name_buf+prefix_len, "___L");
8200 L = get_int_var_value (name_buf, "Index bound unknown.", NULL);
8201 }
8202
8203 if (*subtype_info == 'U')
8204 {
8205 if (! ada_scan_number (bounds_str, n, &U, &n)
8206 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
8207 return raw_type;
8208 }
8209 else
8210 {
8211 strcpy (name_buf+prefix_len, "___U");
8212 U = get_int_var_value (name_buf, "Index bound unknown.", NULL);
8213 }
8214
8215 if (objfile == NULL)
8216 objfile = TYPE_OBJFILE (base_type);
8217 type = create_range_type (alloc_type (objfile), base_type, L, U);
8218 TYPE_NAME (type) = name;
8219 return type;
8220 }
8221}
8222
8223/* True iff NAME is the name of a range type. */
8224int
8225ada_is_range_type_name (name)
8226 const char* name;
8227{
8228 return (name != NULL && strstr (name, "___XD"));
8229}
8230
8231\f
8232 /* Modular types */
8233
8234/* True iff TYPE is an Ada modular type. */
8235int
8236ada_is_modular_type (type)
8237 struct type* type;
8238{
8239 /* FIXME: base_type should be declared in gdbtypes.h, implemented in
8240 valarith.c */
8241 struct type* subranged_type; /* = base_type (type);*/
8242
8243 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
8244 && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
8245 && TYPE_UNSIGNED (subranged_type));
8246}
8247
8248/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
8249LONGEST
8250ada_modulus (type)
8251 struct type* type;
8252{
8253 return TYPE_HIGH_BOUND (type) + 1;
8254}
8255
8256
8257\f
8258 /* Operators */
8259
8260/* Table mapping opcodes into strings for printing operators
8261 and precedences of the operators. */
8262
8263static const struct op_print ada_op_print_tab[] =
8264 {
8265 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
8266 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
8267 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
8268 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
8269 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
8270 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
8271 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
8272 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
8273 {"<=", BINOP_LEQ, PREC_ORDER, 0},
8274 {">=", BINOP_GEQ, PREC_ORDER, 0},
8275 {">", BINOP_GTR, PREC_ORDER, 0},
8276 {"<", BINOP_LESS, PREC_ORDER, 0},
8277 {">>", BINOP_RSH, PREC_SHIFT, 0},
8278 {"<<", BINOP_LSH, PREC_SHIFT, 0},
8279 {"+", BINOP_ADD, PREC_ADD, 0},
8280 {"-", BINOP_SUB, PREC_ADD, 0},
8281 {"&", BINOP_CONCAT, PREC_ADD, 0},
8282 {"*", BINOP_MUL, PREC_MUL, 0},
8283 {"/", BINOP_DIV, PREC_MUL, 0},
8284 {"rem", BINOP_REM, PREC_MUL, 0},
8285 {"mod", BINOP_MOD, PREC_MUL, 0},
8286 {"**", BINOP_EXP, PREC_REPEAT, 0 },
8287 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
8288 {"-", UNOP_NEG, PREC_PREFIX, 0},
8289 {"+", UNOP_PLUS, PREC_PREFIX, 0},
8290 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
8291 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
8292 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
8293 {".all", UNOP_IND, PREC_SUFFIX, 1}, /* FIXME: postfix .ALL */
8294 {"'access", UNOP_ADDR, PREC_SUFFIX, 1}, /* FIXME: postfix 'ACCESS */
8295 {NULL, 0, 0, 0}
8296};
8297\f
8298 /* Assorted Types and Interfaces */
8299
8300struct type* builtin_type_ada_int;
8301struct type* builtin_type_ada_short;
8302struct type* builtin_type_ada_long;
8303struct type* builtin_type_ada_long_long;
8304struct type* builtin_type_ada_char;
8305struct type* builtin_type_ada_float;
8306struct type* builtin_type_ada_double;
8307struct type* builtin_type_ada_long_double;
8308struct type* builtin_type_ada_natural;
8309struct type* builtin_type_ada_positive;
8310struct type* builtin_type_ada_system_address;
8311
8312struct type ** const (ada_builtin_types[]) =
8313{
8314
8315 &builtin_type_ada_int,
8316 &builtin_type_ada_long,
8317 &builtin_type_ada_short,
8318 &builtin_type_ada_char,
8319 &builtin_type_ada_float,
8320 &builtin_type_ada_double,
8321 &builtin_type_ada_long_long,
8322 &builtin_type_ada_long_double,
8323 &builtin_type_ada_natural,
8324 &builtin_type_ada_positive,
8325
8326 /* The following types are carried over from C for convenience. */
8327 &builtin_type_int,
8328 &builtin_type_long,
8329 &builtin_type_short,
8330 &builtin_type_char,
8331 &builtin_type_float,
8332 &builtin_type_double,
8333 &builtin_type_long_long,
8334 &builtin_type_void,
8335 &builtin_type_signed_char,
8336 &builtin_type_unsigned_char,
8337 &builtin_type_unsigned_short,
8338 &builtin_type_unsigned_int,
8339 &builtin_type_unsigned_long,
8340 &builtin_type_unsigned_long_long,
8341 &builtin_type_long_double,
8342 &builtin_type_complex,
8343 &builtin_type_double_complex,
8344 0
8345};
8346
8347/* Not really used, but needed in the ada_language_defn. */
8348static void emit_char (int c, struct ui_file* stream, int quoter)
8349{
8350 ada_emit_char (c, stream, quoter, 1);
8351}
8352
8353const struct language_defn ada_language_defn = {
8354 "ada", /* Language name */
8355 /* language_ada, */
8356 language_unknown,
8357 /* FIXME: language_ada should be defined in defs.h */
8358 ada_builtin_types,
8359 range_check_off,
8360 type_check_off,
8361 case_sensitive_on, /* Yes, Ada is case-insensitive, but
8362 * that's not quite what this means. */
8363 ada_parse,
8364 ada_error,
8365 ada_evaluate_subexp,
8366 ada_printchar, /* Print a character constant */
8367 ada_printstr, /* Function to print string constant */
8368 emit_char, /* Function to print single char (not used) */
8369 ada_create_fundamental_type, /* Create fundamental type in this language */
8370 ada_print_type, /* Print a type using appropriate syntax */
8371 ada_val_print, /* Print a value using appropriate syntax */
8372 ada_value_print, /* Print a top-level value */
8373 {"", "", "", ""}, /* Binary format info */
8374#if 0
8375 {"8#%lo#", "8#", "o", "#"}, /* Octal format info */
8376 {"%ld", "", "d", ""}, /* Decimal format info */
8377 {"16#%lx#", "16#", "x", "#"}, /* Hex format info */
8378#else
8379 /* Copied from c-lang.c. */
8380 {"0%lo", "0", "o", ""}, /* Octal format info */
8381 {"%ld", "", "d", ""}, /* Decimal format info */
8382 {"0x%lx", "0x", "x", ""}, /* Hex format info */
8383#endif
8384 ada_op_print_tab, /* expression operators for printing */
8385 1, /* c-style arrays (FIXME?) */
8386 0, /* String lower bound (FIXME?) */
8387 &builtin_type_ada_char,
8388 LANG_MAGIC
8389};
8390
8391void
8392_initialize_ada_language ()
8393{
8394 builtin_type_ada_int =
8395 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8396 0,
8397 "integer", (struct objfile *) NULL);
8398 builtin_type_ada_long =
8399 init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
8400 0,
8401 "long_integer", (struct objfile *) NULL);
8402 builtin_type_ada_short =
8403 init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8404 0,
8405 "short_integer", (struct objfile *) NULL);
8406 builtin_type_ada_char =
8407 init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8408 0,
8409 "character", (struct objfile *) NULL);
8410 builtin_type_ada_float =
8411 init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8412 0,
8413 "float", (struct objfile *) NULL);
8414 builtin_type_ada_double =
8415 init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8416 0,
8417 "long_float", (struct objfile *) NULL);
8418 builtin_type_ada_long_long =
8419 init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8420 0,
8421 "long_long_integer", (struct objfile *) NULL);
8422 builtin_type_ada_long_double =
8423 init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8424 0,
8425 "long_long_float", (struct objfile *) NULL);
8426 builtin_type_ada_natural =
8427 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8428 0,
8429 "natural", (struct objfile *) NULL);
8430 builtin_type_ada_positive =
8431 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8432 0,
8433 "positive", (struct objfile *) NULL);
8434
8435
8436 builtin_type_ada_system_address =
8437 lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
8438 (struct objfile *) NULL));
8439 TYPE_NAME (builtin_type_ada_system_address) = "system__address";
8440
8441 add_language (&ada_language_defn);
8442
8443 add_show_from_set
8444 (add_set_cmd ("varsize-limit", class_support, var_uinteger,
8445 (char*) &varsize_limit,
8446 "Set maximum bytes in dynamic-sized object.",
8447 &setlist),
8448 &showlist);
8449 varsize_limit = 65536;
8450
8451 add_com ("begin", class_breakpoint, begin_command,
8452 "Start the debugged program, stopping at the beginning of the\n\
8453main program. You may specify command-line arguments to give it, as for\n\
8454the \"run\" command (q.v.).");
8455}
8456
8457
8458/* Create a fundamental Ada type using default reasonable for the current
8459 target machine.
8460
8461 Some object/debugging file formats (DWARF version 1, COFF, etc) do not
8462 define fundamental types such as "int" or "double". Others (stabs or
8463 DWARF version 2, etc) do define fundamental types. For the formats which
8464 don't provide fundamental types, gdb can create such types using this
8465 function.
8466
8467 FIXME: Some compilers distinguish explicitly signed integral types
8468 (signed short, signed int, signed long) from "regular" integral types
8469 (short, int, long) in the debugging information. There is some dis-
8470 agreement as to how useful this feature is. In particular, gcc does
8471 not support this. Also, only some debugging formats allow the
8472 distinction to be passed on to a debugger. For now, we always just
8473 use "short", "int", or "long" as the type name, for both the implicit
8474 and explicitly signed types. This also makes life easier for the
8475 gdb test suite since we don't have to account for the differences
8476 in output depending upon what the compiler and debugging format
8477 support. We will probably have to re-examine the issue when gdb
8478 starts taking it's fundamental type information directly from the
8479 debugging information supplied by the compiler. fnf@cygnus.com */
8480
8481static struct type *
8482ada_create_fundamental_type (objfile, typeid)
8483 struct objfile *objfile;
8484 int typeid;
8485{
8486 struct type *type = NULL;
8487
8488 switch (typeid)
8489 {
8490 default:
8491 /* FIXME: For now, if we are asked to produce a type not in this
8492 language, create the equivalent of a C integer type with the
8493 name "<?type?>". When all the dust settles from the type
8494 reconstruction work, this should probably become an error. */
8495 type = init_type (TYPE_CODE_INT,
8496 TARGET_INT_BIT / TARGET_CHAR_BIT,
8497 0, "<?type?>", objfile);
8498 warning ("internal error: no Ada fundamental type %d", typeid);
8499 break;
8500 case FT_VOID:
8501 type = init_type (TYPE_CODE_VOID,
8502 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8503 0, "void", objfile);
8504 break;
8505 case FT_CHAR:
8506 type = init_type (TYPE_CODE_INT,
8507 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8508 0, "character", objfile);
8509 break;
8510 case FT_SIGNED_CHAR:
8511 type = init_type (TYPE_CODE_INT,
8512 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8513 0, "signed char", objfile);
8514 break;
8515 case FT_UNSIGNED_CHAR:
8516 type = init_type (TYPE_CODE_INT,
8517 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8518 TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
8519 break;
8520 case FT_SHORT:
8521 type = init_type (TYPE_CODE_INT,
8522 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8523 0, "short_integer", objfile);
8524 break;
8525 case FT_SIGNED_SHORT:
8526 type = init_type (TYPE_CODE_INT,
8527 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8528 0, "short_integer", objfile);
8529 break;
8530 case FT_UNSIGNED_SHORT:
8531 type = init_type (TYPE_CODE_INT,
8532 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8533 TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
8534 break;
8535 case FT_INTEGER:
8536 type = init_type (TYPE_CODE_INT,
8537 TARGET_INT_BIT / TARGET_CHAR_BIT,
8538 0, "integer", objfile);
8539 break;
8540 case FT_SIGNED_INTEGER:
8541 type = init_type (TYPE_CODE_INT,
8542 TARGET_INT_BIT / TARGET_CHAR_BIT,
8543 0, "integer", objfile); /* FIXME -fnf */
8544 break;
8545 case FT_UNSIGNED_INTEGER:
8546 type = init_type (TYPE_CODE_INT,
8547 TARGET_INT_BIT / TARGET_CHAR_BIT,
8548 TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
8549 break;
8550 case FT_LONG:
8551 type = init_type (TYPE_CODE_INT,
8552 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8553 0, "long_integer", objfile);
8554 break;
8555 case FT_SIGNED_LONG:
8556 type = init_type (TYPE_CODE_INT,
8557 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8558 0, "long_integer", objfile);
8559 break;
8560 case FT_UNSIGNED_LONG:
8561 type = init_type (TYPE_CODE_INT,
8562 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8563 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
8564 break;
8565 case FT_LONG_LONG:
8566 type = init_type (TYPE_CODE_INT,
8567 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8568 0, "long_long_integer", objfile);
8569 break;
8570 case FT_SIGNED_LONG_LONG:
8571 type = init_type (TYPE_CODE_INT,
8572 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8573 0, "long_long_integer", objfile);
8574 break;
8575 case FT_UNSIGNED_LONG_LONG:
8576 type = init_type (TYPE_CODE_INT,
8577 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8578 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
8579 break;
8580 case FT_FLOAT:
8581 type = init_type (TYPE_CODE_FLT,
8582 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8583 0, "float", objfile);
8584 break;
8585 case FT_DBL_PREC_FLOAT:
8586 type = init_type (TYPE_CODE_FLT,
8587 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8588 0, "long_float", objfile);
8589 break;
8590 case FT_EXT_PREC_FLOAT:
8591 type = init_type (TYPE_CODE_FLT,
8592 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8593 0, "long_long_float", objfile);
8594 break;
8595 }
8596 return (type);
8597}
8598
8599void ada_dump_symtab (struct symtab* s)
8600{
8601 int i;
8602 fprintf (stderr, "New symtab: [\n");
8603 fprintf (stderr, " Name: %s/%s;\n",
8604 s->dirname ? s->dirname : "?",
8605 s->filename ? s->filename : "?");
8606 fprintf (stderr, " Format: %s;\n", s->debugformat);
8607 if (s->linetable != NULL)
8608 {
8609 fprintf (stderr, " Line table (section %d):\n", s->block_line_section);
8610 for (i = 0; i < s->linetable->nitems; i += 1)
8611 {
8612 struct linetable_entry* e = s->linetable->item + i;
8613 fprintf (stderr, " %4ld: %8lx\n", (long) e->line, (long) e->pc);
8614 }
8615 }
8616 fprintf (stderr, "]\n");
8617}
8618
This page took 0.326875 seconds and 4 git commands to generate.