Minor formatting changes:
(ada_main_name, ada_value_slice_ptr, ada_value_slice, ada_breakpoint_rewrite, ada_template_to_fixed_record_type_1): Minor formatting changes. (empty_array): Slight rewrite for formatting. (emit_char,parse,ada_language_defn,build_ada_types, ada_is_exception_sym, _initialize_ada_language): Move definitions around. (ada_dump_symtab): Remove unused definition. (ada_maybe_exception_partial_symbol): Remove unused definition.
This commit is contained in:
parent
7e5bc23529
commit
6c038f3216
2 changed files with 215 additions and 224 deletions
|
@ -1,3 +1,15 @@
|
|||
2004-09-18 Paul N. Hilfinger <hilfingr@otisco.mckusick.com>
|
||||
|
||||
* ada-lang.c: (ada_main_name, ada_value_slice_ptr, ada_value_slice,
|
||||
ada_breakpoint_rewrite, ada_template_to_fixed_record_type_1):
|
||||
Minor formatting changes.
|
||||
(empty_array): Slight rewrite for formatting.
|
||||
(emit_char,parse,ada_language_defn,build_ada_types,
|
||||
ada_is_exception_sym, _initialize_ada_language): Move
|
||||
definitions around.
|
||||
(ada_dump_symtab): Remove unused definition.
|
||||
(ada_maybe_exception_partial_symbol): Remove unused definition.
|
||||
|
||||
2004-09-16 Andrew Cagney <cagney@gnu.org>
|
||||
|
||||
* inf-child.c: Include "gdb_string.h".
|
||||
|
|
427
gdb/ada-lang.c
427
gdb/ada-lang.c
|
@ -753,6 +753,7 @@ ada_main_name (void)
|
|||
struct minimal_symbol *msym;
|
||||
CORE_ADDR main_program_name_addr;
|
||||
static char main_program_name[1024];
|
||||
|
||||
/* For Ada, the name of the main procedure is stored in a specific
|
||||
string constant, generated by the binder. Look for that symbol,
|
||||
extract its address, and then read that string. If we didn't find
|
||||
|
@ -2196,16 +2197,16 @@ ada_value_ptr_subscript (struct value *arr, struct type *type, int arity,
|
|||
the Ada slice of HIGH-LOW+1 elements starting at index LOW. The lower
|
||||
bound of this array is LOW, as per Ada rules. */
|
||||
static struct value *
|
||||
ada_value_slice_ptr (struct value *array_ptr, struct type *type,
|
||||
ada_value_slice_ptr (struct value *array_ptr, struct type *type,
|
||||
int low, int high)
|
||||
{
|
||||
CORE_ADDR base = value_as_address (array_ptr)
|
||||
CORE_ADDR base = value_as_address (array_ptr)
|
||||
+ ((low - TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type)))
|
||||
* TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
|
||||
struct type *index_type =
|
||||
create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
|
||||
struct type *index_type =
|
||||
create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type)),
|
||||
low, high);
|
||||
struct type *slice_type =
|
||||
struct type *slice_type =
|
||||
create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
|
||||
return value_from_pointer (lookup_reference_type (slice_type), base);
|
||||
}
|
||||
|
@ -2215,11 +2216,11 @@ static struct value *
|
|||
ada_value_slice (struct value *array, int low, int high)
|
||||
{
|
||||
struct type *type = VALUE_TYPE (array);
|
||||
struct type *index_type =
|
||||
struct type *index_type =
|
||||
create_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
|
||||
struct type *slice_type =
|
||||
struct type *slice_type =
|
||||
create_array_type (NULL, TYPE_TARGET_TYPE (type), index_type);
|
||||
return value_cast (slice_type, value_slice (array, low, high-low+1));
|
||||
return value_cast (slice_type, value_slice (array, low, high - low + 1));
|
||||
}
|
||||
|
||||
/* If type is a record type in the form of a standard GNAT array
|
||||
|
@ -2452,7 +2453,7 @@ ada_array_length (struct value *arr, int n)
|
|||
static struct value *
|
||||
empty_array (struct type *arr_type, int low)
|
||||
{
|
||||
struct type *index_type =
|
||||
struct type *index_type =
|
||||
create_range_type (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type)),
|
||||
low, low - 1);
|
||||
struct type *elt_type = ada_array_element_type (arr_type, 1);
|
||||
|
@ -6179,6 +6180,20 @@ extended_canonical_line_spec (struct symtab_and_line sal, const char *name)
|
|||
return r;
|
||||
}
|
||||
|
||||
|
||||
/* Exception-related */
|
||||
|
||||
int
|
||||
ada_is_exception_sym (struct symbol *sym)
|
||||
{
|
||||
char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
|
||||
|
||||
return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
|
||||
&& SYMBOL_CLASS (sym) != LOC_BLOCK
|
||||
&& SYMBOL_CLASS (sym) != LOC_CONST
|
||||
&& type_name != NULL && strcmp (type_name, "exception") == 0);
|
||||
}
|
||||
|
||||
/* Return type of Ada breakpoint associated with bp_stat:
|
||||
0 if not an Ada-specific breakpoint, 1 for break on specific exception,
|
||||
2 for break on unhandled exception, 3 for assert. */
|
||||
|
@ -6430,25 +6445,6 @@ ada_print_exception_breakpoint_task (struct breakpoint *b)
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
ada_is_exception_sym (struct symbol *sym)
|
||||
{
|
||||
char *type_name = type_name_no_tag (SYMBOL_TYPE (sym));
|
||||
|
||||
return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
|
||||
&& SYMBOL_CLASS (sym) != LOC_BLOCK
|
||||
&& SYMBOL_CLASS (sym) != LOC_CONST
|
||||
&& type_name != NULL && strcmp (type_name, "exception") == 0);
|
||||
}
|
||||
|
||||
int
|
||||
ada_maybe_exception_partial_symbol (struct partial_symbol *sym)
|
||||
{
|
||||
return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
|
||||
&& SYMBOL_CLASS (sym) != LOC_BLOCK
|
||||
&& SYMBOL_CLASS (sym) != LOC_CONST);
|
||||
}
|
||||
|
||||
/* Cause the appropriate error if no appropriate runtime symbol is
|
||||
found to set a breakpoint, using ERR_DESC to describe the
|
||||
breakpoint. */
|
||||
|
@ -6573,7 +6569,7 @@ ada_breakpoint_rewrite (char *arg, int *break_on_exceptionp)
|
|||
}
|
||||
return arg;
|
||||
}
|
||||
#endif
|
||||
#endif /* GNAT_GDB */
|
||||
|
||||
/* Field Access */
|
||||
|
||||
|
@ -7720,9 +7716,8 @@ ada_template_to_fixed_record_type_1 (struct type *type, char *valaddr,
|
|||
|
||||
for (f = 0; f < nfields; f += 1)
|
||||
{
|
||||
off =
|
||||
align_value (off,
|
||||
field_alignment (type, f)) + TYPE_FIELD_BITPOS (type, f);
|
||||
off = align_value (off, field_alignment (type, f))
|
||||
+ TYPE_FIELD_BITPOS (type, f);
|
||||
TYPE_FIELD_BITPOS (rtype, f) = off;
|
||||
TYPE_FIELD_BITSIZE (rtype, f) = 0;
|
||||
|
||||
|
@ -9066,7 +9061,7 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
|||
array = value_addr (array);
|
||||
|
||||
if (noside == EVAL_AVOID_SIDE_EFFECTS
|
||||
&& ada_is_array_descriptor_type (check_typedef
|
||||
&& ada_is_array_descriptor_type (check_typedef
|
||||
(VALUE_TYPE (array))))
|
||||
return empty_array (ada_type_of_array (array, 0), low_bound);
|
||||
|
||||
|
@ -9083,7 +9078,8 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
|||
to_fixed_array_type (TYPE_TARGET_TYPE (VALUE_TYPE (array)),
|
||||
NULL, 1);
|
||||
return ada_value_slice_ptr (array, arr_type0,
|
||||
(int) low_bound, (int) high_bound);
|
||||
(int) low_bound,
|
||||
(int) high_bound);
|
||||
}
|
||||
}
|
||||
else if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
|
@ -10088,179 +10084,7 @@ static const struct op_print ada_op_print_tab[] = {
|
|||
{NULL, 0, 0, 0}
|
||||
};
|
||||
|
||||
/* Assorted Types and Interfaces */
|
||||
|
||||
struct type *builtin_type_ada_int;
|
||||
struct type *builtin_type_ada_short;
|
||||
struct type *builtin_type_ada_long;
|
||||
struct type *builtin_type_ada_long_long;
|
||||
struct type *builtin_type_ada_char;
|
||||
struct type *builtin_type_ada_float;
|
||||
struct type *builtin_type_ada_double;
|
||||
struct type *builtin_type_ada_long_double;
|
||||
struct type *builtin_type_ada_natural;
|
||||
struct type *builtin_type_ada_positive;
|
||||
struct type *builtin_type_ada_system_address;
|
||||
|
||||
struct type **const (ada_builtin_types[]) =
|
||||
{
|
||||
&builtin_type_ada_int,
|
||||
&builtin_type_ada_long,
|
||||
&builtin_type_ada_short,
|
||||
&builtin_type_ada_char,
|
||||
&builtin_type_ada_float,
|
||||
&builtin_type_ada_double,
|
||||
&builtin_type_ada_long_long,
|
||||
&builtin_type_ada_long_double,
|
||||
&builtin_type_ada_natural, &builtin_type_ada_positive,
|
||||
/* The following types are carried over from C for convenience. */
|
||||
&builtin_type_int,
|
||||
&builtin_type_long,
|
||||
&builtin_type_short,
|
||||
&builtin_type_char,
|
||||
&builtin_type_float,
|
||||
&builtin_type_double,
|
||||
&builtin_type_long_long,
|
||||
&builtin_type_void,
|
||||
&builtin_type_signed_char,
|
||||
&builtin_type_unsigned_char,
|
||||
&builtin_type_unsigned_short,
|
||||
&builtin_type_unsigned_int,
|
||||
&builtin_type_unsigned_long,
|
||||
&builtin_type_unsigned_long_long,
|
||||
&builtin_type_long_double,
|
||||
&builtin_type_complex, &builtin_type_double_complex, 0};
|
||||
|
||||
/* Not really used, but needed in the ada_language_defn. */
|
||||
|
||||
static void
|
||||
emit_char (int c, struct ui_file *stream, int quoter)
|
||||
{
|
||||
ada_emit_char (c, stream, quoter, 1);
|
||||
}
|
||||
|
||||
static int
|
||||
parse (void)
|
||||
{
|
||||
warnings_issued = 0;
|
||||
return ada_parse ();
|
||||
}
|
||||
|
||||
static const struct exp_descriptor ada_exp_descriptor = {
|
||||
ada_print_subexp,
|
||||
ada_operator_length,
|
||||
ada_op_name,
|
||||
ada_dump_subexp_body,
|
||||
ada_evaluate_subexp
|
||||
};
|
||||
|
||||
const struct language_defn ada_language_defn = {
|
||||
"ada", /* Language name */
|
||||
language_ada,
|
||||
ada_builtin_types,
|
||||
range_check_off,
|
||||
type_check_off,
|
||||
case_sensitive_on, /* Yes, Ada is case-insensitive, but
|
||||
that's not quite what this means. */
|
||||
#ifdef GNAT_GDB
|
||||
ada_lookup_symbol,
|
||||
ada_lookup_minimal_symbol,
|
||||
#endif /* GNAT_GDB */
|
||||
array_row_major,
|
||||
&ada_exp_descriptor,
|
||||
parse,
|
||||
ada_error,
|
||||
resolve,
|
||||
ada_printchar, /* Print a character constant */
|
||||
ada_printstr, /* Function to print string constant */
|
||||
emit_char, /* Function to print single char (not used) */
|
||||
ada_create_fundamental_type, /* Create fundamental type in this language */
|
||||
ada_print_type, /* Print a type using appropriate syntax */
|
||||
ada_val_print, /* Print a value using appropriate syntax */
|
||||
ada_value_print, /* Print a top-level value */
|
||||
NULL, /* Language specific skip_trampoline */
|
||||
NULL, /* value_of_this */
|
||||
ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
|
||||
basic_lookup_transparent_type, /* lookup_transparent_type */
|
||||
ada_la_decode, /* Language specific symbol demangler */
|
||||
NULL, /* Language specific class_name_from_physname */
|
||||
ada_op_print_tab, /* expression operators for printing */
|
||||
0, /* c-style arrays */
|
||||
1, /* String lower bound */
|
||||
&builtin_type_ada_char,
|
||||
ada_get_gdb_completer_word_break_characters,
|
||||
#ifdef GNAT_GDB
|
||||
ada_translate_error_message, /* Substitute Ada-specific terminology
|
||||
in errors and warnings. */
|
||||
#endif /* GNAT_GDB */
|
||||
LANG_MAGIC
|
||||
};
|
||||
|
||||
static void
|
||||
build_ada_types (struct gdbarch *current_gdbarch)
|
||||
{
|
||||
builtin_type_ada_int =
|
||||
init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
|
||||
0, "integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_long =
|
||||
init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_short =
|
||||
init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
|
||||
0, "short_integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_char =
|
||||
init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
|
||||
0, "character", (struct objfile *) NULL);
|
||||
builtin_type_ada_float =
|
||||
init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
|
||||
0, "float", (struct objfile *) NULL);
|
||||
builtin_type_ada_double =
|
||||
init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_float", (struct objfile *) NULL);
|
||||
builtin_type_ada_long_long =
|
||||
init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_long_integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_long_double =
|
||||
init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_long_float", (struct objfile *) NULL);
|
||||
builtin_type_ada_natural =
|
||||
init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
|
||||
0, "natural", (struct objfile *) NULL);
|
||||
builtin_type_ada_positive =
|
||||
init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
|
||||
0, "positive", (struct objfile *) NULL);
|
||||
|
||||
|
||||
builtin_type_ada_system_address =
|
||||
lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
|
||||
(struct objfile *) NULL));
|
||||
TYPE_NAME (builtin_type_ada_system_address) = "system__address";
|
||||
}
|
||||
|
||||
void
|
||||
_initialize_ada_language (void)
|
||||
{
|
||||
|
||||
build_ada_types (current_gdbarch);
|
||||
gdbarch_data_register_post_init (build_ada_types);
|
||||
add_language (&ada_language_defn);
|
||||
|
||||
varsize_limit = 65536;
|
||||
#ifdef GNAT_GDB
|
||||
add_setshow_uinteger_cmd ("varsize-limit", class_support,
|
||||
&varsize_limit, "\
|
||||
Set the maximum number of bytes allowed in a dynamic-sized object.", "\
|
||||
Show the maximum number of bytes allowed in a dynamic-sized object.",
|
||||
NULL, NULL, &setlist, &showlist);
|
||||
obstack_init (&cache_space);
|
||||
#endif /* GNAT_GDB */
|
||||
|
||||
obstack_init (&symbol_list_obstack);
|
||||
|
||||
decoded_names_store = htab_create_alloc
|
||||
(256, htab_hash_string, (int (*)(const void *, const void *)) streq,
|
||||
NULL, xcalloc, xfree);
|
||||
}
|
||||
/* Fundamental Ada Types */
|
||||
|
||||
/* Create a fundamental Ada type using default reasonable for the current
|
||||
target machine.
|
||||
|
@ -10399,22 +10223,177 @@ ada_create_fundamental_type (struct objfile *objfile, int typeid)
|
|||
return (type);
|
||||
}
|
||||
|
||||
void
|
||||
ada_dump_symtab (struct symtab *s)
|
||||
struct type *builtin_type_ada_int;
|
||||
struct type *builtin_type_ada_short;
|
||||
struct type *builtin_type_ada_long;
|
||||
struct type *builtin_type_ada_long_long;
|
||||
struct type *builtin_type_ada_char;
|
||||
struct type *builtin_type_ada_float;
|
||||
struct type *builtin_type_ada_double;
|
||||
struct type *builtin_type_ada_long_double;
|
||||
struct type *builtin_type_ada_natural;
|
||||
struct type *builtin_type_ada_positive;
|
||||
struct type *builtin_type_ada_system_address;
|
||||
|
||||
struct type **const (ada_builtin_types[]) =
|
||||
{
|
||||
int i;
|
||||
fprintf (stderr, "New symtab: [\n");
|
||||
fprintf (stderr, " Name: %s/%s;\n",
|
||||
s->dirname ? s->dirname : "?", s->filename ? s->filename : "?");
|
||||
fprintf (stderr, " Format: %s;\n", s->debugformat);
|
||||
if (s->linetable != NULL)
|
||||
{
|
||||
fprintf (stderr, " Line table (section %d):\n", s->block_line_section);
|
||||
for (i = 0; i < s->linetable->nitems; i += 1)
|
||||
{
|
||||
struct linetable_entry *e = s->linetable->item + i;
|
||||
fprintf (stderr, " %4ld: %8lx\n", (long) e->line, (long) e->pc);
|
||||
}
|
||||
}
|
||||
fprintf (stderr, "]\n");
|
||||
&builtin_type_ada_int,
|
||||
&builtin_type_ada_long,
|
||||
&builtin_type_ada_short,
|
||||
&builtin_type_ada_char,
|
||||
&builtin_type_ada_float,
|
||||
&builtin_type_ada_double,
|
||||
&builtin_type_ada_long_long,
|
||||
&builtin_type_ada_long_double,
|
||||
&builtin_type_ada_natural, &builtin_type_ada_positive,
|
||||
/* The following types are carried over from C for convenience. */
|
||||
&builtin_type_int,
|
||||
&builtin_type_long,
|
||||
&builtin_type_short,
|
||||
&builtin_type_char,
|
||||
&builtin_type_float,
|
||||
&builtin_type_double,
|
||||
&builtin_type_long_long,
|
||||
&builtin_type_void,
|
||||
&builtin_type_signed_char,
|
||||
&builtin_type_unsigned_char,
|
||||
&builtin_type_unsigned_short,
|
||||
&builtin_type_unsigned_int,
|
||||
&builtin_type_unsigned_long,
|
||||
&builtin_type_unsigned_long_long,
|
||||
&builtin_type_long_double,
|
||||
&builtin_type_complex, &builtin_type_double_complex, 0};
|
||||
|
||||
static void
|
||||
build_ada_types (struct gdbarch *current_gdbarch)
|
||||
{
|
||||
builtin_type_ada_int =
|
||||
init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
|
||||
0, "integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_long =
|
||||
init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_short =
|
||||
init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
|
||||
0, "short_integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_char =
|
||||
init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
|
||||
0, "character", (struct objfile *) NULL);
|
||||
builtin_type_ada_float =
|
||||
init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
|
||||
0, "float", (struct objfile *) NULL);
|
||||
builtin_type_ada_double =
|
||||
init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_float", (struct objfile *) NULL);
|
||||
builtin_type_ada_long_long =
|
||||
init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_long_integer", (struct objfile *) NULL);
|
||||
builtin_type_ada_long_double =
|
||||
init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
|
||||
0, "long_long_float", (struct objfile *) NULL);
|
||||
builtin_type_ada_natural =
|
||||
init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
|
||||
0, "natural", (struct objfile *) NULL);
|
||||
builtin_type_ada_positive =
|
||||
init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
|
||||
0, "positive", (struct objfile *) NULL);
|
||||
|
||||
|
||||
builtin_type_ada_system_address =
|
||||
lookup_pointer_type (init_type (TYPE_CODE_VOID, 1, 0, "void",
|
||||
(struct objfile *) NULL));
|
||||
TYPE_NAME (builtin_type_ada_system_address) = "system__address";
|
||||
}
|
||||
|
||||
|
||||
/* Language vector */
|
||||
|
||||
/* Not really used, but needed in the ada_language_defn. */
|
||||
|
||||
static void
|
||||
emit_char (int c, struct ui_file *stream, int quoter)
|
||||
{
|
||||
ada_emit_char (c, stream, quoter, 1);
|
||||
}
|
||||
|
||||
static int
|
||||
parse (void)
|
||||
{
|
||||
warnings_issued = 0;
|
||||
return ada_parse ();
|
||||
}
|
||||
|
||||
static const struct exp_descriptor ada_exp_descriptor = {
|
||||
ada_print_subexp,
|
||||
ada_operator_length,
|
||||
ada_op_name,
|
||||
ada_dump_subexp_body,
|
||||
ada_evaluate_subexp
|
||||
};
|
||||
|
||||
const struct language_defn ada_language_defn = {
|
||||
"ada", /* Language name */
|
||||
language_ada,
|
||||
ada_builtin_types,
|
||||
range_check_off,
|
||||
type_check_off,
|
||||
case_sensitive_on, /* Yes, Ada is case-insensitive, but
|
||||
that's not quite what this means. */
|
||||
#ifdef GNAT_GDB
|
||||
ada_lookup_symbol,
|
||||
ada_lookup_minimal_symbol,
|
||||
#endif /* GNAT_GDB */
|
||||
array_row_major,
|
||||
&ada_exp_descriptor,
|
||||
parse,
|
||||
ada_error,
|
||||
resolve,
|
||||
ada_printchar, /* Print a character constant */
|
||||
ada_printstr, /* Function to print string constant */
|
||||
emit_char, /* Function to print single char (not used) */
|
||||
ada_create_fundamental_type, /* Create fundamental type in this language */
|
||||
ada_print_type, /* Print a type using appropriate syntax */
|
||||
ada_val_print, /* Print a value using appropriate syntax */
|
||||
ada_value_print, /* Print a top-level value */
|
||||
NULL, /* Language specific skip_trampoline */
|
||||
NULL, /* value_of_this */
|
||||
ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
|
||||
basic_lookup_transparent_type, /* lookup_transparent_type */
|
||||
ada_la_decode, /* Language specific symbol demangler */
|
||||
NULL, /* Language specific class_name_from_physname */
|
||||
ada_op_print_tab, /* expression operators for printing */
|
||||
0, /* c-style arrays */
|
||||
1, /* String lower bound */
|
||||
&builtin_type_ada_char,
|
||||
ada_get_gdb_completer_word_break_characters,
|
||||
#ifdef GNAT_GDB
|
||||
ada_translate_error_message, /* Substitute Ada-specific terminology
|
||||
in errors and warnings. */
|
||||
#endif /* GNAT_GDB */
|
||||
LANG_MAGIC
|
||||
};
|
||||
|
||||
void
|
||||
_initialize_ada_language (void)
|
||||
{
|
||||
|
||||
build_ada_types (current_gdbarch);
|
||||
gdbarch_data_register_post_init (build_ada_types);
|
||||
add_language (&ada_language_defn);
|
||||
|
||||
varsize_limit = 65536;
|
||||
#ifdef GNAT_GDB
|
||||
add_setshow_uinteger_cmd ("varsize-limit", class_support,
|
||||
&varsize_limit, "\
|
||||
Set the maximum number of bytes allowed in a dynamic-sized object.", "\
|
||||
Show the maximum number of bytes allowed in a dynamic-sized object.",
|
||||
NULL, NULL, &setlist, &showlist);
|
||||
obstack_init (&cache_space);
|
||||
#endif /* GNAT_GDB */
|
||||
|
||||
obstack_init (&symbol_list_obstack);
|
||||
|
||||
decoded_names_store = htab_create_alloc
|
||||
(256, htab_hash_string, (int (*)(const void *, const void *)) streq,
|
||||
NULL, xcalloc, xfree);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue