1130803Smarcel/* Ada language support definitions for GDB, the GNU debugger.
2130803Smarcel   Copyright 1992, 1997 Free Software Foundation, Inc.
3130803Smarcel
4130803SmarcelThis file is part of GDB.
5130803Smarcel
6130803SmarcelThis program is free software; you can redistribute it and/or modify
7130803Smarcelit under the terms of the GNU General Public License as published by
8130803Smarcelthe Free Software Foundation; either version 2 of the License, or
9130803Smarcel(at your option) any later version.
10130803Smarcel
11130803SmarcelThis program is distributed in the hope that it will be useful,
12130803Smarcelbut WITHOUT ANY WARRANTY; without even the implied warranty of
13130803SmarcelMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14130803SmarcelGNU General Public License for more details.
15130803Smarcel
16130803SmarcelYou should have received a copy of the GNU General Public License
17130803Smarcelalong with this program; if not, write to the Free Software
18130803SmarcelFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
19130803Smarcel
20130803Smarcel#if !defined (ADA_LANG_H)
21130803Smarcel#define ADA_LANG_H 1
22130803Smarcel
23130803Smarcelstruct partial_symbol;
24130803Smarcel
25130803Smarcel#include "value.h"
26130803Smarcel#include "gdbtypes.h"
27130803Smarcel
28130803Smarcelstruct block;
29130803Smarcel
30130803Smarcel/* A macro to reorder the bytes of an address depending on the
31130803Smarcel   endiannes of the target.  */
32130803Smarcel#define EXTRACT_ADDRESS(x) ((void *) extract_unsigned_integer (&(x), sizeof (x)))
33130803Smarcel/* A macro to reorder the bytes of an int depending on the endiannes
34130803Smarcel   of the target */
35130803Smarcel#define EXTRACT_INT(x) ((int) extract_signed_integer (&(x), sizeof (x)))
36130803Smarcel
37130803Smarcel/* Chain of cleanups for arguments of OP_UNRESOLVED_VALUE names.  Created in
38130803Smarcel   yyparse and freed in ada_resolve. */
39130803Smarcelextern struct cleanup *unresolved_names;
40130803Smarcel
41130803Smarcel/* Corresponding mangled/demangled names and opcodes for Ada user-definable
42130803Smarcel   operators. */
43130803Smarcelstruct ada_opname_map
44130803Smarcel{
45130803Smarcel  const char *mangled;
46130803Smarcel  const char *demangled;
47130803Smarcel  enum exp_opcode op;
48130803Smarcel};
49130803Smarcel
50130803Smarcel/* Table of Ada operators in mangled and demangled forms. */
51130803Smarcel/* Defined in ada-lang.c */
52130803Smarcelextern const struct ada_opname_map ada_opname_table[];
53130803Smarcel
54130803Smarcel/* The maximum number of tasks known to the Ada runtime */
55130803Smarcelextern const int MAX_NUMBER_OF_KNOWN_TASKS;
56130803Smarcel
57130803Smarcel/* Identifiers for Ada attributes that need special processing.  Be sure
58130803Smarcel   to update the table attribute_names in ada-lang.c whenever you change this.
59130803Smarcel   */
60130803Smarcel
61130803Smarcelenum ada_attribute
62130803Smarcel{
63130803Smarcel  /* Invalid attribute for error checking. */
64130803Smarcel  ATR_INVALID,
65130803Smarcel
66130803Smarcel  ATR_FIRST,
67130803Smarcel  ATR_LAST,
68130803Smarcel  ATR_LENGTH,
69130803Smarcel  ATR_IMAGE,
70130803Smarcel  ATR_IMG,
71130803Smarcel  ATR_MAX,
72130803Smarcel  ATR_MIN,
73130803Smarcel  ATR_MODULUS,
74130803Smarcel  ATR_POS,
75130803Smarcel  ATR_SIZE,
76130803Smarcel  ATR_TAG,
77130803Smarcel  ATR_VAL,
78130803Smarcel
79130803Smarcel  /* Dummy last attribute. */
80130803Smarcel  ATR_END
81130803Smarcel};
82130803Smarcel
83130803Smarcelenum task_states
84130803Smarcel{
85130803Smarcel  Unactivated,
86130803Smarcel  Runnable,
87130803Smarcel  Terminated,
88130803Smarcel  Activator_Sleep,
89130803Smarcel  Acceptor_Sleep,
90130803Smarcel  Entry_Caller_Sleep,
91130803Smarcel  Async_Select_Sleep,
92130803Smarcel  Delay_Sleep,
93130803Smarcel  Master_Completion_Sleep,
94130803Smarcel  Master_Phase_2_Sleep
95130803Smarcel};
96130803Smarcel
97130803Smarcelextern char *ada_task_states[];
98130803Smarcel
99130803Smarceltypedef struct
100130803Smarcel{
101130803Smarcel  char *P_ARRAY;
102130803Smarcel  int *P_BOUNDS;
103130803Smarcel}
104130803Smarcelfat_string;
105130803Smarcel
106130803Smarceltypedef struct entry_call
107130803Smarcel{
108130803Smarcel  void *self;
109130803Smarcel}
110130803Smarcel *entry_call_link;
111130803Smarcel
112130803Smarcelstruct task_fields
113130803Smarcel{
114130803Smarcel  int entry_num;
115130803Smarcel#if (defined (VXWORKS_TARGET) || !defined (i386)) \
116130803Smarcel    && !(defined (VXWORKS_TARGET) && defined (M68K_TARGET))
117130803Smarcel  int pad1;
118130803Smarcel#endif
119130803Smarcel  char state;
120130803Smarcel#if (defined (VXWORKS_TARGET) && defined (M68K_TARGET))
121130803Smarcel  char pad_8bits;
122130803Smarcel#endif
123130803Smarcel  void *parent;
124130803Smarcel  int priority;
125130803Smarcel  int current_priority;
126130803Smarcel  fat_string image;
127130803Smarcel  entry_call_link call;
128130803Smarcel#if (defined (sun) && defined (__SVR4)) && !defined (VXWORKS_TARGET)
129130803Smarcel  int pad2;
130130803Smarcel  unsigned thread;
131130803Smarcel  unsigned lwp;
132130803Smarcel#else
133130803Smarcel  void *thread;
134130803Smarcel  void *lwp;
135130803Smarcel#endif
136130803Smarcel}
137130803Smarcel#if (defined (VXWORKS_TARGET) && defined (M68K_TARGET))
138130803Smarcel__attribute__ ((packed))
139130803Smarcel#endif
140130803Smarcel  ;
141130803Smarcel
142130803Smarcelstruct task_entry
143130803Smarcel{
144130803Smarcel  void *task_id;
145130803Smarcel  int task_num;
146130803Smarcel  int known_tasks_index;
147130803Smarcel  struct task_entry *next_task;
148130803Smarcel  void *thread;
149130803Smarcel  void *lwp;
150130803Smarcel  int stack_per;
151130803Smarcel};
152130803Smarcel
153130803Smarcelextern struct type *builtin_type_ada_int;
154130803Smarcelextern struct type *builtin_type_ada_short;
155130803Smarcelextern struct type *builtin_type_ada_long;
156130803Smarcelextern struct type *builtin_type_ada_long_long;
157130803Smarcelextern struct type *builtin_type_ada_char;
158130803Smarcelextern struct type *builtin_type_ada_float;
159130803Smarcelextern struct type *builtin_type_ada_double;
160130803Smarcelextern struct type *builtin_type_ada_long_double;
161130803Smarcelextern struct type *builtin_type_ada_natural;
162130803Smarcelextern struct type *builtin_type_ada_positive;
163130803Smarcelextern struct type *builtin_type_ada_system_address;
164130803Smarcel
165130803Smarcel/* Assuming V points to an array of S objects,  make sure that it contains at
166130803Smarcel   least M objects, updating V and S as necessary. */
167130803Smarcel
168130803Smarcel#define GROW_VECT(v, s, m) 						\
169130803Smarcel   if ((s) < (m)) grow_vect ((void**) &(v), &(s), (m), sizeof(*(v)));
170130803Smarcel
171130803Smarcelextern void grow_vect (void **, size_t *, size_t, int);
172130803Smarcel
173130803Smarcelextern int ada_parse (void);	/* Defined in ada-exp.y */
174130803Smarcel
175130803Smarcelextern void ada_error (char *);	/* Defined in ada-exp.y */
176130803Smarcel
177130803Smarcel			/* Defined in ada-typeprint.c */
178130803Smarcelextern void ada_print_type (struct type *, char *, struct ui_file *, int,
179130803Smarcel			    int);
180130803Smarcel
181130803Smarcelextern int ada_val_print (struct type *, char *, int, CORE_ADDR,
182130803Smarcel			  struct ui_file *, int, int, int,
183130803Smarcel			  enum val_prettyprint);
184130803Smarcel
185130803Smarcelextern int ada_value_print (struct value *, struct ui_file *, int,
186130803Smarcel			    enum val_prettyprint);
187130803Smarcel
188130803Smarcel				/* Defined in ada-lang.c */
189130803Smarcel
190130803Smarcelextern struct value *value_from_contents_and_address (struct type *, char *,
191130803Smarcel						      CORE_ADDR);
192130803Smarcel
193130803Smarcelextern void ada_emit_char (int, struct ui_file *, int, int);
194130803Smarcel
195130803Smarcelextern void ada_printchar (int, struct ui_file *);
196130803Smarcel
197130803Smarcelextern void ada_printstr (struct ui_file *, char *, unsigned int, int, int);
198130803Smarcel
199130803Smarcelextern void ada_convert_actuals (struct value *, int, struct value **,
200130803Smarcel				 CORE_ADDR *);
201130803Smarcel
202130803Smarcelextern struct value *ada_value_subscript (struct value *, int,
203130803Smarcel					  struct value **);
204130803Smarcel
205130803Smarcelextern struct type *ada_array_element_type (struct type *, int);
206130803Smarcel
207130803Smarcelextern int ada_array_arity (struct type *);
208130803Smarcel
209130803Smarcelstruct type *ada_type_of_array (struct value *, int);
210130803Smarcel
211130803Smarcelextern struct value *ada_coerce_to_simple_array (struct value *);
212130803Smarcel
213130803Smarcelextern struct value *ada_coerce_to_simple_array_ptr (struct value *);
214130803Smarcel
215130803Smarcelextern int ada_is_simple_array (struct type *);
216130803Smarcel
217130803Smarcelextern int ada_is_array_descriptor (struct type *);
218130803Smarcel
219130803Smarcelextern int ada_is_bogus_array_descriptor (struct type *);
220130803Smarcel
221130803Smarcelextern struct type *ada_index_type (struct type *, int);
222130803Smarcel
223130803Smarcelextern struct value *ada_array_bound (struct value *, int, int);
224130803Smarcel
225130803Smarcelextern int ada_lookup_symbol_list (const char *, struct block *,
226130803Smarcel				   domain_enum, struct symbol ***,
227130803Smarcel				   struct block ***);
228130803Smarcel
229130803Smarcelextern char *ada_fold_name (const char *);
230130803Smarcel
231130803Smarcelextern struct symbol *ada_lookup_symbol (const char *, struct block *,
232130803Smarcel					 domain_enum);
233130803Smarcel
234130803Smarcelextern struct minimal_symbol *ada_lookup_minimal_symbol (const char *);
235130803Smarcel
236130803Smarcelextern void ada_resolve (struct expression **, struct type *);
237130803Smarcel
238130803Smarcelextern int ada_resolve_function (struct symbol **, struct block **, int,
239130803Smarcel				 struct value **, int, const char *,
240130803Smarcel				 struct type *);
241130803Smarcel
242130803Smarcelextern void ada_fill_in_ada_prototype (struct symbol *);
243130803Smarcel
244130803Smarcelextern int user_select_syms (struct symbol **, struct block **, int, int);
245130803Smarcel
246130803Smarcelextern int get_selections (int *, int, int, int, char *);
247130803Smarcel
248130803Smarcelextern char *ada_start_decode_line_1 (char *);
249130803Smarcel
250130803Smarcelextern struct symtabs_and_lines ada_finish_decode_line_1 (char **,
251130803Smarcel							  struct symtab *,
252130803Smarcel							  int, char ***);
253130803Smarcel
254130803Smarcelextern int ada_scan_number (const char *, int, LONGEST *, int *);
255130803Smarcel
256130803Smarcelextern struct type *ada_parent_type (struct type *);
257130803Smarcel
258130803Smarcelextern int ada_is_ignored_field (struct type *, int);
259130803Smarcel
260130803Smarcelextern int ada_is_packed_array_type (struct type *);
261130803Smarcel
262130803Smarcelextern struct value *ada_value_primitive_packed_val (struct value *, char *,
263130803Smarcel						     long, int, int,
264130803Smarcel						     struct type *);
265130803Smarcel
266130803Smarcelextern struct type *ada_coerce_to_simple_array_type (struct type *);
267130803Smarcel
268130803Smarcelextern int ada_is_character_type (struct type *);
269130803Smarcel
270130803Smarcelextern int ada_is_string_type (struct type *);
271130803Smarcel
272130803Smarcelextern int ada_is_tagged_type (struct type *);
273130803Smarcel
274130803Smarcelextern struct type *ada_tag_type (struct value *);
275130803Smarcel
276130803Smarcelextern struct value *ada_value_tag (struct value *);
277130803Smarcel
278130803Smarcelextern int ada_is_parent_field (struct type *, int);
279130803Smarcel
280130803Smarcelextern int ada_is_wrapper_field (struct type *, int);
281130803Smarcel
282130803Smarcelextern int ada_is_variant_part (struct type *, int);
283130803Smarcel
284130803Smarcelextern struct type *ada_variant_discrim_type (struct type *, struct type *);
285130803Smarcel
286130803Smarcelextern int ada_is_others_clause (struct type *, int);
287130803Smarcel
288130803Smarcelextern int ada_in_variant (LONGEST, struct type *, int);
289130803Smarcel
290130803Smarcelextern char *ada_variant_discrim_name (struct type *);
291130803Smarcel
292130803Smarcelextern struct type *ada_lookup_struct_elt_type (struct type *, char *, int,
293130803Smarcel						int *);
294130803Smarcel
295130803Smarcelextern struct value *ada_value_struct_elt (struct value *, char *, char *);
296130803Smarcel
297130803Smarcelextern struct value *ada_search_struct_field (char *, struct value *, int,
298130803Smarcel					      struct type *);
299130803Smarcel
300130803Smarcelextern int ada_is_aligner_type (struct type *);
301130803Smarcel
302130803Smarcelextern struct type *ada_aligned_type (struct type *);
303130803Smarcel
304130803Smarcelextern char *ada_aligned_value_addr (struct type *, char *);
305130803Smarcel
306130803Smarcelextern const char *ada_attribute_name (int);
307130803Smarcel
308130803Smarcelextern int ada_is_fixed_point_type (struct type *);
309130803Smarcel
310130803Smarcelextern DOUBLEST ada_delta (struct type *);
311130803Smarcel
312130803Smarcelextern DOUBLEST ada_fixed_to_float (struct type *, LONGEST);
313130803Smarcel
314130803Smarcelextern LONGEST ada_float_to_fixed (struct type *, DOUBLEST);
315130803Smarcel
316130803Smarcelextern int ada_is_vax_floating_type (struct type *);
317130803Smarcel
318130803Smarcelextern int ada_vax_float_type_suffix (struct type *);
319130803Smarcel
320130803Smarcelextern struct value *ada_vax_float_print_function (struct type *);
321130803Smarcel
322130803Smarcelextern struct type *ada_system_address_type (void);
323130803Smarcel
324130803Smarcelextern int ada_which_variant_applies (struct type *, struct type *, char *);
325130803Smarcel
326130803Smarcelextern struct value *ada_to_fixed_value (struct type *, char *, CORE_ADDR,
327130803Smarcel					 struct value *);
328130803Smarcel
329130803Smarcelextern struct type *ada_to_fixed_type (struct type *, char *, CORE_ADDR,
330130803Smarcel				       struct value *);
331130803Smarcel
332130803Smarcelextern int ada_name_prefix_len (const char *);
333130803Smarcel
334130803Smarcelextern char *ada_type_name (struct type *);
335130803Smarcel
336130803Smarcelextern struct type *ada_find_parallel_type (struct type *,
337130803Smarcel					    const char *suffix);
338130803Smarcel
339130803Smarcelextern LONGEST get_int_var_value (char *, char *, int *);
340130803Smarcel
341130803Smarcelextern struct type *ada_find_any_type (const char *name);
342130803Smarcel
343130803Smarcelextern int ada_prefer_type (struct type *, struct type *);
344130803Smarcel
345130803Smarcelextern struct type *ada_get_base_type (struct type *);
346130803Smarcel
347130803Smarcelextern struct type *ada_completed_type (struct type *);
348130803Smarcel
349130803Smarcelextern char *ada_mangle (const char *);
350130803Smarcel
351130803Smarcelextern const char *ada_enum_name (const char *);
352130803Smarcel
353130803Smarcelextern int ada_is_modular_type (struct type *);
354130803Smarcel
355130803Smarcelextern LONGEST ada_modulus (struct type *);
356130803Smarcel
357130803Smarcelextern struct value *ada_value_ind (struct value *);
358130803Smarcel
359130803Smarcelextern void ada_print_scalar (struct type *, LONGEST, struct ui_file *);
360130803Smarcel
361130803Smarcelextern int ada_is_range_type_name (const char *);
362130803Smarcel
363130803Smarcelextern const char *ada_renaming_type (struct type *);
364130803Smarcel
365130803Smarcelextern int ada_is_object_renaming (struct symbol *);
366130803Smarcel
367130803Smarcelextern const char *ada_simple_renamed_entity (struct symbol *);
368130803Smarcel
369130803Smarcelextern char *ada_breakpoint_rewrite (char *, int *);
370130803Smarcel
371130803Smarcel/* Tasking-related: ada-tasks.c */
372130803Smarcel
373130803Smarcelextern int valid_task_id (int);
374130803Smarcel
375130803Smarcelextern int get_current_task (void);
376130803Smarcel
377130803Smarcelextern void init_task_list (void);
378130803Smarcel
379130803Smarcelextern void *get_self_id (void);
380130803Smarcel
381130803Smarcelextern int get_current_task (void);
382130803Smarcel
383130803Smarcelextern int get_entry_number (void *);
384130803Smarcel
385130803Smarcelextern void ada_report_exception_break (struct breakpoint *);
386130803Smarcel
387130803Smarcelextern int ada_maybe_exception_partial_symbol (struct partial_symbol *sym);
388130803Smarcel
389130803Smarcelextern int ada_is_exception_sym (struct symbol *sym);
390130803Smarcel
391130803Smarcel
392130803Smarcel#endif
393