]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
daily update
[thirdparty/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;
aacb1f0a 2894 xfree (exp);
14f9c5c9
AS
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;
261397f8 3563 struct symbol *tmp_sym;
14f9c5c9
AS
3564 int i, j;
3565
3566 ALL_SYMTABS (objfile, s)
3567 {
3568 switch (SYMBOL_CLASS (sym))
3569 {
3570 case LOC_CONST:
3571 case LOC_STATIC:
3572 case LOC_TYPEDEF:
3573 case LOC_REGISTER:
3574 case LOC_LABEL:
3575 case LOC_BLOCK:
3576 case LOC_CONST_BYTES:
3577 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
261397f8
DJ
3578 ALL_BLOCK_SYMBOLS (b, i, tmp_sym)
3579 if (sym == tmp_sym)
14f9c5c9
AS
3580 return s;
3581 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
261397f8
DJ
3582 ALL_BLOCK_SYMBOLS (b, i, tmp_sym)
3583 if (sym == tmp_sym)
14f9c5c9
AS
3584 return s;
3585 break;
3586 default:
3587 break;
3588 }
3589 switch (SYMBOL_CLASS (sym))
3590 {
3591 case LOC_REGISTER:
3592 case LOC_ARG:
3593 case LOC_REF_ARG:
3594 case LOC_REGPARM:
3595 case LOC_REGPARM_ADDR:
3596 case LOC_LOCAL:
3597 case LOC_TYPEDEF:
3598 case LOC_LOCAL_ARG:
3599 case LOC_BASEREG:
3600 case LOC_BASEREG_ARG:
3601 for (j = FIRST_LOCAL_BLOCK;
3602 j < BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)); j += 1)
3603 {
3604 b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), j);
261397f8
DJ
3605 ALL_BLOCK_SYMBOLS (b, i, tmp_sym)
3606 if (sym == tmp_sym)
14f9c5c9
AS
3607 return s;
3608 }
3609 break;
3610 default:
3611 break;
3612 }
3613 }
3614 return NULL;
3615}
3616
3617/* Return a minimal symbol matching NAME according to Ada demangling
3618 rules. Returns NULL if there is no such minimal symbol. */
3619
3620struct minimal_symbol*
3621ada_lookup_minimal_symbol (name)
3622 const char* name;
3623{
3624 struct objfile* objfile;
3625 struct minimal_symbol* msymbol;
3626 int wild_match = (strstr (name, "__") == NULL);
3627
3628 ALL_MSYMBOLS (objfile, msymbol)
3629 {
3630 if (ada_match_name (SYMBOL_NAME (msymbol), name, wild_match)
3631 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
3632 return msymbol;
3633 }
3634
3635 return NULL;
3636}
3637
3638/* For all subprograms that statically enclose the subprogram of the
3639 * selected frame, add symbols matching identifier NAME in NAMESPACE
3640 * and their blocks to vectors *defn_symbols and *defn_blocks, as for
3641 * ada_add_block_symbols (q.v.). If WILD, treat as NAME with a
3642 * wildcard prefix. At the moment, this function uses a heuristic to
3643 * find the frames of enclosing subprograms: it treats the
3644 * pointer-sized value at location 0 from the local-variable base of a
3645 * frame as a static link, and then searches up the call stack for a
3646 * frame with that same local-variable base. */
3647static void
3648add_symbols_from_enclosing_procs (name, namespace, wild_match)
3649 const char* name;
3650 namespace_enum namespace;
3651 int wild_match;
3652{
3653#ifdef i386
3654 static struct symbol static_link_sym;
3655 static struct symbol *static_link;
3656
3657 struct cleanup* old_chain = make_cleanup (null_cleanup, NULL);
3658 struct frame_info* frame;
3659 struct frame_info* target_frame;
3660
3661 if (static_link == NULL)
3662 {
3663 /* Initialize the local variable symbol that stands for the
3664 * static link (when it exists). */
3665 static_link = &static_link_sym;
3666 SYMBOL_NAME (static_link) = "";
3667 SYMBOL_LANGUAGE (static_link) = language_unknown;
3668 SYMBOL_CLASS (static_link) = LOC_LOCAL;
3669 SYMBOL_NAMESPACE (static_link) = VAR_NAMESPACE;
3670 SYMBOL_TYPE (static_link) = lookup_pointer_type (builtin_type_void);
3671 SYMBOL_VALUE (static_link) =
3672 - (long) TYPE_LENGTH (SYMBOL_TYPE (static_link));
3673 }
3674
3675 frame = selected_frame;
3676 while (frame != NULL && ndefns == 0)
3677 {
3678 struct block* block;
3679 struct value* target_link_val = read_var_value (static_link, frame);
3680 CORE_ADDR target_link;
3681
3682 if (target_link_val == NULL)
3683 break;
3684 QUIT;
3685
3686 target_link = target_link_val;
3687 do {
3688 QUIT;
3689 frame = get_prev_frame (frame);
3690 } while (frame != NULL && FRAME_LOCALS_ADDRESS (frame) != target_link);
3691
3692 if (frame == NULL)
3693 break;
3694
3695 block = get_frame_block (frame, 0);
3696 while (block != NULL && block_function (block) != NULL && ndefns == 0)
3697 {
3698 ada_add_block_symbols (block, name, namespace, NULL, wild_match);
3699
3700 block = BLOCK_SUPERBLOCK (block);
3701 }
3702 }
3703
3704 do_cleanups (old_chain);
3705#endif
3706}
3707
3708/* True if TYPE is definitely an artificial type supplied to a symbol
3709 * for which no debugging information was given in the symbol file. */
3710static int
3711is_nondebugging_type (type)
3712 struct type* type;
3713{
3714 char* name = ada_type_name (type);
3715 return (name != NULL && STREQ (name, "<variable, no debug info>"));
3716}
3717
3718/* Remove any non-debugging symbols in SYMS[0 .. NSYMS-1] that definitely
3719 * duplicate other symbols in the list. (The only case I know of where
3720 * this happens is when object files containing stabs-in-ecoff are
3721 * linked with files containing ordinary ecoff debugging symbols (or no
3722 * debugging symbols)). Modifies SYMS to squeeze out deleted symbols,
3723 * and applies the same modification to BLOCKS to maintain the
3724 * correspondence between SYMS[i] and BLOCKS[i]. Returns the number
3725 * of symbols in the modified list. */
3726static int
3727remove_extra_symbols (syms, blocks, nsyms)
3728 struct symbol** syms;
3729 struct block** blocks;
3730 int nsyms;
3731{
3732 int i, j;
3733
3734 i = 0;
3735 while (i < nsyms)
3736 {
3737 if (SYMBOL_NAME (syms[i]) != NULL && SYMBOL_CLASS (syms[i]) == LOC_STATIC
3738 && is_nondebugging_type (SYMBOL_TYPE (syms[i])))
3739 {
3740 for (j = 0; j < nsyms; j += 1)
3741 {
3742 if (i != j
3743 && SYMBOL_NAME (syms[j]) != NULL
3744 && STREQ (SYMBOL_NAME (syms[i]), SYMBOL_NAME (syms[j]))
3745 && SYMBOL_CLASS (syms[i]) == SYMBOL_CLASS (syms[j])
3746 && SYMBOL_VALUE_ADDRESS (syms[i])
3747 == SYMBOL_VALUE_ADDRESS (syms[j]))
3748 {
3749 int k;
3750 for (k = i+1; k < nsyms; k += 1)
3751 {
3752 syms[k-1] = syms[k];
3753 blocks[k-1] = blocks[k];
3754 }
3755 nsyms -= 1;
3756 goto NextSymbol;
3757 }
3758 }
3759 }
3760 i += 1;
3761 NextSymbol:
3762 ;
3763 }
3764 return nsyms;
3765}
3766
3767/* Find symbols in NAMESPACE matching NAME, in BLOCK0 and enclosing
3768 scope and in global scopes, returning the number of matches. Sets
3769 *SYMS to point to a vector of matching symbols, with *BLOCKS
3770 pointing to the vector of corresponding blocks in which those
3771 symbols reside. These two vectors are transient---good only to the
3772 next call of ada_lookup_symbol_list. Any non-function/non-enumeral symbol
3773 match within the nest of blocks whose innermost member is BLOCK0,
3774 is the outermost match returned (no other matches in that or
3775 enclosing blocks is returned). If there are any matches in or
3776 surrounding BLOCK0, then these alone are returned. */
3777
3778int
3779ada_lookup_symbol_list (name, block0, namespace, syms, blocks)
3780 const char *name;
3781 struct block *block0;
3782 namespace_enum namespace;
3783 struct symbol*** syms;
3784 struct block*** blocks;
3785{
3786 struct symbol *sym;
3787 struct symtab *s;
3788 struct partial_symtab *ps;
3789 struct blockvector *bv;
3790 struct objfile *objfile;
3791 struct block *b;
3792 struct block *block;
3793 struct minimal_symbol *msymbol;
3794 int wild_match = (strstr (name, "__") == NULL);
3795 int cacheIfUnique;
3796
3797#ifdef TIMING
3798 markTimeStart (0);
3799#endif
3800
3801 ndefns = 0;
3802 cacheIfUnique = 0;
3803
3804 /* Search specified block and its superiors. */
3805
3806 block = block0;
3807 while (block != NULL)
3808 {
3809 ada_add_block_symbols (block, name, namespace, NULL, wild_match);
3810
3811 /* If we found a non-function match, assume that's the one. */
3812 if (is_nonfunction (defn_symbols, ndefns))
3813 goto done;
3814
3815 block = BLOCK_SUPERBLOCK (block);
3816 }
3817
3818 /* If we found ANY matches in the specified BLOCK, we're done. */
3819
3820 if (ndefns > 0)
3821 goto done;
3822
3823 cacheIfUnique = 1;
3824
3825 /* Now add symbols from all global blocks: symbol tables, minimal symbol
3826 tables, and psymtab's */
3827
3828 ALL_SYMTABS (objfile, s)
3829 {
3830 QUIT;
3831 if (! s->primary)
3832 continue;
3833 bv = BLOCKVECTOR (s);
3834 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3835 ada_add_block_symbols (block, name, namespace, objfile, wild_match);
3836 }
3837
3838 if (namespace == VAR_NAMESPACE)
3839 {
3840 ALL_MSYMBOLS (objfile, msymbol)
3841 {
3842 if (ada_match_name (SYMBOL_NAME (msymbol), name, wild_match))
3843 {
3844 switch (MSYMBOL_TYPE (msymbol))
3845 {
3846 case mst_solib_trampoline:
3847 break;
3848 default:
3849 s = find_pc_symtab (SYMBOL_VALUE_ADDRESS (msymbol));
3850 if (s != NULL)
3851 {
3852 int old_ndefns = ndefns;
3853 QUIT;
3854 bv = BLOCKVECTOR (s);
3855 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3856 ada_add_block_symbols (block,
3857 SYMBOL_NAME (msymbol),
3858 namespace, objfile, wild_match);
3859 if (ndefns == old_ndefns)
3860 {
3861 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3862 ada_add_block_symbols (block,
3863 SYMBOL_NAME (msymbol),
3864 namespace, objfile,
3865 wild_match);
3866 }
3867 }
3868 }
3869 }
3870 }
3871 }
3872
3873 ALL_PSYMTABS (objfile, ps)
3874 {
3875 QUIT;
3876 if (!ps->readin
3877 && ada_lookup_partial_symbol (ps, name, 1, namespace, wild_match))
3878 {
3879 s = PSYMTAB_TO_SYMTAB (ps);
3880 if (! s->primary)
3881 continue;
3882 bv = BLOCKVECTOR (s);
3883 block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
3884 ada_add_block_symbols (block, name, namespace, objfile, wild_match);
3885 }
3886 }
3887
3888 /* Now add symbols from all per-file blocks if we've gotten no hits.
3889 (Not strictly correct, but perhaps better than an error).
3890 Do the symtabs first, then check the psymtabs */
3891
3892 if (ndefns == 0)
3893 {
3894
3895 ALL_SYMTABS (objfile, s)
3896 {
3897 QUIT;
3898 if (! s->primary)
3899 continue;
3900 bv = BLOCKVECTOR (s);
3901 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3902 ada_add_block_symbols (block, name, namespace, objfile, wild_match);
3903 }
3904
3905 ALL_PSYMTABS (objfile, ps)
3906 {
3907 QUIT;
3908 if (!ps->readin
3909 && ada_lookup_partial_symbol (ps, name, 0, namespace, wild_match))
3910 {
3911 s = PSYMTAB_TO_SYMTAB(ps);
3912 bv = BLOCKVECTOR (s);
3913 if (! s->primary)
3914 continue;
3915 block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
3916 ada_add_block_symbols (block, name, namespace,
3917 objfile, wild_match);
3918 }
3919 }
3920 }
3921
3922 /* Finally, we try to find NAME as a local symbol in some lexically
3923 enclosing block. We do this last, expecting this case to be
3924 rare. */
3925 if (ndefns == 0)
3926 {
3927 add_symbols_from_enclosing_procs (name, namespace, wild_match);
3928 if (ndefns > 0)
3929 goto done;
3930 }
3931
3932 done:
3933 ndefns = remove_extra_symbols (defn_symbols, defn_blocks, ndefns);
3934
3935
3936 *syms = defn_symbols;
3937 *blocks = defn_blocks;
3938#ifdef TIMING
3939 markTimeStop (0);
3940#endif
3941 return ndefns;
3942}
3943
3944/* Return a symbol in NAMESPACE matching NAME, in BLOCK0 and enclosing
3945 * scope and in global scopes, or NULL if none. NAME is folded to
3946 * lower case first, unless it is surrounded in single quotes.
3947 * Otherwise, the result is as for ada_lookup_symbol_list, but is
3948 * disambiguated by user query if needed. */
3949
3950struct symbol*
3951ada_lookup_symbol (name, block0, namespace)
3952 const char *name;
3953 struct block *block0;
3954 namespace_enum namespace;
3955{
3956 struct symbol** candidate_syms;
3957 struct block** candidate_blocks;
3958 int n_candidates;
3959
3960 n_candidates = ada_lookup_symbol_list (name,
3961 block0, namespace,
3962 &candidate_syms, &candidate_blocks);
3963
3964 if (n_candidates == 0)
3965 return NULL;
3966 else if (n_candidates != 1)
3967 user_select_syms (candidate_syms, candidate_blocks, n_candidates, 1);
3968
3969 return candidate_syms[0];
3970}
3971
3972
3973/* True iff STR is a possible encoded suffix of a normal Ada name
3974 * that is to be ignored for matching purposes. Suffixes of parallel
3975 * names (e.g., XVE) are not included here. Currently, the possible suffixes
3976 * are given by the regular expression:
3977 * (X[nb]*)?(__[0-9]+|\$[0-9]+|___(LJM|X([FDBUP].*|R[^T]?)))?$
3978 *
3979 */
3980static int
3981is_name_suffix (str)
3982 const char* str;
3983{
3984 int k;
3985 if (str[0] == 'X')
3986 {
3987 str += 1;
3988 while (str[0] != '_' && str[0] != '\0')
3989 {
3990 if (str[0] != 'n' && str[0] != 'b')
3991 return 0;
3992 str += 1;
3993 }
3994 }
3995 if (str[0] == '\000')
3996 return 1;
3997 if (str[0] == '_')
3998 {
3999 if (str[1] != '_' || str[2] == '\000')
4000 return 0;
4001 if (str[2] == '_')
4002 {
4003 if (STREQ (str+3, "LJM"))
4004 return 1;
4005 if (str[3] != 'X')
4006 return 0;
4007 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B' ||
4008 str[4] == 'U' || str[4] == 'P')
4009 return 1;
4010 if (str[4] == 'R' && str[5] != 'T')
4011 return 1;
4012 return 0;
4013 }
4014 for (k = 2; str[k] != '\0'; k += 1)
4015 if (!isdigit (str[k]))
4016 return 0;
4017 return 1;
4018 }
4019 if (str[0] == '$' && str[1] != '\000')
4020 {
4021 for (k = 1; str[k] != '\0'; k += 1)
4022 if (!isdigit (str[k]))
4023 return 0;
4024 return 1;
4025 }
4026 return 0;
4027}
4028
4029/* True if NAME represents a name of the form A1.A2....An, n>=1 and
4030 * PATN[0..PATN_LEN-1] = Ak.Ak+1.....An for some k >= 1. Ignores
4031 * informational suffixes of NAME (i.e., for which is_name_suffix is
4032 * true). */
4033static int
4034wild_match (patn, patn_len, name)
4035 const char* patn;
4036 int patn_len;
4037 const char* name;
4038{
4039 int name_len;
4040 int s, e;
4041
4042 name_len = strlen (name);
4043 if (name_len >= patn_len+5 && STREQN (name, "_ada_", 5)
4044 && STREQN (patn, name+5, patn_len)
4045 && is_name_suffix (name+patn_len+5))
4046 return 1;
4047
4048 while (name_len >= patn_len)
4049 {
4050 if (STREQN (patn, name, patn_len)
4051 && is_name_suffix (name+patn_len))
4052 return 1;
4053 do {
4054 name += 1; name_len -= 1;
4055 } while (name_len > 0
4056 && name[0] != '.' && (name[0] != '_' || name[1] != '_'));
4057 if (name_len <= 0)
4058 return 0;
4059 if (name[0] == '_')
4060 {
4061 if (! islower (name[2]))
4062 return 0;
4063 name += 2; name_len -= 2;
4064 }
4065 else
4066 {
4067 if (! islower (name[1]))
4068 return 0;
4069 name += 1; name_len -= 1;
4070 }
4071 }
4072
4073 return 0;
4074}
4075
4076
4077/* Add symbols from BLOCK matching identifier NAME in NAMESPACE to
4078 vector *defn_symbols, updating *defn_symbols (if necessary), *SZ (the size of
4079 the vector *defn_symbols), and *ndefns (the number of symbols
4080 currently stored in *defn_symbols). If WILD, treat as NAME with a
4081 wildcard prefix. OBJFILE is the section containing BLOCK. */
4082
4083static void
4084ada_add_block_symbols (block, name, namespace, objfile, wild)
4085 struct block* block;
4086 const char* name;
4087 namespace_enum namespace;
4088 struct objfile* objfile;
4089 int wild;
4090{
4091 int i;
4092 int name_len = strlen (name);
4093 /* A matching argument symbol, if any. */
4094 struct symbol *arg_sym;
4095 /* Set true when we find a matching non-argument symbol */
4096 int found_sym;
4097 int is_sorted = BLOCK_SHOULD_SORT (block);
261397f8 4098 struct symbol *sym;
14f9c5c9
AS
4099
4100 arg_sym = NULL; found_sym = 0;
4101 if (wild)
4102 {
261397f8
DJ
4103 struct symbol *sym;
4104 ALL_BLOCK_SYMBOLS (block, i, sym)
14f9c5c9 4105 {
14f9c5c9
AS
4106 if (SYMBOL_NAMESPACE (sym) == namespace &&
4107 wild_match (name, name_len, SYMBOL_NAME (sym)))
4108 {
4109 switch (SYMBOL_CLASS (sym))
4110 {
4111 case LOC_ARG:
4112 case LOC_LOCAL_ARG:
4113 case LOC_REF_ARG:
4114 case LOC_REGPARM:
4115 case LOC_REGPARM_ADDR:
4116 case LOC_BASEREG_ARG:
4117 arg_sym = sym;
4118 break;
4119 case LOC_UNRESOLVED:
4120 continue;
4121 default:
4122 found_sym = 1;
4123 fill_in_ada_prototype (sym);
4124 add_defn_to_vec (fixup_symbol_section (sym, objfile), block);
4125 break;
4126 }
4127 }
4128 }
4129 }
4130 else
4131 {
4132 if (is_sorted)
4133 {
4134 int U;
4135 i = 0; U = BLOCK_NSYMS (block)-1;
4136 while (U - i > 4)
4137 {
4138 int M = (U+i) >> 1;
4139 struct symbol *sym = BLOCK_SYM (block, M);
4140 if (SYMBOL_NAME (sym)[0] < name[0])
4141 i = M+1;
4142 else if (SYMBOL_NAME (sym)[0] > name[0])
4143 U = M-1;
4144 else if (strcmp (SYMBOL_NAME (sym), name) < 0)
4145 i = M+1;
4146 else
4147 U = M;
4148 }
4149 }
4150 else
4151 i = 0;
4152
261397f8
DJ
4153 for (; i < BLOCK_BUCKETS (block); i += 1)
4154 for (sym = BLOCK_BUCKET (block, i); sym != NULL; sym = sym->hash_next)
4155 {
4156 if (SYMBOL_NAMESPACE (sym) == namespace)
4157 {
4158 int cmp = strncmp (name, SYMBOL_NAME (sym), name_len);
14f9c5c9 4159
261397f8
DJ
4160 if (cmp < 0)
4161 {
4162 if (is_sorted)
4163 {
4164 i = BLOCK_BUCKETS (block);
4165 break;
4166 }
4167 }
4168 else if (cmp == 0
4169 && is_name_suffix (SYMBOL_NAME (sym) + name_len))
4170 {
4171 switch (SYMBOL_CLASS (sym))
4172 {
4173 case LOC_ARG:
4174 case LOC_LOCAL_ARG:
4175 case LOC_REF_ARG:
4176 case LOC_REGPARM:
4177 case LOC_REGPARM_ADDR:
4178 case LOC_BASEREG_ARG:
4179 arg_sym = sym;
4180 break;
4181 case LOC_UNRESOLVED:
4182 break;
4183 default:
4184 found_sym = 1;
4185 fill_in_ada_prototype (sym);
4186 add_defn_to_vec (fixup_symbol_section (sym, objfile),
4187 block);
4188 break;
4189 }
4190 }
4191 }
4192 }
14f9c5c9
AS
4193 }
4194
4195 if (! found_sym && arg_sym != NULL)
4196 {
4197 fill_in_ada_prototype (arg_sym);
4198 add_defn_to_vec (fixup_symbol_section (arg_sym, objfile), block);
4199 }
4200
4201 if (! wild)
4202 {
4203 arg_sym = NULL; found_sym = 0;
4204 if (is_sorted)
4205 {
4206 int U;
4207 i = 0; U = BLOCK_NSYMS (block)-1;
4208 while (U - i > 4)
4209 {
4210 int M = (U+i) >> 1;
4211 struct symbol *sym = BLOCK_SYM (block, M);
4212 if (SYMBOL_NAME (sym)[0] < '_')
4213 i = M+1;
4214 else if (SYMBOL_NAME (sym)[0] > '_')
4215 U = M-1;
4216 else if (strcmp (SYMBOL_NAME (sym), "_ada_") < 0)
4217 i = M+1;
4218 else
4219 U = M;
4220 }
4221 }
4222 else
4223 i = 0;
4224
261397f8
DJ
4225 for (; i < BLOCK_BUCKETS (block); i += 1)
4226 for (sym = BLOCK_BUCKET (block, i); sym != NULL; sym = sym->hash_next)
4227 {
4228 struct symbol *sym = BLOCK_SYM (block, i);
14f9c5c9 4229
261397f8
DJ
4230 if (SYMBOL_NAMESPACE (sym) == namespace)
4231 {
4232 int cmp;
14f9c5c9 4233
261397f8
DJ
4234 cmp = (int) '_' - (int) SYMBOL_NAME (sym)[0];
4235 if (cmp == 0)
4236 {
4237 cmp = strncmp ("_ada_", SYMBOL_NAME (sym), 5);
4238 if (cmp == 0)
4239 cmp = strncmp (name, SYMBOL_NAME (sym) + 5, name_len);
4240 }
4241
4242 if (cmp < 0)
4243 {
4244 if (is_sorted)
4245 {
4246 i = BLOCK_BUCKETS (block);
4247 break;
4248 }
4249 }
4250 else if (cmp == 0
4251 && is_name_suffix (SYMBOL_NAME (sym) + name_len + 5))
4252 {
4253 switch (SYMBOL_CLASS (sym))
4254 {
4255 case LOC_ARG:
4256 case LOC_LOCAL_ARG:
4257 case LOC_REF_ARG:
4258 case LOC_REGPARM:
4259 case LOC_REGPARM_ADDR:
4260 case LOC_BASEREG_ARG:
4261 arg_sym = sym;
4262 break;
4263 case LOC_UNRESOLVED:
4264 break;
4265 default:
4266 found_sym = 1;
4267 fill_in_ada_prototype (sym);
4268 add_defn_to_vec (fixup_symbol_section (sym, objfile),
4269 block);
4270 break;
4271 }
4272 }
4273 }
4274 }
4275
14f9c5c9
AS
4276 /* NOTE: This really shouldn't be needed for _ada_ symbols.
4277 They aren't parameters, right? */
4278 if (! found_sym && arg_sym != NULL)
4279 {
4280 fill_in_ada_prototype (arg_sym);
4281 add_defn_to_vec (fixup_symbol_section (arg_sym, objfile), block);
4282 }
4283 }
4284}
4285
4286\f
4287 /* Function Types */
4288
4289/* Assuming that SYM is the symbol for a function, fill in its type
170911c7 4290 with prototype information, if it is not already there. */
14f9c5c9
AS
4291
4292static void
4293fill_in_ada_prototype (func)
4294 struct symbol* func;
4295{
4296 struct block* b;
4297 int nargs, nsyms;
4298 int i;
4299 struct type* ftype;
4300 struct type* rtype;
4301 size_t max_fields;
261397f8 4302 struct symbol *sym;
14f9c5c9
AS
4303
4304 if (func == NULL
4305 || TYPE_CODE (SYMBOL_TYPE (func)) != TYPE_CODE_FUNC
4306 || TYPE_FIELDS (SYMBOL_TYPE (func)) != NULL)
4307 return;
4308
4309 /* We make each function type unique, so that each may have its own */
4310 /* parameter types. This particular way of doing so wastes space: */
4311 /* it would be nicer to build the argument types while the original */
4312 /* function type is being built (FIXME). */
4313 rtype = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (func)));
4314 ftype = alloc_type (TYPE_OBJFILE (SYMBOL_TYPE (func)));
4315 make_function_type (rtype, &ftype);
4316 SYMBOL_TYPE (func) = ftype;
4317
4318 b = SYMBOL_BLOCK_VALUE (func);
14f9c5c9
AS
4319
4320 nargs = 0;
4321 max_fields = 8;
4322 TYPE_FIELDS (ftype) =
4323 (struct field*) xmalloc (sizeof (struct field) * max_fields);
261397f8 4324 ALL_BLOCK_SYMBOLS (b, i, sym)
14f9c5c9 4325 {
14f9c5c9
AS
4326 GROW_VECT (TYPE_FIELDS (ftype), max_fields, nargs+1);
4327
4328 switch (SYMBOL_CLASS (sym))
4329 {
4330 case LOC_REF_ARG:
4331 case LOC_REGPARM_ADDR:
4332 TYPE_FIELD_BITPOS (ftype, nargs) = nargs;
4333 TYPE_FIELD_BITSIZE (ftype, nargs) = 0;
4334 TYPE_FIELD_TYPE (ftype, nargs) =
4335 lookup_pointer_type (check_typedef (SYMBOL_TYPE (sym)));
4336 TYPE_FIELD_NAME (ftype, nargs) = SYMBOL_NAME (sym);
4337 nargs += 1;
4338
4339 break;
4340
4341 case LOC_ARG:
4342 case LOC_REGPARM:
4343 case LOC_LOCAL_ARG:
4344 case LOC_BASEREG_ARG:
4345 TYPE_FIELD_BITPOS (ftype, nargs) = nargs;
4346 TYPE_FIELD_BITSIZE (ftype, nargs) = 0;
4347 TYPE_FIELD_TYPE (ftype, nargs) = check_typedef (SYMBOL_TYPE (sym));
4348 TYPE_FIELD_NAME (ftype, nargs) = SYMBOL_NAME (sym);
4349 nargs += 1;
4350
4351 break;
4352
4353 default:
4354 break;
4355 }
4356 }
4357
4358 /* Re-allocate fields vector; if there are no fields, make the */
4359 /* fields pointer non-null anyway, to mark that this function type */
4360 /* has been filled in. */
4361
4362 TYPE_NFIELDS (ftype) = nargs;
4363 if (nargs == 0)
4364 {
4365 static struct field dummy_field = {0, 0, 0, 0};
aacb1f0a 4366 xfree (TYPE_FIELDS (ftype));
14f9c5c9
AS
4367 TYPE_FIELDS (ftype) = &dummy_field;
4368 }
4369 else
4370 {
4371 struct field* fields =
4372 (struct field*) TYPE_ALLOC (ftype, nargs * sizeof (struct field));
4373 memcpy ((char*) fields,
4374 (char*) TYPE_FIELDS (ftype),
4375 nargs * sizeof (struct field));
aacb1f0a 4376 xfree (TYPE_FIELDS (ftype));
14f9c5c9
AS
4377 TYPE_FIELDS (ftype) = fields;
4378 }
4379}
4380
4381\f
4382 /* Breakpoint-related */
4383
4384char no_symtab_msg[] = "No symbol table is loaded. Use the \"file\" command.";
4385
4386/* Assuming that LINE is pointing at the beginning of an argument to
4387 'break', return a pointer to the delimiter for the initial segment
4388 of that name. This is the first ':', ' ', or end of LINE.
4389*/
4390char*
4391ada_start_decode_line_1 (line)
4392 char* line;
4393{
4394 /* [NOTE: strpbrk would be more elegant, but I am reluctant to be
4395 the first to use such a library function in GDB code.] */
4396 char* p;
4397 for (p = line; *p != '\000' && *p != ' ' && *p != ':'; p += 1)
4398 ;
4399 return p;
4400}
4401
4402/* *SPEC points to a function and line number spec (as in a break
4403 command), following any initial file name specification.
4404
4405 Return all symbol table/line specfications (sals) consistent with the
4406 information in *SPEC and FILE_TABLE in the
4407 following sense:
4408 + FILE_TABLE is null, or the sal refers to a line in the file
4409 named by FILE_TABLE.
4410 + If *SPEC points to an argument with a trailing ':LINENUM',
4411 then the sal refers to that line (or one following it as closely as
4412 possible).
4413 + If *SPEC does not start with '*', the sal is in a function with
4414 that name.
4415
4416 Returns with 0 elements if no matching non-minimal symbols found.
4417
4418 If *SPEC begins with a function name of the form <NAME>, then NAME
4419 is taken as a literal name; otherwise the function name is subject
4420 to the usual mangling.
4421
4422 *SPEC is updated to point after the function/line number specification.
4423
4424 FUNFIRSTLINE is non-zero if we desire the first line of real code
4425 in each function (this is ignored in the presence of a LINENUM spec.).
4426
4427 If CANONICAL is non-NULL, and if any of the sals require a
4428 'canonical line spec', then *CANONICAL is set to point to an array
4429 of strings, corresponding to and equal in length to the returned
4430 list of sals, such that (*CANONICAL)[i] is non-null and contains a
4431 canonical line spec for the ith returned sal, if needed. If no
4432 canonical line specs are required and CANONICAL is non-null,
4433 *CANONICAL is set to NULL.
4434
4435 A 'canonical line spec' is simply a name (in the format of the
4436 breakpoint command) that uniquely identifies a breakpoint position,
4437 with no further contextual information or user selection. It is
4438 needed whenever the file name, function name, and line number
4439 information supplied is insufficient for this unique
4440 identification. Currently overloaded functions, the name '*',
4441 or static functions without a filename yield a canonical line spec.
4442 The array and the line spec strings are allocated on the heap; it
4443 is the caller's responsibility to free them. */
4444
4445struct symtabs_and_lines
4446ada_finish_decode_line_1 (spec, file_table, funfirstline, canonical)
4447 char** spec;
4448 struct symtab* file_table;
4449 int funfirstline;
4450 char*** canonical;
4451{
4452 struct symbol** symbols;
4453 struct block** blocks;
4454 struct block* block;
4455 int n_matches, i, line_num;
4456 struct symtabs_and_lines selected;
4457 struct cleanup* old_chain = make_cleanup (null_cleanup, NULL);
4458 char* name;
4459
4460 int len;
4461 char* lower_name;
4462 char* unquoted_name;
4463
4464 if (file_table == NULL)
4465 block = get_selected_block (NULL);
4466 else
4467 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_table), STATIC_BLOCK);
4468
4469 if (canonical != NULL)
4470 *canonical = (char**) NULL;
4471
4472 name = *spec;
4473 if (**spec == '*')
4474 *spec += 1;
4475 else
4476 {
4477 while (**spec != '\000' &&
4478 ! strchr (ada_completer_word_break_characters, **spec))
4479 *spec += 1;
4480 }
4481 len = *spec - name;
4482
4483 line_num = -1;
4484 if (file_table != NULL && (*spec)[0] == ':' && isdigit ((*spec)[1]))
4485 {
4486 line_num = strtol (*spec + 1, spec, 10);
4487 while (**spec == ' ' || **spec == '\t')
4488 *spec += 1;
4489 }
4490
4491 if (name[0] == '*')
4492 {
4493 if (line_num == -1)
4494 error ("Wild-card function with no line number or file name.");
4495
4496 return all_sals_for_line (file_table->filename, line_num, canonical);
4497 }
4498
4499 if (name[0] == '\'')
4500 {
4501 name += 1;
4502 len -= 2;
4503 }
4504
4505 if (name[0] == '<')
4506 {
4507 unquoted_name = (char*) alloca (len-1);
4508 memcpy (unquoted_name, name+1, len-2);
4509 unquoted_name[len-2] = '\000';
4510 lower_name = NULL;
4511 }
4512 else
4513 {
4514 unquoted_name = (char*) alloca (len+1);
4515 memcpy (unquoted_name, name, len);
4516 unquoted_name[len] = '\000';
4517 lower_name = (char*) alloca (len + 1);
4518 for (i = 0; i < len; i += 1)
4519 lower_name[i] = tolower (name[i]);
4520 lower_name[len] = '\000';
4521 }
4522
4523 n_matches = 0;
4524 if (lower_name != NULL)
4525 n_matches = ada_lookup_symbol_list (ada_mangle (lower_name), block,
4526 VAR_NAMESPACE, &symbols, &blocks);
4527 if (n_matches == 0)
4528 n_matches = ada_lookup_symbol_list (unquoted_name, block,
4529 VAR_NAMESPACE, &symbols, &blocks);
4530 if (n_matches == 0 && line_num >= 0)
4531 error ("No line number information found for %s.", unquoted_name);
4532 else if (n_matches == 0)
4533 {
4534#ifdef HPPA_COMPILER_BUG
4535 /* FIXME: See comment in symtab.c::decode_line_1 */
4536#undef volatile
4537 volatile struct symtab_and_line val;
4538#define volatile /*nothing*/
4539#else
4540 struct symtab_and_line val;
4541#endif
4542 struct minimal_symbol* msymbol;
4543
4544 INIT_SAL (&val);
4545
4546 msymbol = NULL;
4547 if (lower_name != NULL)
4548 msymbol = ada_lookup_minimal_symbol (ada_mangle (lower_name));
4549 if (msymbol == NULL)
4550 msymbol = ada_lookup_minimal_symbol (unquoted_name);
4551 if (msymbol != NULL)
4552 {
4553 val.pc = SYMBOL_VALUE_ADDRESS (msymbol);
4554 val.section = SYMBOL_BFD_SECTION (msymbol);
4555 if (funfirstline)
4556 {
4557 val.pc += FUNCTION_START_OFFSET;
4558 SKIP_PROLOGUE (val.pc);
4559 }
4560 selected.sals = (struct symtab_and_line *)
4561 xmalloc (sizeof (struct symtab_and_line));
4562 selected.sals[0] = val;
4563 selected.nelts = 1;
4564 return selected;
4565 }
4566
4567 if (!have_full_symbols () &&
4568 !have_partial_symbols () && !have_minimal_symbols ())
4569 error (no_symtab_msg);
4570
4571 error ("Function \"%s\" not defined.", unquoted_name);
4572 return selected; /* for lint */
4573 }
4574
4575 if (line_num >= 0)
4576 {
4577 return
4578 find_sal_from_funcs_and_line (file_table->filename, line_num,
4579 symbols, n_matches);
4580 }
4581 else
4582 {
4583 selected.nelts = user_select_syms (symbols, blocks, n_matches, n_matches);
4584 }
4585
4586 selected.sals = (struct symtab_and_line*)
4587 xmalloc (sizeof (struct symtab_and_line) * selected.nelts);
4588 memset (selected.sals, 0, selected.nelts * sizeof (selected.sals[i]));
aacb1f0a 4589 make_cleanup (xfree, selected.sals);
14f9c5c9
AS
4590
4591 i = 0;
4592 while (i < selected.nelts)
4593 {
4594 if (SYMBOL_CLASS (symbols[i]) == LOC_BLOCK)
4595 selected.sals[i] = find_function_start_sal (symbols[i], funfirstline);
4596 else if (SYMBOL_LINE (symbols[i]) != 0)
4597 {
4598 selected.sals[i].symtab = symtab_for_sym (symbols[i]);
4599 selected.sals[i].line = SYMBOL_LINE (symbols[i]);
4600 }
4601 else if (line_num >= 0)
4602 {
4603 /* Ignore this choice */
4604 symbols[i] = symbols[selected.nelts-1];
4605 blocks[i] = blocks[selected.nelts-1];
4606 selected.nelts -= 1;
4607 continue;
4608 }
4609 else
4610 error ("Line number not known for symbol \"%s\"", unquoted_name);
4611 i += 1;
4612 }
4613
4614 if (canonical != NULL && (line_num >= 0 || n_matches > 1))
4615 {
4616 *canonical = (char**) xmalloc (sizeof(char*) * selected.nelts);
4617 for (i = 0; i < selected.nelts; i += 1)
4618 (*canonical)[i] =
4619 extended_canonical_line_spec (selected.sals[i],
4620 SYMBOL_SOURCE_NAME (symbols[i]));
4621 }
4622
4623 discard_cleanups (old_chain);
4624 return selected;
4625}
4626
4627/* The (single) sal corresponding to line LINE_NUM in a symbol table
4628 with file name FILENAME that occurs in one of the functions listed
4629 in SYMBOLS[0 .. NSYMS-1]. */
4630static struct symtabs_and_lines
4631find_sal_from_funcs_and_line (filename, line_num, symbols, nsyms)
4632 const char* filename;
4633 int line_num;
4634 struct symbol** symbols;
4635 int nsyms;
4636{
4637 struct symtabs_and_lines sals;
4638 int best_index, best;
4639 struct linetable* best_linetable;
4640 struct objfile* objfile;
4641 struct symtab* s;
4642 struct symtab* best_symtab;
4643
4644 read_all_symtabs (filename);
4645
4646 best_index = 0; best_linetable = NULL; best_symtab = NULL;
4647 best = 0;
4648 ALL_SYMTABS (objfile, s)
4649 {
4650 struct linetable *l;
4651 int ind, exact;
4652
4653 QUIT;
4654
4655 if (!STREQ (filename, s->filename))
4656 continue;
4657 l = LINETABLE (s);
4658 ind = find_line_in_linetable (l, line_num, symbols, nsyms, &exact);
4659 if (ind >= 0)
4660 {
4661 if (exact)
4662 {
4663 best_index = ind;
4664 best_linetable = l;
4665 best_symtab = s;
4666 goto done;
4667 }
4668 if (best == 0 || l->item[ind].line < best)
4669 {
4670 best = l->item[ind].line;
4671 best_index = ind;
4672 best_linetable = l;
4673 best_symtab = s;
4674 }
4675 }
4676 }
4677
4678 if (best == 0)
4679 error ("Line number not found in designated function.");
4680
4681 done:
4682
4683 sals.nelts = 1;
4684 sals.sals = (struct symtab_and_line*) xmalloc (sizeof (sals.sals[0]));
4685
4686 INIT_SAL (&sals.sals[0]);
4687
4688 sals.sals[0].line = best_linetable->item[best_index].line;
4689 sals.sals[0].pc = best_linetable->item[best_index].pc;
4690 sals.sals[0].symtab = best_symtab;
4691
4692 return sals;
4693}
4694
4695/* Return the index in LINETABLE of the best match for LINE_NUM whose
4696 pc falls within one of the functions denoted by SYMBOLS[0..NSYMS-1].
4697 Set *EXACTP to the 1 if the match is exact, and 0 otherwise. */
4698static int
4699find_line_in_linetable (linetable, line_num, symbols, nsyms, exactp)
4700 struct linetable* linetable;
4701 int line_num;
4702 struct symbol** symbols;
4703 int nsyms;
4704 int* exactp;
4705{
4706 int i, len, best_index, best;
4707
4708 if (line_num <= 0 || linetable == NULL)
4709 return -1;
4710
4711 len = linetable->nitems;
4712 for (i = 0, best_index = -1, best = 0; i < len; i += 1)
4713 {
4714 int k;
4715 struct linetable_entry* item = &(linetable->item[i]);
4716
4717 for (k = 0; k < nsyms; k += 1)
4718 {
4719 if (symbols[k] != NULL && SYMBOL_CLASS (symbols[k]) == LOC_BLOCK
4720 && item->pc >= BLOCK_START (SYMBOL_BLOCK_VALUE (symbols[k]))
4721 && item->pc < BLOCK_END (SYMBOL_BLOCK_VALUE (symbols[k])))
4722 goto candidate;
4723 }
4724 continue;
4725
4726 candidate:
4727
4728 if (item->line == line_num)
4729 {
4730 *exactp = 1;
4731 return i;
4732 }
4733
4734 if (item->line > line_num && (best == 0 || item->line < best))
4735 {
4736 best = item->line;
4737 best_index = i;
4738 }
4739 }
4740
4741 *exactp = 0;
4742 return best_index;
4743}
4744
4745/* Find the smallest k >= LINE_NUM such that k is a line number in
4746 LINETABLE, and k falls strictly within a named function that begins at
4747 or before LINE_NUM. Return -1 if there is no such k. */
4748static int
4749nearest_line_number_in_linetable (linetable, line_num)
4750 struct linetable* linetable;
4751 int line_num;
4752{
4753 int i, len, best;
4754
4755 if (line_num <= 0 || linetable == NULL || linetable->nitems == 0)
4756 return -1;
4757 len = linetable->nitems;
4758
4759 i = 0; best = INT_MAX;
4760 while (i < len)
4761 {
4762 int k;
4763 struct linetable_entry* item = &(linetable->item[i]);
4764
4765 if (item->line >= line_num && item->line < best)
4766 {
4767 char* func_name;
4768 CORE_ADDR start, end;
4769
4770 func_name = NULL;
4771 find_pc_partial_function (item->pc, &func_name, &start, &end);
4772
4773 if (func_name != NULL && item->pc < end)
4774 {
4775 if (item->line == line_num)
4776 return line_num;
4777 else
4778 {
4779 struct symbol* sym =
4780 standard_lookup (func_name, VAR_NAMESPACE);
4781 if (is_plausible_func_for_line (sym, line_num))
4782 best = item->line;
4783 else
4784 {
4785 do
4786 i += 1;
4787 while (i < len && linetable->item[i].pc < end);
4788 continue;
4789 }
4790 }
4791 }
4792 }
4793
4794 i += 1;
4795 }
4796
4797 return (best == INT_MAX) ? -1 : best;
4798}
4799
4800
4801/* Return the next higher index, k, into LINETABLE such that k > IND,
4802 entry k in LINETABLE has a line number equal to LINE_NUM, k
4803 corresponds to a PC that is in a function different from that
4804 corresponding to IND, and falls strictly within a named function
4805 that begins at a line at or preceding STARTING_LINE.
4806 Return -1 if there is no such k.
4807 IND == -1 corresponds to no function. */
4808
4809static int
4810find_next_line_in_linetable (linetable, line_num, starting_line, ind)
4811 struct linetable* linetable;
4812 int line_num;
4813 int starting_line;
4814 int ind;
4815{
4816 int i, len;
4817
4818 if (line_num <= 0 || linetable == NULL || ind >= linetable->nitems)
4819 return -1;
4820 len = linetable->nitems;
4821
4822 if (ind >= 0)
4823 {
4824 CORE_ADDR start, end;
4825
4826 if (find_pc_partial_function (linetable->item[ind].pc,
4827 (char**) NULL, &start, &end))
4828 {
4829 while (ind < len && linetable->item[ind].pc < end)
4830 ind += 1;
4831 }
4832 else
4833 ind += 1;
4834 }
4835 else
4836 ind = 0;
4837
4838 i = ind;
4839 while (i < len)
4840 {
4841 int k;
4842 struct linetable_entry* item = &(linetable->item[i]);
4843
4844 if (item->line >= line_num)
4845 {
4846 char* func_name;
4847 CORE_ADDR start, end;
4848
4849 func_name = NULL;
4850 find_pc_partial_function (item->pc, &func_name, &start, &end);
4851
4852 if (func_name != NULL && item->pc < end)
4853 {
4854 if (item->line == line_num)
4855 {
4856 struct symbol* sym =
4857 standard_lookup (func_name, VAR_NAMESPACE);
4858 if (is_plausible_func_for_line (sym, starting_line))
4859 return i;
4860 else
4861 {
4862 while ((i+1) < len && linetable->item[i+1].pc < end)
4863 i += 1;
4864 }
4865 }
4866 }
4867 }
4868 i += 1;
4869 }
4870
4871 return -1;
4872}
4873
4874/* True iff function symbol SYM starts somewhere at or before line #
4875 LINE_NUM. */
4876static int
4877is_plausible_func_for_line (sym, line_num)
4878 struct symbol* sym;
4879 int line_num;
4880{
4881 struct symtab_and_line start_sal;
4882
4883 if (sym == NULL)
4884 return 0;
4885
4886 start_sal = find_function_start_sal (sym, 0);
4887
4888 return (start_sal.line != 0 && line_num >= start_sal.line);
4889}
4890
4891static void
4892debug_print_lines (lt)
4893 struct linetable* lt;
4894{
4895 int i;
4896
4897 if (lt == NULL)
4898 return;
4899
4900 fprintf (stderr, "\t");
4901 for (i = 0; i < lt->nitems; i += 1)
4902 fprintf (stderr, "(%d->%p) ", lt->item[i].line, (void *) lt->item[i].pc);
4903 fprintf (stderr, "\n");
4904}
4905
4906static void
4907debug_print_block (b)
4908 struct block* b;
4909{
4910 int i;
261397f8
DJ
4911 struct symbol *i;
4912
14f9c5c9
AS
4913 fprintf (stderr, "Block: %p; [0x%lx, 0x%lx]",
4914 b, BLOCK_START(b), BLOCK_END(b));
4915 if (BLOCK_FUNCTION(b) != NULL)
4916 fprintf (stderr, " Function: %s", SYMBOL_NAME (BLOCK_FUNCTION(b)));
4917 fprintf (stderr, "\n");
4918 fprintf (stderr, "\t Superblock: %p\n", BLOCK_SUPERBLOCK(b));
4919 fprintf (stderr, "\t Symbols:");
261397f8 4920 ALL_BLOCK_SYMBOLS (b, i, sym)
14f9c5c9
AS
4921 {
4922 if (i > 0 && i % 4 == 0)
4923 fprintf (stderr, "\n\t\t ");
261397f8 4924 fprintf (stderr, " %s", SYMBOL_NAME (sym));
14f9c5c9
AS
4925 }
4926 fprintf (stderr, "\n");
4927}
4928
4929static void
4930debug_print_blocks (bv)
4931 struct blockvector* bv;
4932{
4933 int i;
4934
4935 if (bv == NULL)
4936 return;
4937 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); i += 1) {
4938 fprintf (stderr, "%6d. ", i);
4939 debug_print_block (BLOCKVECTOR_BLOCK (bv, i));
4940 }
4941}
4942
4943static void
4944debug_print_symtab (s)
4945 struct symtab* s;
4946{
4947 fprintf (stderr, "Symtab %p\n File: %s; Dir: %s\n", s,
4948 s->filename, s->dirname);
4949 fprintf (stderr, " Blockvector: %p, Primary: %d\n",
4950 BLOCKVECTOR(s), s->primary);
4951 debug_print_blocks (BLOCKVECTOR(s));
4952 fprintf (stderr, " Line table: %p\n", LINETABLE (s));
4953 debug_print_lines (LINETABLE(s));
4954}
4955
4956/* Read in all symbol tables corresponding to partial symbol tables
4957 with file name FILENAME. */
4958static void
4959read_all_symtabs (filename)
4960 const char* filename;
4961{
4962 struct partial_symtab* ps;
4963 struct objfile* objfile;
4964
4965 ALL_PSYMTABS (objfile, ps)
4966 {
4967 QUIT;
4968
4969 if (STREQ (filename, ps->filename))
4970 PSYMTAB_TO_SYMTAB (ps);
4971 }
4972}
4973
4974/* All sals corresponding to line LINE_NUM in a symbol table from file
4975 FILENAME, as filtered by the user. If CANONICAL is not null, set
4976 it to a corresponding array of canonical line specs. */
4977static struct symtabs_and_lines
4978all_sals_for_line (filename, line_num, canonical)
4979 const char* filename;
4980 int line_num;
4981 char*** canonical;
4982{
4983 struct symtabs_and_lines result;
4984 struct objfile* objfile;
4985 struct symtab* s;
4986 struct cleanup* old_chain = make_cleanup (null_cleanup, NULL);
4987 size_t len;
4988
4989 read_all_symtabs (filename);
4990
4991 result.sals = (struct symtab_and_line*) xmalloc (4 * sizeof (result.sals[0]));
4992 result.nelts = 0;
4993 len = 4;
4994 make_cleanup (free_current_contents, &result.sals);
4995
4996 ALL_SYMTABS (objfile, s)
4997 {
4998 int ind, target_line_num;
4999
5000 QUIT;
5001
5002 if (!STREQ (s->filename, filename))
5003 continue;
5004
5005 target_line_num =
5006 nearest_line_number_in_linetable (LINETABLE (s), line_num);
5007 if (target_line_num == -1)
5008 continue;
5009
5010 ind = -1;
5011 while (1)
5012 {
5013 ind =
5014 find_next_line_in_linetable (LINETABLE (s),
5015 target_line_num, line_num, ind);
5016
5017 if (ind < 0)
5018 break;
5019
5020 GROW_VECT (result.sals, len, result.nelts+1);
5021 INIT_SAL (&result.sals[result.nelts]);
5022 result.sals[result.nelts].line = LINETABLE(s)->item[ind].line;
5023 result.sals[result.nelts].pc = LINETABLE(s)->item[ind].pc;
5024 result.sals[result.nelts].symtab = s;
5025 result.nelts += 1;
5026 }
5027 }
5028
5029 if (canonical != NULL || result.nelts > 1)
5030 {
5031 int k;
5032 char** func_names = (char**) alloca (result.nelts * sizeof (char*));
5033 int first_choice = (result.nelts > 1) ? 2 : 1;
5034 int n;
5035 int* choices = (int*) alloca (result.nelts * sizeof (int));
5036
5037 for (k = 0; k < result.nelts; k += 1)
5038 {
5039 find_pc_partial_function (result.sals[k].pc, &func_names[k],
5040 (CORE_ADDR*) NULL, (CORE_ADDR*) NULL);
5041 if (func_names[k] == NULL)
5042 error ("Could not find function for one or more breakpoints.");
5043 }
5044
5045 if (result.nelts > 1)
5046 {
5047 printf_unfiltered("[0] cancel\n");
5048 if (result.nelts > 1)
5049 printf_unfiltered("[1] all\n");
5050 for (k = 0; k < result.nelts; k += 1)
5051 printf_unfiltered ("[%d] %s\n", k + first_choice,
5052 ada_demangle (func_names[k]));
5053
5054 n = get_selections (choices, result.nelts, result.nelts,
5055 result.nelts > 1, "instance-choice");
5056
5057 for (k = 0; k < n; k += 1)
5058 {
5059 result.sals[k] = result.sals[choices[k]];
5060 func_names[k] = func_names[choices[k]];
5061 }
5062 result.nelts = n;
5063 }
5064
5065 if (canonical != NULL)
5066 {
5067 *canonical = (char**) xmalloc (result.nelts * sizeof (char**));
aacb1f0a 5068 make_cleanup (xfree, *canonical);
14f9c5c9
AS
5069 for (k = 0; k < result.nelts; k += 1)
5070 {
5071 (*canonical)[k] =
5072 extended_canonical_line_spec (result.sals[k], func_names[k]);
5073 if ((*canonical)[k] == NULL)
5074 error ("Could not locate one or more breakpoints.");
aacb1f0a 5075 make_cleanup (xfree, (*canonical)[k]);
14f9c5c9
AS
5076 }
5077 }
5078 }
5079
5080 discard_cleanups (old_chain);
5081 return result;
5082}
5083
5084
5085/* A canonical line specification of the form FILE:NAME:LINENUM for
5086 symbol table and line data SAL. NULL if insufficient
5087 information. The caller is responsible for releasing any space
5088 allocated. */
5089
5090static char*
5091extended_canonical_line_spec (sal, name)
5092 struct symtab_and_line sal;
5093 const char* name;
5094{
5095 char* r;
5096
5097 if (sal.symtab == NULL || sal.symtab->filename == NULL ||
5098 sal.line <= 0)
5099 return NULL;
5100
5101 r = (char*) xmalloc (strlen (name) + strlen (sal.symtab->filename)
5102 + sizeof(sal.line)*3 + 3);
5103 sprintf (r, "%s:'%s':%d", sal.symtab->filename, name, sal.line);
5104 return r;
5105}
5106
5107#if 0
5108int begin_bnum = -1;
5109#endif
5110int begin_annotate_level = 0;
5111
5112static void
5113begin_cleanup (void* dummy)
5114{
5115 begin_annotate_level = 0;
5116}
5117
5118static void
5119begin_command (args, from_tty)
5120 char *args;
5121 int from_tty;
5122{
5123 struct minimal_symbol *msym;
5124 CORE_ADDR main_program_name_addr;
5125 char main_program_name[1024];
5126 struct cleanup* old_chain = make_cleanup (begin_cleanup, NULL);
5127 begin_annotate_level = 2;
5128
5129 /* Check that there is a program to debug */
5130 if (!have_full_symbols () && !have_partial_symbols ())
5131 error ("No symbol table is loaded. Use the \"file\" command.");
5132
5133 /* Check that we are debugging an Ada program */
5134 /* if (ada_update_initial_language (language_unknown, NULL) != language_ada)
5135 error ("Cannot find the Ada initialization procedure. Is this an Ada main program?");
5136 */
5137 /* FIXME: language_ada should be defined in defs.h */
5138
5139 /* Get the address of the name of the main procedure */
5140 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
5141
5142 if (msym != NULL)
5143 {
5144 main_program_name_addr = SYMBOL_VALUE_ADDRESS (msym);
5145 if (main_program_name_addr == 0)
5146 error ("Invalid address for Ada main program name.");
5147
5148 /* Read the name of the main procedure */
5149 extract_string (main_program_name_addr, main_program_name);
5150
5151 /* Put a temporary breakpoint in the Ada main program and run */
5152 do_command ("tbreak ", main_program_name, 0);
5153 do_command ("run ", args, 0);
5154 }
5155 else
5156 {
5157 /* If we could not find the symbol containing the name of the
5158 main program, that means that the compiler that was used to build
5159 was not recent enough. In that case, we fallback to the previous
5160 mechanism, which is a little bit less reliable, but has proved to work
5161 in most cases. The only cases where it will fail is when the user
5162 has set some breakpoints which will be hit before the end of the
5163 begin command processing (eg in the initialization code).
5164
5165 The begining of the main Ada subprogram is located by breaking
5166 on the adainit procedure. Since we know that the binder generates
5167 the call to this procedure exactly 2 calls before the call to the
5168 Ada main subprogram, it is then easy to put a breakpoint on this
5169 Ada main subprogram once we hit adainit.
5170 */
5171 do_command ("tbreak adainit", 0);
5172 do_command ("run ", args, 0);
5173 do_command ("up", 0);
5174 do_command ("tbreak +2", 0);
5175 do_command ("continue", 0);
5176 do_command ("step", 0);
5177 }
5178
5179 do_cleanups (old_chain);
5180}
5181
5182int
5183is_ada_runtime_file (filename)
5184 char *filename;
5185{
5186 return (STREQN (filename, "s-", 2) ||
5187 STREQN (filename, "a-", 2) ||
5188 STREQN (filename, "g-", 2) ||
5189 STREQN (filename, "i-", 2));
5190}
5191
5192/* find the first frame that contains debugging information and that is not
5193 part of the Ada run-time, starting from fi and moving upward. */
5194
5195int
5196find_printable_frame (fi, level)
5197 struct frame_info *fi;
5198 int level;
5199{
5200 struct symtab_and_line sal;
5201
5202 for (; fi != NULL; level += 1, fi = get_prev_frame (fi))
5203 {
5204 /* If fi is not the innermost frame, that normally means that fi->pc
5205 points to *after* the call instruction, and we want to get the line
5206 containing the call, never the next line. But if the next frame is
5207 a signal_handler_caller or a dummy frame, then the next frame was
5208 not entered as the result of a call, and we want to get the line
5209 containing fi->pc. */
5210 sal =
5211 find_pc_line (fi->pc,
5212 fi->next != NULL
5213 && !fi->next->signal_handler_caller
5214 && !frame_in_dummy (fi->next));
5215 if (sal.symtab && !is_ada_runtime_file (sal.symtab->filename))
5216 {
5217#if defined(__alpha__) && defined(__osf__) && !defined(VXWORKS_TARGET)
5218 /* libpthread.so contains some debugging information that prevents us
5219 from finding the right frame */
5220
5221 if (sal.symtab->objfile &&
5222 STREQ (sal.symtab->objfile->name, "/usr/shlib/libpthread.so"))
5223 continue;
5224#endif
5225 selected_frame = fi;
5226 break;
5227 }
5228 }
5229
5230 return level;
5231}
5232
5233void
5234ada_report_exception_break (b)
5235 struct breakpoint *b;
5236{
5237#ifdef UI_OUT
5238 /* FIXME: break_on_exception should be defined in breakpoint.h */
5239 /* if (b->break_on_exception == 1)
5240 {
5241 /* Assume that cond has 16 elements, the 15th
5242 being the exception */ /*
5243 if (b->cond && b->cond->nelts == 16)
5244 {
5245 ui_out_text (uiout, "on ");
5246 ui_out_field_string (uiout, "exception",
5247 SYMBOL_NAME (b->cond->elts[14].symbol));
5248 }
5249 else
5250 ui_out_text (uiout, "on all exceptions");
5251 }
5252 else if (b->break_on_exception == 2)
5253 ui_out_text (uiout, "on unhandled exception");
5254 else if (b->break_on_exception == 3)
5255 ui_out_text (uiout, "on assert failure");
5256#else
5257 if (b->break_on_exception == 1)
5258 {*/
5259 /* Assume that cond has 16 elements, the 15th
5260 being the exception */ /*
5261 if (b->cond && b->cond->nelts == 16)
5262 {
5263 fputs_filtered ("on ", gdb_stdout);
5264 fputs_filtered (SYMBOL_NAME
5265 (b->cond->elts[14].symbol), gdb_stdout);
5266 }
5267 else
5268 fputs_filtered ("on all exceptions", gdb_stdout);
5269 }
5270 else if (b->break_on_exception == 2)
5271 fputs_filtered ("on unhandled exception", gdb_stdout);
5272 else if (b->break_on_exception == 3)
5273 fputs_filtered ("on assert failure", gdb_stdout);
5274*/
5275#endif
5276}
5277
5278int
5279ada_is_exception_sym (struct symbol* sym)
5280{
5281 char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
5282
5283 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
5284 && SYMBOL_CLASS (sym) != LOC_BLOCK
5285 && SYMBOL_CLASS (sym) != LOC_CONST
5286 && type_name != NULL
5287 && STREQ (type_name, "exception"));
5288}
5289
5290int
5291ada_maybe_exception_partial_symbol (struct partial_symbol* sym)
5292{
5293 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
5294 && SYMBOL_CLASS (sym) != LOC_BLOCK
5295 && SYMBOL_CLASS (sym) != LOC_CONST);
5296}
5297
5298/* If ARG points to an Ada exception or assert breakpoint, rewrite
5299 into equivalent form. Return resulting argument string. Set
5300 *BREAK_ON_EXCEPTIONP to 1 for ordinary break on exception, 2 for
5301 break on unhandled, 3 for assert, 0 otherwise. */
5302char* ada_breakpoint_rewrite (char* arg, int* break_on_exceptionp)
5303{
5304 if (arg == NULL)
5305 return arg;
5306 *break_on_exceptionp = 0;
5307 /* FIXME: language_ada should be defined in defs.h */
5308 /* if (current_language->la_language == language_ada
5309 && STREQN (arg, "exception", 9) &&
5310 (arg[9] == ' ' || arg[9] == '\t' || arg[9] == '\0'))
5311 {
5312 char *tok, *end_tok;
5313 int toklen;
5314
5315 *break_on_exceptionp = 1;
5316
5317 tok = arg+9;
5318 while (*tok == ' ' || *tok == '\t')
5319 tok += 1;
5320
5321 end_tok = tok;
5322
5323 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
5324 end_tok += 1;
5325
5326 toklen = end_tok - tok;
5327
5328 arg = (char*) xmalloc (sizeof ("__gnat_raise_nodefer_with_msg if "
5329 "long_integer(e) = long_integer(&)")
5330 + toklen + 1);
aacb1f0a 5331 make_cleanup (xfree, arg);
14f9c5c9
AS
5332 if (toklen == 0)
5333 strcpy (arg, "__gnat_raise_nodefer_with_msg");
5334 else if (STREQN (tok, "unhandled", toklen))
5335 {
5336 *break_on_exceptionp = 2;
5337 strcpy (arg, "__gnat_unhandled_exception");
5338 }
5339 else
5340 {
5341 sprintf (arg, "__gnat_raise_nodefer_with_msg if "
5342 "long_integer(e) = long_integer(&%.*s)",
5343 toklen, tok);
5344 }
5345 }
5346 else if (current_language->la_language == language_ada
5347 && STREQN (arg, "assert", 6) &&
5348 (arg[6] == ' ' || arg[6] == '\t' || arg[6] == '\0'))
5349 {
5350 char *tok = arg + 6;
5351
5352 *break_on_exceptionp = 3;
5353
5354 arg = (char*)
5355 xmalloc (sizeof ("system__assertions__raise_assert_failure")
5356 + strlen (tok) + 1);
aacb1f0a 5357 make_cleanup (xfree, arg);
14f9c5c9
AS
5358 sprintf (arg, "system__assertions__raise_assert_failure%s", tok);
5359 }
5360 */
5361 return arg;
5362}
5363
5364\f
5365 /* Field Access */
5366
5367/* True if field number FIELD_NUM in struct or union type TYPE is supposed
5368 to be invisible to users. */
5369
5370int
5371ada_is_ignored_field (type, field_num)
5372 struct type *type;
5373 int field_num;
5374{
5375 if (field_num < 0 || field_num > TYPE_NFIELDS (type))
5376 return 1;
5377 else
5378 {
5379 const char* name = TYPE_FIELD_NAME (type, field_num);
5380 return (name == NULL
5381 || (name[0] == '_' && ! STREQN (name, "_parent", 7)));
5382 }
5383}
5384
5385/* True iff structure type TYPE has a tag field. */
5386
5387int
5388ada_is_tagged_type (type)
5389 struct type *type;
5390{
5391 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5392 return 0;
5393
5394 return (ada_lookup_struct_elt_type (type, "_tag", 1, NULL) != NULL);
5395}
5396
5397/* The type of the tag on VAL. */
5398
5399struct type*
5400ada_tag_type (val)
5401 struct value* val;
5402{
5403 return ada_lookup_struct_elt_type (VALUE_TYPE (val), "_tag", 0, NULL);
5404}
5405
5406/* The value of the tag on VAL. */
5407
5408struct value*
5409ada_value_tag (val)
5410 struct value* val;
5411{
5412 return ada_value_struct_elt (val, "_tag", "record");
5413}
5414
5415/* The parent type of TYPE, or NULL if none. */
5416
5417struct type*
5418ada_parent_type (type)
5419 struct type *type;
5420{
5421 int i;
5422
5423 CHECK_TYPEDEF (type);
5424
5425 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT)
5426 return NULL;
5427
5428 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5429 if (ada_is_parent_field (type, i))
5430 return check_typedef (TYPE_FIELD_TYPE (type, i));
5431
5432 return NULL;
5433}
5434
5435/* True iff field number FIELD_NUM of structure type TYPE contains the
5436 parent-type (inherited) fields of a derived type. Assumes TYPE is
5437 a structure type with at least FIELD_NUM+1 fields. */
5438
5439int
5440ada_is_parent_field (type, field_num)
5441 struct type *type;
5442 int field_num;
5443{
5444 const char* name = TYPE_FIELD_NAME (check_typedef (type), field_num);
5445 return (name != NULL &&
5446 (STREQN (name, "PARENT", 6) || STREQN (name, "_parent", 7)));
5447}
5448
5449/* True iff field number FIELD_NUM of structure type TYPE is a
5450 transparent wrapper field (which should be silently traversed when doing
5451 field selection and flattened when printing). Assumes TYPE is a
5452 structure type with at least FIELD_NUM+1 fields. Such fields are always
5453 structures. */
5454
5455int
5456ada_is_wrapper_field (type, field_num)
5457 struct type *type;
5458 int field_num;
5459{
5460 const char* name = TYPE_FIELD_NAME (type, field_num);
5461 return (name != NULL
5462 && (STREQN (name, "PARENT", 6) || STREQ (name, "REP")
5463 || STREQN (name, "_parent", 7)
5464 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
5465}
5466
5467/* True iff field number FIELD_NUM of structure or union type TYPE
5468 is a variant wrapper. Assumes TYPE is a structure type with at least
5469 FIELD_NUM+1 fields. */
5470
5471int
5472ada_is_variant_part (type, field_num)
5473 struct type *type;
5474 int field_num;
5475{
5476 struct type* field_type = TYPE_FIELD_TYPE (type, field_num);
5477 return (TYPE_CODE (field_type) == TYPE_CODE_UNION
5478 || (is_dynamic_field (type, field_num)
5479 && TYPE_CODE (TYPE_TARGET_TYPE (field_type)) == TYPE_CODE_UNION));
5480}
5481
5482/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
5483 whose discriminants are contained in the record type OUTER_TYPE,
5484 returns the type of the controlling discriminant for the variant. */
5485
5486struct type*
5487ada_variant_discrim_type (var_type, outer_type)
5488 struct type *var_type;
5489 struct type *outer_type;
5490{
5491 char* name = ada_variant_discrim_name (var_type);
5492 struct type *type =
5493 ada_lookup_struct_elt_type (outer_type, name, 1, NULL);
5494 if (type == NULL)
5495 return builtin_type_int;
5496 else
5497 return type;
5498}
5499
5500/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
5501 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
5502 represents a 'when others' clause; otherwise 0. */
5503
5504int
5505ada_is_others_clause (type, field_num)
5506 struct type *type;
5507 int field_num;
5508{
5509 const char* name = TYPE_FIELD_NAME (type, field_num);
5510 return (name != NULL && name[0] == 'O');
5511}
5512
5513/* Assuming that TYPE0 is the type of the variant part of a record,
5514 returns the name of the discriminant controlling the variant. The
5515 value is valid until the next call to ada_variant_discrim_name. */
5516
5517char *
5518ada_variant_discrim_name (type0)
5519 struct type *type0;
5520{
5521 static char* result = NULL;
5522 static size_t result_len = 0;
5523 struct type* type;
5524 const char* name;
5525 const char* discrim_end;
5526 const char* discrim_start;
5527
5528 if (TYPE_CODE (type0) == TYPE_CODE_PTR)
5529 type = TYPE_TARGET_TYPE (type0);
5530 else
5531 type = type0;
5532
5533 name = ada_type_name (type);
5534
5535 if (name == NULL || name[0] == '\000')
5536 return "";
5537
5538 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
5539 discrim_end -= 1)
5540 {
5541 if (STREQN (discrim_end, "___XVN", 6))
5542 break;
5543 }
5544 if (discrim_end == name)
5545 return "";
5546
5547 for (discrim_start = discrim_end; discrim_start != name+3;
5548 discrim_start -= 1)
5549 {
5550 if (discrim_start == name+1)
5551 return "";
5552 if ((discrim_start > name+3 && STREQN (discrim_start-3, "___", 3))
5553 || discrim_start[-1] == '.')
5554 break;
5555 }
5556
5557 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
5558 strncpy (result, discrim_start, discrim_end - discrim_start);
5559 result[discrim_end-discrim_start] = '\0';
5560 return result;
5561}
5562
5563/* Scan STR for a subtype-encoded number, beginning at position K. Put the
5564 position of the character just past the number scanned in *NEW_K,
5565 if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL. Return 1
5566 if there was a valid number at the given position, and 0 otherwise. A
5567 "subtype-encoded" number consists of the absolute value in decimal,
5568 followed by the letter 'm' to indicate a negative number. Assumes 0m
5569 does not occur. */
5570
5571int
5572ada_scan_number (str, k, R, new_k)
5573 const char str[];
5574 int k;
5575 LONGEST *R;
5576 int *new_k;
5577{
5578 ULONGEST RU;
5579
5580 if (! isdigit (str[k]))
5581 return 0;
5582
5583 /* Do it the hard way so as not to make any assumption about
5584 the relationship of unsigned long (%lu scan format code) and
5585 LONGEST. */
5586 RU = 0;
5587 while (isdigit (str[k]))
5588 {
5589 RU = RU*10 + (str[k] - '0');
5590 k += 1;
5591 }
5592
5593 if (str[k] == 'm')
5594 {
5595 if (R != NULL)
5596 *R = (- (LONGEST) (RU-1)) - 1;
5597 k += 1;
5598 }
5599 else if (R != NULL)
5600 *R = (LONGEST) RU;
5601
5602 /* NOTE on the above: Technically, C does not say what the results of
5603 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
5604 number representable as a LONGEST (although either would probably work
5605 in most implementations). When RU>0, the locution in the then branch
5606 above is always equivalent to the negative of RU. */
5607
5608 if (new_k != NULL)
5609 *new_k = k;
5610 return 1;
5611}
5612
5613/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
5614 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
5615 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
5616
5617int
5618ada_in_variant (val, type, field_num)
5619 LONGEST val;
5620 struct type *type;
5621 int field_num;
5622{
5623 const char* name = TYPE_FIELD_NAME (type, field_num);
5624 int p;
5625
5626 p = 0;
5627 while (1)
5628 {
5629 switch (name[p])
5630 {
5631 case '\0':
5632 return 0;
5633 case 'S':
5634 {
5635 LONGEST W;
5636 if (! ada_scan_number (name, p + 1, &W, &p))
5637 return 0;
5638 if (val == W)
5639 return 1;
5640 break;
5641 }
5642 case 'R':
5643 {
5644 LONGEST L, U;
5645 if (! ada_scan_number (name, p + 1, &L, &p)
5646 || name[p] != 'T'
5647 || ! ada_scan_number (name, p + 1, &U, &p))
5648 return 0;
5649 if (val >= L && val <= U)
5650 return 1;
5651 break;
5652 }
5653 case 'O':
5654 return 1;
5655 default:
5656 return 0;
5657 }
5658 }
5659}
5660
5661/* Given a value ARG1 (offset by OFFSET bytes)
5662 of a struct or union type ARG_TYPE,
5663 extract and return the value of one of its (non-static) fields.
5664 FIELDNO says which field. Differs from value_primitive_field only
5665 in that it can handle packed values of arbitrary type. */
5666
5667struct value*
5668ada_value_primitive_field (arg1, offset, fieldno, arg_type)
5669 struct value* arg1;
5670 int offset;
5671 int fieldno;
5672 struct type *arg_type;
5673{
5674 struct value* v;
5675 struct type *type;
5676
5677 CHECK_TYPEDEF (arg_type);
5678 type = TYPE_FIELD_TYPE (arg_type, fieldno);
5679
5680 /* Handle packed fields */
5681
5682 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
5683 {
5684 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
5685 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
5686
5687 return ada_value_primitive_packed_val (arg1, VALUE_CONTENTS (arg1),
5688 offset + bit_pos/8, bit_pos % 8,
5689 bit_size, type);
5690 }
5691 else
5692 return value_primitive_field (arg1, offset, fieldno, arg_type);
5693}
5694
5695
5696/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
5697 and search in it assuming it has (class) type TYPE.
5698 If found, return value, else return NULL.
5699
5700 Searches recursively through wrapper fields (e.g., '_parent'). */
5701
5702struct value*
5703ada_search_struct_field (name, arg, offset, type)
5704 char *name;
5705 struct value* arg;
5706 int offset;
5707 struct type *type;
5708{
5709 int i;
5710 CHECK_TYPEDEF (type);
5711
5712 for (i = TYPE_NFIELDS (type)-1; i >= 0; i -= 1)
5713 {
5714 char *t_field_name = TYPE_FIELD_NAME (type, i);
5715
5716 if (t_field_name == NULL)
5717 continue;
5718
5719 else if (field_name_match (t_field_name, name))
5720 return ada_value_primitive_field (arg, offset, i, type);
5721
5722 else if (ada_is_wrapper_field (type, i))
5723 {
5724 struct value* v =
5725 ada_search_struct_field (name, arg,
5726 offset + TYPE_FIELD_BITPOS (type, i) / 8,
5727 TYPE_FIELD_TYPE (type, i));
5728 if (v != NULL)
5729 return v;
5730 }
5731
5732 else if (ada_is_variant_part (type, i))
5733 {
5734 int j;
5735 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
5736 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
5737
5738 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5739 {
5740 struct value* v =
5741 ada_search_struct_field (name, arg,
5742 var_offset
5743 + TYPE_FIELD_BITPOS (field_type, j)/8,
5744 TYPE_FIELD_TYPE (field_type, j));
5745 if (v != NULL)
5746 return v;
5747 }
5748 }
5749 }
5750 return NULL;
5751}
5752
5753/* Given ARG, a value of type (pointer to a)* structure/union,
5754 extract the component named NAME from the ultimate target structure/union
5755 and return it as a value with its appropriate type.
5756
5757 The routine searches for NAME among all members of the structure itself
5758 and (recursively) among all members of any wrapper members
5759 (e.g., '_parent').
5760
5761 ERR is a name (for use in error messages) that identifies the class
5762 of entity that ARG is supposed to be. */
5763
5764struct value*
5765ada_value_struct_elt (arg, name, err)
5766 struct value* arg;
5767 char *name;
5768 char *err;
5769{
5770 struct type *t;
5771 struct value* v;
5772
5773 arg = ada_coerce_ref (arg);
5774 t = check_typedef (VALUE_TYPE (arg));
5775
5776 /* Follow pointers until we get to a non-pointer. */
5777
5778 while (TYPE_CODE (t) == TYPE_CODE_PTR || TYPE_CODE (t) == TYPE_CODE_REF)
5779 {
5780 arg = ada_value_ind (arg);
5781 t = check_typedef (VALUE_TYPE (arg));
5782 }
5783
5784 if ( TYPE_CODE (t) != TYPE_CODE_STRUCT
5785 && TYPE_CODE (t) != TYPE_CODE_UNION)
5786 error ("Attempt to extract a component of a value that is not a %s.", err);
5787
5788 v = ada_search_struct_field (name, arg, 0, t);
5789 if (v == NULL)
5790 error ("There is no member named %s.", name);
5791
5792 return v;
5793}
5794
5795/* Given a type TYPE, look up the type of the component of type named NAME.
5796 If DISPP is non-null, add its byte displacement from the beginning of a
5797 structure (pointed to by a value) of type TYPE to *DISPP (does not
5798 work for packed fields).
5799
5800 Matches any field whose name has NAME as a prefix, possibly
5801 followed by "___".
5802
5803 TYPE can be either a struct or union, or a pointer or reference to
5804 a struct or union. If it is a pointer or reference, its target
5805 type is automatically used.
5806
5807 Looks recursively into variant clauses and parent types.
5808
5809 If NOERR is nonzero, return NULL if NAME is not suitably defined. */
5810
5811struct type *
5812ada_lookup_struct_elt_type (type, name, noerr, dispp)
5813 struct type *type;
5814 char *name;
5815 int noerr;
5816 int *dispp;
5817{
5818 int i;
5819
5820 if (name == NULL)
5821 goto BadName;
5822
5823 while (1)
5824 {
5825 CHECK_TYPEDEF (type);
5826 if (TYPE_CODE (type) != TYPE_CODE_PTR
5827 && TYPE_CODE (type) != TYPE_CODE_REF)
5828 break;
5829 type = TYPE_TARGET_TYPE (type);
5830 }
5831
5832 if (TYPE_CODE (type) != TYPE_CODE_STRUCT &&
5833 TYPE_CODE (type) != TYPE_CODE_UNION)
5834 {
5835 target_terminal_ours ();
5836 gdb_flush (gdb_stdout);
5837 fprintf_unfiltered (gdb_stderr, "Type ");
5838 type_print (type, "", gdb_stderr, -1);
5839 error (" is not a structure or union type");
5840 }
5841
5842 type = to_static_fixed_type (type);
5843
5844 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
5845 {
5846 char *t_field_name = TYPE_FIELD_NAME (type, i);
5847 struct type *t;
5848 int disp;
5849
5850 if (t_field_name == NULL)
5851 continue;
5852
5853 else if (field_name_match (t_field_name, name))
5854 {
5855 if (dispp != NULL)
5856 *dispp += TYPE_FIELD_BITPOS (type, i) / 8;
5857 return check_typedef (TYPE_FIELD_TYPE (type, i));
5858 }
5859
5860 else if (ada_is_wrapper_field (type, i))
5861 {
5862 disp = 0;
5863 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
5864 1, &disp);
5865 if (t != NULL)
5866 {
5867 if (dispp != NULL)
5868 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5869 return t;
5870 }
5871 }
5872
5873 else if (ada_is_variant_part (type, i))
5874 {
5875 int j;
5876 struct type *field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
5877
5878 for (j = TYPE_NFIELDS (field_type) - 1; j >= 0; j -= 1)
5879 {
5880 disp = 0;
5881 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type, j),
5882 name, 1, &disp);
5883 if (t != NULL)
5884 {
5885 if (dispp != NULL)
5886 *dispp += disp + TYPE_FIELD_BITPOS (type, i) / 8;
5887 return t;
5888 }
5889 }
5890 }
5891
5892 }
5893
5894BadName:
5895 if (! noerr)
5896 {
5897 target_terminal_ours ();
5898 gdb_flush (gdb_stdout);
5899 fprintf_unfiltered (gdb_stderr, "Type ");
5900 type_print (type, "", gdb_stderr, -1);
5901 fprintf_unfiltered (gdb_stderr, " has no component named ");
5902 error ("%s", name == NULL ? "<null>" : name);
5903 }
5904
5905 return NULL;
5906}
5907
5908/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
5909 within a value of type OUTER_TYPE that is stored in GDB at
5910 OUTER_VALADDR, determine which variant clause (field number in VAR_TYPE,
5911 numbering from 0) is applicable. Returns -1 if none are. */
5912
5913int
5914ada_which_variant_applies (var_type, outer_type, outer_valaddr)
5915 struct type *var_type;
5916 struct type *outer_type;
5917 char* outer_valaddr;
5918{
5919 int others_clause;
5920 int i;
5921 int disp;
5922 struct type* discrim_type;
5923 char* discrim_name = ada_variant_discrim_name (var_type);
5924 LONGEST discrim_val;
5925
5926 disp = 0;
5927 discrim_type =
5928 ada_lookup_struct_elt_type (outer_type, discrim_name, 1, &disp);
5929 if (discrim_type == NULL)
5930 return -1;
5931 discrim_val = unpack_long (discrim_type, outer_valaddr + disp);
5932
5933 others_clause = -1;
5934 for (i = 0; i < TYPE_NFIELDS (var_type); i += 1)
5935 {
5936 if (ada_is_others_clause (var_type, i))
5937 others_clause = i;
5938 else if (ada_in_variant (discrim_val, var_type, i))
5939 return i;
5940 }
5941
5942 return others_clause;
5943}
5944
5945
5946\f
5947 /* Dynamic-Sized Records */
5948
5949/* Strategy: The type ostensibly attached to a value with dynamic size
5950 (i.e., a size that is not statically recorded in the debugging
5951 data) does not accurately reflect the size or layout of the value.
5952 Our strategy is to convert these values to values with accurate,
5953 conventional types that are constructed on the fly. */
5954
5955/* There is a subtle and tricky problem here. In general, we cannot
5956 determine the size of dynamic records without its data. However,
5957 the 'struct value' data structure, which GDB uses to represent
5958 quantities in the inferior process (the target), requires the size
5959 of the type at the time of its allocation in order to reserve space
5960 for GDB's internal copy of the data. That's why the
5961 'to_fixed_xxx_type' routines take (target) addresses as parameters,
5962 rather than struct value*s.
5963
5964 However, GDB's internal history variables ($1, $2, etc.) are
5965 struct value*s containing internal copies of the data that are not, in
5966 general, the same as the data at their corresponding addresses in
5967 the target. Fortunately, the types we give to these values are all
5968 conventional, fixed-size types (as per the strategy described
5969 above), so that we don't usually have to perform the
5970 'to_fixed_xxx_type' conversions to look at their values.
5971 Unfortunately, there is one exception: if one of the internal
5972 history variables is an array whose elements are unconstrained
5973 records, then we will need to create distinct fixed types for each
5974 element selected. */
5975
5976/* The upshot of all of this is that many routines take a (type, host
5977 address, target address) triple as arguments to represent a value.
5978 The host address, if non-null, is supposed to contain an internal
5979 copy of the relevant data; otherwise, the program is to consult the
5980 target at the target address. */
5981
5982/* Assuming that VAL0 represents a pointer value, the result of
5983 dereferencing it. Differs from value_ind in its treatment of
5984 dynamic-sized types. */
5985
5986struct value*
5987ada_value_ind (val0)
5988 struct value* val0;
5989{
5990 struct value* val = unwrap_value (value_ind (val0));
5991 return ada_to_fixed_value (VALUE_TYPE (val), 0,
5992 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
5993 val);
5994}
5995
5996/* The value resulting from dereferencing any "reference to"
5997 * qualifiers on VAL0. */
5998static struct value*
5999ada_coerce_ref (val0)
6000 struct value* val0;
6001{
6002 if (TYPE_CODE (VALUE_TYPE (val0)) == TYPE_CODE_REF) {
6003 struct value* val = val0;
6004 COERCE_REF (val);
6005 val = unwrap_value (val);
6006 return ada_to_fixed_value (VALUE_TYPE (val), 0,
6007 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
6008 val);
6009 } else
6010 return val0;
6011}
6012
6013/* Return OFF rounded upward if necessary to a multiple of
6014 ALIGNMENT (a power of 2). */
6015
6016static unsigned int
6017align_value (off, alignment)
6018 unsigned int off;
6019 unsigned int alignment;
6020{
6021 return (off + alignment - 1) & ~(alignment - 1);
6022}
6023
6024/* Return the additional bit offset required by field F of template
6025 type TYPE. */
6026
6027static unsigned int
6028field_offset (type, f)
6029 struct type *type;
6030 int f;
6031{
6032 int n = TYPE_FIELD_BITPOS (type, f);
6033 /* Kludge (temporary?) to fix problem with dwarf output. */
6034 if (n < 0)
6035 return (unsigned int) n & 0xffff;
6036 else
6037 return n;
6038}
6039
6040
6041/* Return the bit alignment required for field #F of template type TYPE. */
6042
6043static unsigned int
6044field_alignment (type, f)
6045 struct type *type;
6046 int f;
6047{
6048 const char* name = TYPE_FIELD_NAME (type, f);
6049 int len = (name == NULL) ? 0 : strlen (name);
6050 int align_offset;
6051
6052 if (len < 8 || ! isdigit (name[len-1]))
6053 return TARGET_CHAR_BIT;
6054
6055 if (isdigit (name[len-2]))
6056 align_offset = len - 2;
6057 else
6058 align_offset = len - 1;
6059
6060 if (align_offset < 7 || ! STREQN ("___XV", name+align_offset-6, 5))
6061 return TARGET_CHAR_BIT;
6062
6063 return atoi (name+align_offset) * TARGET_CHAR_BIT;
6064}
6065
6066/* Find a type named NAME. Ignores ambiguity. */
6067struct type*
6068ada_find_any_type (name)
6069 const char *name;
6070{
6071 struct symbol* sym;
6072
6073 sym = standard_lookup (name, VAR_NAMESPACE);
6074 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
6075 return SYMBOL_TYPE (sym);
6076
6077 sym = standard_lookup (name, STRUCT_NAMESPACE);
6078 if (sym != NULL)
6079 return SYMBOL_TYPE (sym);
6080
6081 return NULL;
6082}
6083
6084/* Because of GNAT encoding conventions, several GDB symbols may match a
6085 given type name. If the type denoted by TYPE0 is to be preferred to
6086 that of TYPE1 for purposes of type printing, return non-zero;
6087 otherwise return 0. */
6088int
6089ada_prefer_type (type0, type1)
6090 struct type* type0;
6091 struct type* type1;
6092{
6093 if (type1 == NULL)
6094 return 1;
6095 else if (type0 == NULL)
6096 return 0;
6097 else if (TYPE_CODE (type1) == TYPE_CODE_VOID)
6098 return 1;
6099 else if (TYPE_CODE (type0) == TYPE_CODE_VOID)
6100 return 0;
6101 else if (ada_is_packed_array_type (type0))
6102 return 1;
6103 else if (ada_is_array_descriptor (type0) && ! ada_is_array_descriptor (type1))
6104 return 1;
6105 else if (ada_renaming_type (type0) != NULL
6106 && ada_renaming_type (type1) == NULL)
6107 return 1;
6108 return 0;
6109}
6110
6111/* The name of TYPE, which is either its TYPE_NAME, or, if that is
6112 null, its TYPE_TAG_NAME. Null if TYPE is null. */
6113char*
6114ada_type_name (type)
6115 struct type* type;
6116{
6117 if (type == NULL)
6118 return NULL;
6119 else if (TYPE_NAME (type) != NULL)
6120 return TYPE_NAME (type);
6121 else
6122 return TYPE_TAG_NAME (type);
6123}
6124
6125/* Find a parallel type to TYPE whose name is formed by appending
6126 SUFFIX to the name of TYPE. */
6127
6128struct type*
6129ada_find_parallel_type (type, suffix)
6130 struct type *type;
6131 const char *suffix;
6132{
6133 static char* name;
6134 static size_t name_len = 0;
6135 struct symbol** syms;
6136 struct block** blocks;
6137 int nsyms;
6138 int len;
6139 char* typename = ada_type_name (type);
6140
6141 if (typename == NULL)
6142 return NULL;
6143
6144 len = strlen (typename);
6145
6146 GROW_VECT (name, name_len, len+strlen (suffix)+1);
6147
6148 strcpy (name, typename);
6149 strcpy (name + len, suffix);
6150
6151 return ada_find_any_type (name);
6152}
6153
6154
6155/* If TYPE is a variable-size record type, return the corresponding template
6156 type describing its fields. Otherwise, return NULL. */
6157
6158static struct type*
6159dynamic_template_type (type)
6160 struct type* type;
6161{
6162 CHECK_TYPEDEF (type);
6163
6164 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6165 || ada_type_name (type) == NULL)
6166 return NULL;
6167 else
6168 {
6169 int len = strlen (ada_type_name (type));
6170 if (len > 6 && STREQ (ada_type_name (type) + len - 6, "___XVE"))
6171 return type;
6172 else
6173 return ada_find_parallel_type (type, "___XVE");
6174 }
6175}
6176
6177/* Assuming that TEMPL_TYPE is a union or struct type, returns
6178 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
6179
6180static int
6181is_dynamic_field (templ_type, field_num)
6182 struct type* templ_type;
6183 int field_num;
6184{
6185 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
6186 return name != NULL
6187 && TYPE_CODE (TYPE_FIELD_TYPE (templ_type, field_num)) == TYPE_CODE_PTR
6188 && strstr (name, "___XVL") != NULL;
6189}
6190
6191/* Assuming that TYPE is a struct type, returns non-zero iff TYPE
6192 contains a variant part. */
6193
6194static int
6195contains_variant_part (type)
6196 struct type* type;
6197{
6198 int f;
6199
6200 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_STRUCT
6201 || TYPE_NFIELDS (type) <= 0)
6202 return 0;
6203 return ada_is_variant_part (type, TYPE_NFIELDS (type) - 1);
6204}
6205
6206/* A record type with no fields, . */
6207static struct type*
6208empty_record (objfile)
6209 struct objfile* objfile;
6210{
6211 struct type* type = alloc_type (objfile);
6212 TYPE_CODE (type) = TYPE_CODE_STRUCT;
6213 TYPE_NFIELDS (type) = 0;
6214 TYPE_FIELDS (type) = NULL;
6215 TYPE_NAME (type) = "<empty>";
6216 TYPE_TAG_NAME (type) = NULL;
6217 TYPE_FLAGS (type) = 0;
6218 TYPE_LENGTH (type) = 0;
6219 return type;
6220}
6221
6222/* An ordinary record type (with fixed-length fields) that describes
6223 the value of type TYPE at VALADDR or ADDRESS (see comments at
6224 the beginning of this section) VAL according to GNAT conventions.
6225 DVAL0 should describe the (portion of a) record that contains any
6226 necessary discriminants. It should be NULL if VALUE_TYPE (VAL) is
6227 an outer-level type (i.e., as opposed to a branch of a variant.) A
6228 variant field (unless unchecked) is replaced by a particular branch
6229 of the variant. */
6230/* NOTE: Limitations: For now, we assume that dynamic fields and
6231 * variants occupy whole numbers of bytes. However, they need not be
6232 * byte-aligned. */
6233
6234static struct type*
6235template_to_fixed_record_type (type, valaddr, address, dval0)
6236 struct type* type;
6237 char* valaddr;
6238 CORE_ADDR address;
6239 struct value* dval0;
6240
6241{
6242 struct value* mark = value_mark();
6243 struct value* dval;
6244 struct type* rtype;
6245 int nfields, bit_len;
6246 long off;
6247 int f;
6248
6249 nfields = TYPE_NFIELDS (type);
6250 rtype = alloc_type (TYPE_OBJFILE (type));
6251 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6252 INIT_CPLUS_SPECIFIC (rtype);
6253 TYPE_NFIELDS (rtype) = nfields;
6254 TYPE_FIELDS (rtype) = (struct field*)
6255 TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6256 memset (TYPE_FIELDS (rtype), 0, sizeof (struct field) * nfields);
6257 TYPE_NAME (rtype) = ada_type_name (type);
6258 TYPE_TAG_NAME (rtype) = NULL;
6259 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in
6260 gdbtypes.h */
6261 /* TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE;*/
6262
6263 off = 0; bit_len = 0;
6264 for (f = 0; f < nfields; f += 1)
6265 {
6266 int fld_bit_len, bit_incr;
6267 off =
6268 align_value (off, field_alignment (type, f))+TYPE_FIELD_BITPOS (type,f);
6269 /* NOTE: used to use field_offset above, but that causes
6270 * problems with really negative bit positions. So, let's
6271 * rediscover why we needed field_offset and fix it properly. */
6272 TYPE_FIELD_BITPOS (rtype, f) = off;
6273 TYPE_FIELD_BITSIZE (rtype, f) = 0;
6274
6275 if (ada_is_variant_part (type, f))
6276 {
6277 struct type *branch_type;
6278
6279 if (dval0 == NULL)
6280 dval =
6281 value_from_contents_and_address (rtype, valaddr, address);
6282 else
6283 dval = dval0;
6284
6285 branch_type =
6286 to_fixed_variant_branch_type
6287 (TYPE_FIELD_TYPE (type, f),
6288 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6289 cond_offset_target (address, off / TARGET_CHAR_BIT),
6290 dval);
6291 if (branch_type == NULL)
6292 TYPE_NFIELDS (rtype) -= 1;
6293 else
6294 {
6295 TYPE_FIELD_TYPE (rtype, f) = branch_type;
6296 TYPE_FIELD_NAME (rtype, f) = "S";
6297 }
6298 bit_incr = 0;
6299 fld_bit_len =
6300 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6301 }
6302 else if (is_dynamic_field (type, f))
6303 {
6304 if (dval0 == NULL)
6305 dval =
6306 value_from_contents_and_address (rtype, valaddr, address);
6307 else
6308 dval = dval0;
6309
6310 TYPE_FIELD_TYPE (rtype, f) =
6311 ada_to_fixed_type
6312 (ada_get_base_type
6313 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f))),
6314 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
6315 cond_offset_target (address, off / TARGET_CHAR_BIT),
6316 dval);
6317 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6318 bit_incr = fld_bit_len =
6319 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
6320 }
6321 else
6322 {
6323 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
6324 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
6325 if (TYPE_FIELD_BITSIZE (type, f) > 0)
6326 bit_incr = fld_bit_len =
6327 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
6328 else
6329 bit_incr = fld_bit_len =
6330 TYPE_LENGTH (TYPE_FIELD_TYPE (type, f)) * TARGET_CHAR_BIT;
6331 }
6332 if (off + fld_bit_len > bit_len)
6333 bit_len = off + fld_bit_len;
6334 off += bit_incr;
6335 TYPE_LENGTH (rtype) = bit_len / TARGET_CHAR_BIT;
6336 }
6337 TYPE_LENGTH (rtype) = align_value (TYPE_LENGTH (rtype), TYPE_LENGTH (type));
6338
6339 value_free_to_mark (mark);
6340 if (TYPE_LENGTH (rtype) > varsize_limit)
6341 error ("record type with dynamic size is larger than varsize-limit");
6342 return rtype;
6343}
6344
6345/* As for template_to_fixed_record_type, but uses no run-time values.
6346 As a result, this type can only be approximate, but that's OK,
6347 since it is used only for type determinations. Works on both
6348 structs and unions.
6349 Representation note: to save space, we memoize the result of this
6350 function in the TYPE_TARGET_TYPE of the template type. */
6351
6352static struct type*
6353template_to_static_fixed_type (templ_type)
6354 struct type* templ_type;
6355{
6356 struct type *type;
6357 int nfields;
6358 int f;
6359
6360 if (TYPE_TARGET_TYPE (templ_type) != NULL)
6361 return TYPE_TARGET_TYPE (templ_type);
6362
6363 nfields = TYPE_NFIELDS (templ_type);
6364 TYPE_TARGET_TYPE (templ_type) = type = alloc_type (TYPE_OBJFILE (templ_type));
6365 TYPE_CODE (type) = TYPE_CODE (templ_type);
6366 INIT_CPLUS_SPECIFIC (type);
6367 TYPE_NFIELDS (type) = nfields;
6368 TYPE_FIELDS (type) = (struct field*)
6369 TYPE_ALLOC (type, nfields * sizeof (struct field));
6370 memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
6371 TYPE_NAME (type) = ada_type_name (templ_type);
6372 TYPE_TAG_NAME (type) = NULL;
6373 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6374 /* TYPE_FLAGS (type) |= TYPE_FLAG_FIXED_INSTANCE; */
6375 TYPE_LENGTH (type) = 0;
6376
6377 for (f = 0; f < nfields; f += 1)
6378 {
6379 TYPE_FIELD_BITPOS (type, f) = 0;
6380 TYPE_FIELD_BITSIZE (type, f) = 0;
6381
6382 if (is_dynamic_field (templ_type, f))
6383 {
6384 TYPE_FIELD_TYPE (type, f) =
6385 to_static_fixed_type (TYPE_TARGET_TYPE
6386 (TYPE_FIELD_TYPE (templ_type, f)));
6387 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (templ_type, f);
6388 }
6389 else
6390 {
6391 TYPE_FIELD_TYPE (type, f) =
6392 check_typedef (TYPE_FIELD_TYPE (templ_type, f));
6393 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (templ_type, f);
6394 }
6395 }
6396
6397 return type;
6398}
6399
6400/* A revision of TYPE0 -- a non-dynamic-sized record with a variant
6401 part -- in which the variant part is replaced with the appropriate
6402 branch. */
6403static struct type*
6404to_record_with_fixed_variant_part (type, valaddr, address, dval)
6405 struct type* type;
6406 char* valaddr;
6407 CORE_ADDR address;
6408 struct value* dval;
6409{
6410 struct value* mark = value_mark();
6411 struct type* rtype;
6412 struct type *branch_type;
6413 int nfields = TYPE_NFIELDS (type);
6414
6415 if (dval == NULL)
6416 return type;
6417
6418 rtype = alloc_type (TYPE_OBJFILE (type));
6419 TYPE_CODE (rtype) = TYPE_CODE_STRUCT;
6420 INIT_CPLUS_SPECIFIC (type);
6421 TYPE_NFIELDS (rtype) = TYPE_NFIELDS (type);
6422 TYPE_FIELDS (rtype) =
6423 (struct field*) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
6424 memcpy (TYPE_FIELDS (rtype), TYPE_FIELDS (type),
6425 sizeof (struct field) * nfields);
6426 TYPE_NAME (rtype) = ada_type_name (type);
6427 TYPE_TAG_NAME (rtype) = NULL;
6428 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6429 /* TYPE_FLAGS (rtype) |= TYPE_FLAG_FIXED_INSTANCE; */
6430 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
6431
6432 branch_type =
6433 to_fixed_variant_branch_type
6434 (TYPE_FIELD_TYPE (type, nfields - 1),
6435 cond_offset_host (valaddr,
6436 TYPE_FIELD_BITPOS (type, nfields-1) / TARGET_CHAR_BIT),
6437 cond_offset_target (address,
6438 TYPE_FIELD_BITPOS (type, nfields-1) / TARGET_CHAR_BIT),
6439 dval);
6440 if (branch_type == NULL)
6441 {
6442 TYPE_NFIELDS (rtype) -= 1;
6443 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, nfields - 1));
6444 }
6445 else
6446 {
6447 TYPE_FIELD_TYPE (rtype, nfields-1) = branch_type;
6448 TYPE_FIELD_NAME (rtype, nfields-1) = "S";
6449 TYPE_FIELD_BITSIZE (rtype, nfields-1) = 0;
6450 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
6451 - TYPE_LENGTH (TYPE_FIELD_TYPE (type, nfields - 1));
6452 }
6453
6454 return rtype;
6455}
6456
6457/* An ordinary record type (with fixed-length fields) that describes
6458 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
6459 beginning of this section]. Any necessary discriminants' values
6460 should be in DVAL, a record value; it should be NULL if the object
6461 at ADDR itself contains any necessary discriminant values. A
6462 variant field (unless unchecked) is replaced by a particular branch
6463 of the variant. */
6464
6465static struct type*
6466to_fixed_record_type (type0, valaddr, address, dval)
6467 struct type* type0;
6468 char* valaddr;
6469 CORE_ADDR address;
6470 struct value* dval;
6471{
6472 struct type* templ_type;
6473
6474 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6475 /* if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6476 return type0;
6477 */
6478 templ_type = dynamic_template_type (type0);
6479
6480 if (templ_type != NULL)
6481 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
6482 else if (contains_variant_part (type0))
6483 return to_record_with_fixed_variant_part (type0, valaddr, address, dval);
6484 else
6485 {
6486 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6487 /* TYPE_FLAGS (type0) |= TYPE_FLAG_FIXED_INSTANCE; */
6488 return type0;
6489 }
6490
6491}
6492
6493/* An ordinary record type (with fixed-length fields) that describes
6494 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
6495 union type. Any necessary discriminants' values should be in DVAL,
6496 a record value. That is, this routine selects the appropriate
6497 branch of the union at ADDR according to the discriminant value
6498 indicated in the union's type name. */
6499
6500static struct type*
6501to_fixed_variant_branch_type (var_type0, valaddr, address, dval)
6502 struct type* var_type0;
6503 char* valaddr;
6504 CORE_ADDR address;
6505 struct value* dval;
6506{
6507 int which;
6508 struct type* templ_type;
6509 struct type* var_type;
6510
6511 if (TYPE_CODE (var_type0) == TYPE_CODE_PTR)
6512 var_type = TYPE_TARGET_TYPE (var_type0);
6513 else
6514 var_type = var_type0;
6515
6516 templ_type = ada_find_parallel_type (var_type, "___XVU");
6517
6518 if (templ_type != NULL)
6519 var_type = templ_type;
6520
6521 which =
6522 ada_which_variant_applies (var_type,
6523 VALUE_TYPE (dval), VALUE_CONTENTS (dval));
6524
6525 if (which < 0)
6526 return empty_record (TYPE_OBJFILE (var_type));
6527 else if (is_dynamic_field (var_type, which))
6528 return
6529 to_fixed_record_type
6530 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
6531 valaddr, address, dval);
6532 else if (contains_variant_part (TYPE_FIELD_TYPE (var_type, which)))
6533 return
6534 to_fixed_record_type
6535 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
6536 else
6537 return TYPE_FIELD_TYPE (var_type, which);
6538}
6539
6540/* Assuming that TYPE0 is an array type describing the type of a value
6541 at ADDR, and that DVAL describes a record containing any
6542 discriminants used in TYPE0, returns a type for the value that
6543 contains no dynamic components (that is, no components whose sizes
6544 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
6545 true, gives an error message if the resulting type's size is over
6546 varsize_limit.
6547*/
6548
6549static struct type*
6550to_fixed_array_type (type0, dval, ignore_too_big)
6551 struct type* type0;
6552 struct value* dval;
6553 int ignore_too_big;
6554{
6555 struct type* index_type_desc;
6556 struct type* result;
6557
6558 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6559 /* if (ada_is_packed_array_type (type0) /* revisit? */ /*
6560 || (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE))
6561 return type0;*/
6562
6563 index_type_desc = ada_find_parallel_type (type0, "___XA");
6564 if (index_type_desc == NULL)
6565 {
6566 struct type *elt_type0 = check_typedef (TYPE_TARGET_TYPE (type0));
6567 /* NOTE: elt_type---the fixed version of elt_type0---should never
6568 * depend on the contents of the array in properly constructed
6569 * debugging data. */
6570 struct type *elt_type =
6571 ada_to_fixed_type (elt_type0, 0, 0, dval);
6572
6573 if (elt_type0 == elt_type)
6574 result = type0;
6575 else
6576 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6577 elt_type, TYPE_INDEX_TYPE (type0));
6578 }
6579 else
6580 {
6581 int i;
6582 struct type *elt_type0;
6583
6584 elt_type0 = type0;
6585 for (i = TYPE_NFIELDS (index_type_desc); i > 0; i -= 1)
6586 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
6587
6588 /* NOTE: result---the fixed version of elt_type0---should never
6589 * depend on the contents of the array in properly constructed
6590 * debugging data. */
6591 result =
6592 ada_to_fixed_type (check_typedef (elt_type0), 0, 0, dval);
6593 for (i = TYPE_NFIELDS (index_type_desc) - 1; i >= 0; i -= 1)
6594 {
6595 struct type *range_type =
6596 to_fixed_range_type (TYPE_FIELD_NAME (index_type_desc, i),
6597 dval, TYPE_OBJFILE (type0));
6598 result = create_array_type (alloc_type (TYPE_OBJFILE (type0)),
6599 result, range_type);
6600 }
6601 if (! ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
6602 error ("array type with dynamic size is larger than varsize-limit");
6603 }
6604
6605/* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6606/* TYPE_FLAGS (result) |= TYPE_FLAG_FIXED_INSTANCE; */
6607 return result;
6608}
6609
6610
6611/* A standard type (containing no dynamically sized components)
6612 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
6613 DVAL describes a record containing any discriminants used in TYPE0,
6614 and may be NULL if there are none. */
6615
6616struct type*
6617ada_to_fixed_type (type, valaddr, address, dval)
6618 struct type* type;
6619 char* valaddr;
6620 CORE_ADDR address;
6621 struct value* dval;
6622{
6623 CHECK_TYPEDEF (type);
6624 switch (TYPE_CODE (type)) {
6625 default:
6626 return type;
6627 case TYPE_CODE_STRUCT:
6628 return to_fixed_record_type (type, valaddr, address, NULL);
6629 case TYPE_CODE_ARRAY:
6630 return to_fixed_array_type (type, dval, 0);
6631 case TYPE_CODE_UNION:
6632 if (dval == NULL)
6633 return type;
6634 else
6635 return to_fixed_variant_branch_type (type, valaddr, address, dval);
6636 }
6637}
6638
6639/* A standard (static-sized) type corresponding as well as possible to
6640 TYPE0, but based on no runtime data. */
6641
6642static struct type*
6643to_static_fixed_type (type0)
6644 struct type* type0;
6645{
6646 struct type* type;
6647
6648 if (type0 == NULL)
6649 return NULL;
6650
6651 /* FIXME: TYPE_FLAG_FIXED_INSTANCE should be defined in gdbtypes.h */
6652 /* if (TYPE_FLAGS (type0) & TYPE_FLAG_FIXED_INSTANCE)
6653 return type0;
6654 */
6655 CHECK_TYPEDEF (type0);
6656
6657 switch (TYPE_CODE (type0))
6658 {
6659 default:
6660 return type0;
6661 case TYPE_CODE_STRUCT:
6662 type = dynamic_template_type (type0);
6663 if (type != NULL)
6664 return template_to_static_fixed_type (type);
6665 return type0;
6666 case TYPE_CODE_UNION:
6667 type = ada_find_parallel_type (type0, "___XVU");
6668 if (type != NULL)
6669 return template_to_static_fixed_type (type);
6670 return type0;
6671 }
6672}
6673
6674/* A static approximation of TYPE with all type wrappers removed. */
6675static struct type*
6676static_unwrap_type (type)
6677 struct type* type;
6678{
6679 if (ada_is_aligner_type (type))
6680 {
6681 struct type* type1 = TYPE_FIELD_TYPE (check_typedef (type), 0);
6682 if (ada_type_name (type1) == NULL)
6683 TYPE_NAME (type1) = ada_type_name (type);
6684
6685 return static_unwrap_type (type1);
6686 }
6687 else
6688 {
6689 struct type* raw_real_type = ada_get_base_type (type);
6690 if (raw_real_type == type)
6691 return type;
6692 else
6693 return to_static_fixed_type (raw_real_type);
6694 }
6695}
6696
6697/* In some cases, incomplete and private types require
6698 cross-references that are not resolved as records (for example,
6699 type Foo;
6700 type FooP is access Foo;
6701 V: FooP;
6702 type Foo is array ...;
6703 ). In these cases, since there is no mechanism for producing
6704 cross-references to such types, we instead substitute for FooP a
6705 stub enumeration type that is nowhere resolved, and whose tag is
6706 the name of the actual type. Call these types "non-record stubs". */
6707
6708/* A type equivalent to TYPE that is not a non-record stub, if one
6709 exists, otherwise TYPE. */
6710struct type*
6711ada_completed_type (type)
6712 struct type* type;
6713{
6714 CHECK_TYPEDEF (type);
6715 if (type == NULL || TYPE_CODE (type) != TYPE_CODE_ENUM
6716 || (TYPE_FLAGS (type) & TYPE_FLAG_STUB) == 0
6717 || TYPE_TAG_NAME (type) == NULL)
6718 return type;
6719 else
6720 {
6721 char* name = TYPE_TAG_NAME (type);
6722 struct type* type1 = ada_find_any_type (name);
6723 return (type1 == NULL) ? type : type1;
6724 }
6725}
6726
6727/* A value representing the data at VALADDR/ADDRESS as described by
6728 type TYPE0, but with a standard (static-sized) type that correctly
6729 describes it. If VAL0 is not NULL and TYPE0 already is a standard
6730 type, then return VAL0 [this feature is simply to avoid redundant
6731 creation of struct values]. */
6732
6733struct value*
6734ada_to_fixed_value (type0, valaddr, address, val0)
6735 struct type* type0;
6736 char* valaddr;
6737 CORE_ADDR address;
6738 struct value* val0;
6739{
6740 struct type* type = ada_to_fixed_type (type0, valaddr, address, NULL);
6741 if (type == type0 && val0 != NULL)
6742 return val0;
6743 else return value_from_contents_and_address (type, valaddr, address);
6744}
6745
6746/* A value representing VAL, but with a standard (static-sized) type
6747 chosen to approximate the real type of VAL as well as possible, but
6748 without consulting any runtime values. For Ada dynamic-sized
6749 types, therefore, the type of the result is likely to be inaccurate. */
6750
6751struct value*
6752ada_to_static_fixed_value (val)
6753 struct value* val;
6754{
6755 struct type *type =
6756 to_static_fixed_type (static_unwrap_type (VALUE_TYPE (val)));
6757 if (type == VALUE_TYPE (val))
6758 return val;
6759 else
6760 return coerce_unspec_val_to_type (val, 0, type);
6761}
6762
6763
6764\f
6765
6766
6767/* Attributes */
6768
6769/* Table mapping attribute numbers to names */
6770/* NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h */
6771
6772static const char* attribute_names[] = {
6773 "<?>",
6774
6775 "first",
6776 "last",
6777 "length",
6778 "image",
6779 "img",
6780 "max",
6781 "min",
6782 "pos"
6783 "tag",
6784 "val",
6785
6786 0
6787};
6788
6789const char*
6790ada_attribute_name (n)
6791 int n;
6792{
6793 if (n > 0 && n < (int) ATR_END)
6794 return attribute_names[n];
6795 else
6796 return attribute_names[0];
6797}
6798
6799/* Evaluate the 'POS attribute applied to ARG. */
6800
6801static struct value*
6802value_pos_atr (arg)
6803 struct value* arg;
6804{
6805 struct type *type = VALUE_TYPE (arg);
6806
6807 if (! discrete_type_p (type))
6808 error ("'POS only defined on discrete types");
6809
6810 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6811 {
6812 int i;
6813 LONGEST v = value_as_long (arg);
6814
6815 for (i = 0; i < TYPE_NFIELDS (type); i += 1)
6816 {
6817 if (v == TYPE_FIELD_BITPOS (type, i))
6818 return value_from_longest (builtin_type_ada_int, i);
6819 }
6820 error ("enumeration value is invalid: can't find 'POS");
6821 }
6822 else
6823 return value_from_longest (builtin_type_ada_int, value_as_long (arg));
6824}
6825
6826/* Evaluate the TYPE'VAL attribute applied to ARG. */
6827
6828static struct value*
6829value_val_atr (type, arg)
6830 struct type *type;
6831 struct value* arg;
6832{
6833 if (! discrete_type_p (type))
6834 error ("'VAL only defined on discrete types");
6835 if (! integer_type_p (VALUE_TYPE (arg)))
6836 error ("'VAL requires integral argument");
6837
6838 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
6839 {
6840 long pos = value_as_long (arg);
6841 if (pos < 0 || pos >= TYPE_NFIELDS (type))
6842 error ("argument to 'VAL out of range");
6843 return
6844 value_from_longest (type, TYPE_FIELD_BITPOS (type, pos));
6845 }
6846 else
6847 return value_from_longest (type, value_as_long (arg));
6848}
6849
6850\f
6851 /* Evaluation */
6852
6853/* True if TYPE appears to be an Ada character type.
6854 * [At the moment, this is true only for Character and Wide_Character;
6855 * It is a heuristic test that could stand improvement]. */
6856
6857int
6858ada_is_character_type (type)
6859 struct type* type;
6860{
6861 const char* name = ada_type_name (type);
6862 return
6863 name != NULL
6864 && (TYPE_CODE (type) == TYPE_CODE_CHAR
6865 || TYPE_CODE (type) == TYPE_CODE_INT
6866 || TYPE_CODE (type) == TYPE_CODE_RANGE)
6867 && (STREQ (name, "character") || STREQ (name, "wide_character")
6868 || STREQ (name, "unsigned char"));
6869}
6870
6871/* True if TYPE appears to be an Ada string type. */
6872
6873int
6874ada_is_string_type (type)
6875 struct type *type;
6876{
6877 CHECK_TYPEDEF (type);
6878 if (type != NULL
6879 && TYPE_CODE (type) != TYPE_CODE_PTR
6880 && (ada_is_simple_array (type) || ada_is_array_descriptor (type))
6881 && ada_array_arity (type) == 1)
6882 {
6883 struct type *elttype = ada_array_element_type (type, 1);
6884
6885 return ada_is_character_type (elttype);
6886 }
6887 else
6888 return 0;
6889}
6890
6891
6892/* True if TYPE is a struct type introduced by the compiler to force the
6893 alignment of a value. Such types have a single field with a
6894 distinctive name. */
6895
6896int
6897ada_is_aligner_type (type)
6898 struct type *type;
6899{
6900 CHECK_TYPEDEF (type);
6901 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
6902 && TYPE_NFIELDS (type) == 1
6903 && STREQ (TYPE_FIELD_NAME (type, 0), "F"));
6904}
6905
6906/* If there is an ___XVS-convention type parallel to SUBTYPE, return
6907 the parallel type. */
6908
6909struct type*
6910ada_get_base_type (raw_type)
6911 struct type* raw_type;
6912{
6913 struct type* real_type_namer;
6914 struct type* raw_real_type;
6915 struct type* real_type;
6916
6917 if (raw_type == NULL || TYPE_CODE (raw_type) != TYPE_CODE_STRUCT)
6918 return raw_type;
6919
6920 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
6921 if (real_type_namer == NULL
6922 || TYPE_CODE (real_type_namer) != TYPE_CODE_STRUCT
6923 || TYPE_NFIELDS (real_type_namer) != 1)
6924 return raw_type;
6925
6926 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
6927 if (raw_real_type == NULL)
6928 return raw_type;
6929 else
6930 return raw_real_type;
6931}
6932
6933/* The type of value designated by TYPE, with all aligners removed. */
6934
6935struct type*
6936ada_aligned_type (type)
6937 struct type* type;
6938{
6939 if (ada_is_aligner_type (type))
6940 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
6941 else
6942 return ada_get_base_type (type);
6943}
6944
6945
6946/* The address of the aligned value in an object at address VALADDR
6947 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
6948
6949char*
6950ada_aligned_value_addr (type, valaddr)
6951 struct type *type;
6952 char *valaddr;
6953{
6954 if (ada_is_aligner_type (type))
6955 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
6956 valaddr +
6957 TYPE_FIELD_BITPOS (type, 0)/TARGET_CHAR_BIT);
6958 else
6959 return valaddr;
6960}
6961
6962/* The printed representation of an enumeration literal with encoded
6963 name NAME. The value is good to the next call of ada_enum_name. */
6964const char*
6965ada_enum_name (name)
6966 const char* name;
6967{
6968 char* tmp;
6969
6970 while (1)
6971 {
6972 if ((tmp = strstr (name, "__")) != NULL)
6973 name = tmp+2;
6974 else if ((tmp = strchr (name, '.')) != NULL)
6975 name = tmp+1;
6976 else
6977 break;
6978 }
6979
6980 if (name[0] == 'Q')
6981 {
6982 static char result[16];
6983 int v;
6984 if (name[1] == 'U' || name[1] == 'W')
6985 {
6986 if (sscanf (name+2, "%x", &v) != 1)
6987 return name;
6988 }
6989 else
6990 return name;
6991
6992 if (isascii (v) && isprint (v))
6993 sprintf (result, "'%c'", v);
6994 else if (name[1] == 'U')
6995 sprintf (result, "[\"%02x\"]", v);
6996 else
6997 sprintf (result, "[\"%04x\"]", v);
6998
6999 return result;
7000 }
7001 else
7002 return name;
7003}
7004
7005static struct value*
7006evaluate_subexp (expect_type, exp, pos, noside)
7007 struct type *expect_type;
7008 struct expression *exp;
7009 int *pos;
7010 enum noside noside;
7011{
7012 return (*exp->language_defn->evaluate_exp) (expect_type, exp, pos, noside);
7013}
7014
7015/* Evaluate the subexpression of EXP starting at *POS as for
7016 evaluate_type, updating *POS to point just past the evaluated
7017 expression. */
7018
7019static struct value*
7020evaluate_subexp_type (exp, pos)
7021 struct expression* exp;
7022 int* pos;
7023{
7024 return (*exp->language_defn->evaluate_exp)
7025 (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
7026}
7027
7028/* If VAL is wrapped in an aligner or subtype wrapper, return the
7029 value it wraps. */
7030
7031static struct value*
7032unwrap_value (val)
7033 struct value* val;
7034{
7035 struct type* type = check_typedef (VALUE_TYPE (val));
7036 if (ada_is_aligner_type (type))
7037 {
7038 struct value* v = value_struct_elt (&val, NULL, "F",
7039 NULL, "internal structure");
7040 struct type* val_type = check_typedef (VALUE_TYPE (v));
7041 if (ada_type_name (val_type) == NULL)
7042 TYPE_NAME (val_type) = ada_type_name (type);
7043
7044 return unwrap_value (v);
7045 }
7046 else
7047 {
7048 struct type* raw_real_type =
7049 ada_completed_type (ada_get_base_type (type));
7050
7051 if (type == raw_real_type)
7052 return val;
7053
7054 return
7055 coerce_unspec_val_to_type
7056 (val, 0, ada_to_fixed_type (raw_real_type, 0,
7057 VALUE_ADDRESS (val) + VALUE_OFFSET (val),
7058 NULL));
7059 }
7060}
7061
7062static struct value*
7063cast_to_fixed (type, arg)
7064 struct type *type;
7065 struct value* arg;
7066{
7067 LONGEST val;
7068
7069 if (type == VALUE_TYPE (arg))
7070 return arg;
7071 else if (ada_is_fixed_point_type (VALUE_TYPE (arg)))
7072 val = ada_float_to_fixed (type,
7073 ada_fixed_to_float (VALUE_TYPE (arg),
7074 value_as_long (arg)));
7075 else
7076 {
7077 DOUBLEST argd =
7078 value_as_double (value_cast (builtin_type_double, value_copy (arg)));
7079 val = ada_float_to_fixed (type, argd);
7080 }
7081
7082 return value_from_longest (type, val);
7083}
7084
7085static struct value*
7086cast_from_fixed_to_double (arg)
7087 struct value* arg;
7088{
7089 DOUBLEST val = ada_fixed_to_float (VALUE_TYPE (arg),
7090 value_as_long (arg));
7091 return value_from_double (builtin_type_double, val);
7092}
7093
7094/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
7095 * return the converted value. */
7096static struct value*
7097coerce_for_assign (type, val)
7098 struct type* type;
7099 struct value* val;
7100{
7101 struct type* type2 = VALUE_TYPE (val);
7102 if (type == type2)
7103 return val;
7104
7105 CHECK_TYPEDEF (type2);
7106 CHECK_TYPEDEF (type);
7107
7108 if (TYPE_CODE (type2) == TYPE_CODE_PTR && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7109 {
7110 val = ada_value_ind (val);
7111 type2 = VALUE_TYPE (val);
7112 }
7113
7114 if (TYPE_CODE (type2) == TYPE_CODE_ARRAY
7115 && TYPE_CODE (type) == TYPE_CODE_ARRAY)
7116 {
7117 if (TYPE_LENGTH (type2) != TYPE_LENGTH (type)
7118 || TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
7119 != TYPE_LENGTH (TYPE_TARGET_TYPE (type2)))
7120 error ("Incompatible types in assignment");
7121 VALUE_TYPE (val) = type;
7122 }
7123 return val;
7124}
7125
7126struct value*
7127ada_evaluate_subexp (expect_type, exp, pos, noside)
7128 struct type *expect_type;
7129 struct expression *exp;
7130 int *pos;
7131 enum noside noside;
7132{
7133 enum exp_opcode op;
7134 enum ada_attribute atr;
7135 int tem, tem2, tem3;
7136 int pc;
7137 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
7138 struct type *type;
7139 int nargs;
7140 struct value* *argvec;
7141
7142 pc = *pos; *pos += 1;
7143 op = exp->elts[pc].opcode;
7144
7145 switch (op)
7146 {
7147 default:
7148 *pos -= 1;
7149 return unwrap_value (evaluate_subexp_standard (expect_type, exp, pos, noside));
7150
7151 case UNOP_CAST:
7152 (*pos) += 2;
7153 type = exp->elts[pc + 1].type;
7154 arg1 = evaluate_subexp (type, exp, pos, noside);
7155 if (noside == EVAL_SKIP)
7156 goto nosideret;
7157 if (type != check_typedef (VALUE_TYPE (arg1)))
7158 {
7159 if (ada_is_fixed_point_type (type))
7160 arg1 = cast_to_fixed (type, arg1);
7161 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7162 arg1 = value_cast (type, cast_from_fixed_to_double (arg1));
7163 else if (VALUE_LVAL (arg1) == lval_memory)
7164 {
7165 /* This is in case of the really obscure (and undocumented,
7166 but apparently expected) case of (Foo) Bar.all, where Bar
7167 is an integer constant and Foo is a dynamic-sized type.
7168 If we don't do this, ARG1 will simply be relabeled with
7169 TYPE. */
7170 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7171 return value_zero (to_static_fixed_type (type), not_lval);
7172 arg1 =
7173 ada_to_fixed_value
7174 (type, 0, VALUE_ADDRESS (arg1) + VALUE_OFFSET (arg1), 0);
7175 }
7176 else
7177 arg1 = value_cast (type, arg1);
7178 }
7179 return arg1;
7180
7181 /* FIXME: UNOP_QUAL should be defined in expression.h */
7182 /* case UNOP_QUAL:
7183 (*pos) += 2;
7184 type = exp->elts[pc + 1].type;
7185 return ada_evaluate_subexp (type, exp, pos, noside);
7186 */
7187 case BINOP_ASSIGN:
7188 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7189 arg2 = evaluate_subexp (VALUE_TYPE (arg1), exp, pos, noside);
7190 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
7191 return arg1;
7192 if (binop_user_defined_p (op, arg1, arg2))
7193 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7194 else
7195 {
7196 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7197 arg2 = cast_to_fixed (VALUE_TYPE (arg1), arg2);
7198 else if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7199 error ("Fixed-point values must be assigned to fixed-point variables");
7200 else
7201 arg2 = coerce_for_assign (VALUE_TYPE (arg1), arg2);
7202 return ada_value_assign (arg1, arg2);
7203 }
7204
7205 case BINOP_ADD:
7206 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7207 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7208 if (noside == EVAL_SKIP)
7209 goto nosideret;
7210 if (binop_user_defined_p (op, arg1, arg2))
7211 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7212 else
7213 {
7214 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
7215 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7216 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
7217 error ("Operands of fixed-point addition must have the same type");
7218 return value_cast (VALUE_TYPE (arg1), value_add (arg1, arg2));
7219 }
7220
7221 case BINOP_SUB:
7222 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
7223 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
7224 if (noside == EVAL_SKIP)
7225 goto nosideret;
7226 if (binop_user_defined_p (op, arg1, arg2))
7227 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7228 else
7229 {
7230 if ((ada_is_fixed_point_type (VALUE_TYPE (arg1))
7231 || ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7232 && VALUE_TYPE (arg1) != VALUE_TYPE (arg2))
7233 error ("Operands of fixed-point subtraction must have the same type");
7234 return value_cast (VALUE_TYPE (arg1), value_sub (arg1, arg2));
7235 }
7236
7237 case BINOP_MUL:
7238 case BINOP_DIV:
7239 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7240 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7241 if (noside == EVAL_SKIP)
7242 goto nosideret;
7243 if (binop_user_defined_p (op, arg1, arg2))
7244 return value_x_binop (arg1, arg2, op, OP_NULL, EVAL_NORMAL);
7245 else
7246 if (noside == EVAL_AVOID_SIDE_EFFECTS
7247 && (op == BINOP_DIV || op == BINOP_REM || op == BINOP_MOD))
7248 return value_zero (VALUE_TYPE (arg1), not_lval);
7249 else
7250 {
7251 if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7252 arg1 = cast_from_fixed_to_double (arg1);
7253 if (ada_is_fixed_point_type (VALUE_TYPE (arg2)))
7254 arg2 = cast_from_fixed_to_double (arg2);
7255 return value_binop (arg1, arg2, op);
7256 }
7257
7258 case UNOP_NEG:
7259 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7260 if (noside == EVAL_SKIP)
7261 goto nosideret;
7262 if (unop_user_defined_p (op, arg1))
7263 return value_x_unop (arg1, op, EVAL_NORMAL);
7264 else if (ada_is_fixed_point_type (VALUE_TYPE (arg1)))
7265 return value_cast (VALUE_TYPE (arg1), value_neg (arg1));
7266 else
7267 return value_neg (arg1);
7268
7269 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
7270 /* case OP_UNRESOLVED_VALUE:
7271 /* Only encountered when an unresolved symbol occurs in a
7272 context other than a function call, in which case, it is
7273 illegal. *//*
7274 (*pos) += 3;
7275 if (noside == EVAL_SKIP)
7276 goto nosideret;
7277 else
7278 error ("Unexpected unresolved symbol, %s, during evaluation",
7279 ada_demangle (exp->elts[pc + 2].name));
7280 */
7281 case OP_VAR_VALUE:
7282 *pos -= 1;
7283 if (noside == EVAL_SKIP)
7284 {
7285 *pos += 4;
7286 goto nosideret;
7287 }
7288 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7289 {
7290 *pos += 4;
7291 return value_zero
7292 (to_static_fixed_type
7293 (static_unwrap_type (SYMBOL_TYPE (exp->elts[pc+2].symbol))),
7294 not_lval);
7295 }
7296 else
7297 {
7298 arg1 = unwrap_value (evaluate_subexp_standard (expect_type, exp, pos,
7299 noside));
7300 return ada_to_fixed_value (VALUE_TYPE (arg1), 0,
7301 VALUE_ADDRESS (arg1) + VALUE_OFFSET(arg1),
7302 arg1);
7303 }
7304
7305 case OP_ARRAY:
7306 (*pos) += 3;
7307 tem2 = longest_to_int (exp->elts[pc + 1].longconst);
7308 tem3 = longest_to_int (exp->elts[pc + 2].longconst);
7309 nargs = tem3 - tem2 + 1;
7310 type = expect_type ? check_typedef (expect_type) : NULL_TYPE;
7311
7312 argvec = (struct value* *) alloca (sizeof (struct value*) * (nargs + 1));
7313 for (tem = 0; tem == 0 || tem < nargs; tem += 1)
7314 /* At least one element gets inserted for the type */
7315 {
7316 /* Ensure that array expressions are coerced into pointer objects. */
7317 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
7318 }
7319 if (noside == EVAL_SKIP)
7320 goto nosideret;
7321 return value_array (tem2, tem3, argvec);
7322
7323 case OP_FUNCALL:
7324 (*pos) += 2;
7325
7326 /* Allocate arg vector, including space for the function to be
7327 called in argvec[0] and a terminating NULL */
7328 nargs = longest_to_int (exp->elts[pc + 1].longconst);
7329 argvec = (struct value* *) alloca (sizeof (struct value*) * (nargs + 2));
7330
7331 /* FIXME: OP_UNRESOLVED_VALUE should be defined in expression.h */
7332 /* FIXME: name should be defined in expresion.h */
7333 /* if (exp->elts[*pos].opcode == OP_UNRESOLVED_VALUE)
7334 error ("Unexpected unresolved symbol, %s, during evaluation",
7335 ada_demangle (exp->elts[pc + 5].name));
7336 */
7337 if (0)
7338 {
7339 error ("unexpected code path, FIXME");
7340 }
7341 else
7342 {
7343 for (tem = 0; tem <= nargs; tem += 1)
7344 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7345 argvec[tem] = 0;
7346
7347 if (noside == EVAL_SKIP)
7348 goto nosideret;
7349 }
7350
7351 if (TYPE_CODE (VALUE_TYPE (argvec[0])) == TYPE_CODE_REF)
7352 argvec[0] = value_addr (argvec[0]);
7353
7354 if (ada_is_packed_array_type (VALUE_TYPE (argvec[0])))
7355 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
7356
7357 type = check_typedef (VALUE_TYPE (argvec[0]));
7358 if (TYPE_CODE (type) == TYPE_CODE_PTR)
7359 {
7360 switch (TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (type))))
7361 {
7362 case TYPE_CODE_FUNC:
7363 type = check_typedef (TYPE_TARGET_TYPE (type));
7364 break;
7365 case TYPE_CODE_ARRAY:
7366 break;
7367 case TYPE_CODE_STRUCT:
7368 if (noside != EVAL_AVOID_SIDE_EFFECTS)
7369 argvec[0] = ada_value_ind (argvec[0]);
7370 type = check_typedef (TYPE_TARGET_TYPE (type));
7371 break;
7372 default:
7373 error ("cannot subscript or call something of type `%s'",
7374 ada_type_name (VALUE_TYPE (argvec[0])));
7375 break;
7376 }
7377 }
7378
7379 switch (TYPE_CODE (type))
7380 {
7381 case TYPE_CODE_FUNC:
7382 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7383 return allocate_value (TYPE_TARGET_TYPE (type));
7384 return call_function_by_hand (argvec[0], nargs, argvec + 1);
7385 case TYPE_CODE_STRUCT:
7386 {
7387 int arity = ada_array_arity (type);
7388 type = ada_array_element_type (type, nargs);
7389 if (type == NULL)
7390 error ("cannot subscript or call a record");
7391 if (arity != nargs)
7392 error ("wrong number of subscripts; expecting %d", arity);
7393 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7394 return allocate_value (ada_aligned_type (type));
7395 return unwrap_value (ada_value_subscript (argvec[0], nargs, argvec+1));
7396 }
7397 case TYPE_CODE_ARRAY:
7398 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7399 {
7400 type = ada_array_element_type (type, nargs);
7401 if (type == NULL)
7402 error ("element type of array unknown");
7403 else
7404 return allocate_value (ada_aligned_type (type));
7405 }
7406 return
7407 unwrap_value (ada_value_subscript
7408 (ada_coerce_to_simple_array (argvec[0]),
7409 nargs, argvec+1));
7410 case TYPE_CODE_PTR: /* Pointer to array */
7411 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
7412 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7413 {
7414 type = ada_array_element_type (type, nargs);
7415 if (type == NULL)
7416 error ("element type of array unknown");
7417 else
7418 return allocate_value (ada_aligned_type (type));
7419 }
7420 return
7421 unwrap_value (ada_value_ptr_subscript (argvec[0], type,
7422 nargs, argvec+1));
7423
7424 default:
7425 error ("Internal error in evaluate_subexp");
7426 }
7427
7428 case TERNOP_SLICE:
7429 {
7430 struct value* array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7431 int lowbound
7432 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
7433 int upper
7434 = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
7435 if (noside == EVAL_SKIP)
7436 goto nosideret;
7437
7438 /* If this is a reference to an array, then dereference it */
7439 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_REF
7440 && TYPE_TARGET_TYPE (VALUE_TYPE (array)) != NULL
7441 && TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (array))) ==
7442 TYPE_CODE_ARRAY
7443 && !ada_is_array_descriptor (check_typedef (VALUE_TYPE
7444 (array))))
7445 {
7446 array = ada_coerce_ref (array);
7447 }
7448
7449 if (noside == EVAL_AVOID_SIDE_EFFECTS &&
7450 ada_is_array_descriptor (check_typedef (VALUE_TYPE (array))))
7451 {
7452 /* Try to dereference the array, in case it is an access to array */
7453 struct type * arrType = ada_type_of_array (array, 0);
7454 if (arrType != NULL)
7455 array = value_at_lazy (arrType, 0, NULL);
7456 }
7457 if (ada_is_array_descriptor (VALUE_TYPE (array)))
7458 array = ada_coerce_to_simple_array (array);
7459
7460 /* If at this point we have a pointer to an array, it means that
7461 it is a pointer to a simple (non-ada) array. We just then
7462 dereference it */
7463 if (TYPE_CODE (VALUE_TYPE (array)) == TYPE_CODE_PTR
7464 && TYPE_TARGET_TYPE (VALUE_TYPE (array)) != NULL
7465 && TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (array))) ==
7466 TYPE_CODE_ARRAY)
7467 {
7468 array = ada_value_ind (array);
7469 }
7470
7471 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7472 /* The following will get the bounds wrong, but only in contexts
7473 where the value is not being requested (FIXME?). */
7474 return array;
7475 else
7476 return value_slice (array, lowbound, upper - lowbound + 1);
7477 }
7478
7479 /* FIXME: UNOP_MBR should be defined in expression.h */
7480 /* case UNOP_MBR:
7481 (*pos) += 2;
7482 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7483 type = exp->elts[pc + 1].type;
7484
7485 if (noside == EVAL_SKIP)
7486 goto nosideret;
7487
7488 switch (TYPE_CODE (type))
7489 {
7490 default:
7491 warning ("Membership test incompletely implemented; always returns true");
7492 return value_from_longest (builtin_type_int, (LONGEST) 1);
7493
7494 case TYPE_CODE_RANGE:
7495 arg2 = value_from_longest (builtin_type_int,
7496 (LONGEST) TYPE_LOW_BOUND (type));
7497 arg3 = value_from_longest (builtin_type_int,
7498 (LONGEST) TYPE_HIGH_BOUND (type));
7499 return
7500 value_from_longest (builtin_type_int,
7501 (value_less (arg1,arg3)
7502 || value_equal (arg1,arg3))
7503 && (value_less (arg2,arg1)
7504 || value_equal (arg2,arg1)));
7505 }
7506 */
7507 /* FIXME: BINOP_MBR should be defined in expression.h */
7508 /* case BINOP_MBR:
7509 (*pos) += 2;
7510 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7511 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7512
7513 if (noside == EVAL_SKIP)
7514 goto nosideret;
7515
7516 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7517 return value_zero (builtin_type_int, not_lval);
7518
7519 tem = longest_to_int (exp->elts[pc + 1].longconst);
7520
7521 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg2)))
7522 error ("invalid dimension number to '%s", "range");
7523
7524 arg3 = ada_array_bound (arg2, tem, 1);
7525 arg2 = ada_array_bound (arg2, tem, 0);
7526
7527 return
7528 value_from_longest (builtin_type_int,
7529 (value_less (arg1,arg3)
7530 || value_equal (arg1,arg3))
7531 && (value_less (arg2,arg1)
7532 || value_equal (arg2,arg1)));
7533 */
7534 /* FIXME: TERNOP_MBR should be defined in expression.h */
7535 /* case TERNOP_MBR:
7536 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7537 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7538 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7539
7540 if (noside == EVAL_SKIP)
7541 goto nosideret;
7542
7543 return
7544 value_from_longest (builtin_type_int,
7545 (value_less (arg1,arg3)
7546 || value_equal (arg1,arg3))
7547 && (value_less (arg2,arg1)
7548 || value_equal (arg2,arg1)));
7549 */
7550 /* FIXME: OP_ATTRIBUTE should be defined in expression.h */
7551 /* case OP_ATTRIBUTE:
7552 *pos += 3;
7553 atr = (enum ada_attribute) longest_to_int (exp->elts[pc + 2].longconst);
7554 switch (atr)
7555 {
7556 default:
7557 error ("unexpected attribute encountered");
7558
7559 case ATR_FIRST:
7560 case ATR_LAST:
7561 case ATR_LENGTH:
7562 {
7563 struct type* type_arg;
7564 if (exp->elts[*pos].opcode == OP_TYPE)
7565 {
7566 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7567 arg1 = NULL;
7568 type_arg = exp->elts[pc + 5].type;
7569 }
7570 else
7571 {
7572 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7573 type_arg = NULL;
7574 }
7575
7576 if (exp->elts[*pos].opcode != OP_LONG)
7577 error ("illegal operand to '%s", ada_attribute_name (atr));
7578 tem = longest_to_int (exp->elts[*pos+2].longconst);
7579 *pos += 4;
7580
7581 if (noside == EVAL_SKIP)
7582 goto nosideret;
7583
7584 if (type_arg == NULL)
7585 {
7586 arg1 = ada_coerce_ref (arg1);
7587
7588 if (ada_is_packed_array_type (VALUE_TYPE (arg1)))
7589 arg1 = ada_coerce_to_simple_array (arg1);
7590
7591 if (tem < 1 || tem > ada_array_arity (VALUE_TYPE (arg1)))
7592 error ("invalid dimension number to '%s",
7593 ada_attribute_name (atr));
7594
7595 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7596 {
7597 type = ada_index_type (VALUE_TYPE (arg1), tem);
7598 if (type == NULL)
7599 error ("attempt to take bound of something that is not an array");
7600 return allocate_value (type);
7601 }
7602
7603 switch (atr)
7604 {
7605 default:
7606 error ("unexpected attribute encountered");
7607 case ATR_FIRST:
7608 return ada_array_bound (arg1, tem, 0);
7609 case ATR_LAST:
7610 return ada_array_bound (arg1, tem, 1);
7611 case ATR_LENGTH:
7612 return ada_array_length (arg1, tem);
7613 }
7614 }
7615 else if (TYPE_CODE (type_arg) == TYPE_CODE_RANGE
7616 || TYPE_CODE (type_arg) == TYPE_CODE_INT)
7617 {
7618 struct type* range_type;
7619 char* name = ada_type_name (type_arg);
7620 if (name == NULL)
7621 {
7622 if (TYPE_CODE (type_arg) == TYPE_CODE_RANGE)
7623 range_type = type_arg;
7624 else
7625 error ("unimplemented type attribute");
7626 }
7627 else
7628 range_type =
7629 to_fixed_range_type (name, NULL, TYPE_OBJFILE (type_arg));
7630 switch (atr)
7631 {
7632 default:
7633 error ("unexpected attribute encountered");
7634 case ATR_FIRST:
7635 return value_from_longest (TYPE_TARGET_TYPE (range_type),
7636 TYPE_LOW_BOUND (range_type));
7637 case ATR_LAST:
7638 return value_from_longest (TYPE_TARGET_TYPE (range_type),
7639 TYPE_HIGH_BOUND (range_type));
7640 }
7641 }
7642 else if (TYPE_CODE (type_arg) == TYPE_CODE_ENUM)
7643 {
7644 switch (atr)
7645 {
7646 default:
7647 error ("unexpected attribute encountered");
7648 case ATR_FIRST:
7649 return value_from_longest
7650 (type_arg, TYPE_FIELD_BITPOS (type_arg, 0));
7651 case ATR_LAST:
7652 return value_from_longest
7653 (type_arg,
7654 TYPE_FIELD_BITPOS (type_arg,
7655 TYPE_NFIELDS (type_arg) - 1));
7656 }
7657 }
7658 else if (TYPE_CODE (type_arg) == TYPE_CODE_FLT)
7659 error ("unimplemented type attribute");
7660 else
7661 {
7662 LONGEST low, high;
7663
7664 if (ada_is_packed_array_type (type_arg))
7665 type_arg = decode_packed_array_type (type_arg);
7666
7667 if (tem < 1 || tem > ada_array_arity (type_arg))
7668 error ("invalid dimension number to '%s",
7669 ada_attribute_name (atr));
7670
7671 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7672 {
7673 type = ada_index_type (type_arg, tem);
7674 if (type == NULL)
7675 error ("attempt to take bound of something that is not an array");
7676 return allocate_value (type);
7677 }
7678
7679 switch (atr)
7680 {
7681 default:
7682 error ("unexpected attribute encountered");
7683 case ATR_FIRST:
7684 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7685 return value_from_longest (type, low);
7686 case ATR_LAST:
7687 high = ada_array_bound_from_type (type_arg, tem, 1, &type);
7688 return value_from_longest (type, high);
7689 case ATR_LENGTH:
7690 low = ada_array_bound_from_type (type_arg, tem, 0, &type);
7691 high = ada_array_bound_from_type (type_arg, tem, 1, NULL);
7692 return value_from_longest (type, high-low+1);
7693 }
7694 }
7695 }
7696
7697 case ATR_TAG:
7698 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7699 if (noside == EVAL_SKIP)
7700 goto nosideret;
7701
7702 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7703 return
7704 value_zero (ada_tag_type (arg1), not_lval);
7705
7706 return ada_value_tag (arg1);
7707
7708 case ATR_MIN:
7709 case ATR_MAX:
7710 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7711 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7712 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7713 if (noside == EVAL_SKIP)
7714 goto nosideret;
7715 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7716 return value_zero (VALUE_TYPE (arg1), not_lval);
7717 else
7718 return value_binop (arg1, arg2,
7719 atr == ATR_MIN ? BINOP_MIN : BINOP_MAX);
7720
7721 case ATR_MODULUS:
7722 {
7723 struct type* type_arg = exp->elts[pc + 5].type;
7724 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7725 *pos += 4;
7726
7727 if (noside == EVAL_SKIP)
7728 goto nosideret;
7729
7730 if (! ada_is_modular_type (type_arg))
7731 error ("'modulus must be applied to modular type");
7732
7733 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
7734 ada_modulus (type_arg));
7735 }
7736
7737
7738 case ATR_POS:
7739 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7740 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7741 if (noside == EVAL_SKIP)
7742 goto nosideret;
7743 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7744 return value_zero (builtin_type_ada_int, not_lval);
7745 else
7746 return value_pos_atr (arg1);
7747
7748 case ATR_SIZE:
7749 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7750 if (noside == EVAL_SKIP)
7751 goto nosideret;
7752 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7753 return value_zero (builtin_type_ada_int, not_lval);
7754 else
7755 return value_from_longest (builtin_type_ada_int,
7756 TARGET_CHAR_BIT
7757 * TYPE_LENGTH (VALUE_TYPE (arg1)));
7758
7759 case ATR_VAL:
7760 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
7761 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7762 type = exp->elts[pc + 5].type;
7763 if (noside == EVAL_SKIP)
7764 goto nosideret;
7765 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7766 return value_zero (type, not_lval);
7767 else
7768 return value_val_atr (type, arg1);
7769 }*/
7770 case BINOP_EXP:
7771 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7772 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7773 if (noside == EVAL_SKIP)
7774 goto nosideret;
7775 if (binop_user_defined_p (op, arg1, arg2))
7776 return unwrap_value (value_x_binop (arg1, arg2, op, OP_NULL,
7777 EVAL_NORMAL));
7778 else
7779 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7780 return value_zero (VALUE_TYPE (arg1), not_lval);
7781 else
7782 return value_binop (arg1, arg2, op);
7783
7784 case UNOP_PLUS:
7785 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7786 if (noside == EVAL_SKIP)
7787 goto nosideret;
7788 if (unop_user_defined_p (op, arg1))
7789 return unwrap_value (value_x_unop (arg1, op, EVAL_NORMAL));
7790 else
7791 return arg1;
7792
7793 case UNOP_ABS:
7794 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7795 if (noside == EVAL_SKIP)
7796 goto nosideret;
7797 if (value_less (arg1, value_zero (VALUE_TYPE (arg1), not_lval)))
7798 return value_neg (arg1);
7799 else
7800 return arg1;
7801
7802 case UNOP_IND:
7803 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_PTR)
7804 expect_type = TYPE_TARGET_TYPE (check_typedef (expect_type));
7805 arg1 = evaluate_subexp (expect_type, exp, pos, noside);
7806 if (noside == EVAL_SKIP)
7807 goto nosideret;
7808 type = check_typedef (VALUE_TYPE (arg1));
7809 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7810 {
7811 if (ada_is_array_descriptor (type))
7812 /* GDB allows dereferencing GNAT array descriptors. */
7813 {
7814 struct type* arrType = ada_type_of_array (arg1, 0);
7815 if (arrType == NULL)
7816 error ("Attempt to dereference null array pointer.");
7817 return value_at_lazy (arrType, 0, NULL);
7818 }
7819 else if (TYPE_CODE (type) == TYPE_CODE_PTR
7820 || TYPE_CODE (type) == TYPE_CODE_REF
7821 /* In C you can dereference an array to get the 1st elt. */
7822 || TYPE_CODE (type) == TYPE_CODE_ARRAY
7823 )
7824 return
7825 value_zero
7826 (to_static_fixed_type
7827 (ada_aligned_type (check_typedef (TYPE_TARGET_TYPE (type)))),
7828 lval_memory);
7829 else if (TYPE_CODE (type) == TYPE_CODE_INT)
7830 /* GDB allows dereferencing an int. */
7831 return value_zero (builtin_type_int, lval_memory);
7832 else
7833 error ("Attempt to take contents of a non-pointer value.");
7834 }
7835 arg1 = ada_coerce_ref (arg1);
7836 type = check_typedef (VALUE_TYPE (arg1));
7837
7838 if (ada_is_array_descriptor (type))
7839 /* GDB allows dereferencing GNAT array descriptors. */
7840 return ada_coerce_to_simple_array (arg1);
7841 else
7842 return ada_value_ind (arg1);
7843
7844 case STRUCTOP_STRUCT:
7845 tem = longest_to_int (exp->elts[pc + 1].longconst);
7846 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
7847 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7848 if (noside == EVAL_SKIP)
7849 goto nosideret;
7850 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7851 return value_zero (ada_aligned_type
7852 (ada_lookup_struct_elt_type (VALUE_TYPE (arg1),
7853 &exp->elts[pc + 2].string,
7854 0, NULL)),
7855 lval_memory);
7856 else
7857 return unwrap_value (ada_value_struct_elt (arg1,
7858 &exp->elts[pc + 2].string,
7859 "record"));
7860 case OP_TYPE:
7861 /* The value is not supposed to be used. This is here to make it
7862 easier to accommodate expressions that contain types. */
7863 (*pos) += 2;
7864 if (noside == EVAL_SKIP)
7865 goto nosideret;
7866 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
7867 return allocate_value (builtin_type_void);
7868 else
7869 error ("Attempt to use a type name as an expression");
7870
7871 case STRUCTOP_PTR:
7872 tem = longest_to_int (exp->elts[pc + 1].longconst);
7873 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
7874 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
7875 if (noside == EVAL_SKIP)
7876 goto nosideret;
7877 if (noside == EVAL_AVOID_SIDE_EFFECTS)
7878 return value_zero (ada_aligned_type
7879 (ada_lookup_struct_elt_type (VALUE_TYPE (arg1),
7880 &exp->elts[pc + 2].string,
7881 0, NULL)),
7882 lval_memory);
7883 else
7884 return unwrap_value (ada_value_struct_elt (arg1,
7885 &exp->elts[pc + 2].string,
7886 "record access"));
7887 }
7888
7889nosideret:
7890 return value_from_longest (builtin_type_long, (LONGEST) 1);
7891}
7892
7893\f
7894 /* Fixed point */
7895
7896/* If TYPE encodes an Ada fixed-point type, return the suffix of the
7897 type name that encodes the 'small and 'delta information.
7898 Otherwise, return NULL. */
7899
7900static const char*
7901fixed_type_info (type)
7902 struct type *type;
7903{
7904 const char* name = ada_type_name (type);
7905 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : TYPE_CODE (type);
7906
7907 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE)
7908 && name != NULL)
7909 {
7910 const char *tail = strstr (name, "___XF_");
7911 if (tail == NULL)
7912 return NULL;
7913 else
7914 return tail + 5;
7915 }
7916 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
7917 return fixed_type_info (TYPE_TARGET_TYPE (type));
7918 else
7919 return NULL;
7920}
7921
7922/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
7923
7924int
7925ada_is_fixed_point_type (type)
7926 struct type *type;
7927{
7928 return fixed_type_info (type) != NULL;
7929}
7930
7931/* Assuming that TYPE is the representation of an Ada fixed-point
7932 type, return its delta, or -1 if the type is malformed and the
7933 delta cannot be determined. */
7934
7935DOUBLEST
7936ada_delta (type)
7937 struct type *type;
7938{
7939 const char *encoding = fixed_type_info (type);
7940 long num, den;
7941
7942 if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2)
7943 return -1.0;
7944 else
7945 return (DOUBLEST) num / (DOUBLEST) den;
7946}
7947
7948/* Assuming that ada_is_fixed_point_type (TYPE), return the scaling
7949 factor ('SMALL value) associated with the type. */
7950
7951static DOUBLEST
7952scaling_factor (type)
7953 struct type *type;
7954{
7955 const char *encoding = fixed_type_info (type);
7956 unsigned long num0, den0, num1, den1;
7957 int n;
7958
7959 n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1);
7960
7961 if (n < 2)
7962 return 1.0;
7963 else if (n == 4)
7964 return (DOUBLEST) num1 / (DOUBLEST) den1;
7965 else
7966 return (DOUBLEST) num0 / (DOUBLEST) den0;
7967}
7968
7969
7970/* Assuming that X is the representation of a value of fixed-point
7971 type TYPE, return its floating-point equivalent. */
7972
7973DOUBLEST
7974ada_fixed_to_float (type, x)
7975 struct type *type;
7976 LONGEST x;
7977{
7978 return (DOUBLEST) x * scaling_factor (type);
7979}
7980
7981/* The representation of a fixed-point value of type TYPE
7982 corresponding to the value X. */
7983
7984LONGEST
7985ada_float_to_fixed (type, x)
7986 struct type *type;
7987 DOUBLEST x;
7988{
7989 return (LONGEST) (x / scaling_factor (type) + 0.5);
7990}
7991
7992
7993 /* VAX floating formats */
7994
7995/* Non-zero iff TYPE represents one of the special VAX floating-point
7996 types. */
7997int
7998ada_is_vax_floating_type (type)
7999 struct type* type;
8000{
8001 int name_len =
8002 (ada_type_name (type) == NULL) ? 0 : strlen (ada_type_name (type));
8003 return
8004 name_len > 6
8005 && (TYPE_CODE (type) == TYPE_CODE_INT
8006 || TYPE_CODE (type) == TYPE_CODE_RANGE)
8007 && STREQN (ada_type_name (type) + name_len - 6, "___XF", 5);
8008}
8009
8010/* The type of special VAX floating-point type this is, assuming
8011 ada_is_vax_floating_point */
8012int
8013ada_vax_float_type_suffix (type)
8014 struct type* type;
8015{
8016 return ada_type_name (type)[strlen (ada_type_name (type))-1];
8017}
8018
8019/* A value representing the special debugging function that outputs
8020 VAX floating-point values of the type represented by TYPE. Assumes
8021 ada_is_vax_floating_type (TYPE). */
8022struct value*
8023ada_vax_float_print_function (type)
8024
8025 struct type* type;
8026{
8027 switch (ada_vax_float_type_suffix (type)) {
8028 case 'F':
8029 return
8030 get_var_value ("DEBUG_STRING_F", 0);
8031 case 'D':
8032 return
8033 get_var_value ("DEBUG_STRING_D", 0);
8034 case 'G':
8035 return
8036 get_var_value ("DEBUG_STRING_G", 0);
8037 default:
8038 error ("invalid VAX floating-point type");
8039 }
8040}
8041
8042\f
8043 /* Range types */
8044
8045/* Scan STR beginning at position K for a discriminant name, and
8046 return the value of that discriminant field of DVAL in *PX. If
8047 PNEW_K is not null, put the position of the character beyond the
8048 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
8049 not alter *PX and *PNEW_K if unsuccessful. */
8050
8051static int
8052scan_discrim_bound (str, k, dval, px, pnew_k)
8053 char *str;
8054 int k;
8055 struct value* dval;
8056 LONGEST *px;
8057 int *pnew_k;
8058{
8059 static char *bound_buffer = NULL;
8060 static size_t bound_buffer_len = 0;
8061 char *bound;
8062 char *pend;
8063 struct value* bound_val;
8064
8065 if (dval == NULL || str == NULL || str[k] == '\0')
8066 return 0;
8067
8068 pend = strstr (str+k, "__");
8069 if (pend == NULL)
8070 {
8071 bound = str+k;
8072 k += strlen (bound);
8073 }
8074 else
8075 {
8076 GROW_VECT (bound_buffer, bound_buffer_len, pend - (str+k) + 1);
8077 bound = bound_buffer;
8078 strncpy (bound_buffer, str+k, pend-(str+k));
8079 bound[pend-(str+k)] = '\0';
8080 k = pend-str;
8081 }
8082
8083 bound_val =
8084 ada_search_struct_field (bound, dval, 0, VALUE_TYPE (dval));
8085 if (bound_val == NULL)
8086 return 0;
8087
8088 *px = value_as_long (bound_val);
8089 if (pnew_k != NULL)
8090 *pnew_k = k;
8091 return 1;
8092}
8093
8094/* Value of variable named NAME in the current environment. If
8095 no such variable found, then if ERR_MSG is null, returns 0, and
8096 otherwise causes an error with message ERR_MSG. */
8097static struct value*
8098get_var_value (name, err_msg)
8099 char* name;
8100 char* err_msg;
8101{
8102 struct symbol** syms;
8103 struct block** blocks;
8104 int nsyms;
8105
8106 nsyms = ada_lookup_symbol_list (name, get_selected_block (NULL), VAR_NAMESPACE,
8107 &syms, &blocks);
8108
8109 if (nsyms != 1)
8110 {
8111 if (err_msg == NULL)
8112 return 0;
8113 else
8114 error ("%s", err_msg);
8115 }
8116
8117 return value_of_variable (syms[0], blocks[0]);
8118}
8119
8120/* Value of integer variable named NAME in the current environment. If
8121 no such variable found, then if ERR_MSG is null, returns 0, and sets
8122 *FLAG to 0. If successful, sets *FLAG to 1. */
8123LONGEST
8124get_int_var_value (name, err_msg, flag)
8125 char* name;
8126 char* err_msg;
8127 int* flag;
8128{
8129 struct value* var_val = get_var_value (name, err_msg);
8130
8131 if (var_val == 0)
8132 {
8133 if (flag != NULL)
8134 *flag = 0;
8135 return 0;
8136 }
8137 else
8138 {
8139 if (flag != NULL)
8140 *flag = 1;
8141 return value_as_long (var_val);
8142 }
8143}
8144
8145
8146/* Return a range type whose base type is that of the range type named
8147 NAME in the current environment, and whose bounds are calculated
8148 from NAME according to the GNAT range encoding conventions.
8149 Extract discriminant values, if needed, from DVAL. If a new type
8150 must be created, allocate in OBJFILE's space. The bounds
8151 information, in general, is encoded in NAME, the base type given in
8152 the named range type. */
8153
8154static struct type*
8155to_fixed_range_type (name, dval, objfile)
8156 char *name;
8157 struct value *dval;
8158 struct objfile *objfile;
8159{
8160 struct type *raw_type = ada_find_any_type (name);
8161 struct type *base_type;
8162 LONGEST low, high;
8163 char* subtype_info;
8164
8165 if (raw_type == NULL)
8166 base_type = builtin_type_int;
8167 else if (TYPE_CODE (raw_type) == TYPE_CODE_RANGE)
8168 base_type = TYPE_TARGET_TYPE (raw_type);
8169 else
8170 base_type = raw_type;
8171
8172 subtype_info = strstr (name, "___XD");
8173 if (subtype_info == NULL)
8174 return raw_type;
8175 else
8176 {
8177 static char *name_buf = NULL;
8178 static size_t name_len = 0;
8179 int prefix_len = subtype_info - name;
8180 LONGEST L, U;
8181 struct type *type;
8182 char *bounds_str;
8183 int n;
8184
8185 GROW_VECT (name_buf, name_len, prefix_len + 5);
8186 strncpy (name_buf, name, prefix_len);
8187 name_buf[prefix_len] = '\0';
8188
8189 subtype_info += 5;
8190 bounds_str = strchr (subtype_info, '_');
8191 n = 1;
8192
8193 if (*subtype_info == 'L')
8194 {
8195 if (! ada_scan_number (bounds_str, n, &L, &n)
8196 && ! scan_discrim_bound (bounds_str, n, dval, &L, &n))
8197 return raw_type;
8198 if (bounds_str[n] == '_')
8199 n += 2;
8200 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
8201 n += 1;
8202 subtype_info += 1;
8203 }
8204 else
8205 {
8206 strcpy (name_buf+prefix_len, "___L");
8207 L = get_int_var_value (name_buf, "Index bound unknown.", NULL);
8208 }
8209
8210 if (*subtype_info == 'U')
8211 {
8212 if (! ada_scan_number (bounds_str, n, &U, &n)
8213 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
8214 return raw_type;
8215 }
8216 else
8217 {
8218 strcpy (name_buf+prefix_len, "___U");
8219 U = get_int_var_value (name_buf, "Index bound unknown.", NULL);
8220 }
8221
8222 if (objfile == NULL)
8223 objfile = TYPE_OBJFILE (base_type);
8224 type = create_range_type (alloc_type (objfile), base_type, L, U);
8225 TYPE_NAME (type) = name;
8226 return type;
8227 }
8228}
8229
8230/* True iff NAME is the name of a range type. */
8231int
8232ada_is_range_type_name (name)
8233 const char* name;
8234{
8235 return (name != NULL && strstr (name, "___XD"));
8236}
8237
8238\f
8239 /* Modular types */
8240
8241/* True iff TYPE is an Ada modular type. */
8242int
8243ada_is_modular_type (type)
8244 struct type* type;
8245{
8246 /* FIXME: base_type should be declared in gdbtypes.h, implemented in
8247 valarith.c */
8248 struct type* subranged_type; /* = base_type (type);*/
8249
8250 return (subranged_type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
8251 && TYPE_CODE (subranged_type) != TYPE_CODE_ENUM
8252 && TYPE_UNSIGNED (subranged_type));
8253}
8254
8255/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
8256LONGEST
8257ada_modulus (type)
8258 struct type* type;
8259{
8260 return TYPE_HIGH_BOUND (type) + 1;
8261}
8262
8263
8264\f
8265 /* Operators */
8266
8267/* Table mapping opcodes into strings for printing operators
8268 and precedences of the operators. */
8269
8270static const struct op_print ada_op_print_tab[] =
8271 {
8272 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
8273 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
8274 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
8275 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
8276 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
8277 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
8278 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
8279 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
8280 {"<=", BINOP_LEQ, PREC_ORDER, 0},
8281 {">=", BINOP_GEQ, PREC_ORDER, 0},
8282 {">", BINOP_GTR, PREC_ORDER, 0},
8283 {"<", BINOP_LESS, PREC_ORDER, 0},
8284 {">>", BINOP_RSH, PREC_SHIFT, 0},
8285 {"<<", BINOP_LSH, PREC_SHIFT, 0},
8286 {"+", BINOP_ADD, PREC_ADD, 0},
8287 {"-", BINOP_SUB, PREC_ADD, 0},
8288 {"&", BINOP_CONCAT, PREC_ADD, 0},
8289 {"*", BINOP_MUL, PREC_MUL, 0},
8290 {"/", BINOP_DIV, PREC_MUL, 0},
8291 {"rem", BINOP_REM, PREC_MUL, 0},
8292 {"mod", BINOP_MOD, PREC_MUL, 0},
8293 {"**", BINOP_EXP, PREC_REPEAT, 0 },
8294 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
8295 {"-", UNOP_NEG, PREC_PREFIX, 0},
8296 {"+", UNOP_PLUS, PREC_PREFIX, 0},
8297 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
8298 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
8299 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
8300 {".all", UNOP_IND, PREC_SUFFIX, 1}, /* FIXME: postfix .ALL */
8301 {"'access", UNOP_ADDR, PREC_SUFFIX, 1}, /* FIXME: postfix 'ACCESS */
8302 {NULL, 0, 0, 0}
8303};
8304\f
8305 /* Assorted Types and Interfaces */
8306
8307struct type* builtin_type_ada_int;
8308struct type* builtin_type_ada_short;
8309struct type* builtin_type_ada_long;
8310struct type* builtin_type_ada_long_long;
8311struct type* builtin_type_ada_char;
8312struct type* builtin_type_ada_float;
8313struct type* builtin_type_ada_double;
8314struct type* builtin_type_ada_long_double;
8315struct type* builtin_type_ada_natural;
8316struct type* builtin_type_ada_positive;
8317struct type* builtin_type_ada_system_address;
8318
8319struct type ** const (ada_builtin_types[]) =
8320{
8321
8322 &builtin_type_ada_int,
8323 &builtin_type_ada_long,
8324 &builtin_type_ada_short,
8325 &builtin_type_ada_char,
8326 &builtin_type_ada_float,
8327 &builtin_type_ada_double,
8328 &builtin_type_ada_long_long,
8329 &builtin_type_ada_long_double,
8330 &builtin_type_ada_natural,
8331 &builtin_type_ada_positive,
8332
8333 /* The following types are carried over from C for convenience. */
8334 &builtin_type_int,
8335 &builtin_type_long,
8336 &builtin_type_short,
8337 &builtin_type_char,
8338 &builtin_type_float,
8339 &builtin_type_double,
8340 &builtin_type_long_long,
8341 &builtin_type_void,
8342 &builtin_type_signed_char,
8343 &builtin_type_unsigned_char,
8344 &builtin_type_unsigned_short,
8345 &builtin_type_unsigned_int,
8346 &builtin_type_unsigned_long,
8347 &builtin_type_unsigned_long_long,
8348 &builtin_type_long_double,
8349 &builtin_type_complex,
8350 &builtin_type_double_complex,
8351 0
8352};
8353
8354/* Not really used, but needed in the ada_language_defn. */
8355static void emit_char (int c, struct ui_file* stream, int quoter)
8356{
8357 ada_emit_char (c, stream, quoter, 1);
8358}
8359
8360const struct language_defn ada_language_defn = {
8361 "ada", /* Language name */
8362 /* language_ada, */
8363 language_unknown,
8364 /* FIXME: language_ada should be defined in defs.h */
8365 ada_builtin_types,
8366 range_check_off,
8367 type_check_off,
8368 case_sensitive_on, /* Yes, Ada is case-insensitive, but
8369 * that's not quite what this means. */
8370 ada_parse,
8371 ada_error,
8372 ada_evaluate_subexp,
8373 ada_printchar, /* Print a character constant */
8374 ada_printstr, /* Function to print string constant */
8375 emit_char, /* Function to print single char (not used) */
8376 ada_create_fundamental_type, /* Create fundamental type in this language */
8377 ada_print_type, /* Print a type using appropriate syntax */
8378 ada_val_print, /* Print a value using appropriate syntax */
8379 ada_value_print, /* Print a top-level value */
8380 {"", "", "", ""}, /* Binary format info */
8381#if 0
8382 {"8#%lo#", "8#", "o", "#"}, /* Octal format info */
8383 {"%ld", "", "d", ""}, /* Decimal format info */
8384 {"16#%lx#", "16#", "x", "#"}, /* Hex format info */
8385#else
8386 /* Copied from c-lang.c. */
8387 {"0%lo", "0", "o", ""}, /* Octal format info */
8388 {"%ld", "", "d", ""}, /* Decimal format info */
8389 {"0x%lx", "0x", "x", ""}, /* Hex format info */
8390#endif
8391 ada_op_print_tab, /* expression operators for printing */
8392 1, /* c-style arrays (FIXME?) */
8393 0, /* String lower bound (FIXME?) */
8394 &builtin_type_ada_char,
8395 LANG_MAGIC
8396};
8397
8398void
8399_initialize_ada_language ()
8400{
8401 builtin_type_ada_int =
8402 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8403 0,
8404 "integer", (struct objfile *) NULL);
8405 builtin_type_ada_long =
8406 init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
8407 0,
8408 "long_integer", (struct objfile *) NULL);
8409 builtin_type_ada_short =
8410 init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8411 0,
8412 "short_integer", (struct objfile *) NULL);
8413 builtin_type_ada_char =
8414 init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8415 0,
8416 "character", (struct objfile *) NULL);
8417 builtin_type_ada_float =
8418 init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8419 0,
8420 "float", (struct objfile *) NULL);
8421 builtin_type_ada_double =
8422 init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8423 0,
8424 "long_float", (struct objfile *) NULL);
8425 builtin_type_ada_long_long =
8426 init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8427 0,
8428 "long_long_integer", (struct objfile *) NULL);
8429 builtin_type_ada_long_double =
8430 init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8431 0,
8432 "long_long_float", (struct objfile *) NULL);
8433 builtin_type_ada_natural =
8434 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8435 0,
8436 "natural", (struct objfile *) NULL);
8437 builtin_type_ada_positive =
8438 init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
8439 0,
8440 "positive", (struct objfile *) NULL);
8441
8442
8443 builtin_type_ada_system_address =
8444 lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
8445 (struct objfile *) NULL));
8446 TYPE_NAME (builtin_type_ada_system_address) = "system__address";
8447
8448 add_language (&ada_language_defn);
8449
8450 add_show_from_set
8451 (add_set_cmd ("varsize-limit", class_support, var_uinteger,
8452 (char*) &varsize_limit,
8453 "Set maximum bytes in dynamic-sized object.",
8454 &setlist),
8455 &showlist);
8456 varsize_limit = 65536;
8457
8458 add_com ("begin", class_breakpoint, begin_command,
8459 "Start the debugged program, stopping at the beginning of the\n\
8460main program. You may specify command-line arguments to give it, as for\n\
8461the \"run\" command (q.v.).");
8462}
8463
8464
8465/* Create a fundamental Ada type using default reasonable for the current
8466 target machine.
8467
8468 Some object/debugging file formats (DWARF version 1, COFF, etc) do not
8469 define fundamental types such as "int" or "double". Others (stabs or
8470 DWARF version 2, etc) do define fundamental types. For the formats which
8471 don't provide fundamental types, gdb can create such types using this
8472 function.
8473
8474 FIXME: Some compilers distinguish explicitly signed integral types
8475 (signed short, signed int, signed long) from "regular" integral types
8476 (short, int, long) in the debugging information. There is some dis-
8477 agreement as to how useful this feature is. In particular, gcc does
8478 not support this. Also, only some debugging formats allow the
8479 distinction to be passed on to a debugger. For now, we always just
8480 use "short", "int", or "long" as the type name, for both the implicit
8481 and explicitly signed types. This also makes life easier for the
8482 gdb test suite since we don't have to account for the differences
8483 in output depending upon what the compiler and debugging format
8484 support. We will probably have to re-examine the issue when gdb
8485 starts taking it's fundamental type information directly from the
8486 debugging information supplied by the compiler. fnf@cygnus.com */
8487
8488static struct type *
8489ada_create_fundamental_type (objfile, typeid)
8490 struct objfile *objfile;
8491 int typeid;
8492{
8493 struct type *type = NULL;
8494
8495 switch (typeid)
8496 {
8497 default:
8498 /* FIXME: For now, if we are asked to produce a type not in this
8499 language, create the equivalent of a C integer type with the
8500 name "<?type?>". When all the dust settles from the type
8501 reconstruction work, this should probably become an error. */
8502 type = init_type (TYPE_CODE_INT,
8503 TARGET_INT_BIT / TARGET_CHAR_BIT,
8504 0, "<?type?>", objfile);
8505 warning ("internal error: no Ada fundamental type %d", typeid);
8506 break;
8507 case FT_VOID:
8508 type = init_type (TYPE_CODE_VOID,
8509 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8510 0, "void", objfile);
8511 break;
8512 case FT_CHAR:
8513 type = init_type (TYPE_CODE_INT,
8514 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8515 0, "character", objfile);
8516 break;
8517 case FT_SIGNED_CHAR:
8518 type = init_type (TYPE_CODE_INT,
8519 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8520 0, "signed char", objfile);
8521 break;
8522 case FT_UNSIGNED_CHAR:
8523 type = init_type (TYPE_CODE_INT,
8524 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
8525 TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
8526 break;
8527 case FT_SHORT:
8528 type = init_type (TYPE_CODE_INT,
8529 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8530 0, "short_integer", objfile);
8531 break;
8532 case FT_SIGNED_SHORT:
8533 type = init_type (TYPE_CODE_INT,
8534 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8535 0, "short_integer", objfile);
8536 break;
8537 case FT_UNSIGNED_SHORT:
8538 type = init_type (TYPE_CODE_INT,
8539 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
8540 TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
8541 break;
8542 case FT_INTEGER:
8543 type = init_type (TYPE_CODE_INT,
8544 TARGET_INT_BIT / TARGET_CHAR_BIT,
8545 0, "integer", objfile);
8546 break;
8547 case FT_SIGNED_INTEGER:
8548 type = init_type (TYPE_CODE_INT,
8549 TARGET_INT_BIT / TARGET_CHAR_BIT,
8550 0, "integer", objfile); /* FIXME -fnf */
8551 break;
8552 case FT_UNSIGNED_INTEGER:
8553 type = init_type (TYPE_CODE_INT,
8554 TARGET_INT_BIT / TARGET_CHAR_BIT,
8555 TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
8556 break;
8557 case FT_LONG:
8558 type = init_type (TYPE_CODE_INT,
8559 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8560 0, "long_integer", objfile);
8561 break;
8562 case FT_SIGNED_LONG:
8563 type = init_type (TYPE_CODE_INT,
8564 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8565 0, "long_integer", objfile);
8566 break;
8567 case FT_UNSIGNED_LONG:
8568 type = init_type (TYPE_CODE_INT,
8569 TARGET_LONG_BIT / TARGET_CHAR_BIT,
8570 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
8571 break;
8572 case FT_LONG_LONG:
8573 type = init_type (TYPE_CODE_INT,
8574 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8575 0, "long_long_integer", objfile);
8576 break;
8577 case FT_SIGNED_LONG_LONG:
8578 type = init_type (TYPE_CODE_INT,
8579 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8580 0, "long_long_integer", objfile);
8581 break;
8582 case FT_UNSIGNED_LONG_LONG:
8583 type = init_type (TYPE_CODE_INT,
8584 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
8585 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
8586 break;
8587 case FT_FLOAT:
8588 type = init_type (TYPE_CODE_FLT,
8589 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
8590 0, "float", objfile);
8591 break;
8592 case FT_DBL_PREC_FLOAT:
8593 type = init_type (TYPE_CODE_FLT,
8594 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
8595 0, "long_float", objfile);
8596 break;
8597 case FT_EXT_PREC_FLOAT:
8598 type = init_type (TYPE_CODE_FLT,
8599 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
8600 0, "long_long_float", objfile);
8601 break;
8602 }
8603 return (type);
8604}
8605
8606void ada_dump_symtab (struct symtab* s)
8607{
8608 int i;
8609 fprintf (stderr, "New symtab: [\n");
8610 fprintf (stderr, " Name: %s/%s;\n",
8611 s->dirname ? s->dirname : "?",
8612 s->filename ? s->filename : "?");
8613 fprintf (stderr, " Format: %s;\n", s->debugformat);
8614 if (s->linetable != NULL)
8615 {
8616 fprintf (stderr, " Line table (section %d):\n", s->block_line_section);
8617 for (i = 0; i < s->linetable->nitems; i += 1)
8618 {
8619 struct linetable_entry* e = s->linetable->item + i;
8620 fprintf (stderr, " %4ld: %8lx\n", (long) e->line, (long) e->pc);
8621 }
8622 }
8623 fprintf (stderr, "]\n");
8624}
8625