mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-25 03:54:33 +00:00
* gdbtypes.c (lookup_array_range_type): Add prototype.
(lookup_string_range_type): Likewise. * gdbtypes.c (lookup_array_range_type): New function. (lookup_string_range_type): Likewise. * ax-gdb.c (gen_repeat): Use lookup_array_range_type. * parse.c (follow_types): Likewise. * jv-lang.c (java_array_type): Likewise. * gnu-v3-abi.c (build_gdb_vtable_type): Likewise. * mt-tdep.c (mt_register_type): Likewise. * sh-tdep.c (sh_sh4_build_float_register_type): Likewise. * sh64-tdep.c (sh64_build_float_register_type): Likewise. * value.c (allocate_repeat_value): Likewise. * valops.c (value_array, value_cstring): Likewise. * valops.c (value_string): Use lookup_string_range_type.
This commit is contained in:
parent
d5c831bd76
commit
e3506a9f27
@ -1,3 +1,21 @@
|
||||
2009-07-02 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* gdbtypes.c (lookup_array_range_type): Add prototype.
|
||||
(lookup_string_range_type): Likewise.
|
||||
* gdbtypes.c (lookup_array_range_type): New function.
|
||||
(lookup_string_range_type): Likewise.
|
||||
|
||||
* ax-gdb.c (gen_repeat): Use lookup_array_range_type.
|
||||
* parse.c (follow_types): Likewise.
|
||||
* jv-lang.c (java_array_type): Likewise.
|
||||
* gnu-v3-abi.c (build_gdb_vtable_type): Likewise.
|
||||
* mt-tdep.c (mt_register_type): Likewise.
|
||||
* sh-tdep.c (sh_sh4_build_float_register_type): Likewise.
|
||||
* sh64-tdep.c (sh64_build_float_register_type): Likewise.
|
||||
* value.c (allocate_repeat_value): Likewise.
|
||||
* valops.c (value_array, value_cstring): Likewise.
|
||||
* valops.c (value_string): Use lookup_string_range_type.
|
||||
|
||||
2009-07-02 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* m2-typeprint.c (m2_print_bounds, m2_is_long_set_of_type): Remove
|
||||
|
@ -1394,9 +1394,8 @@ gen_repeat (struct expression *exp, union exp_element **pc,
|
||||
{
|
||||
/* FIXME-type-allocation: need a way to free this type when we are
|
||||
done with it. */
|
||||
struct type *range
|
||||
= create_range_type (0, builtin_type_int32, 0, length - 1);
|
||||
struct type *array = create_array_type (0, value1.type, range);
|
||||
struct type *array
|
||||
= lookup_array_range_type (value1.type, 0, length - 1);
|
||||
|
||||
value->kind = axs_lvalue_memory;
|
||||
value->type = array;
|
||||
|
@ -833,6 +833,17 @@ create_array_type (struct type *result_type,
|
||||
return result_type;
|
||||
}
|
||||
|
||||
struct type *
|
||||
lookup_array_range_type (struct type *element_type,
|
||||
int low_bound, int high_bound)
|
||||
{
|
||||
struct gdbarch *gdbarch = current_gdbarch;
|
||||
struct type *index_type = builtin_type (gdbarch)->builtin_int;
|
||||
struct type *range_type
|
||||
= create_range_type (NULL, index_type, low_bound, high_bound);
|
||||
return create_array_type (NULL, element_type, range_type);
|
||||
}
|
||||
|
||||
/* Create a string type using either a blank type supplied in
|
||||
RESULT_TYPE, or creating a new type. String types are similar
|
||||
enough to array of char types that we can use create_array_type to
|
||||
@ -857,6 +868,17 @@ create_string_type (struct type *result_type,
|
||||
return result_type;
|
||||
}
|
||||
|
||||
struct type *
|
||||
lookup_string_range_type (struct type *string_char_type,
|
||||
int low_bound, int high_bound)
|
||||
{
|
||||
struct type *result_type;
|
||||
result_type = lookup_array_range_type (string_char_type,
|
||||
low_bound, high_bound);
|
||||
TYPE_CODE (result_type) = TYPE_CODE_STRING;
|
||||
return result_type;
|
||||
}
|
||||
|
||||
struct type *
|
||||
create_set_type (struct type *result_type, struct type *domain_type)
|
||||
{
|
||||
@ -947,11 +969,7 @@ struct type *
|
||||
init_vector_type (struct type *elt_type, int n)
|
||||
{
|
||||
struct type *array_type;
|
||||
|
||||
array_type = create_array_type (0, elt_type,
|
||||
create_range_type (0,
|
||||
builtin_type_int32,
|
||||
0, n-1));
|
||||
array_type = lookup_array_range_type (elt_type, 0, n - 1);
|
||||
make_vector_type (array_type);
|
||||
return array_type;
|
||||
}
|
||||
|
@ -1201,9 +1201,11 @@ extern struct type *create_range_type (struct type *, struct type *, int,
|
||||
|
||||
extern struct type *create_array_type (struct type *, struct type *,
|
||||
struct type *);
|
||||
extern struct type *lookup_array_range_type (struct type *, int, int);
|
||||
|
||||
extern struct type *create_string_type (struct type *, struct type *,
|
||||
struct type *);
|
||||
extern struct type *lookup_string_range_type (struct type *, int, int);
|
||||
|
||||
extern struct type *create_set_type (struct type *, struct type *);
|
||||
|
||||
|
@ -145,9 +145,7 @@ build_gdb_vtable_type (struct gdbarch *arch)
|
||||
|
||||
/* ptrdiff_t vcall_and_vbase_offsets[0]; */
|
||||
FIELD_NAME (*field) = "vcall_and_vbase_offsets";
|
||||
FIELD_TYPE (*field)
|
||||
= create_array_type (0, ptrdiff_type,
|
||||
create_range_type (0, builtin_type_int32, 0, -1));
|
||||
FIELD_TYPE (*field) = lookup_array_range_type (ptrdiff_type, 0, -1);
|
||||
FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
|
||||
offset += TYPE_LENGTH (FIELD_TYPE (*field));
|
||||
field++;
|
||||
@ -168,9 +166,7 @@ build_gdb_vtable_type (struct gdbarch *arch)
|
||||
|
||||
/* void (*virtual_functions[0]) (); */
|
||||
FIELD_NAME (*field) = "virtual_functions";
|
||||
FIELD_TYPE (*field)
|
||||
= create_array_type (0, ptr_to_void_fn_type,
|
||||
create_range_type (0, builtin_type_int32, 0, -1));
|
||||
FIELD_TYPE (*field) = lookup_array_range_type (ptr_to_void_fn_type, 0, -1);
|
||||
FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
|
||||
offset += TYPE_LENGTH (FIELD_TYPE (*field));
|
||||
field++;
|
||||
|
@ -803,13 +803,10 @@ java_demangle_type_signature (char *signature)
|
||||
struct type *
|
||||
java_array_type (struct type *type, int dims)
|
||||
{
|
||||
struct type *range_type;
|
||||
|
||||
while (dims-- > 0)
|
||||
{
|
||||
range_type = create_range_type (NULL, builtin_type_int32, 0, 0);
|
||||
/* FIXME This is bogus! Java arrays are not gdb arrays! */
|
||||
type = create_array_type (NULL, type, range_type);
|
||||
type = lookup_array_range_type (type, 0, 0);
|
||||
}
|
||||
|
||||
return type;
|
||||
|
@ -257,11 +257,7 @@ mt_register_type (struct gdbarch *arch, int regnum)
|
||||
if (regnum >= 0 && regnum < MT_NUM_REGS + MT_NUM_PSEUDO_REGS)
|
||||
{
|
||||
if (copro_type == NULL)
|
||||
{
|
||||
struct type *temp;
|
||||
temp = create_range_type (NULL, builtin_type_int32, 0, 1);
|
||||
copro_type = create_array_type (NULL, builtin_type_int16, temp);
|
||||
}
|
||||
copro_type = lookup_array_range_type (builtin_type_int16, 0, 1);
|
||||
switch (regnum)
|
||||
{
|
||||
case MT_PC_REGNUM:
|
||||
|
@ -1257,7 +1257,6 @@ follow_types (struct type *follow_type)
|
||||
int make_volatile = 0;
|
||||
int make_addr_space = 0;
|
||||
int array_size;
|
||||
struct type *range_type;
|
||||
|
||||
while (!done)
|
||||
switch (pop_type ())
|
||||
@ -1323,13 +1322,9 @@ follow_types (struct type *follow_type)
|
||||
array_size = pop_type_int ();
|
||||
/* FIXME-type-allocation: need a way to free this type when we are
|
||||
done with it. */
|
||||
range_type =
|
||||
create_range_type ((struct type *) NULL,
|
||||
builtin_type_int32, 0,
|
||||
array_size >= 0 ? array_size - 1 : 0);
|
||||
follow_type =
|
||||
create_array_type ((struct type *) NULL,
|
||||
follow_type, range_type);
|
||||
lookup_array_range_type (follow_type,
|
||||
0, array_size >= 0 ? array_size - 1 : 0);
|
||||
if (array_size < 0)
|
||||
TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (follow_type) = 1;
|
||||
break;
|
||||
|
@ -2146,10 +2146,8 @@ sh_sh3e_register_type (struct gdbarch *gdbarch, int reg_nr)
|
||||
static struct type *
|
||||
sh_sh4_build_float_register_type (struct gdbarch *gdbarch, int high)
|
||||
{
|
||||
struct type *temp;
|
||||
|
||||
temp = create_range_type (NULL, builtin_type_int32, 0, high);
|
||||
return create_array_type (NULL, builtin_type (gdbarch)->builtin_float, temp);
|
||||
return lookup_array_range_type (builtin_type (gdbarch)->builtin_float,
|
||||
0, high);
|
||||
}
|
||||
|
||||
static struct type *
|
||||
|
@ -1498,10 +1498,8 @@ REGISTER_BYTE returns the register byte for the base register.
|
||||
static struct type *
|
||||
sh64_build_float_register_type (struct gdbarch *gdbarch, int high)
|
||||
{
|
||||
struct type *temp;
|
||||
|
||||
temp = create_range_type (NULL, builtin_type_int32, 0, high);
|
||||
return create_array_type (NULL, builtin_type (gdbarch)->builtin_float, temp);
|
||||
return lookup_array_range_type (builtin_type (gdbarch)->builtin_float,
|
||||
0, high);
|
||||
}
|
||||
|
||||
/* Return the GDB type object for the "standard" data type
|
||||
|
21
gdb/valops.c
21
gdb/valops.c
@ -1294,7 +1294,6 @@ value_array (int lowbound, int highbound, struct value **elemvec)
|
||||
int idx;
|
||||
unsigned int typelength;
|
||||
struct value *val;
|
||||
struct type *rangetype;
|
||||
struct type *arraytype;
|
||||
CORE_ADDR addr;
|
||||
|
||||
@ -1315,12 +1314,8 @@ value_array (int lowbound, int highbound, struct value **elemvec)
|
||||
}
|
||||
}
|
||||
|
||||
rangetype = create_range_type ((struct type *) NULL,
|
||||
builtin_type_int32,
|
||||
lowbound, highbound);
|
||||
arraytype = create_array_type ((struct type *) NULL,
|
||||
value_enclosing_type (elemvec[0]),
|
||||
rangetype);
|
||||
arraytype = lookup_array_range_type (value_enclosing_type (elemvec[0]),
|
||||
lowbound, highbound);
|
||||
|
||||
if (!current_language->c_style_arrays)
|
||||
{
|
||||
@ -1351,12 +1346,8 @@ value_cstring (char *ptr, int len, struct type *char_type)
|
||||
struct value *val;
|
||||
int lowbound = current_language->string_lower_bound;
|
||||
int highbound = len / TYPE_LENGTH (char_type);
|
||||
struct type *rangetype = create_range_type ((struct type *) NULL,
|
||||
builtin_type_int32,
|
||||
lowbound,
|
||||
highbound + lowbound - 1);
|
||||
struct type *stringtype
|
||||
= create_array_type ((struct type *) NULL, char_type, rangetype);
|
||||
= lookup_array_range_type (char_type, lowbound, highbound + lowbound - 1);
|
||||
|
||||
val = allocate_value (stringtype);
|
||||
memcpy (value_contents_raw (val), ptr, len);
|
||||
@ -1378,12 +1369,8 @@ value_string (char *ptr, int len, struct type *char_type)
|
||||
struct value *val;
|
||||
int lowbound = current_language->string_lower_bound;
|
||||
int highbound = len / TYPE_LENGTH (char_type);
|
||||
struct type *rangetype = create_range_type ((struct type *) NULL,
|
||||
builtin_type_int32,
|
||||
lowbound,
|
||||
highbound + lowbound - 1);
|
||||
struct type *stringtype
|
||||
= create_string_type ((struct type *) NULL, char_type, rangetype);
|
||||
= lookup_string_range_type (char_type, lowbound, highbound + lowbound - 1);
|
||||
|
||||
val = allocate_value (stringtype);
|
||||
memcpy (value_contents_raw (val), ptr, len);
|
||||
|
10
gdb/value.c
10
gdb/value.c
@ -290,13 +290,9 @@ allocate_repeat_value (struct type *type, int count)
|
||||
int low_bound = current_language->string_lower_bound; /* ??? */
|
||||
/* FIXME-type-allocation: need a way to free this type when we are
|
||||
done with it. */
|
||||
struct type *range_type
|
||||
= create_range_type ((struct type *) NULL, builtin_type_int32,
|
||||
low_bound, count + low_bound - 1);
|
||||
/* FIXME-type-allocation: need a way to free this type when we are
|
||||
done with it. */
|
||||
return allocate_value (create_array_type ((struct type *) NULL,
|
||||
type, range_type));
|
||||
struct type *array_type
|
||||
= lookup_array_range_type (type, low_bound, count + low_bound - 1);
|
||||
return allocate_value (array_type);
|
||||
}
|
||||
|
||||
/* Needed if another module needs to maintain its on list of values. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user