X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fada-lang.h;h=ac6f5a4511c51159bb142c244ee1c79b2752f15b;hb=b2e818b70d26c7336ef4798b7beb97916ef044ac;hp=a2f929adbc3965004b3a9033e9dedf1730410389;hpb=963a6417f4ecb14daec07b0dbb9fac1f36c544fd;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h index a2f929adbc..ac6f5a4511 100644 --- a/gdb/ada-lang.h +++ b/gdb/ada-lang.h @@ -1,6 +1,7 @@ /* Ada language support definitions for GDB, the GNU debugger. - Copyright 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 - Free Software Foundation, Inc. + + Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, + 2007 Free Software Foundation, Inc. This file is part of GDB. @@ -16,7 +17,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ #if !defined (ADA_LANG_H) #define ADA_LANG_H 1 @@ -32,7 +34,7 @@ struct frame_info; system and that might consider (confusing) debugging information. Each name (a basic regular expression string) is followed by a comma. FIXME: Should be part of a configuration file. */ -#if defined(__alpha__) && defined(__osf__) && !defined(VXWORKS_TARGET) +#if defined(__alpha__) && defined(__osf__) #define ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS \ "^[agis]-.*\\.ad[bs]$", \ "/usr/shlib/libpthread\\.so", @@ -52,7 +54,7 @@ struct frame_info; interest to users. Each name (a basic regular expression string) is followed by a comma. */ #define ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS \ - "___clean[.a-zA-Z0-9_]*$", + "___clean[.$a-zA-Z0-9_]*$", /* The maximum number of frame levels searched for non-local, * non-global symbols. This limit exists as a precaution to prevent @@ -113,6 +115,54 @@ enum ada_operator type TYPE (typically a subrange). */ UNOP_IN_RANGE, + /* An aggregate. A single immediate operand, N>0, gives + the number of component specifications that follow. The + immediate operand is followed by a second OP_AGGREGATE. + Next come N component specifications. A component + specification is either an OP_OTHERS (others=>...), an + OP_CHOICES (for named associations), or other expression (for + positional aggregates only). Aggregates currently + occur only as the right sides of assignments. */ + OP_AGGREGATE, + + /* An others clause. Followed by a single expression. */ + OP_OTHERS, + + /* An aggregate component association. A single immediate operand, N, + gives the number of choices that follow. This is followed by a second + OP_CHOICES operator. Next come N operands, each of which is an + expression, an OP_DISCRETE_RANGE, or an OP_NAME---the latter + for a simple name that must be a record component name and does + not correspond to a single existing symbol. After the N choice + indicators comes an expression giving the value. + + In an aggregate such as (X => E1, ...), where X is a simple + name, X could syntactically be either a component_selector_name + or an expression used as a discrete_choice, depending on the + aggregate's type context. Since this is not known at parsing + time, we don't attempt to disambiguate X if it has multiple + definitions, but instead supply an OP_NAME. If X has a single + definition, we represent it with an OP_VAR_VALUE, even though + it may turn out to be within a record aggregate. Aggregate + evaluation can use either OP_NAMEs or OP_VAR_VALUEs to get a + record field name, and can evaluate OP_VAR_VALUE normally to + get its value as an expression. Unfortunately, we lose out in + cases where X has multiple meanings and is part of an array + aggregate. I hope these are not common enough to annoy users, + who can work around the problem in any case by putting + parentheses around X. */ + OP_CHOICES, + + /* A positional aggregate component association. The operator is + followed by a single integer indicating the position in the + aggregate (0-based), followed by a second OP_POSITIONAL. Next + follows a single expression giving the component value. */ + OP_POSITIONAL, + + /* A range of values. Followed by two expressions giving the + upper and lower bounds of the range. */ + OP_DISCRETE_RANGE, + /* End marker */ OP_ADA_LAST }; @@ -139,6 +189,10 @@ struct task_control_block CORE_ADDR call; CORE_ADDR thread; CORE_ADDR lwp; /* This field is not always present in the ATCB. */ + + /* If the task is waiting on a task entry, this field contains the + task_id of the other task. */ + CORE_ADDR called_task; }; struct task_ptid @@ -160,9 +214,6 @@ struct task_entry int stack_per; }; -/* The maximum number of tasks known to the Ada runtime. */ -extern const int MAX_NUMBER_OF_KNOWN_TASKS; - /* task entry list. */ extern struct task_entry *task_list; @@ -171,9 +222,9 @@ extern struct task_entry *task_list; least M objects, updating V and S as necessary. */ #define GROW_VECT(v, s, m) \ - if ((s) < (m)) grow_vect ((void**) &(v), &(s), (m), sizeof(*(v))); + if ((s) < (m)) (v) = grow_vect (v, &(s), m, sizeof *(v)); -extern void grow_vect (void **, size_t *, size_t, int); +extern void *grow_vect (void *, size_t *, size_t, int); extern int ada_get_field_index (const struct type *type, const char *field_name, @@ -187,7 +238,7 @@ extern void ada_error (char *); /* Defined in ada-exp.y */ extern void ada_print_type (struct type *, char *, struct ui_file *, int, int); -extern int ada_val_print (struct type *, char *, int, CORE_ADDR, +extern int ada_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, struct ui_file *, int, int, int, enum val_prettyprint); @@ -196,14 +247,16 @@ extern int ada_value_print (struct value *, struct ui_file *, int, /* Defined in ada-lang.c */ -extern struct value *value_from_contents_and_address (struct type *, char *, +extern struct value *value_from_contents_and_address (struct type *, + const gdb_byte *, CORE_ADDR); extern void ada_emit_char (int, struct ui_file *, int, int); extern void ada_printchar (int, struct ui_file *); -extern void ada_printstr (struct ui_file *, char *, unsigned int, int, int); +extern void ada_printstr (struct ui_file *, const gdb_byte *, + unsigned int, int, int); extern void ada_convert_actuals (struct value *, int, struct value **, CORE_ADDR *); @@ -275,7 +328,8 @@ extern int ada_is_ignored_field (struct type *, int); extern int ada_is_packed_array_type (struct type *); -extern struct value *ada_value_primitive_packed_val (struct value *, char *, +extern struct value *ada_value_primitive_packed_val (struct value *, + const gdb_byte *, long, int, int, struct type *); @@ -309,13 +363,14 @@ extern int ada_in_variant (LONGEST, struct type *, int); extern char *ada_variant_discrim_name (struct type *); -extern struct value *ada_value_struct_elt (struct value *, char *, char *); +extern struct value *ada_value_struct_elt (struct value *, char *, int); extern int ada_is_aligner_type (struct type *); extern struct type *ada_aligned_type (struct type *); -extern char *ada_aligned_value_addr (struct type *, char *); +extern const gdb_byte *ada_aligned_value_addr (struct type *, + const gdb_byte *); extern const char *ada_attribute_name (enum exp_opcode); @@ -337,15 +392,17 @@ extern struct value *ada_vax_float_print_function (struct type *); extern struct type *ada_system_address_type (void); -extern int ada_which_variant_applies (struct type *, struct type *, char *); +extern int ada_which_variant_applies (struct type *, struct type *, + const gdb_byte *); -extern struct type *ada_to_fixed_type (struct type *, char *, CORE_ADDR, - struct value *); +extern struct type *ada_to_fixed_type (struct type *, const gdb_byte *, + CORE_ADDR, struct value *); -extern struct type * - ada_template_to_fixed_record_type_1 (struct type *type, char *valaddr, - CORE_ADDR address, struct value *dval0, - int keep_dynamic_fields); +extern struct type *ada_template_to_fixed_record_type_1 (struct type *type, + const gdb_byte *valaddr, + CORE_ADDR address, + struct value *dval0, + int keep_dynamic_fields); extern int ada_name_prefix_len (const char *); @@ -367,7 +424,7 @@ extern int ada_prefer_type (struct type *, struct type *); extern struct type *ada_get_base_type (struct type *); -extern struct type *ada_completed_type (struct type *); +extern struct type *ada_check_typedef (struct type *); extern char *ada_encode (const char *); @@ -375,7 +432,7 @@ extern const char *ada_enum_name (const char *); extern int ada_is_modular_type (struct type *); -extern LONGEST ada_modulus (struct type *); +extern ULONGEST ada_modulus (struct type *); extern struct value *ada_value_ind (struct value *); @@ -413,8 +470,6 @@ extern int ada_print_exception_breakpoint_nontask (struct breakpoint *); extern void ada_print_exception_breakpoint_task (struct breakpoint *); -extern void ada_find_printable_frame (struct frame_info *fi); - extern void ada_reset_thread_registers (void); extern int ada_build_task_list (void); @@ -429,4 +484,18 @@ extern struct symbol *lookup_symbol_in_language (const char *, enum language, int *, struct symtab **); + +extern int ada_exception_catchpoint_p (struct breakpoint *b); + +extern struct symtab_and_line + ada_decode_exception_location (char *args, char **addr_string, + char **exp_string, char **cond_string, + struct expression **cond, + struct breakpoint_ops **ops); + +extern struct symtab_and_line + ada_decode_assert_location (char *args, char **addr_string, + struct breakpoint_ops **ops); + + #endif