* tui/tui-file.c:
[deliverable/binutils-gdb.git] / gdb / ada-lang.h
CommitLineData
14f9c5c9 1/* Ada language support definitions for GDB, the GNU debugger.
a2bd3dcd 2
197e01b6 3 Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
a2bd3dcd 4 2005 Free Software Foundation, Inc.
14f9c5c9
AS
5
6This file is part of GDB.
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
197e01b6
EZ
20Foundation, Inc., 51 Franklin Street, Fifth Floor,
21Boston, MA 02110-1301, USA. */
14f9c5c9
AS
22
23#if !defined (ADA_LANG_H)
24#define ADA_LANG_H 1
25
da3331ec 26struct partial_symbol;
19c1ef65 27struct frame_info;
da3331ec 28
14f9c5c9
AS
29#include "value.h"
30#include "gdbtypes.h"
4c4b4cd2
PH
31#include "breakpoint.h"
32
33/* Names of specific files known to be part of the runtime
34 system and that might consider (confusing) debugging information.
35 Each name (a basic regular expression string) is followed by a
36 comma. FIXME: Should be part of a configuration file. */
e84ecc99 37#if defined(__alpha__) && defined(__osf__)
4c4b4cd2
PH
38#define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \
39 "^[agis]-.*\\.ad[bs]$", \
40 "/usr/shlib/libpthread\\.so",
41#elif defined (__linux__)
42#define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \
43 "^[agis]-.*\\.ad[bs]$", \
44 "/lib.*/libpthread\\.so[.0-9]*$", "/lib.*/libpthread\\.a$", \
45 "/lib.*/libc\\.so[.0-9]*$", "/lib.*/libc\\.a$",
46#endif
14f9c5c9 47
4c4b4cd2
PH
48#if !defined (ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS)
49#define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \
50 "^[agis]-.*\\.ad[bs]$",
51#endif
52
53/* Names of compiler-generated auxiliary functions probably of no
54 interest to users. Each name (a basic regular expression string)
55 is followed by a comma. */
56#define ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS \
57 "___clean[.a-zA-Z0-9_]*$",
fe898f56 58
4c4b4cd2
PH
59/* The maximum number of frame levels searched for non-local,
60 * non-global symbols. This limit exists as a precaution to prevent
61 * infinite search loops when the stack is screwed up. */
62#define MAX_ENCLOSING_FRAME_LEVELS 7
14f9c5c9 63
4c4b4cd2
PH
64/* Maximum number of steps followed in looking for the ultimate
65 referent of a renaming. This prevents certain infinite loops that
66 can otherwise result. */
67#define MAX_RENAMING_CHAIN_LENGTH 10
14f9c5c9 68
4c4b4cd2
PH
69struct block;
70
71/* Corresponding encoded/decoded names and opcodes for Ada user-definable
14f9c5c9 72 operators. */
d2e4a39e
AS
73struct ada_opname_map
74{
4c4b4cd2
PH
75 const char *encoded;
76 const char *decoded;
14f9c5c9
AS
77 enum exp_opcode op;
78};
79
4c4b4cd2 80/* Table of Ada operators in encoded and decoded forms. */
14f9c5c9
AS
81/* Defined in ada-lang.c */
82extern const struct ada_opname_map ada_opname_table[];
83
4c4b4cd2
PH
84enum ada_operator
85 {
86 /* X IN A'RANGE(N). N is an immediate operand, surrounded by
87 BINOP_IN_BOUNDS before and after. A is an array, X an index
88 value. Evaluates to true iff X is within range of the Nth
89 dimension (1-based) of A. (A multi-dimensional array
90 type is represented as array of array of ...) */
91 BINOP_IN_BOUNDS = OP_EXTENDED0,
92
93 /* X IN L .. U. True iff L <= X <= U. */
94 TERNOP_IN_RANGE,
95
96 /* Ada attributes ('Foo). */
97 OP_ATR_FIRST,
98 OP_ATR_LAST,
99 OP_ATR_LENGTH,
100 OP_ATR_IMAGE,
101 OP_ATR_MAX,
102 OP_ATR_MIN,
103 OP_ATR_MODULUS,
104 OP_ATR_POS,
105 OP_ATR_SIZE,
106 OP_ATR_TAG,
107 OP_ATR_VAL,
108
109 /* Ada type qualification. It is encoded as for UNOP_CAST, above,
110 and denotes the TYPE'(EXPR) construct. */
111 UNOP_QUAL,
112
113 /* X IN TYPE. The `TYPE' argument is immediate, with
114 UNOP_IN_RANGE before and after it. True iff X is a member of
115 type TYPE (typically a subrange). */
116 UNOP_IN_RANGE,
117
118 /* End marker */
119 OP_ADA_LAST
120 };
121
122/* A triple, (symbol, block, symtab), representing one instance of a
123 * symbol-lookup operation. */
124struct ada_symbol_info {
125 struct symbol* sym;
126 struct block* block;
127 struct symtab* symtab;
14f9c5c9
AS
128};
129
96d887e8
PH
130/* Ada task structures. */
131
132/* Ada task control block, as defined in the GNAT runt-time library. */
133
134struct task_control_block
135{
136 char state;
137 CORE_ADDR parent;
138 int priority;
139 char image [32];
140 int image_len; /* This field is not always present in the ATCB. */
141 CORE_ADDR call;
142 CORE_ADDR thread;
143 CORE_ADDR lwp; /* This field is not always present in the ATCB. */
144};
145
146struct task_ptid
147{
148 int pid; /* The Process id */
149 long lwp; /* The Light Weight Process id */
150 long tid; /* The Thread id */
151};
152typedef struct task_ptid task_ptid_t;
153
154struct task_entry
155{
156 CORE_ADDR task_id;
157 struct task_control_block atcb;
158 int task_num;
159 int known_tasks_index;
160 struct task_entry *next_task;
161 task_ptid_t task_ptid;
162 int stack_per;
163};
164
96d887e8 165/* The maximum number of tasks known to the Ada runtime. */
4c4b4cd2
PH
166extern const int MAX_NUMBER_OF_KNOWN_TASKS;
167
96d887e8
PH
168/* task entry list. */
169extern struct task_entry *task_list;
170
171
4c4b4cd2 172/* Assuming V points to an array of S objects, make sure that it contains at
14f9c5c9
AS
173 least M objects, updating V and S as necessary. */
174
4c4b4cd2 175#define GROW_VECT(v, s, m) \
f27cf670 176 if ((s) < (m)) (v) = grow_vect (v, &(s), m, sizeof *(v));
14f9c5c9 177
f27cf670 178extern void *grow_vect (void *, size_t *, size_t, int);
14f9c5c9 179
4c4b4cd2
PH
180extern int ada_get_field_index (const struct type *type,
181 const char *field_name,
182 int maybe_missing);
14f9c5c9 183
4c4b4cd2 184extern int ada_parse (void); /* Defined in ada-exp.y */
14f9c5c9 185
4c4b4cd2
PH
186extern void ada_error (char *); /* Defined in ada-exp.y */
187
188 /* Defined in ada-typeprint.c */
d2e4a39e 189extern void ada_print_type (struct type *, char *, struct ui_file *, int,
4c4b4cd2 190 int);
14f9c5c9 191
fc1a4b47 192extern int ada_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
4c4b4cd2
PH
193 struct ui_file *, int, int, int,
194 enum val_prettyprint);
14f9c5c9 195
d2e4a39e 196extern int ada_value_print (struct value *, struct ui_file *, int,
4c4b4cd2 197 enum val_prettyprint);
14f9c5c9 198
4c4b4cd2 199 /* Defined in ada-lang.c */
14f9c5c9 200
10a2c479 201extern struct value *value_from_contents_and_address (struct type *,
fc1a4b47 202 const gdb_byte *,
4c4b4cd2 203 CORE_ADDR);
14f9c5c9
AS
204
205extern void ada_emit_char (int, struct ui_file *, int, int);
206
d2e4a39e 207extern void ada_printchar (int, struct ui_file *);
14f9c5c9 208
fc1a4b47 209extern void ada_printstr (struct ui_file *, const gdb_byte *,
ce27fb25 210 unsigned int, int, int);
14f9c5c9 211
d2e4a39e 212extern void ada_convert_actuals (struct value *, int, struct value **,
4c4b4cd2 213 CORE_ADDR *);
14f9c5c9 214
d2e4a39e 215extern struct value *ada_value_subscript (struct value *, int,
4c4b4cd2 216 struct value **);
14f9c5c9 217
d2e4a39e 218extern struct type *ada_array_element_type (struct type *, int);
14f9c5c9 219
d2e4a39e 220extern int ada_array_arity (struct type *);
14f9c5c9 221
d2e4a39e 222struct type *ada_type_of_array (struct value *, int);
14f9c5c9 223
d2e4a39e 224extern struct value *ada_coerce_to_simple_array_ptr (struct value *);
14f9c5c9 225
4c4b4cd2 226extern int ada_is_simple_array_type (struct type *);
14f9c5c9 227
4c4b4cd2 228extern int ada_is_array_descriptor_type (struct type *);
14f9c5c9 229
d2e4a39e 230extern int ada_is_bogus_array_descriptor (struct type *);
14f9c5c9 231
d2e4a39e 232extern struct type *ada_index_type (struct type *, int);
14f9c5c9 233
d2e4a39e 234extern struct value *ada_array_bound (struct value *, int, int);
14f9c5c9 235
4c4b4cd2 236extern char *ada_decode_symbol (const struct general_symbol_info*);
14f9c5c9 237
4c4b4cd2 238extern const char *ada_decode (const char*);
14f9c5c9 239
4c4b4cd2
PH
240extern enum language ada_update_initial_language (enum language,
241 struct partial_symtab*);
14f9c5c9 242
4c4b4cd2 243extern void clear_ada_sym_cache (void);
14f9c5c9 244
4c4b4cd2
PH
245extern char **ada_make_symbol_completion_list (const char *text0,
246 const char *word);
14f9c5c9 247
4c4b4cd2
PH
248extern int ada_lookup_symbol_list (const char *, const struct block *,
249 domain_enum, struct ada_symbol_info**);
250
251extern char *ada_fold_name (const char *);
252
253extern struct symbol *ada_lookup_symbol (const char *, const struct block *,
254 domain_enum, int *,
255 struct symtab **);
256
257extern struct minimal_symbol *ada_lookup_simple_minsym (const char *);
14f9c5c9 258
d2e4a39e 259extern void ada_fill_in_ada_prototype (struct symbol *);
14f9c5c9 260
4c4b4cd2 261extern int user_select_syms (struct ada_symbol_info *, int, int);
14f9c5c9 262
d2e4a39e 263extern int get_selections (int *, int, int, int, char *);
14f9c5c9 264
d2e4a39e 265extern char *ada_start_decode_line_1 (char *);
14f9c5c9 266
d2e4a39e 267extern struct symtabs_and_lines ada_finish_decode_line_1 (char **,
4c4b4cd2
PH
268 struct symtab *,
269 int, char ***);
270
271extern struct symtabs_and_lines ada_sals_for_line (const char*, int,
272 int, char***, int);
14f9c5c9 273
d2e4a39e 274extern int ada_scan_number (const char *, int, LONGEST *, int *);
14f9c5c9 275
d2e4a39e 276extern struct type *ada_parent_type (struct type *);
14f9c5c9 277
d2e4a39e 278extern int ada_is_ignored_field (struct type *, int);
14f9c5c9 279
d2e4a39e 280extern int ada_is_packed_array_type (struct type *);
14f9c5c9 281
a2bd3dcd 282extern struct value *ada_value_primitive_packed_val (struct value *,
fc1a4b47 283 const gdb_byte *,
4c4b4cd2
PH
284 long, int, int,
285 struct type *);
14f9c5c9 286
d2e4a39e 287extern struct type *ada_coerce_to_simple_array_type (struct type *);
14f9c5c9 288
d2e4a39e 289extern int ada_is_character_type (struct type *);
14f9c5c9 290
d2e4a39e 291extern int ada_is_string_type (struct type *);
14f9c5c9 292
4c4b4cd2
PH
293extern int ada_is_tagged_type (struct type *, int);
294
295extern int ada_is_tag_type (struct type *);
14f9c5c9 296
d2e4a39e 297extern struct type *ada_tag_type (struct value *);
14f9c5c9 298
d2e4a39e 299extern struct value *ada_value_tag (struct value *);
14f9c5c9 300
4c4b4cd2
PH
301extern const char *ada_tag_name (struct value *);
302
d2e4a39e 303extern int ada_is_parent_field (struct type *, int);
14f9c5c9 304
d2e4a39e 305extern int ada_is_wrapper_field (struct type *, int);
14f9c5c9 306
d2e4a39e 307extern int ada_is_variant_part (struct type *, int);
14f9c5c9 308
d2e4a39e 309extern struct type *ada_variant_discrim_type (struct type *, struct type *);
14f9c5c9 310
d2e4a39e 311extern int ada_is_others_clause (struct type *, int);
14f9c5c9 312
d2e4a39e 313extern int ada_in_variant (LONGEST, struct type *, int);
14f9c5c9 314
d2e4a39e 315extern char *ada_variant_discrim_name (struct type *);
14f9c5c9 316
d2e4a39e 317extern struct value *ada_value_struct_elt (struct value *, char *, char *);
14f9c5c9 318
d2e4a39e 319extern int ada_is_aligner_type (struct type *);
14f9c5c9 320
d2e4a39e 321extern struct type *ada_aligned_type (struct type *);
14f9c5c9 322
fc1a4b47
AC
323extern const gdb_byte *ada_aligned_value_addr (struct type *,
324 const gdb_byte *);
14f9c5c9 325
4c4b4cd2 326extern const char *ada_attribute_name (enum exp_opcode);
14f9c5c9 327
d2e4a39e 328extern int ada_is_fixed_point_type (struct type *);
14f9c5c9 329
4c4b4cd2
PH
330extern int ada_is_system_address_type (struct type *);
331
d2e4a39e 332extern DOUBLEST ada_delta (struct type *);
14f9c5c9
AS
333
334extern DOUBLEST ada_fixed_to_float (struct type *, LONGEST);
335
d2e4a39e 336extern LONGEST ada_float_to_fixed (struct type *, DOUBLEST);
14f9c5c9 337
d2e4a39e 338extern int ada_is_vax_floating_type (struct type *);
14f9c5c9 339
d2e4a39e 340extern int ada_vax_float_type_suffix (struct type *);
14f9c5c9 341
d2e4a39e 342extern struct value *ada_vax_float_print_function (struct type *);
14f9c5c9 343
d2e4a39e 344extern struct type *ada_system_address_type (void);
14f9c5c9 345
a2bd3dcd 346extern int ada_which_variant_applies (struct type *, struct type *,
fc1a4b47 347 const gdb_byte *);
14f9c5c9 348
fc1a4b47 349extern struct type *ada_to_fixed_type (struct type *, const gdb_byte *,
10a2c479 350 CORE_ADDR, struct value *);
4c4b4cd2 351
10a2c479 352extern struct type *ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 353 const gdb_byte *valaddr,
10a2c479
AC
354 CORE_ADDR address,
355 struct value *dval0,
356 int keep_dynamic_fields);
14f9c5c9 357
d2e4a39e 358extern int ada_name_prefix_len (const char *);
14f9c5c9 359
d2e4a39e 360extern char *ada_type_name (struct type *);
14f9c5c9 361
d2e4a39e 362extern struct type *ada_find_parallel_type (struct type *,
4c4b4cd2
PH
363 const char *suffix);
364
365extern LONGEST get_int_var_value (char *, int *);
14f9c5c9 366
4c4b4cd2 367extern struct symbol *ada_find_any_symbol (const char *name);
14f9c5c9 368
d2e4a39e 369extern struct type *ada_find_any_type (const char *name);
14f9c5c9 370
4c4b4cd2
PH
371extern struct symbol *ada_find_renaming_symbol (const char *name,
372 struct block *block);
373
d2e4a39e 374extern int ada_prefer_type (struct type *, struct type *);
14f9c5c9 375
d2e4a39e 376extern struct type *ada_get_base_type (struct type *);
14f9c5c9 377
61ee279c 378extern struct type *ada_check_typedef (struct type *);
14f9c5c9 379
4c4b4cd2 380extern char *ada_encode (const char *);
14f9c5c9 381
d2e4a39e 382extern const char *ada_enum_name (const char *);
14f9c5c9 383
d2e4a39e 384extern int ada_is_modular_type (struct type *);
14f9c5c9 385
61ee279c 386extern ULONGEST ada_modulus (struct type *);
14f9c5c9 387
d2e4a39e 388extern struct value *ada_value_ind (struct value *);
14f9c5c9 389
d2e4a39e 390extern void ada_print_scalar (struct type *, LONGEST, struct ui_file *);
14f9c5c9 391
d2e4a39e 392extern int ada_is_range_type_name (const char *);
14f9c5c9 393
d2e4a39e 394extern const char *ada_renaming_type (struct type *);
14f9c5c9 395
d2e4a39e 396extern int ada_is_object_renaming (struct symbol *);
14f9c5c9 397
4c4b4cd2 398extern char *ada_simple_renamed_entity (struct symbol *);
14f9c5c9 399
d2e4a39e 400extern char *ada_breakpoint_rewrite (char *, int *);
14f9c5c9 401
4c4b4cd2
PH
402extern char *ada_main_name (void);
403
14f9c5c9
AS
404/* Tasking-related: ada-tasks.c */
405
406extern int valid_task_id (int);
407
14f9c5c9
AS
408extern void init_task_list (void);
409
4c4b4cd2
PH
410extern int ada_is_exception_breakpoint (bpstat bs);
411
412extern void ada_adjust_exception_stop (bpstat bs);
14f9c5c9 413
4c4b4cd2 414extern void ada_print_exception_stop (bpstat bs);
14f9c5c9 415
4c4b4cd2 416extern int ada_get_current_task (ptid_t);
14f9c5c9 417
4c4b4cd2
PH
418extern int breakpoint_ada_task_match (CORE_ADDR, ptid_t);
419
420extern int ada_print_exception_breakpoint_nontask (struct breakpoint *);
421
422extern void ada_print_exception_breakpoint_task (struct breakpoint *);
14f9c5c9 423
4c4b4cd2
PH
424extern void ada_find_printable_frame (struct frame_info *fi);
425
426extern void ada_reset_thread_registers (void);
14f9c5c9 427
96d887e8
PH
428extern int ada_build_task_list (void);
429
f26caa11
PH
430/* Look up a symbol by name using the search conventions of
431 a specific language (optional block, optional symtab).
432 FIXME: Should be symtab.h. */
433
434extern struct symbol *lookup_symbol_in_language (const char *,
435 const struct block *,
436 domain_enum,
437 enum language,
438 int *,
439 struct symtab **);
14f9c5c9 440#endif
This page took 0.250703 seconds and 4 git commands to generate.