* gdbtypes.c (make_pointer_type, make_reference_type,
smash_to_memberptr_type, lookup_array_range_type, check_stub_method): Use type architecture instead of current_gdbarch. * gdbtypes.h (address_space_name_to_int, address_space_int_to_name): Add GDBARCH paramter. * gdbtypes.c (address_space_name_to_int, address_space_int_to_name): Add GDBARCH parameter. Use it instead of current_gdbarch. * c-typeprint.c (c_type_print_modifier): Update call. * parse.c (push_type_address_space): Likewise. * findvar.c (extract_typed_address, store_typed_address): Use type architecture instead of current_gdbarch. * value.c (value_as_address, unpack_field_as_long): Use type architecture instead of current_gdbarch. * doublest.c (floatformat_from_length): Add GDBARCH argument. Use it instead of current_gdbarch. (floatformat_from_type): Pass type architecture. * infcall.c (find_function_addr): Use type architecture instead of current_gdbarch. * valarith.c (value_bitstring_subscript, value_x_binop, value_neg, value_bit_index): Use type architecture instead of current_gdbarch. * valops.c (value_cast, value_slice): Likewise. * value.h (modify_field): Add TYPE argument. * value.c (modify_field): Add TYPE argument. Use type architecture instead of current_gdbarch. (set_internalvar_component): Likewise. * eval.c (evaluate_struct_tuple): Update call. * valops.c (value_assign): Likewise. * ada-lang.c (modify_general_field): Likewise. Add TYPE argument. (make_array_descriptor): Update calls. (move_bits): Add BITS_BIG_ENDIAN_P argument. Use it instead of current_gdbarch. (ada_value_assign, value_assign_to_component): Update calls. (decode_packed_array, ada_value_primitive_packed_val, ada_value_assign, value_assign_to_component): Use type arch instead of current_gdbarch. * printcmd.c (float_type_from_length): Remove GDBARCH argument, use type architecture instead. (print_scalar_formatted, printf_command): Update calls. Use type architecture instead of current_gdbarch. * valprint.c (val_print_type_code_int): Use type architecture instead of current_gdbarch. * varobj.c (value_get_print_value): Likewise. * python/python-prettyprint.c (print_string_repr): Add GDBARCH argument. Use it instead of current_gdbarch. (apply_val_pretty_printer): Update call. * ada-valprint.c (ada_val_print_1): Use type architecture instead of current_gdbarch. * c-valprint.c (print_function_pointer_address): Add GDBARCH argument. Use it instead of current_gdbarch. (c_val_print): Update calls passing type architecture. * f-valprint.c (f_val_print): Use type architecture instead of current_gdbarch. * jv-valprint (java_value_print): Likewise. * m2-valprint.c (print_function_pointer_address): Add GDBARCH argument. Use it instead of current_gdbarch. (print_unpacked_pointer): Update calls passing type architecture. * scm-valprint.c (scm_scmval_print): Use type architecture instead of current_gdbarch. * gnu-v3-abi.c (get_class_arch): Remove. (gnuv3_rtti_type): Use get_type_arch instead of get_class_arch. Remove special-case check for Java classes. (gnuv3_virtual_fn_field, gnuv3_baseclass_offset, gnuv3_print_method_ptr, gnuv3_method_ptr_size, gnuv3_make_method_ptr, gnuv3_method_ptr_to_value): Use get_type_arch instead of get_class_arch.
This commit is contained in:
parent
e9bb382b83
commit
5081068481
25 changed files with 220 additions and 147 deletions
|
@ -67,7 +67,7 @@
|
|||
|
||||
static void extract_string (CORE_ADDR addr, char *buf);
|
||||
|
||||
static void modify_general_field (char *, LONGEST, int, int);
|
||||
static void modify_general_field (struct type *, char *, LONGEST, int, int);
|
||||
|
||||
static struct type *desc_base_type (struct type *);
|
||||
|
||||
|
@ -182,7 +182,7 @@ static struct value *decode_packed_array (struct value *);
|
|||
static struct value *value_subscript_packed (struct value *, int,
|
||||
struct value **);
|
||||
|
||||
static void move_bits (gdb_byte *, int, const gdb_byte *, int, int);
|
||||
static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
|
||||
|
||||
static struct value *coerce_unspec_val_to_type (struct value *,
|
||||
struct type *);
|
||||
|
@ -1214,9 +1214,10 @@ static char *bound_name[] = {
|
|||
/* Like modify_field, but allows bitpos > wordlength. */
|
||||
|
||||
static void
|
||||
modify_general_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
|
||||
modify_general_field (struct type *type, char *addr,
|
||||
LONGEST fieldval, int bitpos, int bitsize)
|
||||
{
|
||||
modify_field (addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
|
||||
modify_field (type, addr + bitpos / 8, fieldval, bitpos % 8, bitsize);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1832,7 +1833,7 @@ decode_packed_array (struct value *arr)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (gdbarch_bits_big_endian (current_gdbarch)
|
||||
if (gdbarch_bits_big_endian (get_type_arch (value_type (arr)))
|
||||
&& ada_is_modular_type (value_type (arr)))
|
||||
{
|
||||
/* This is a (right-justified) modular type representing a packed
|
||||
|
@ -1956,7 +1957,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
|
|||
int len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
|
||||
/* Transmit bytes from least to most significant; delta is the direction
|
||||
the indices move. */
|
||||
int delta = gdbarch_bits_big_endian (current_gdbarch) ? -1 : 1;
|
||||
int delta = gdbarch_bits_big_endian (get_type_arch (type)) ? -1 : 1;
|
||||
|
||||
type = ada_check_typedef (type);
|
||||
|
||||
|
@ -2005,7 +2006,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
|
|||
memset (unpacked, 0, TYPE_LENGTH (type));
|
||||
return v;
|
||||
}
|
||||
else if (gdbarch_bits_big_endian (current_gdbarch))
|
||||
else if (gdbarch_bits_big_endian (get_type_arch (type)))
|
||||
{
|
||||
src = len - 1;
|
||||
if (has_negatives (type)
|
||||
|
@ -2091,7 +2092,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
|
|||
not overlap. */
|
||||
static void
|
||||
move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
|
||||
int src_offset, int n)
|
||||
int src_offset, int n, int bits_big_endian_p)
|
||||
{
|
||||
unsigned int accum, mask;
|
||||
int accum_bits, chunk_size;
|
||||
|
@ -2100,7 +2101,7 @@ move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
|
|||
targ_offset %= HOST_CHAR_BIT;
|
||||
source += src_offset / HOST_CHAR_BIT;
|
||||
src_offset %= HOST_CHAR_BIT;
|
||||
if (gdbarch_bits_big_endian (current_gdbarch))
|
||||
if (bits_big_endian_p)
|
||||
{
|
||||
accum = (unsigned char) *source;
|
||||
source += 1;
|
||||
|
@ -2192,12 +2193,12 @@ ada_value_assign (struct value *toval, struct value *fromval)
|
|||
from_size = value_bitsize (fromval);
|
||||
if (from_size == 0)
|
||||
from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
|
||||
if (gdbarch_bits_big_endian (current_gdbarch))
|
||||
if (gdbarch_bits_big_endian (get_type_arch (type)))
|
||||
move_bits (buffer, value_bitpos (toval),
|
||||
value_contents (fromval), from_size - bits, bits);
|
||||
value_contents (fromval), from_size - bits, bits, 1);
|
||||
else
|
||||
move_bits (buffer, value_bitpos (toval), value_contents (fromval),
|
||||
0, bits);
|
||||
move_bits (buffer, value_bitpos (toval),
|
||||
value_contents (fromval), 0, bits, 0);
|
||||
write_memory (to_addr, buffer, len);
|
||||
if (deprecated_memory_changed_hook)
|
||||
deprecated_memory_changed_hook (to_addr, len);
|
||||
|
@ -2236,16 +2237,16 @@ value_assign_to_component (struct value *container, struct value *component,
|
|||
else
|
||||
bits = value_bitsize (component);
|
||||
|
||||
if (gdbarch_bits_big_endian (current_gdbarch))
|
||||
if (gdbarch_bits_big_endian (get_type_arch (value_type (container))))
|
||||
move_bits (value_contents_writeable (container) + offset_in_container,
|
||||
value_bitpos (container) + bit_offset_in_container,
|
||||
value_contents (val),
|
||||
TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits,
|
||||
bits);
|
||||
bits, 1);
|
||||
else
|
||||
move_bits (value_contents_writeable (container) + offset_in_container,
|
||||
value_bitpos (container) + bit_offset_in_container,
|
||||
value_contents (val), 0, bits);
|
||||
value_contents (val), 0, bits, 0);
|
||||
}
|
||||
|
||||
/* The value of the element of array ARR at the ARITY indices given in IND.
|
||||
|
@ -3834,11 +3835,13 @@ make_array_descriptor (struct type *type, struct value *arr,
|
|||
|
||||
for (i = ada_array_arity (ada_check_typedef (value_type (arr))); i > 0; i -= 1)
|
||||
{
|
||||
modify_general_field (value_contents_writeable (bounds),
|
||||
modify_general_field (value_type (bounds),
|
||||
value_contents_writeable (bounds),
|
||||
ada_array_bound (arr, i, 0),
|
||||
desc_bound_bitpos (bounds_type, i, 0),
|
||||
desc_bound_bitsize (bounds_type, i, 0));
|
||||
modify_general_field (value_contents_writeable (bounds),
|
||||
modify_general_field (value_type (bounds),
|
||||
value_contents_writeable (bounds),
|
||||
ada_array_bound (arr, i, 1),
|
||||
desc_bound_bitpos (bounds_type, i, 1),
|
||||
desc_bound_bitsize (bounds_type, i, 1));
|
||||
|
@ -3846,12 +3849,14 @@ make_array_descriptor (struct type *type, struct value *arr,
|
|||
|
||||
bounds = ensure_lval (bounds, gdbarch, sp);
|
||||
|
||||
modify_general_field (value_contents_writeable (descriptor),
|
||||
modify_general_field (value_type (descriptor),
|
||||
value_contents_writeable (descriptor),
|
||||
value_address (ensure_lval (arr, gdbarch, sp)),
|
||||
fat_pntr_data_bitpos (desc_type),
|
||||
fat_pntr_data_bitsize (desc_type));
|
||||
|
||||
modify_general_field (value_contents_writeable (descriptor),
|
||||
modify_general_field (value_type (descriptor),
|
||||
value_contents_writeable (descriptor),
|
||||
value_address (bounds),
|
||||
fat_pntr_bounds_bitpos (desc_type),
|
||||
fat_pntr_bounds_bitsize (desc_type));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue