1/* Ada language support definitions for GDB, the GNU debugger.
2   Copyright 1992, 1997 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#if !defined (ADA_LANG_H)
21#define ADA_LANG_H 1
22
23struct partial_symbol;
24
25#include "value.h"
26#include "gdbtypes.h"
27
28struct block;
29
30/* A macro to reorder the bytes of an address depending on the
31   endiannes of the target.  */
32#define EXTRACT_ADDRESS(x) ((void *) extract_unsigned_integer (&(x), sizeof (x)))
33/* A macro to reorder the bytes of an int depending on the endiannes
34   of the target */
35#define EXTRACT_INT(x) ((int) extract_signed_integer (&(x), sizeof (x)))
36
37/* Chain of cleanups for arguments of OP_UNRESOLVED_VALUE names.  Created in
38   yyparse and freed in ada_resolve. */
39extern struct cleanup *unresolved_names;
40
41/* Corresponding mangled/demangled names and opcodes for Ada user-definable
42   operators. */
43struct ada_opname_map
44{
45  const char *mangled;
46  const char *demangled;
47  enum exp_opcode op;
48};
49
50/* Table of Ada operators in mangled and demangled forms. */
51/* Defined in ada-lang.c */
52extern const struct ada_opname_map ada_opname_table[];
53
54/* The maximum number of tasks known to the Ada runtime */
55extern const int MAX_NUMBER_OF_KNOWN_TASKS;
56
57/* Identifiers for Ada attributes that need special processing.  Be sure
58   to update the table attribute_names in ada-lang.c whenever you change this.
59   */
60
61enum ada_attribute
62{
63  /* Invalid attribute for error checking. */
64  ATR_INVALID,
65
66  ATR_FIRST,
67  ATR_LAST,
68  ATR_LENGTH,
69  ATR_IMAGE,
70  ATR_IMG,
71  ATR_MAX,
72  ATR_MIN,
73  ATR_MODULUS,
74  ATR_POS,
75  ATR_SIZE,
76  ATR_TAG,
77  ATR_VAL,
78
79  /* Dummy last attribute. */
80  ATR_END
81};
82
83enum task_states
84{
85  Unactivated,
86  Runnable,
87  Terminated,
88  Activator_Sleep,
89  Acceptor_Sleep,
90  Entry_Caller_Sleep,
91  Async_Select_Sleep,
92  Delay_Sleep,
93  Master_Completion_Sleep,
94  Master_Phase_2_Sleep
95};
96
97extern char *ada_task_states[];
98
99typedef struct
100{
101  char *P_ARRAY;
102  int *P_BOUNDS;
103}
104fat_string;
105
106typedef struct entry_call
107{
108  void *self;
109}
110 *entry_call_link;
111
112struct task_fields
113{
114  int entry_num;
115#if (defined (VXWORKS_TARGET) || !defined (i386)) \
116    && !(defined (VXWORKS_TARGET) && defined (M68K_TARGET))
117  int pad1;
118#endif
119  char state;
120#if (defined (VXWORKS_TARGET) && defined (M68K_TARGET))
121  char pad_8bits;
122#endif
123  void *parent;
124  int priority;
125  int current_priority;
126  fat_string image;
127  entry_call_link call;
128#if (defined (sun) && defined (__SVR4)) && !defined (VXWORKS_TARGET)
129  int pad2;
130  unsigned thread;
131  unsigned lwp;
132#else
133  void *thread;
134  void *lwp;
135#endif
136}
137#if (defined (VXWORKS_TARGET) && defined (M68K_TARGET))
138__attribute__ ((packed))
139#endif
140  ;
141
142struct task_entry
143{
144  void *task_id;
145  int task_num;
146  int known_tasks_index;
147  struct task_entry *next_task;
148  void *thread;
149  void *lwp;
150  int stack_per;
151};
152
153extern struct type *builtin_type_ada_int;
154extern struct type *builtin_type_ada_short;
155extern struct type *builtin_type_ada_long;
156extern struct type *builtin_type_ada_long_long;
157extern struct type *builtin_type_ada_char;
158extern struct type *builtin_type_ada_float;
159extern struct type *builtin_type_ada_double;
160extern struct type *builtin_type_ada_long_double;
161extern struct type *builtin_type_ada_natural;
162extern struct type *builtin_type_ada_positive;
163extern struct type *builtin_type_ada_system_address;
164
165/* Assuming V points to an array of S objects,  make sure that it contains at
166   least M objects, updating V and S as necessary. */
167
168#define GROW_VECT(v, s, m) 						\
169   if ((s) < (m)) grow_vect ((void**) &(v), &(s), (m), sizeof(*(v)));
170
171extern void grow_vect (void **, size_t *, size_t, int);
172
173extern int ada_parse (void);	/* Defined in ada-exp.y */
174
175extern void ada_error (char *);	/* Defined in ada-exp.y */
176
177			/* Defined in ada-typeprint.c */
178extern void ada_print_type (struct type *, char *, struct ui_file *, int,
179			    int);
180
181extern int ada_val_print (struct type *, char *, int, CORE_ADDR,
182			  struct ui_file *, int, int, int,
183			  enum val_prettyprint);
184
185extern int ada_value_print (struct value *, struct ui_file *, int,
186			    enum val_prettyprint);
187
188				/* Defined in ada-lang.c */
189
190extern struct value *value_from_contents_and_address (struct type *, char *,
191						      CORE_ADDR);
192
193extern void ada_emit_char (int, struct ui_file *, int, int);
194
195extern void ada_printchar (int, struct ui_file *);
196
197extern void ada_printstr (struct ui_file *, char *, unsigned int, int, int);
198
199extern void ada_convert_actuals (struct value *, int, struct value **,
200				 CORE_ADDR *);
201
202extern struct value *ada_value_subscript (struct value *, int,
203					  struct value **);
204
205extern struct type *ada_array_element_type (struct type *, int);
206
207extern int ada_array_arity (struct type *);
208
209struct type *ada_type_of_array (struct value *, int);
210
211extern struct value *ada_coerce_to_simple_array (struct value *);
212
213extern struct value *ada_coerce_to_simple_array_ptr (struct value *);
214
215extern int ada_is_simple_array (struct type *);
216
217extern int ada_is_array_descriptor (struct type *);
218
219extern int ada_is_bogus_array_descriptor (struct type *);
220
221extern struct type *ada_index_type (struct type *, int);
222
223extern struct value *ada_array_bound (struct value *, int, int);
224
225extern int ada_lookup_symbol_list (const char *, struct block *,
226				   domain_enum, struct symbol ***,
227				   struct block ***);
228
229extern char *ada_fold_name (const char *);
230
231extern struct symbol *ada_lookup_symbol (const char *, struct block *,
232					 domain_enum);
233
234extern struct minimal_symbol *ada_lookup_minimal_symbol (const char *);
235
236extern void ada_resolve (struct expression **, struct type *);
237
238extern int ada_resolve_function (struct symbol **, struct block **, int,
239				 struct value **, int, const char *,
240				 struct type *);
241
242extern void ada_fill_in_ada_prototype (struct symbol *);
243
244extern int user_select_syms (struct symbol **, struct block **, int, int);
245
246extern int get_selections (int *, int, int, int, char *);
247
248extern char *ada_start_decode_line_1 (char *);
249
250extern struct symtabs_and_lines ada_finish_decode_line_1 (char **,
251							  struct symtab *,
252							  int, char ***);
253
254extern int ada_scan_number (const char *, int, LONGEST *, int *);
255
256extern struct type *ada_parent_type (struct type *);
257
258extern int ada_is_ignored_field (struct type *, int);
259
260extern int ada_is_packed_array_type (struct type *);
261
262extern struct value *ada_value_primitive_packed_val (struct value *, char *,
263						     long, int, int,
264						     struct type *);
265
266extern struct type *ada_coerce_to_simple_array_type (struct type *);
267
268extern int ada_is_character_type (struct type *);
269
270extern int ada_is_string_type (struct type *);
271
272extern int ada_is_tagged_type (struct type *);
273
274extern struct type *ada_tag_type (struct value *);
275
276extern struct value *ada_value_tag (struct value *);
277
278extern int ada_is_parent_field (struct type *, int);
279
280extern int ada_is_wrapper_field (struct type *, int);
281
282extern int ada_is_variant_part (struct type *, int);
283
284extern struct type *ada_variant_discrim_type (struct type *, struct type *);
285
286extern int ada_is_others_clause (struct type *, int);
287
288extern int ada_in_variant (LONGEST, struct type *, int);
289
290extern char *ada_variant_discrim_name (struct type *);
291
292extern struct type *ada_lookup_struct_elt_type (struct type *, char *, int,
293						int *);
294
295extern struct value *ada_value_struct_elt (struct value *, char *, char *);
296
297extern struct value *ada_search_struct_field (char *, struct value *, int,
298					      struct type *);
299
300extern int ada_is_aligner_type (struct type *);
301
302extern struct type *ada_aligned_type (struct type *);
303
304extern char *ada_aligned_value_addr (struct type *, char *);
305
306extern const char *ada_attribute_name (int);
307
308extern int ada_is_fixed_point_type (struct type *);
309
310extern DOUBLEST ada_delta (struct type *);
311
312extern DOUBLEST ada_fixed_to_float (struct type *, LONGEST);
313
314extern LONGEST ada_float_to_fixed (struct type *, DOUBLEST);
315
316extern int ada_is_vax_floating_type (struct type *);
317
318extern int ada_vax_float_type_suffix (struct type *);
319
320extern struct value *ada_vax_float_print_function (struct type *);
321
322extern struct type *ada_system_address_type (void);
323
324extern int ada_which_variant_applies (struct type *, struct type *, char *);
325
326extern struct value *ada_to_fixed_value (struct type *, char *, CORE_ADDR,
327					 struct value *);
328
329extern struct type *ada_to_fixed_type (struct type *, char *, CORE_ADDR,
330				       struct value *);
331
332extern int ada_name_prefix_len (const char *);
333
334extern char *ada_type_name (struct type *);
335
336extern struct type *ada_find_parallel_type (struct type *,
337					    const char *suffix);
338
339extern LONGEST get_int_var_value (char *, char *, int *);
340
341extern struct type *ada_find_any_type (const char *name);
342
343extern int ada_prefer_type (struct type *, struct type *);
344
345extern struct type *ada_get_base_type (struct type *);
346
347extern struct type *ada_completed_type (struct type *);
348
349extern char *ada_mangle (const char *);
350
351extern const char *ada_enum_name (const char *);
352
353extern int ada_is_modular_type (struct type *);
354
355extern LONGEST ada_modulus (struct type *);
356
357extern struct value *ada_value_ind (struct value *);
358
359extern void ada_print_scalar (struct type *, LONGEST, struct ui_file *);
360
361extern int ada_is_range_type_name (const char *);
362
363extern const char *ada_renaming_type (struct type *);
364
365extern int ada_is_object_renaming (struct symbol *);
366
367extern const char *ada_simple_renamed_entity (struct symbol *);
368
369extern char *ada_breakpoint_rewrite (char *, int *);
370
371/* Tasking-related: ada-tasks.c */
372
373extern int valid_task_id (int);
374
375extern int get_current_task (void);
376
377extern void init_task_list (void);
378
379extern void *get_self_id (void);
380
381extern int get_current_task (void);
382
383extern int get_entry_number (void *);
384
385extern void ada_report_exception_break (struct breakpoint *);
386
387extern int ada_maybe_exception_partial_symbol (struct partial_symbol *sym);
388
389extern int ada_is_exception_sym (struct symbol *sym);
390
391
392#endif
393