Re: [PATCH] Expand bitpos to LONGEST to allow access to large offsets within a struct

Siddhesh Poyarekar
2012-02-29T13:51:32Z

[-- Attachment #1: Type: text/plain, Size: 8557 bytes --]

Hi,

I have updated my patch with Tom and Jan's suggestions. In addition to
that, ran splint on the sources to check if the changes introduced any
new mismatched assignments or arguments. I did this iteratively, i.e.:

1. run splint
2. fix reported problems
3. repeat until no new warnings reported.

I generated an output of splint without my changes to determine the
baseline. I obviously fixed older problems that were related to this
one too, so that the bitpos (and related offset) problems are fixed
with this.

For reference, the splint command I used with each source:

splint -warnposix -Dsigjmp_buf=int -I. -I../../gdb/gdb \
-I../../gdb/gdb/common -I../../gdb/gdb/config \
-DLOCALEDIR="\"/home/siddhesh/sandbox/gdb-sandbox/share/locale\""
-DHAVE_CONFIG_H -I../../gdb/gdb/../include/opcode
-I../../gdb/gdb/../opcodes/.. -I../../gdb/gdb/../readline/..
-I../bfd -I../../gdb/gdb/../bfd -I../../gdb/gdb/../include
-I../libdecnumber -I../../gdb/gdb/../libdecnumber \
-I../../gdb/gdb/gnulib -Ignulib -DTUI=1
-I/usr/include/python2.7 -I/usr/include/python2.7
-I../../gdb-build/gdb $file

There is one problem that still remains that I haven't fixed yet,
which is the size of TYPE_FIELD. It is currently unsigned int, which
is less than sizeof(bitpos) now. This looks wrong since bitpos is
considered an offset within these types and it seems possible to have
an offset larger than the total size right now. There are a couple of
places where this comes into play, but fixing this in the same patch
would mean another 2.5k lines in the patch. I can work on this on my
free time later if not having it in this change is OK (and if my logic
above makes sense of course).

I have also added a test case to the testsuite.

Regards,
Siddhesh

ChangeLog:

2012-02-29 Siddhesh Poyarekar <siddhesh@redhat.com>

* gdbtypes.h (struct main_type.field.field_location): Expand
bitpos to LONGEST.
* value.h (value_primitive_field, val_print, set_value_offset):
Adjust to accept LONGEST as offset.
(set_value_pointed_to_offset, set_value_embedded_offset): Ditto.
(value_bits_valid, value_bits_synthetic_pointer): Ditto.
(value_bytes_available, mark_value_bytes_unavailable): Ditto.
(value_available_contents_eq, unpack_value_bits_as_long): Ditto.
(unpack_value_field_as_long, value_field_bitfield): Ditto.
(value_contents_copy, value_contents_copy_raw, value_fn_field):
Ditto.
(value_find_oload_method_list, set_internalvar_component): Ditto.
(value_pointed_to_offset, value_embedded_offset, value_offset):
Ditto.
(struct lval_funcs): Adjust signature of check_validity and
check_synthetic_pointer.
* value.c (modify_field, value_primitive_field, val_print): Expand
offset to LONGEST.
(value_bits_synthetic_pointer, value_bits_valid): Ditto.
(unpack_value_bits_as_long_1, ranges_overlap, ranges_contain):
Ditto.
(value_bytes_available, mark_value_bytes_unavailable): Ditto.
(find_first_range_overlap, value_available_contents_eq): Ditto.
(set_value_offset, value_contents_copy_raw): Ditto.
(value_contents_copy, value_contents_copy, value_bits_valid):
Ditto.
(value_bits_synthetic_pointer, set_value_embedded_offset): Ditto.
(set_value_pointed_to_offset, set_internalvar_component): Ditto.
(unpack_value_bits_as_long, unpack_value_field_as_long_1)
(unpack_value_field_as_long, value_field_bitfield): Ditto.
(unpack_value_bits_as_long_1): Explicitly cast downwards residual
division results.
(modify_field): Rename bitpos argument to LONGEST offset. Use
bitpos to denote the bitfield offset.
(struct value): Expand offset, embedded_offset and
pointed_to_offset to LONGEST.
(struct range): Expand offset to LONGEST.
* valprint.c (val_print_scalar_formatted, val_print): Expand
offset to LONGEST.
(val_print_array_elements): Ditto.
* valprint.h (val_print_scalar_formatted): Ditto.
(val_print_array_elements): Ditto.
* valops.c (search_struct_field, search_struct_method): Ditto.
(value_struct_elt_for_reference, find_method_list): Ditto.
(dynamic_cast_check_1, dynamic_cast_check_2, search_struct_field):
Ditto.
(search_struct_method, find_method_list): Ditto.
(value_find_oload_method_list, value_struct_elt_for_reference):
Ditto.
(find_overload_match): Expand boffset to LONGEST.
* regcache.h (regcache_cooked_read_part): Expand offset to
LONGEST.
(regcache_cooked_write_part): Ditto.
* regcache.c (regcache_cooked_read_part): Ditto.
(regcache_cooked_write_part, regcache_xfer_part): Ditto.
* ax-gdb.c (gen_offset, gen_left_shift, gen_bitfield_ref):Ditto.
(gen_primitive_field, gen_struct_ref_recursive): Ditto.
* ada-lang.c (ada_value_primitive_packed_val): Ditto.
(ada_value_primitive_field, find_struct_field): Ditto.
(ada_search_struct_field, ada_template_to_fixed_record_type_1):
Ditto.
(ada_index_struct_field_1, ada_index_struct_field): Ditto.
(align_value, cond_offset_host, cond_offset_target): Ditto.
(fat_pntr_bounds_bitpos, fat_pntr_data_bitpos, desc_bound_bitpos):
Return LONGEST.
* p-lang.c (is_pascal_string_type): Expand offset to LONGEST.
* opencl-lang.c (lval_func_read, lval_func_write): Store return of
value_offset into LONGEST.
(lval_func_check_validity): Expand offset to LONGEST. Explicit
cast for residual division of LONGEST with int into int.
(lval_func_check_synthetic_pointer): Ditto.
* mips-tdep.c (mips_xfer_register): Adjust to accept LONGEST as
offset. Adjust format specifier for bitpos.
(mips_n32n64_fp_arg_chunk_p): Adjust to accept LONGEST as offset.
(mips_n32n64_return_value): Store bitpos in LONGEST.
* sparc64-tdep.c (sparc64_store_floating_fields): Adjust to accept
LONGEST as bitpos. Explicit cast for regnum.
(sparc64_extract_floating_fields): Ditto.
* amd64-tdep.c (amd64_classify_aggregate): Expand pos and endpos
to LONGEST.
* gdbtypes.c (is_unique_ancestor_worker): Expand embedded_offset
and offset to LONGEST.
(recursive_dump_type): Adjust format specifier to print bitpos.
* ada-typeprint.c (print_enum_type): Ditto.
* c-typeprint.c (c_type_print_base): Ditto.
* m2-typeprint.c (m2_enum): Ditto.
* p-typeprint.c (pascal_type_print_base): Ditto.
* language.h (struct language_defn): Adjust la_val_print to accept
LONGEST as embedded_offset.
* language.c (unk_lang_val_print): Adjust for change in
la_val_print.
* ada-lang.h (ada_val_print, ada_value_primitive_packed_val):
Ditto.
* ada-valprint.c (ada_val_print, ada_val_print_1): Ditto.
(print_variant_part, print_field_values): Ditto.
* c-lang.h (c_val_print, cp_print_value_fields): Ditto.
(cp_print_value_fields_rtti): Ditto.
* c-valprint.c (c_val_print): Ditto.
* cp-valprint.c (cp_print_value, cp_print_value_fields): Ditto.
(cp_print_value_fields_rtti, cp_print_value): Ditto.
* d-lang.h (d_val_print): Ditto.
* d-valprint.c (d_val_print): Ditto.
* f-lang.h (f_val_print): Ditto.
* f-valprint.c (f_val_print, f77_print_array_1, f77_print_array):
Ditto.
* jv-lang.h (java_val_print): Ditto.
* jv-valprint.c (java_val_print, java_print_value_fields): Ditto.
* m2-lang.h (m2_val_print): Ditto.
* m2-valprint.c (m2_print_array_contents, m2_val_print):Ditto.
(m2_print_unbounded_array, m2_print_array_contents): Ditto.
(m2_print_long_set): Ditto.
* p-lang.h (pascal_val_print, is_pascal_string_type): Ditto.
(pascal_object_print_value_fields): Ditto.
* p-valprint.c (pascal_val_print, pascal_object_print_value):
Ditto.
(pascal_object_print_value_fields): Ditto.
* eval.c (evaluate_struct_tuple): Expand bitsize and bitpos to
LONGEST.
* python/py-prettyprint.c (apply_val_pretty_printer): Expand
offset to LONGEST.
* python/python.h (apply_val_pretty_printer): Ditto.
* dwarf2loc.c (read_pieced_value, write_pieced_value): Explicit
cast.
(check_pieced_value_bits, check_pieced_value_validity): Expand
offset to LONGEST.
(check_pieced_synthetic_pointer): Ditto.
* findvar.c (read_frame_register_value): Ditto.
* cp-abi.c (baseclass_offset): Return LONGEST.
(value_virtual_fn_field): Accept LONGEST as offset.
* cp-abi.h (value_virtual_fn_field): Ditto.
(baseclass_offset): Return LONGEST.
(struct cp_abi_ops): Adjust signatures of baseclass_offset and
virtual_fn_field.
* gnu-v2-abi.c (gnuv2_virtual_fn_field): Expand offset to LONGEST.
(gnuv2_baseclass_offset): Ditto. Return LONGEST.
* gnu-v3-abi.c (gnuv3_virtual_fn_field): Expand offset to LONGEST.
(vtable_address_point_offset, gnuv3_baseclass_offset): Return
LONGEST.

testsuite/ChangeLog:

2012-02-29 Siddhesh Poyarekar <siddhesh@redhat.com>

* (gdb.base/structs4.c, gdb.base/structs4.exp): New test case.

[-- Attachment #2: gdb-bitpos.patch --]
[-- Type: text/plain, Size: 95565 bytes --]

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 107df93..f743db1 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -80,7 +80,7 @@ static struct type *desc_bounds_type (struct type *);

static struct value *desc_bounds (struct value *);

-static int fat_pntr_bounds_bitpos (struct type *);
+static LONGEST fat_pntr_bounds_bitpos (struct type *);

static int fat_pntr_bounds_bitsize (struct type *);

@@ -88,13 +88,13 @@ static struct type *desc_data_target_type (struct type *);

static struct value *desc_data (struct value *);

-static int fat_pntr_data_bitpos (struct type *);
+static LONGEST fat_pntr_data_bitpos (struct type *);

static int fat_pntr_data_bitsize (struct type *);

static struct value *desc_one_bound (struct value *, int, int);

-static int desc_bound_bitpos (struct type *, int, int);
+static LONGEST desc_bound_bitpos (struct type *, int, int);

static int desc_bound_bitsize (struct type *, int, int);

@@ -217,14 +217,14 @@ static struct value *value_val_atr (struct type *, struct value *);
static struct symbol *standard_lookup (const char *, const struct block *,
domain_enum);

-static struct value *ada_search_struct_field (char *, struct value *, int,
+static struct value *ada_search_struct_field (char *, struct value *, LONGEST,
struct type *);

-static struct value *ada_value_primitive_field (struct value *, int, int,
+static struct value *ada_value_primitive_field (struct value *, LONGEST, int,
struct type *);

-static int find_struct_field (const char *, struct type *, int,
- struct type **, int *, int *, int *, int *);
+static int find_struct_field (const char *, struct type *, LONGEST,
+ struct type **, LONGEST *, int *, int *, int *);

static struct value *ada_to_fixed_value_create (struct type *, CORE_ADDR,
struct value *);
@@ -240,7 +240,7 @@ static void ada_language_arch_info (struct gdbarch *,

static void check_size (const struct type *);

-static struct value *ada_index_struct_field (int, struct value *, int,
+static struct value *ada_index_struct_field (LONGEST, struct value *, LONGEST,
struct type *);

static struct value *assign_aggregate (struct value *, struct value *,
@@ -584,7 +584,7 @@ coerce_unspec_val_to_type (struct value *val, struct type *type)
}

static const gdb_byte *
-cond_offset_host (const gdb_byte *valaddr, long offset)
+cond_offset_host (const gdb_byte *valaddr, LONGEST offset)
{
if (valaddr == NULL)
return NULL;
@@ -593,7 +593,7 @@ cond_offset_host (const gdb_byte *valaddr, long offset)
}

static CORE_ADDR
-cond_offset_target (CORE_ADDR address, long offset)
+cond_offset_target (CORE_ADDR address, LONGEST offset)
{
if (address == 0)
return 0;
@@ -1559,7 +1559,7 @@ desc_bounds (struct value *arr)
/* If TYPE is the type of an array-descriptor (fat pointer), the bit
position of the field containing the address of the bounds data. */

-static int
+static LONGEST
fat_pntr_bounds_bitpos (struct type *type)
{
return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
@@ -1625,7 +1625,7 @@ desc_data (struct value *arr)
/* If TYPE is the type of an array-descriptor (fat pointer), the bit
position of the field containing the address of the data. */

-static int
+static LONGEST
fat_pntr_data_bitpos (struct type *type)
{
return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
@@ -1660,7 +1660,7 @@ desc_one_bound (struct value *bounds, int i, int which)
of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
bound, if WHICH is 1. The first bound is I=1. */

-static int
+static LONGEST
desc_bound_bitpos (struct type *type, int i, int which)
{
return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
@@ -2218,7 +2218,7 @@ has_negatives (struct type *type)

struct value *
ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
- long offset, int bit_offset, int bit_size,
+ LONGEST offset, int bit_offset, int bit_size,
struct type *type)
{
struct value *v;
@@ -5950,7 +5950,7 @@ value_tag_from_contents_and_address (struct type *type,
const gdb_byte *valaddr,
CORE_ADDR address)
{
- int tag_byte_offset;
+ LONGEST tag_byte_offset;
struct type *tag_type;

if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
@@ -6328,7 +6328,7 @@ ada_in_variant (LONGEST val, struct type *type, int field_num)
only in that it can handle packed values of arbitrary type. */

static struct value *
-ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
+ada_value_primitive_field (struct value *arg1, LONGEST offset, int fieldno,
struct type *arg_type)
{
struct type *type;
@@ -6340,12 +6340,13 @@ ada_value_primitive_field (struct value *arg1, int offset, int fieldno,

if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
{
- int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
+ LONGEST bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);

return ada_value_primitive_packed_val (arg1, value_contents (arg1),
offset + bit_pos / 8,
- bit_pos % 8, bit_size, type);
+ (int)(bit_pos % 8), bit_size,
+ type);
}
else
return value_primitive_field (arg1, offset, fieldno, arg_type);
@@ -6367,9 +6368,9 @@ ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
Returns 1 if found, 0 otherwise. */

static int
-find_struct_field (const char *name, struct type *type, int offset,
+find_struct_field (const char *name, struct type *type, LONGEST offset,
struct type **field_type_p,
- int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
+ LONGEST *byte_offset_p, int *bit_offset_p, int *bit_size_p,
int *index_p)
{
int i;
@@ -6387,8 +6388,8 @@ find_struct_field (const char *name, struct type *type, int offset,

for (i = 0; i < TYPE_NFIELDS (type); i += 1)
{
- int bit_pos = TYPE_FIELD_BITPOS (type, i);
- int fld_offset = offset + bit_pos / 8;
+ LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i);
+ LONGEST fld_offset = offset + bit_pos / 8;
const char *t_field_name = TYPE_FIELD_NAME (type, i);

if (t_field_name == NULL)
@@ -6403,7 +6404,7 @@ find_struct_field (const char *name, struct type *type, int offset,
if (byte_offset_p != NULL)
*byte_offset_p = fld_offset;
if (bit_offset_p != NULL)
- *bit_offset_p = bit_pos % 8;
+ *bit_offset_p = (int)(bit_pos % 8);
if (bit_size_p != NULL)
*bit_size_p = bit_size;
return 1;
@@ -6458,7 +6459,7 @@ num_visible_fields (struct type *type)
Searches recursively through wrapper fields (e.g., '_parent'). */

static struct value *
-ada_search_struct_field (char *name, struct value *arg, int offset,
+ada_search_struct_field (char *name, struct value *arg, LONGEST offset,
struct type *type)
{
int i;
@@ -6491,7 +6492,7 @@ ada_search_struct_field (char *name, struct value *arg, int offset,
int j;
struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
i));
- int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
+ LONGEST var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;

for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
{
@@ -6509,8 +6510,8 @@ ada_search_struct_field (char *name, struct value *arg, int offset,
return NULL;
}

-static struct value *ada_index_struct_field_1 (int *, struct value *,
- int, struct type *);
+static struct value *ada_index_struct_field_1 (LONGEST *, struct value *,
+ LONGEST, struct type *);

/* Return field #INDEX in ARG, where the index is that returned by
@@ -6519,7 +6520,7 @@ static struct value *ada_index_struct_field_1 (int *, struct value *,
* If found, return value, else return NULL. */

static struct value *
-ada_index_struct_field (int index, struct value *arg, int offset,
+ada_index_struct_field (LONGEST index, struct value *arg, LONGEST offset,
struct type *type)
{
return ada_index_struct_field_1 (&index, arg, offset, type);
@@ -6531,7 +6532,7 @@ ada_index_struct_field (int index, struct value *arg, int offset,
* *INDEX_P. */

static struct value *
-ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
+ada_index_struct_field_1 (LONGEST *index_p, struct value *arg, LONGEST offset,
struct type *type)
{
int i;
@@ -6621,7 +6622,8 @@ ada_value_struct_elt (struct value *arg, char *name, int no_err)
v = ada_search_struct_field (name, arg, 0, t);
else
{
- int bit_offset, bit_size, byte_offset;
+ int bit_offset, bit_size;
+ LONGEST byte_offset;
struct type *field_type;
CORE_ADDR address;

@@ -6929,7 +6931,7 @@ ada_coerce_ref (struct value *val0)
ALIGNMENT (a power of 2). */

static unsigned int
-align_value (unsigned int off, unsigned int alignment)
+align_value (LONGEST off, unsigned int alignment)
{
return (off + alignment - 1) & ~(alignment - 1);
}
@@ -7303,9 +7305,9 @@ ada_template_to_fixed_record_type_1 (struct type *type,
struct value *mark = value_mark ();
struct value *dval;
struct type *rtype;
- int nfields, bit_len;
+ int nfields;
int variant_field;
- long off;
+ LONGEST off, bit_len;
int fld_bit_len;
int f;

@@ -7377,7 +7379,7 @@ ada_template_to_fixed_record_type_1 (struct type *type,
that follow this one. */
if (ada_is_aligner_type (field_type))
{
- long field_offset = TYPE_FIELD_BITPOS (field_type, f);
+ LONGEST field_offset = TYPE_FIELD_BITPOS (field_type, f);

field_valaddr = cond_offset_host (field_valaddr, field_offset);
field_address = cond_offset_target (field_address, field_offset);
diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
index 2a6cd57..d79a2ba 100644
--- a/gdb/ada-lang.h
+++ b/gdb/ada-lang.h
@@ -164,7 +164,7 @@ extern void ada_print_type (struct type *, const char *, struct ui_file *, int,
extern void ada_print_typedef (struct type *type, struct symbol *new_symbol,
struct ui_file *stream);

-extern int ada_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+extern int ada_val_print (struct type *, const gdb_byte *, LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *);
@@ -249,7 +249,7 @@ extern int ada_is_constrained_packed_array_type (struct type *);

extern struct value *ada_value_primitive_packed_val (struct value *,
const gdb_byte *,
- long, int, int,
+ LONGEST, int, int,
struct type *);

extern struct type *ada_coerce_to_simple_array_type (struct type *);
diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
index 5599278..de3ed5fa 100644
--- a/gdb/ada-typeprint.c
+++ b/gdb/ada-typeprint.c
@@ -274,7 +274,8 @@ static void
print_enum_type (struct type *type, struct ui_file *stream)
{
int len = TYPE_NFIELDS (type);
- int i, lastval;
+ LONGEST lastval;
+ int i;

fprintf_filtered (stream, "(");
wrap_here (" ");
@@ -289,7 +290,7 @@ print_enum_type (struct type *type, struct ui_file *stream)
fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
if (lastval != TYPE_FIELD_BITPOS (type, i))
{
- fprintf_filtered (stream, " => %d", TYPE_FIELD_BITPOS (type, i));
+ fprintf_filtered (stream, " => %s", plongest(TYPE_FIELD_BITPOS (type, i)));
lastval = TYPE_FIELD_BITPOS (type, i);
}
lastval += 1;
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index f43f3e3..1f01260 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -42,15 +42,15 @@ static void print_record (struct type *, const gdb_byte *, int,
const struct value_print_options *);

static int print_field_values (struct type *, const gdb_byte *,
- int,
+ LONGEST,
struct ui_file *, int,
const struct value *,
const struct value_print_options *,
- int, struct type *, int);
+ int, struct type *, LONGEST);

static void adjust_type_signedness (struct type *);

-static int ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR,
+static int ada_val_print_1 (struct type *, const gdb_byte *, LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *);
@@ -571,7 +571,7 @@ ada_printstr (struct ui_file *stream, struct type *type,

int
ada_val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options)
@@ -667,7 +667,7 @@ ada_val_print_array (struct type *type, const gdb_byte *valaddr,

static int
ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
- int offset, CORE_ADDR address,
+ LONGEST offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *original_value,
const struct value_print_options *options)
@@ -936,12 +936,12 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr,

static int
print_variant_part (struct type *type, int field_num,
- const gdb_byte *valaddr, int offset,
+ const gdb_byte *valaddr, LONGEST offset,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
int comma_needed,
- struct type *outer_type, int outer_offset)
+ struct type *outer_type, LONGEST outer_offset)
{
struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
int which = ada_which_variant_applies (var_type, outer_type,
@@ -1048,11 +1048,11 @@ print_record (struct type *type, const gdb_byte *valaddr,

static int
print_field_values (struct type *type, const gdb_byte *valaddr,
- int offset, struct ui_file *stream, int recurse,
+ LONGEST offset, struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
int comma_needed,
- struct type *outer_type, int outer_offset)
+ struct type *outer_type, LONGEST outer_offset)
{
int i, len;

@@ -1133,7 +1133,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr,
}
else
{
- int bit_pos = TYPE_FIELD_BITPOS (type, i);
+ LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i);
int bit_size = TYPE_FIELD_BITSIZE (type, i);
struct value_print_options opts;

@@ -1141,7 +1141,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr,
v = ada_value_primitive_packed_val
(NULL, valaddr,
offset + bit_pos / HOST_CHAR_BIT,
- bit_pos % HOST_CHAR_BIT,
+ (int)(bit_pos % HOST_CHAR_BIT),
bit_size, TYPE_FIELD_TYPE (type, i));
opts = *options;
opts.deref_ref = 0;
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index ea65d0d..d52205f 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -482,10 +482,10 @@ amd64_classify_aggregate (struct type *type, enum amd64_reg_class class[2])
for (i = 0; i < TYPE_NFIELDS (type); i++)
{
struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
- int pos = TYPE_FIELD_BITPOS (type, i) / 64;
+ LONGEST pos = TYPE_FIELD_BITPOS (type, i) / 64;
enum amd64_reg_class subclass[2];
int bitsize = TYPE_FIELD_BITSIZE (type, i);
- int endpos;
+ LONGEST endpos;

if (bitsize == 0)
bitsize = TYPE_LENGTH (subtype) * 8;
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index 739677f..8eff381 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -80,12 +80,12 @@ static void gen_traced_pop (struct gdbarch *, struct agent_expr *,
static void gen_sign_extend (struct agent_expr *, struct type *);
static void gen_extend (struct agent_expr *, struct type *);
static void gen_fetch (struct agent_expr *, struct type *);
-static void gen_left_shift (struct agent_expr *, int);
+static void gen_left_shift (struct agent_expr *, LONGEST);

static void gen_frame_args_address (struct gdbarch *, struct agent_expr *);
static void gen_frame_locals_address (struct gdbarch *, struct agent_expr *);
-static void gen_offset (struct agent_expr *ax, int offset);
+static void gen_offset (struct agent_expr *ax, LONGEST offset);
static void gen_sym_offset (struct agent_expr *, struct symbol *);
static void gen_var_ref (struct gdbarch *, struct agent_expr *ax,
struct axs_value *value, struct symbol *var);
@@ -135,15 +135,15 @@ static void gen_deref (struct agent_expr *, struct axs_value *);
static void gen_address_of (struct agent_expr *, struct axs_value *);
static void gen_bitfield_ref (struct expression *exp, struct agent_expr *ax,
struct axs_value *value,
- struct type *type, int start, int end);
+ struct type *type, LONGEST start, LONGEST end);
static void gen_primitive_field (struct expression *exp,
struct agent_expr *ax,
struct axs_value *value,
- int offset, int fieldno, struct type *type);
+ LONGEST offset, int fieldno, struct type *type);
static int gen_struct_ref_recursive (struct expression *exp,
struct agent_expr *ax,
struct axs_value *value,
- char *field, int offset,
+ char *field, LONGEST offset,
struct type *type);
static void gen_struct_ref (struct expression *exp, struct agent_expr *ax,
struct axs_value *value,
@@ -567,7 +567,7 @@ gen_fetch (struct agent_expr *ax, struct type *type)
right shift it by -DISTANCE bits if DISTANCE < 0. This generates
unsigned (logical) right shifts. */
static void
-gen_left_shift (struct agent_expr *ax, int distance)
+gen_left_shift (struct agent_expr *ax, LONGEST distance)
{
if (distance > 0)
{
@@ -621,7 +621,7 @@ gen_frame_locals_address (struct gdbarch *gdbarch, struct agent_expr *ax)
programming in ML, it would be clearer why these are the same
thing. */
static void
-gen_offset (struct agent_expr *ax, int offset)
+gen_offset (struct agent_expr *ax, LONGEST offset)
{
/* It would suffice to simply push the offset and add it, but this
makes it easier to read positive and negative offsets in the
@@ -1283,7 +1283,7 @@ gen_address_of (struct agent_expr *ax, struct axs_value *value)
static void
gen_bitfield_ref (struct expression *exp, struct agent_expr *ax,
struct axs_value *value, struct type *type,
- int start, int end)
+ LONGEST start, LONGEST end)
{
/* Note that ops[i] fetches 8 << i bits. */
static enum agent_op ops[]
@@ -1318,13 +1318,13 @@ gen_bitfield_ref (struct expression *exp, struct agent_expr *ax,

/* The first and one-after-last bits in the field, but rounded down
and up to byte boundaries. */
- int bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT;
- int bound_end = (((end + TARGET_CHAR_BIT - 1)
- / TARGET_CHAR_BIT)
- * TARGET_CHAR_BIT);
+ LONGEST bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT;
+ LONGEST bound_end = (((end + TARGET_CHAR_BIT - 1)
+ / TARGET_CHAR_BIT)
+ * TARGET_CHAR_BIT);

/* current bit offset within the structure */
- int offset;
+ LONGEST offset;

/* The index in ops of the opcode we're considering. */
int op;
@@ -1428,7 +1428,7 @@ gen_bitfield_ref (struct expression *exp, struct agent_expr *ax,
ax_simple (ax, aop_bit_or);

/* Sign- or zero-extend the value as appropriate. */
- ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, end - start));
+ ((TYPE_UNSIGNED (type) ? ax_zero_ext : ax_ext) (ax, (int)(end - start)));

/* This is *not* an lvalue. Ugh. */
value->kind = axs_rvalue;
@@ -1443,7 +1443,7 @@ gen_bitfield_ref (struct expression *exp, struct agent_expr *ax,
static void
gen_primitive_field (struct expression *exp,
struct agent_expr *ax, struct axs_value *value,
- int offset, int fieldno, struct type *type)
+ LONGEST offset, int fieldno, struct type *type)
{
/* Is this a bitfield? */
if (TYPE_FIELD_PACKED (type, fieldno))
@@ -1468,7 +1468,7 @@ gen_primitive_field (struct expression *exp,
static int
gen_struct_ref_recursive (struct expression *exp, struct agent_expr *ax,
struct axs_value *value,
- char *field, int offset, struct type *type)
+ char *field, LONGEST offset, struct type *type)
{
int i, rslt;
int nbases = TYPE_N_BASECLASSES (type);
diff --git a/gdb/c-lang.h b/gdb/c-lang.h
index e8c632f..7fc6f61 100644
--- a/gdb/c-lang.h
+++ b/gdb/c-lang.h
@@ -72,7 +72,7 @@ extern void c_print_typedef (struct type *,
struct ui_file *);

extern int c_val_print (struct type *, const gdb_byte *,
- int, CORE_ADDR,
+ LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *);
@@ -118,14 +118,14 @@ extern void cp_print_class_member (const gdb_byte *, struct type *,
struct ui_file *, char *);

extern void cp_print_value_fields (struct type *, struct type *,
- const gdb_byte *, int, CORE_ADDR,
+ const gdb_byte *, LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *,
struct type **, int);

extern void cp_print_value_fields_rtti (struct type *,
- const gdb_byte *, int, CORE_ADDR,
+ const gdb_byte *, LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *,
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index 21887c6..7a0f7e9 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -717,7 +717,7 @@ c_type_print_base (struct type *type, struct ui_file *stream,
{
int i;
int len, real_len;
- int lastval;
+ LONGEST lastval;
enum
{
s_none, s_public, s_private, s_protected
@@ -1206,8 +1206,8 @@ c_type_print_base (struct type *type, struct ui_file *stream,
fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
if (lastval != TYPE_FIELD_BITPOS (type, i))
{
- fprintf_filtered (stream, " = %d",
- TYPE_FIELD_BITPOS (type, i));
+ fprintf_filtered (stream, " = %s",
+ plongest(TYPE_FIELD_BITPOS (type, i)));
lastval = TYPE_FIELD_BITPOS (type, i);
}
lastval++;
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index 82551e9..f034a88 100644
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
@@ -147,7 +147,7 @@ c_textual_element_type (struct type *type, char format)

int
c_val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *original_value,
const struct value_print_options *options)
@@ -416,7 +416,7 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
/* Print vtable entry - we only get here if NOT using
-fvtable_thunks. (Otherwise, look under
TYPE_CODE_PTR.) */
- int offset = (embedded_offset
+ LONGEST offset = (embedded_offset
+ TYPE_FIELD_BITPOS (type,
VTBL_FNADDR_OFFSET) / 8);
struct type *field_type = TYPE_FIELD_TYPE (type,
diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c
index e949088..c7afcd0 100644
--- a/gdb/cp-abi.c
+++ b/gdb/cp-abi.c
@@ -68,13 +68,13 @@ is_operator_name (const char *name)
return (*current_cp_abi.is_operator_name) (name);
}

-int
+LONGEST
baseclass_offset (struct type *type, int index, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
const struct value *val)
{
volatile struct gdb_exception ex;
- int res = 0;
+ LONGEST res = 0;

gdb_assert (current_cp_abi.baseclass_offset != NULL);

@@ -98,7 +98,7 @@ baseclass_offset (struct type *type, int index, const gdb_byte *valaddr,
struct value *
value_virtual_fn_field (struct value **arg1p,
struct fn_field *f, int j,
- struct type *type, int offset)
+ struct type *type, LONGEST offset)
{
if ((current_cp_abi.virtual_fn_field) == NULL)
return NULL;
diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h
index 0f24e9a..6e6c26e 100644
--- a/gdb/cp-abi.h
+++ b/gdb/cp-abi.h
@@ -108,7 +108,7 @@ extern struct value *value_virtual_fn_field (struct value **valuep,
struct fn_field *f,
int j,
struct type *type,
- int offset);
+ LONGEST offset);

/* Try to find the run-time type of VALUE, using C++ run-time type
@@ -144,9 +144,9 @@ extern struct type *value_rtti_type (struct value *value,
contents of VAL. The result is the offset of the baseclass value
relative to (the address of)(ARG) + OFFSET. */

-extern int baseclass_offset (struct type *type,
+extern LONGEST baseclass_offset (struct type *type,
int index, const gdb_byte *valaddr,
- int embedded_offset,
+ LONGEST embedded_offset,
CORE_ADDR address,
const struct value *val);

@@ -199,11 +199,11 @@ struct cp_abi_ops
struct value *(*virtual_fn_field) (struct value **arg1p,
struct fn_field * f,
int j, struct type * type,
- int offset);
+ LONGEST offset);
struct type *(*rtti_type) (struct value *v, int *full,
int *top, int *using_enc);
- int (*baseclass_offset) (struct type *type, int index,
- const bfd_byte *valaddr, int embedded_offset,
+ LONGEST (*baseclass_offset) (struct type *type, int index,
+ const bfd_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, const struct value *val);
void (*print_method_ptr) (const gdb_byte *contents,
struct type *type,
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
index 1697006..563f759 100644
--- a/gdb/cp-valprint.c
+++ b/gdb/cp-valprint.c
@@ -82,7 +82,7 @@ static void cp_print_static_field (struct type *, struct value *,
const struct value_print_options *);

static void cp_print_value (struct type *, struct type *,
- const gdb_byte *, int,
+ const gdb_byte *, LONGEST,
CORE_ADDR, struct ui_file *,
int, const struct value *,
const struct value_print_options *,
@@ -156,7 +156,7 @@ cp_is_vtbl_member (struct type *type)

void
cp_print_value_fields (struct type *type, struct type *real_type,
- const gdb_byte *valaddr, int offset,
+ const gdb_byte *valaddr, LONGEST offset,
CORE_ADDR address, struct ui_file *stream,
int recurse, const struct value *val,
const struct value_print_options *options,
@@ -428,7 +428,7 @@ cp_print_value_fields (struct type *type, struct type *real_type,

void
cp_print_value_fields_rtti (struct type *type,
- const gdb_byte *valaddr, int offset,
+ const gdb_byte *valaddr, LONGEST offset,
CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
@@ -468,7 +468,7 @@ cp_print_value_fields_rtti (struct type *type,

static void
cp_print_value (struct type *type, struct type *real_type,
- const gdb_byte *valaddr, int offset,
+ const gdb_byte *valaddr, LONGEST offset,
CORE_ADDR address, struct ui_file *stream,
int recurse, const struct value *val,
const struct value_print_options *options,
@@ -478,7 +478,7 @@ cp_print_value (struct type *type, struct type *real_type,
= (struct type **) obstack_next_free (&dont_print_vb_obstack);
struct obstack tmp_obstack = dont_print_vb_obstack;
int i, n_baseclasses = TYPE_N_BASECLASSES (type);
- int thisoffset;
+ LONGEST thisoffset;
struct type *thistype;

if (dont_print_vb == 0)
@@ -492,7 +492,7 @@ cp_print_value (struct type *type, struct type *real_type,

for (i = 0; i < n_baseclasses; i++)
{
- int boffset = 0;
+ LONGEST boffset = 0;
int skip;
struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
const char *basename = TYPE_NAME (baseclass);
diff --git a/gdb/d-lang.h b/gdb/d-lang.h
index 67ca14c..e2cda03 100644
--- a/gdb/d-lang.h
+++ b/gdb/d-lang.h
@@ -25,7 +25,7 @@
extern char *d_demangle (const char *mangled, int options);

extern int d_val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options);
diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
index 527c087..813e9ee 100644
--- a/gdb/d-valprint.c
+++ b/gdb/d-valprint.c
@@ -29,7 +29,7 @@
a dynamic array. */
static int
dynamic_array_type (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options)
@@ -70,7 +70,7 @@ dynamic_array_type (struct type *type, const gdb_byte *valaddr,

/* Implements the la_val_print routine for language D. */
int
-d_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
+d_val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options)
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 313df7b..9415300 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -1391,7 +1391,7 @@ read_pieced_value (struct value *v)
cleanup = make_cleanup (free_current_contents, &buffer);

contents = value_contents_raw (v);
- bits_to_skip = 8 * value_offset (v);
+ bits_to_skip = (ULONGEST)(8 * value_offset (v));
if (value_bitsize (v))
{
bits_to_skip += value_bitpos (v);
@@ -1575,7 +1575,7 @@ write_pieced_value (struct value *to, struct value *from)
cleanup = make_cleanup (free_current_contents, &buffer);

contents = value_contents (from);
- bits_to_skip = 8 * value_offset (to);
+ bits_to_skip = (ULONGEST)(8 * value_offset (to));
if (value_bitsize (to))
{
bits_to_skip += value_bitpos (to);
@@ -1717,7 +1717,7 @@ write_pieced_value (struct value *to, struct value *from)
implicit pointer. */

static int
-check_pieced_value_bits (const struct value *value, int bit_offset,
+check_pieced_value_bits (const struct value *value, LONGEST bit_offset,
int bit_length,
enum dwarf_value_location check_for)
{
@@ -1772,7 +1772,7 @@ check_pieced_value_bits (const struct value *value, int bit_offset,
}

static int
-check_pieced_value_validity (const struct value *value, int bit_offset,
+check_pieced_value_validity (const struct value *value, LONGEST bit_offset,
int bit_length)
{
return check_pieced_value_bits (value, bit_offset, bit_length,
@@ -1791,7 +1791,7 @@ check_pieced_value_invalid (const struct value *value)
a synthetic pointer. */

static int
-check_pieced_synthetic_pointer (const struct value *value, int bit_offset,
+check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset,
int bit_length)
{
return check_pieced_value_bits (value, bit_offset, bit_length,
@@ -1817,9 +1817,9 @@ indirect_pieced_value (struct value *value)
struct type *type;
struct frame_info *frame;
struct dwarf2_locexpr_baton baton;
- int i, bit_offset, bit_length;
+ int i, bit_length;
struct dwarf_expr_piece *piece = NULL;
- LONGEST byte_offset;
+ LONGEST byte_offset, bit_offset;

type = check_typedef (value_type (value));
if (TYPE_CODE (type) != TYPE_CODE_PTR)
diff --git a/gdb/eval.c b/gdb/eval.c
index 9913a72..0922596 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -319,7 +319,8 @@ evaluate_struct_tuple (struct value *struct_val,
int pc = *pos;
struct value *val = NULL;
int nlabels = 0;
- int bitpos, bitsize;
+ int bitsize;
+ LONGEST bitpos;
bfd_byte *addr;

/* Skip past the labels, and count them. */
diff --git a/gdb/f-lang.h b/gdb/f-lang.h
index 4e5563d..e6407b7 100644
--- a/gdb/f-lang.h
+++ b/gdb/f-lang.h
@@ -28,7 +28,7 @@ extern void f_error (char *); /* Defined in f-exp.y */
extern void f_print_type (struct type *, const char *, struct ui_file *, int,
int);

-extern int f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+extern int f_val_print (struct type *, const gdb_byte *, LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *);
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
index 17f747f..6c30cfd 100644
--- a/gdb/f-valprint.c
+++ b/gdb/f-valprint.c
@@ -164,7 +164,7 @@ f77_create_arrayprint_offset_tbl (struct type *type, struct ui_file *stream)
static void
f77_print_array_1 (int nss, int ndimensions, struct type *type,
const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
@@ -215,7 +215,7 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type,

static void
f77_print_array (struct type *type, const gdb_byte *valaddr,
- int embedded_offset,
+ LONGEST embedded_offset,
CORE_ADDR address, struct ui_file *stream,
int recurse,
const struct value *val,
@@ -247,7 +247,7 @@ Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"),
also identical to val_print. */

int
-f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
+f_val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, struct ui_file *stream, int recurse,
const struct value *original_value,
const struct value_print_options *options)
@@ -498,7 +498,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
fprintf_filtered (stream, "( ");
for (index = 0; index < TYPE_NFIELDS (type); index++)
{
- int offset = TYPE_FIELD_BITPOS (type, index) / 8;
+ LONGEST offset = TYPE_FIELD_BITPOS (type, index) / 8;

val_print (TYPE_FIELD_TYPE (type, index), valaddr,
embedded_offset + offset,
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 79c4221..4ae70b3 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -631,7 +631,7 @@ void
read_frame_register_value (struct value *value, struct frame_info *frame)
{
struct gdbarch *gdbarch = get_frame_arch (frame);
- int offset = 0;
+ LONGEST offset = 0;
int reg_offset = value_offset (value);
int regnum = VALUE_REGNUM (value);
int len = TYPE_LENGTH (check_typedef (value_type (value)));
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index b6e8b4c..60a9f23 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -2137,8 +2137,8 @@ is_public_ancestor (struct type *base, struct type *dclass)

static int
is_unique_ancestor_worker (struct type *base, struct type *dclass,
- int *offset,
- const gdb_byte *valaddr, int embedded_offset,
+ LONGEST *offset,
+ const gdb_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, struct value *val)
{
int i, count = 0;
@@ -2149,7 +2149,7 @@ is_unique_ancestor_worker (struct type *base, struct type *dclass,
for (i = 0; i < TYPE_N_BASECLASSES (dclass) && count < 2; ++i)
{
struct type *iter;
- int this_offset;
+ LONGEST this_offset;

iter = check_typedef (TYPE_BASECLASS (dclass, i));

@@ -2190,7 +2190,7 @@ is_unique_ancestor_worker (struct type *base, struct type *dclass,
int
is_unique_ancestor (struct type *base, struct value *val)
{
- int offset = -1;
+ LONGEST offset = -1;

return is_unique_ancestor_worker (base, value_type (val), &offset,
value_contents_for_printing (val),
@@ -3198,8 +3198,8 @@ recursive_dump_type (struct type *type, int spaces)
for (idx = 0; idx < TYPE_NFIELDS (type); idx++)
{
printfi_filtered (spaces + 2,
- "[%d] bitpos %d bitsize %d type ",
- idx, TYPE_FIELD_BITPOS (type, idx),
+ "[%d] bitpos %s bitsize %d type ",
+ idx, plongest(TYPE_FIELD_BITPOS (type, idx)),
TYPE_FIELD_BITSIZE (type, idx));
gdb_print_host_address (TYPE_FIELD_TYPE (type, idx), gdb_stdout);
printf_filtered (" name '%s' (",
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index cddd2d0..3f4e849 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -514,7 +514,7 @@ struct main_type
the LSB. For a range bound or enum value, this is the
value itself. */

- int bitpos;
+ LONGEST bitpos;

/* For a static field, if TYPE_FIELD_STATIC_HAS_ADDR then physaddr
is the location (in the target) of the static field.
diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c
index e635e8f..6312a10 100644
--- a/gdb/gnu-v2-abi.c
+++ b/gdb/gnu-v2-abi.c
@@ -86,7 +86,7 @@ gnuv2_is_operator_name (const char *name)
TYPE is the type in which F is located. */
static struct value *
gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
- struct type * type, int offset)
+ struct type * type, LONGEST offset)
{
struct value *arg1 = *arg1p;
struct type *type1 = check_typedef (value_type (arg1));
@@ -342,9 +342,9 @@ vb_match (struct type *type, int index, struct type *basetype)
target). The result is the offset of the baseclass value relative
to (the address of)(ARG) + OFFSET. */

-static int
+static LONGEST
gnuv2_baseclass_offset (struct type *type, int index,
- const bfd_byte *valaddr, int embedded_offset,
+ const bfd_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, const struct value *val)
{
struct type *basetype = TYPE_BASECLASS (type, index);
@@ -362,7 +362,7 @@ gnuv2_baseclass_offset (struct type *type, int index,
if (vb_match (type, i, basetype))
{
struct type *field_type;
- int field_offset;
+ LONGEST field_offset;
int field_length;
CORE_ADDR addr;

@@ -387,7 +387,7 @@ gnuv2_baseclass_offset (struct type *type, int index,
/* Don't go through baseclass_offset, as that wraps
exceptions, thus, inner exceptions would be wrapped more
than once. */
- int boffset =
+ LONGEST boffset =
gnuv2_baseclass_offset (type, i, valaddr,
embedded_offset, address, val);

diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c
index f015af6..afd404c 100644
--- a/gdb/gnu-v3-abi.c
+++ b/gdb/gnu-v3-abi.c
@@ -180,7 +180,7 @@ vtable_ptrdiff_type (struct gdbarch *gdbarch)
/* Return the offset from the start of the imaginary `struct
gdb_gnu_v3_abi_vtable' object to the vtable's "address point"
(i.e., where objects' virtual table pointers point). */
-static int
+static LONGEST
vtable_address_point_offset (struct gdbarch *gdbarch)
{
struct type *vtable_type = gdbarch_data (gdbarch, vtable_type_gdbarch_data);
@@ -383,7 +383,7 @@ gnuv3_get_virtual_fn (struct gdbarch *gdbarch, struct value *container,
static struct value *
gnuv3_virtual_fn_field (struct value **value_p,
struct fn_field *f, int j,
- struct type *vfn_base, int offset)
+ struct type *vfn_base, LONGEST offset)
{
struct type *values_type = check_typedef (value_type (*value_p));
struct gdbarch *gdbarch;
@@ -413,16 +413,16 @@ gnuv3_virtual_fn_field (struct value **value_p,

-1 is returned on error. */

-static int
+static LONGEST
gnuv3_baseclass_offset (struct type *type, int index,
- const bfd_byte *valaddr, int embedded_offset,
+ const bfd_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, const struct value *val)
{
struct gdbarch *gdbarch;
struct type *ptr_type;
struct value *vtable;
struct value *vbase_array;
- long int cur_base_offset, base_offset;
+ LONGEST cur_base_offset, base_offset;

/* Determine architecture. */
gdbarch = get_type_arch (type);
@@ -489,7 +489,7 @@ gnuv3_find_method_in (struct type *domain, CORE_ADDR voffset,
we're out of luck. */
for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
{
- int pos;
+ LONGEST pos;
struct type *basetype;

if (BASETYPE_VIA_VIRTUAL (domain, i))
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
index 18a7c19..9323c0b 100644
--- a/gdb/jv-lang.c
+++ b/gdb/jv-lang.c
@@ -438,7 +438,7 @@ java_link_class_type (struct gdbarch *gdbarch,
for (i = TYPE_N_BASECLASSES (type); i < nfields; i++)
{
int accflags;
- int boffset;
+ LONGEST boffset;

if (fields == NULL)
{
diff --git a/gdb/jv-lang.h b/gdb/jv-lang.h
index d061096..4380a42 100644
--- a/gdb/jv-lang.h
+++ b/gdb/jv-lang.h
@@ -42,7 +42,7 @@ struct builtin_java_type

extern const struct builtin_java_type *builtin_java_type (struct gdbarch *);

-extern int java_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+extern int java_val_print (struct type *, const gdb_byte *, LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *);
diff --git a/gdb/jv-valprint.c b/gdb/jv-valprint.c
index d430ba0..914d871 100644
--- a/gdb/jv-valprint.c
+++ b/gdb/jv-valprint.c
@@ -261,7 +261,7 @@ java_value_print (struct value *val, struct ui_file *stream,

static void
java_print_value_fields (struct type *type, const gdb_byte *valaddr,
- int offset,
+ LONGEST offset,
CORE_ADDR address, struct ui_file *stream,
int recurse,
const struct value *val,
@@ -480,7 +480,7 @@ java_print_value_fields (struct type *type, const gdb_byte *valaddr,

int
java_val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options)
diff --git a/gdb/language.c b/gdb/language.c
index 49ba21a..1850880 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -849,7 +849,7 @@ unk_lang_print_type (struct type *type, const char *varstring,

static int
unk_lang_val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options)
diff --git a/gdb/language.h b/gdb/language.h
index a47a44d..c20c581 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -242,7 +242,7 @@ struct language_defn

int (*la_val_print) (struct type *type,
const gdb_byte *contents,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options);
diff --git a/gdb/m2-lang.h b/gdb/m2-lang.h
index 2803e63..865e8fb 100644
--- a/gdb/m2-lang.h
+++ b/gdb/m2-lang.h
@@ -32,7 +32,7 @@ extern void m2_print_typedef (struct type *, struct symbol *,
extern int m2_is_long_set (struct type *type);
extern int m2_is_unbounded_array (struct type *type);

-extern int m2_val_print (struct type *, const gdb_byte *, int, CORE_ADDR,
+extern int m2_val_print (struct type *, const gdb_byte *, LONGEST, CORE_ADDR,
struct ui_file *, int,
const struct value *,
const struct value_print_options *);
diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
index 9735d7f..26615b0 100644
--- a/gdb/m2-typeprint.c
+++ b/gdb/m2-typeprint.c
@@ -587,7 +587,8 @@ m2_record_fields (struct type *type, struct ui_file *stream, int show,
void
m2_enum (struct type *type, struct ui_file *stream, int show, int level)
{
- int lastval, i, len;
+ LONGEST lastval;
+ int i, len;

if (show < 0)
{
@@ -609,7 +610,8 @@ m2_enum (struct type *type, struct ui_file *stream, int show, int level)
fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
if (lastval != TYPE_FIELD_BITPOS (type, i))
{
- fprintf_filtered (stream, " = %d", TYPE_FIELD_BITPOS (type, i));
+ fprintf_filtered (stream, " = %s",
+ plongest(TYPE_FIELD_BITPOS (type, i)));
lastval = TYPE_FIELD_BITPOS (type, i);
}
lastval++;
diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c
index 4378b00..4a7977f 100644
--- a/gdb/m2-valprint.c
+++ b/gdb/m2-valprint.c
@@ -36,7 +36,7 @@ static int print_unpacked_pointer (struct type *type,
struct ui_file *stream);
static void
m2_print_array_contents (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
@@ -89,7 +89,7 @@ get_long_set_bounds (struct type *type, LONGEST *low, LONGEST *high)

static void
m2_print_long_set (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream)
{
int empty_set = 1;
@@ -180,7 +180,7 @@ m2_print_long_set (struct type *type, const gdb_byte *valaddr,

static void
m2_print_unbounded_array (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value_print_options *options)
{
@@ -277,7 +277,7 @@ print_variable_at_address (struct type *type,

static void
m2_print_array_contents (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
@@ -315,7 +315,7 @@ m2_print_array_contents (struct type *type, const gdb_byte *valaddr,
also identical to val_print. */

int
-m2_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
+m2_val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, struct ui_file *stream, int recurse,
const struct value *original_value,
const struct value_print_options *options)
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index a670cd3..a09d19a 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -289,7 +289,7 @@ static void
mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
int reg_num, int length,
enum bfd_endian endian, gdb_byte *in,
- const gdb_byte *out, int buf_offset)
+ const gdb_byte *out, LONGEST buf_offset)
{
int reg_offset = 0;

@@ -312,8 +312,8 @@ mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
}
if (mips_debug)
fprintf_unfiltered (gdb_stderr,
- "xfer $%d, reg offset %d, buf offset %d, length %d, ",
- reg_num, reg_offset, buf_offset, length);
+ "xfer $%d, reg offset %d, buf offset %s, length %d, ",
+ reg_num, reg_offset, plongest(buf_offset), length);
if (mips_debug && out != NULL)
{
int i;
@@ -3221,7 +3221,7 @@ mips_eabi_return_value (struct gdbarch *gdbarch, struct type *func_type,

static int
mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type,
- int offset)
+ LONGEST offset)
{
int i;

@@ -3236,7 +3236,7 @@ mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type,

for (i = 0; i < TYPE_NFIELDS (arg_type); i++)
{
- int pos;
+ LONGEST pos;
struct type *field_type;

/* We're only looking at normal fields. */
@@ -3630,11 +3630,11 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
: MIPS_V0_REGNUM);
field < TYPE_NFIELDS (type); field++, regnum += 2)
{
- int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
+ LONGEST offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
/ TARGET_CHAR_BIT);
if (mips_debug)
- fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
- offset);
+ fprintf_unfiltered (gdb_stderr, "Return float struct+%s\n",
+ plongest(offset));
if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16)
{
/* A 16-byte long double field goes in two consecutive
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 80f978c..dffc7a4 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -174,9 +174,9 @@ lval_func_read (struct value *v)
struct lval_closure *c = (struct lval_closure *) value_computed_closure (v);
struct type *type = check_typedef (value_type (v));
struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val)));
- int offset = value_offset (v);
+ LONGEST offset = value_offset (v);
int elsize = TYPE_LENGTH (eltype);
- int n, i, j = 0;
+ LONGEST n, i, j = 0;
LONGEST lowb = 0;
LONGEST highb = 0;

@@ -203,9 +203,9 @@ lval_func_write (struct value *v, struct value *fromval)
struct lval_closure *c = (struct lval_closure *) value_computed_closure (v);
struct type *type = check_typedef (value_type (v));
struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val)));
- int offset = value_offset (v);
+ LONGEST offset = value_offset (v);
int elsize = TYPE_LENGTH (eltype);
- int n, i, j = 0;
+ LONGEST n, i, j = 0;
LONGEST lowb = 0;
LONGEST highb = 0;

@@ -243,17 +243,17 @@ lval_func_write (struct value *v, struct value *fromval)
/* Return nonzero if all bits in V within OFFSET and LENGTH are valid. */

static int
-lval_func_check_validity (const struct value *v, int offset, int length)
+lval_func_check_validity (const struct value *v, LONGEST offset, int length)
{
struct lval_closure *c = (struct lval_closure *) value_computed_closure (v);
/* Size of the target type in bits. */
int elsize =
TYPE_LENGTH (TYPE_TARGET_TYPE (check_typedef (value_type (c->val)))) * 8;
- int startrest = offset % elsize;
- int start = offset / elsize;
- int endrest = (offset + length) % elsize;
- int end = (offset + length) / elsize;
- int i;
+ int startrest = (int)(offset % elsize);
+ LONGEST start = offset / elsize;
+ int endrest = (int)((offset + length) % elsize);
+ LONGEST end = (offset + length) / elsize;
+ LONGEST i;

if (endrest)
end++;
@@ -297,17 +297,17 @@ lval_func_check_any_valid (const struct value *v)

static int
lval_func_check_synthetic_pointer (const struct value *v,
- int offset, int length)
+ LONGEST offset, int length)
{
struct lval_closure *c = (struct lval_closure *) value_computed_closure (v);
/* Size of the target type in bits. */
int elsize =
TYPE_LENGTH (TYPE_TARGET_TYPE (check_typedef (value_type (c->val)))) * 8;
- int startrest = offset % elsize;
- int start = offset / elsize;
- int endrest = (offset + length) % elsize;
- int end = (offset + length) / elsize;
- int i;
+ int startrest = (int)(offset % elsize);
+ LONGEST start = offset / elsize;
+ int endrest = (int)((offset + length) % elsize);
+ LONGEST end = (offset + length) / elsize;
+ LONGEST i;

if (endrest)
end++;
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index 826d24f..80c1c68 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -96,8 +96,8 @@ pascal_main_name (void)
are not multiple of TARGET_CHAR_BIT then the results are wrong
but this does not happen for Free Pascal nor for GPC. */
int
-is_pascal_string_type (struct type *type,int *length_pos,
- int *length_size, int *string_pos,
+is_pascal_string_type (struct type *type,LONGEST *length_pos,
+ int *length_size, LONGEST *string_pos,
struct type **char_type,
const char **arrayname)
{
diff --git a/gdb/p-lang.h b/gdb/p-lang.h
index 180c544..2627aa4 100644
--- a/gdb/p-lang.h
+++ b/gdb/p-lang.h
@@ -35,7 +35,7 @@ extern void pascal_print_type (struct type *, const char *, struct ui_file *,
extern void pascal_print_typedef (struct type *, struct symbol *,
struct ui_file *);

-extern int pascal_val_print (struct type *, const gdb_byte *, int,
+extern int pascal_val_print (struct type *, const gdb_byte *, LONGEST,
CORE_ADDR, struct ui_file *, int,
const struct value *,
const struct value_print_options *);
@@ -49,7 +49,7 @@ extern void pascal_type_print_method_args (const char *, const char *,
/* These are in p-lang.c: */

extern int
- is_pascal_string_type (struct type *, int *, int *, int *,
+ is_pascal_string_type (struct type *, LONGEST *, int *, LONGEST *,
struct type **, const char **);

extern void pascal_printchar (int, struct type *, struct ui_file *);
@@ -69,7 +69,7 @@ extern void
pascal_type_print_varspec_prefix (struct type *, struct ui_file *, int, int);

extern void pascal_object_print_value_fields (struct type *, const gdb_byte *,
- int,
+ LONGEST,
CORE_ADDR, struct ui_file *,
int,
const struct value *,
diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c
index ab82d90..b97c7e9 100644
--- a/gdb/p-typeprint.c
+++ b/gdb/p-typeprint.c
@@ -443,7 +443,7 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show,
{
int i;
int len;
- int lastval;
+ LONGEST lastval;
enum
{
s_none, s_public, s_private, s_protected
@@ -754,7 +754,8 @@ pascal_type_print_base (struct type *type, struct ui_file *stream, int show,
if (lastval != TYPE_FIELD_BITPOS (type, i))
{
fprintf_filtered (stream,
- " := %d", TYPE_FIELD_BITPOS (type, i));
+ " := %s",
+ plongest(TYPE_FIELD_BITPOS (type, i)));
lastval = TYPE_FIELD_BITPOS (type, i);
}
lastval++;
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
index 39eff10..aa75095 100644
--- a/gdb/p-valprint.c
+++ b/gdb/p-valprint.c
@@ -47,7 +47,7 @@

int
pascal_val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *original_value,
const struct value_print_options *options)
@@ -59,7 +59,8 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
LONGEST low_bound, high_bound;
struct type *elttype;
unsigned eltlen;
- int length_pos, length_size, string_pos;
+ LONGEST length_pos, string_pos;
+ int length_size;
struct type *char_type;
LONGEST val;
CORE_ADDR addr;
@@ -70,7 +71,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
case TYPE_CODE_ARRAY:
if (get_array_bounds (type, &low_bound, &high_bound))
{
- len = high_bound - low_bound + 1;
+ len = (unsigned int)(high_bound - low_bound + 1);
elttype = check_typedef (TYPE_TARGET_TYPE (type));
eltlen = TYPE_LENGTH (elttype);
if (options->prettyprint_arrays)
@@ -633,7 +634,7 @@ static void pascal_object_print_static_field (struct value *,
const struct value_print_options *);

static void pascal_object_print_value (struct type *, const gdb_byte *,
- int,
+ LONGEST,
CORE_ADDR, struct ui_file *, int,
const struct value *,
const struct value_print_options *,
@@ -692,7 +693,7 @@ pascal_object_is_vtbl_member (struct type *type)

void
pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,
- int offset,
+ LONGEST offset,
CORE_ADDR address, struct ui_file *stream,
int recurse,
const struct value *val,
@@ -887,7 +888,7 @@ pascal_object_print_value_fields (struct type *type, const gdb_byte *valaddr,

static void
pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
- int offset,
+ LONGEST offset,
CORE_ADDR address, struct ui_file *stream,
int recurse,
const struct value *val,
@@ -910,11 +911,11 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr,

for (i = 0; i < n_baseclasses; i++)
{
- int boffset = 0;
+ LONGEST boffset = 0;
struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
const char *basename = type_name_no_tag (baseclass);
const gdb_byte *base_valaddr = NULL;
- int thisoffset;
+ LONGEST thisoffset;
volatile struct gdb_exception ex;
int skip = 0;

diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c
index 86d4f2c..1ceb23b 100644
--- a/gdb/python/py-prettyprint.c
+++ b/gdb/python/py-prettyprint.c
@@ -676,7 +676,7 @@ print_children (PyObject *printer, const char *hint,

int
apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
@@ -824,7 +824,7 @@ gdbpy_default_visualizer (PyObject *self, PyObject *args)

int
apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
diff --git a/gdb/python/python.h b/gdb/python/python.h
index 597ed2e..476299b 100644
--- a/gdb/python/python.h
+++ b/gdb/python/python.h
@@ -33,7 +33,7 @@ void eval_python_from_control_command (struct command_line *);
void source_python_script (FILE *file, const char *filename);

int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
diff --git a/gdb/regcache.c b/gdb/regcache.c
index c716280..12ed8fa 100644
--- a/gdb/regcache.c
+++ b/gdb/regcache.c
@@ -902,7 +902,7 @@ typedef void (regcache_write_ftype) (struct regcache *regcache, int regnum,

static enum register_status
regcache_xfer_part (struct regcache *regcache, int regnum,
- int offset, int len, void *in, const void *out,
+ LONGEST offset, int len, void *in, const void *out,
enum register_status (*read) (struct regcache *regcache,
int regnum,
gdb_byte *buf),
@@ -968,7 +968,7 @@ regcache_raw_write_part (struct regcache *regcache, int regnum,

enum register_status
regcache_cooked_read_part (struct regcache *regcache, int regnum,
- int offset, int len, gdb_byte *buf)
+ LONGEST offset, int len, gdb_byte *buf)
{
struct regcache_descr *descr = regcache->descr;

@@ -979,7 +979,7 @@ regcache_cooked_read_part (struct regcache *regcache, int regnum,

void
regcache_cooked_write_part (struct regcache *regcache, int regnum,
- int offset, int len, const gdb_byte *buf)
+ LONGEST offset, int len, const gdb_byte *buf)
{
struct regcache_descr *descr = regcache->descr;

diff --git a/gdb/regcache.h b/gdb/regcache.h
index 93b4499..81ccda6 100644
--- a/gdb/regcache.h
+++ b/gdb/regcache.h
@@ -129,10 +129,10 @@ extern void regcache_cooked_write_unsigned (struct regcache *regcache,
write style operations. */

enum register_status regcache_cooked_read_part (struct regcache *regcache,
- int regnum, int offset,
+ int regnum, LONGEST offset,
int len, gdb_byte *buf);
void regcache_cooked_write_part (struct regcache *regcache, int regnum,
- int offset, int len, const gdb_byte *buf);
+ LONGEST offset, int len, const gdb_byte *buf);

/* Special routines to read/write the PC. */

diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
index 327eefe..3c4e034 100644
--- a/gdb/sparc64-tdep.c
+++ b/gdb/sparc64-tdep.c
@@ -639,7 +639,7 @@ sparc64_16_byte_align_p (struct type *type)

static void
sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
- const gdb_byte *valbuf, int element, int bitpos)
+ const gdb_byte *valbuf, int element, LONGEST bitpos)
{
int len = TYPE_LENGTH (type);

@@ -662,7 +662,7 @@ sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
{
gdb_assert (bitpos == 0 || bitpos == 64);

- regnum = SPARC64_D0_REGNUM + element + bitpos / 64;
+ regnum = (int)(SPARC64_D0_REGNUM + element + bitpos / 64);
regcache_cooked_write (regcache, regnum, valbuf + (bitpos / 8));
}
else
@@ -670,7 +670,7 @@ sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
gdb_assert (len == 4);
gdb_assert (bitpos % 32 == 0 && bitpos >= 0 && bitpos < 128);

- regnum = SPARC_F0_REGNUM + element * 2 + bitpos / 32;
+ regnum = (int)(SPARC_F0_REGNUM + element * 2 + bitpos / 32);
regcache_cooked_write (regcache, regnum, valbuf + (bitpos / 8));
}
}
@@ -681,7 +681,7 @@ sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
for (i = 0; i < TYPE_NFIELDS (type); i++)
{
struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
- int subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
+ LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i);

sparc64_store_floating_fields (regcache, subtype, valbuf,
element, subpos);
@@ -713,7 +713,7 @@ sparc64_store_floating_fields (struct regcache *regcache, struct type *type,

static void
sparc64_extract_floating_fields (struct regcache *regcache, struct type *type,
- gdb_byte *valbuf, int bitpos)
+ gdb_byte *valbuf, LONGEST bitpos)
{
if (sparc64_floating_p (type))
{
@@ -724,14 +724,14 @@ sparc64_extract_floating_fields (struct regcache *regcache, struct type *type,
{
gdb_assert (bitpos == 0 || bitpos == 128);

- regnum = SPARC64_Q0_REGNUM + bitpos / 128;
+ regnum = (int)(SPARC64_Q0_REGNUM + bitpos / 128);
regcache_cooked_read (regcache, regnum, valbuf + (bitpos / 8));
}
else if (len == 8)
{
gdb_assert (bitpos % 64 == 0 && bitpos >= 0 && bitpos < 256);

- regnum = SPARC64_D0_REGNUM + bitpos / 64;
+ regnum = (int)(SPARC64_D0_REGNUM + bitpos / 64);
regcache_cooked_read (regcache, regnum, valbuf + (bitpos / 8));
}
else
@@ -739,7 +739,7 @@ sparc64_extract_floating_fields (struct regcache *regcache, struct type *type,
gdb_assert (len == 4);
gdb_assert (bitpos % 32 == 0 && bitpos >= 0 && bitpos < 256);

- regnum = SPARC_F0_REGNUM + bitpos / 32;
+ regnum = (int)(SPARC_F0_REGNUM + bitpos / 32);
regcache_cooked_read (regcache, regnum, valbuf + (bitpos / 8));
}
}
@@ -750,7 +750,7 @@ sparc64_extract_floating_fields (struct regcache *regcache, struct type *type,
for (i = 0; i < TYPE_NFIELDS (type); i++)
{
struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
- int subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
+ LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i);

sparc64_extract_floating_fields (regcache, subtype, valbuf, subpos);
}
diff --git a/gdb/testsuite/gdb.base/structs4.c b/gdb/testsuite/gdb.base/structs4.c
new file mode 100644
index 0000000..e5dfc5c
--- /dev/null
+++ b/gdb/testsuite/gdb.base/structs4.c
@@ -0,0 +1,27 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2012 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ 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, see <http://www.gnu.org/licenses/>. */
+
+enum e { I, J = (unsigned)0xffffffff } e = J;
+
+void dummy()
+{
+}
+
+main()
+{
+ dummy();
+}
diff --git a/gdb/testsuite/gdb.base/structs4.exp b/gdb/testsuite/gdb.base/structs4.exp
new file mode 100644
index 0000000..b66a6eb
--- /dev/null
+++ b/gdb/testsuite/gdb.base/structs4.exp
@@ -0,0 +1,29 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# 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, see <http://www.gnu.org/licenses/>.
+
+set testfile "structs4"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if { [prepare_for_testing structs4.exp "structs4" "" {debug}] } {
+ return -1
+}
+
+# Check the real contents.
+gdb_test "print e" "= J"
+
+gdb_test "print J" "= J"
diff --git a/gdb/valops.c b/gdb/valops.c
index fca601f..0774f65 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -53,11 +53,11 @@ static int typecmp (int staticp, int varargs, int nargs,
struct field t1[], struct value *t2[]);

static struct value *search_struct_field (const char *, struct value *,
- int, struct type *, int);
+ LONGEST, struct type *, int);

static struct value *search_struct_method (const char *, struct value **,
struct value **,
- int, int *, struct type *);
+ LONGEST, int *, struct type *);

static int find_oload_champ_namespace (struct value **, int,
const char *, const char *,
@@ -85,7 +85,7 @@ oload_classification classify_oload_match (struct badness_vector *,
int, int);

static struct value *value_struct_elt_for_reference (struct type *,
- int, struct type *,
+ LONGEST, struct type *,
char *,
struct type *,
int, enum noside);
@@ -102,8 +102,8 @@ static CORE_ADDR allocate_space_in_inferior (int);
static struct value *cast_into_complex (struct type *, struct value *);

static struct fn_field *find_method_list (struct value **, const char *,
- int, struct type *, int *,
- struct type **, int *);
+ LONGEST, struct type *, int *,
+ struct type **, LONGEST *);

void _initialize_valops (void);

@@ -651,7 +651,7 @@ value_reinterpret_cast (struct type *type, struct value *arg)
static int
dynamic_cast_check_1 (struct type *desired_type,
const gdb_byte *valaddr,
- int embedded_offset,
+ LONGEST embedded_offset,
CORE_ADDR address,
struct value *val,
struct type *search_type,
@@ -663,7 +663,7 @@ dynamic_cast_check_1 (struct type *desired_type,

for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i)
{
- int offset = baseclass_offset (search_type, i, valaddr, embedded_offset,
+ LONGEST offset = baseclass_offset (search_type, i, valaddr, embedded_offset,
address, val);

if (class_types_same_p (desired_type, TYPE_BASECLASS (search_type, i)))
@@ -698,7 +698,7 @@ dynamic_cast_check_1 (struct type *desired_type,
static int
dynamic_cast_check_2 (struct type *desired_type,
const gdb_byte *valaddr,
- int embedded_offset,
+ LONGEST embedded_offset,
CORE_ADDR address,
struct value *val,
struct type *search_type,
@@ -708,7 +708,7 @@ dynamic_cast_check_2 (struct type *desired_type,

for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i)
{
- int offset;
+ LONGEST offset;

if (! BASETYPE_VIA_PUBLIC (search_type, i))
continue;
@@ -1329,7 +1329,7 @@ value_assign (struct value *toval, struct value *fromval)
if (value_bitsize (toval))
{
struct value *parent = value_parent (toval);
- int offset = value_offset (parent) + value_offset (toval);
+ LONGEST offset = value_offset (parent) + value_offset (toval);
int changed_len;
gdb_byte buffer[sizeof (LONGEST)];
int optim, unavail;
@@ -1993,7 +1993,7 @@ typecmp (int staticp, int varargs, int nargs,
fields, look for a baseclass named NAME. */

static struct value *
-search_struct_field (const char *name, struct value *arg1, int offset,
+search_struct_field (const char *name, struct value *arg1, LONGEST offset,
struct type *type, int looking_for_baseclass)
{
int i;
@@ -2051,7 +2051,7 @@ search_struct_field (const char *name, struct value *arg1, int offset,
<variant field>. */

struct value *v;
- int new_offset = offset;
+ LONGEST new_offset = offset;

/* This is pretty gross. In G++, the offset in an
anonymous union is relative to the beginning of the
@@ -2088,7 +2088,7 @@ search_struct_field (const char *name, struct value *arg1, int offset,

if (BASETYPE_VIA_VIRTUAL (type, i))
{
- int boffset;
+ LONGEST boffset;
struct value *v2;

boffset = baseclass_offset (type, i,
@@ -2152,7 +2152,7 @@ search_struct_field (const char *name, struct value *arg1, int offset,

static struct value *
search_struct_method (const char *name, struct value **arg1p,
- struct value **args, int offset,
+ struct value **args, LONGEST offset,
int *static_memfuncp, struct type *type)
{
int i;
@@ -2216,9 +2216,9 @@ search_struct_method (const char *name, struct value **arg1p,

for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
{
- int base_offset;
+ LONGEST base_offset;
int skip = 0;
- int this_offset;
+ LONGEST this_offset;

if (BASETYPE_VIA_VIRTUAL (type, i))
{
@@ -2230,7 +2230,7 @@ search_struct_method (const char *name, struct value **arg1p,
clobbered by the user program. Make sure that it
still points to a valid memory location. */

- if (offset < 0 || offset >= TYPE_LENGTH (type))
+ if (offset < 0 || offset >= (LONGEST)TYPE_LENGTH (type))
{
gdb_byte *tmp = alloca (TYPE_LENGTH (baseclass));
CORE_ADDR address = value_address (*arg1p);
@@ -2394,8 +2394,8 @@ value_struct_elt (struct value **argp, struct value **args,

static struct fn_field *
find_method_list (struct value **argp, const char *method,
- int offset, struct type *type, int *num_fns,
- struct type **basetype, int *boffset)
+ LONGEST offset, struct type *type, int *num_fns,
+ struct type **basetype, LONGEST *boffset)
{
int i;
struct fn_field *f;
@@ -2428,7 +2428,7 @@ find_method_list (struct value **argp, const char *method,
/* Not found in object, check in base subobjects. */
for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
{
- int base_offset;
+ LONGEST base_offset;

if (BASETYPE_VIA_VIRTUAL (type, i))
{
@@ -2464,7 +2464,7 @@ find_method_list (struct value **argp, const char *method,
struct fn_field *
value_find_oload_method_list (struct value **argp, const char *method,
int offset, int *num_fns,
- struct type **basetype, int *boffset)
+ struct type **basetype, LONGEST *boffset)
{
struct type *t;

@@ -2556,7 +2556,7 @@ find_overload_match (struct value **args, int nargs,
/* Number of overloaded instances being considered. */
int num_fns = 0;
struct type *basetype = NULL;
- int boffset;
+ LONGEST boffset;

struct cleanup *all_cleanups = make_cleanup (null_cleanup, NULL);

@@ -3263,7 +3263,7 @@ compare_parameters (struct type *t1, struct type *t2, int skip_artificial)
the form "DOMAIN::NAME". */

static struct value *
-value_struct_elt_for_reference (struct type *domain, int offset,
+value_struct_elt_for_reference (struct type *domain, LONGEST offset,
struct type *curtype, char *name,
struct type *intype,
int want_address,
@@ -3300,7 +3300,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
if (want_address)
return value_from_longest
(lookup_memberptr_type (TYPE_FIELD_TYPE (t, i), domain),
- offset + (LONGEST) (TYPE_FIELD_BITPOS (t, i) >> 3));
+ offset + (TYPE_FIELD_BITPOS (t, i) >> 3));
else if (noside == EVAL_AVOID_SIDE_EFFECTS)
return allocate_value (TYPE_FIELD_TYPE (t, i));
else
@@ -3443,7 +3443,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
for (i = TYPE_N_BASECLASSES (t) - 1; i >= 0; i--)
{
struct value *v;
- int base_offset;
+ LONGEST base_offset;

if (BASETYPE_VIA_VIRTUAL (t, i))
base_offset = 0;
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 325cf40..8f261f5 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -261,7 +261,7 @@ scalar_type_p (struct type *type)
static int
valprint_check_validity (struct ui_file *stream,
struct type *type,
- int embedded_offset,
+ LONGEST embedded_offset,
const struct value *val)
{
CHECK_TYPEDEF (type);
@@ -336,7 +336,7 @@ val_print_invalid_address (struct ui_file *stream)
characters printed. */

int
-val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
+val_print (struct type *type, const gdb_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
@@ -556,7 +556,7 @@ val_print_type_code_flags (struct type *type, const gdb_byte *valaddr,

void
val_print_scalar_formatted (struct type *type,
- const gdb_byte *valaddr, int embedded_offset,
+ const gdb_byte *valaddr, LONGEST embedded_offset,
const struct value *val,
const struct value_print_options *options,
int size,
@@ -1189,7 +1189,7 @@ maybe_print_array_index (struct type *index_type, LONGEST index,

void
val_print_array_elements (struct type *type,
- const gdb_byte *valaddr, int embedded_offset,
+ const gdb_byte *valaddr, LONGEST embedded_offset,
CORE_ADDR address, struct ui_file *stream,
int recurse,
const struct value *val,
diff --git a/gdb/valprint.h b/gdb/valprint.h
index a34d09b..74326f7 100644
--- a/gdb/valprint.h
+++ b/gdb/valprint.h
@@ -113,7 +113,7 @@ extern void maybe_print_array_index (struct type *index_type, LONGEST index,
struct ui_file *stream,
const struct value_print_options *);

-extern void val_print_array_elements (struct type *, const gdb_byte *, int,
+extern void val_print_array_elements (struct type *, const gdb_byte *, LONGEST,
CORE_ADDR, struct ui_file *, int,
const struct value *,
const struct value_print_options *,
@@ -127,7 +127,7 @@ extern void val_print_type_code_flags (struct type *type,
struct ui_file *stream);

extern void val_print_scalar_formatted (struct type *,
- const gdb_byte *, int,
+ const gdb_byte *, LONGEST,
const struct value *,
const struct value_print_options *,
int,
diff --git a/gdb/value.c b/gdb/value.c
index 583be33..c56c22f 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -66,7 +66,7 @@ struct internal_function
struct range
{
/* Lowest offset in the range. */
- int offset;
+ LONGEST offset;

/* Length of the range. */
int length;
@@ -80,8 +80,8 @@ DEF_VEC_O(range_s);
[offset2, offset2+len2) overlap. */

static int
-ranges_overlap (int offset1, int len1,
- int offset2, int len2)
+ranges_overlap (LONGEST offset1, int len1,
+ LONGEST offset2, int len2)
{
ULONGEST h, l;

@@ -105,7 +105,7 @@ range_lessthan (const range_s *r1, const range_s *r2)
OFFSET+LENGTH). */

static int
-ranges_contain (VEC(range_s) *ranges, int offset, int length)
+ranges_contain (VEC(range_s) *ranges, LONGEST offset, int length)
{
range_s what;
int i;
@@ -238,7 +238,7 @@ struct value
lval == lval_register, this is a further offset from
location.address within the registers structure. Note also the
member embedded_offset below. */
- int offset;
+ LONGEST offset;

/* Only used for bitfields; number of bits contained in them. */
int bitsize;
@@ -308,8 +308,8 @@ struct value
`type', and `embedded_offset' is zero, so everything works
normally. */
struct type *enclosing_type;
- int embedded_offset;
- int pointed_to_offset;
+ LONGEST embedded_offset;
+ LONGEST pointed_to_offset;

/* Values are stored in a chain, so that they can be deleted easily
over calls to the inferior. Values assigned to internal
@@ -331,7 +331,7 @@ struct value
};

int
-value_bytes_available (const struct value *value, int offset, int length)
+value_bytes_available (const struct value *value, LONGEST offset, int length)
{
gdb_assert (!value->lazy);

@@ -352,7 +352,7 @@ value_entirely_available (struct value *value)
}

void
-mark_value_bytes_unavailable (struct value *value, int offset, int length)
+mark_value_bytes_unavailable (struct value *value, LONGEST offset, int length)
{
range_s newr;
int i;
@@ -523,7 +523,7 @@ mark_value_bytes_unavailable (struct value *value, int offset, int length)

static int
find_first_range_overlap (VEC(range_s) *ranges, int pos,
- int offset, int length)
+ LONGEST offset, int length)
{
range_s *r;
int i;
@@ -536,8 +536,8 @@ find_first_range_overlap (VEC(range_s) *ranges, int pos,
}

int
-value_available_contents_eq (const struct value *val1, int offset1,
- const struct value *val2, int offset2,
+value_available_contents_eq (const struct value *val1, LONGEST offset1,
+ const struct value *val2, LONGEST offset2,
int length)
{
int idx1 = 0, idx2 = 0;
@@ -766,13 +766,13 @@ deprecated_set_value_type (struct value *value, struct type *type)
value->type = type;
}

-int
+LONGEST
value_offset (const struct value *value)
{
return value->offset;
}
void
-set_value_offset (struct value *value, int offset)
+set_value_offset (struct value *value, LONGEST offset)
{
value->offset = offset;
}
@@ -874,8 +874,8 @@ value_contents_all (struct value *value)
DST_OFFSET+LENGTH) range are wholly available. */

void
-value_contents_copy_raw (struct value *dst, int dst_offset,
- struct value *src, int src_offset, int length)
+value_contents_copy_raw (struct value *dst, LONGEST dst_offset,
+ struct value *src, LONGEST src_offset, int length)
{
range_s *r;
int i;
@@ -923,8 +923,8 @@ value_contents_copy_raw (struct value *dst, int dst_offset,
DST_OFFSET+LENGTH) range are wholly available. */

void
-value_contents_copy (struct value *dst, int dst_offset,
- struct value *src, int src_offset, int length)
+value_contents_copy (struct value *dst, LONGEST dst_offset,
+ struct value *src, LONGEST src_offset, int length)
{
require_not_optimized_out (src);

@@ -1019,7 +1019,7 @@ value_entirely_optimized_out (const struct value *value)
}

int
-value_bits_valid (const struct value *value, int offset, int length)
+value_bits_valid (const struct value *value, LONGEST offset, int length)
{
if (!value->optimized_out)
return 1;
@@ -1032,7 +1032,7 @@ value_bits_valid (const struct value *value, int offset, int length)

int
value_bits_synthetic_pointer (const struct value *value,
- int offset, int length)
+ LONGEST offset, int length)
{
if (value->lval != lval_computed
|| !value->location.computed.funcs->check_synthetic_pointer)
@@ -1042,26 +1042,26 @@ value_bits_synthetic_pointer (const struct value *value,
length);
}

-int
+LONGEST
value_embedded_offset (struct value *value)
{
return value->embedded_offset;
}

void
-set_value_embedded_offset (struct value *value, int val)
+set_value_embedded_offset (struct value *value, LONGEST val)
{
value->embedded_offset = val;
}

-int
+LONGEST
value_pointed_to_offset (struct value *value)
{
return value->pointed_to_offset;
}

void
-set_value_pointed_to_offset (struct value *value, int val)
+set_value_pointed_to_offset (struct value *value, LONGEST val)
{
value->pointed_to_offset = val;
}
@@ -1832,7 +1832,7 @@ get_internalvar_function (struct internalvar *var,
}

void
-set_internalvar_component (struct internalvar *var, int offset, int bitpos,
+set_internalvar_component (struct internalvar *var, LONGEST offset, int bitpos,
int bitsize, struct value *newval)
{
gdb_byte *addr;
@@ -2496,7 +2496,7 @@ set_value_enclosing_type (struct value *val, struct type *new_encl_type)
FIELDNO says which field. */

struct value *
-value_primitive_field (struct value *arg1, int offset,
+value_primitive_field (struct value *arg1, LONGEST offset,
int fieldno, struct type *arg_type)
{
struct value *v;
@@ -2526,16 +2526,16 @@ value_primitive_field (struct value *arg1, int offset,
bit. Assume that the address, offset, and embedded offset
are sufficiently aligned. */

- int bitpos = TYPE_FIELD_BITPOS (arg_type, fieldno);
+ LONGEST bitpos = TYPE_FIELD_BITPOS (arg_type, fieldno);
int container_bitsize = TYPE_LENGTH (type) * 8;

v = allocate_value_lazy (type);
v->bitsize = TYPE_FIELD_BITSIZE (arg_type, fieldno);
if ((bitpos % container_bitsize) + v->bitsize <= container_bitsize
&& TYPE_LENGTH (type) <= (int) sizeof (LONGEST))
- v->bitpos = bitpos % container_bitsize;
+ v->bitpos = (int)(bitpos % container_bitsize);
else
- v->bitpos = bitpos % 8;
+ v->bitpos = (int)(bitpos % 8);
v->offset = (value_embedded_offset (arg1)
+ offset
+ (bitpos - v->bitpos) / 8);
@@ -2614,7 +2614,7 @@ value_field (struct value *arg1, int fieldno)
struct value *
value_fn_field (struct value **arg1p, struct fn_field *f,
int j, struct type *type,
- int offset)
+ LONGEST offset)
{
struct value *v;
struct type *ftype = TYPE_FN_FIELD_TYPE (f, j);
@@ -2674,7 +2674,7 @@ value_fn_field (struct value **arg1p, struct fn_field *f,

static int
unpack_value_bits_as_long_1 (struct type *field_type, const gdb_byte *valaddr,
- int embedded_offset, int bitpos, int bitsize,
+ LONGEST embedded_offset, LONGEST bitpos, int bitsize,
const struct value *original_value,
LONGEST *result)
{
@@ -2683,13 +2683,13 @@ unpack_value_bits_as_long_1 (struct type *field_type, const gdb_byte *valaddr,
ULONGEST valmask;
int lsbcount;
int bytes_read;
- int read_offset;
+ LONGEST read_offset;

/* Read the minimum number of bytes required; there may not be
enough bytes to read an entire ULONGEST. */
CHECK_TYPEDEF (field_type);
if (bitsize)
- bytes_read = ((bitpos % 8) + bitsize + 7) / 8;
+ bytes_read = (int)(((bitpos % 8) + bitsize + 7) / 8);
else
bytes_read = TYPE_LENGTH (field_type);

@@ -2706,9 +2706,9 @@ unpack_value_bits_as_long_1 (struct type *field_type, const gdb_byte *valaddr,
/* Extract bits. See comment above. */

if (gdbarch_bits_big_endian (get_type_arch (field_type)))
- lsbcount = (bytes_read * 8 - bitpos % 8 - bitsize);
+ lsbcount = (int)(bytes_read * 8 - bitpos % 8 - bitsize);
else
- lsbcount = (bitpos % 8);
+ lsbcount = (int)(bitpos % 8);
val >>= lsbcount;

/* If the field does not entirely fill a LONGEST, then zero the sign bits.
@@ -2753,7 +2753,7 @@ unpack_value_bits_as_long_1 (struct type *field_type, const gdb_byte *valaddr,

int
unpack_value_bits_as_long (struct type *field_type, const gdb_byte *valaddr,
- int embedded_offset, int bitpos, int bitsize,
+ LONGEST embedded_offset, int bitpos, int bitsize,
const struct value *original_value,
LONGEST *result)
{
@@ -2771,10 +2771,10 @@ unpack_value_bits_as_long (struct type *field_type, const gdb_byte *valaddr,

static int
unpack_value_field_as_long_1 (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, int fieldno,
+ LONGEST embedded_offset, int fieldno,
const struct value *val, LONGEST *result)
{
- int bitpos = TYPE_FIELD_BITPOS (type, fieldno);
+ LONGEST bitpos = TYPE_FIELD_BITPOS (type, fieldno);
int bitsize = TYPE_FIELD_BITSIZE (type, fieldno);
struct type *field_type = TYPE_FIELD_TYPE (type, fieldno);

@@ -2790,7 +2790,7 @@ unpack_value_field_as_long_1 (struct type *type, const gdb_byte *valaddr,

int
unpack_value_field_as_long (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, int fieldno,
+ LONGEST embedded_offset, int fieldno,
const struct value *val, LONGEST *result)
{
gdb_assert (val != NULL);
@@ -2822,7 +2822,7 @@ unpack_field_as_long (struct type *type, const gdb_byte *valaddr, int fieldno)
struct value *
value_field_bitfield (struct type *type, int fieldno,
const gdb_byte *valaddr,
- int embedded_offset, const struct value *val)
+ LONGEST embedded_offset, const struct value *val)
{
LONGEST l;

@@ -2842,23 +2842,23 @@ value_field_bitfield (struct type *type, int fieldno,

/* Modify the value of a bitfield. ADDR points to a block of memory in
target byte order; the bitfield starts in the byte pointed to. FIELDVAL
- is the desired value of the field, in host byte order. BITPOS and BITSIZE
+ is the desired value of the field, in host byte order. OFFSET and BITSIZE
indicate which bits (in target bit order) comprise the bitfield.
- Requires 0 < BITSIZE <= lbits, 0 <= BITPOS % 8 + BITSIZE <= lbits, and
- 0 <= BITPOS, where lbits is the size of a LONGEST in bits. */
+ Requires 0 < BITSIZE <= lbits, 0 <= OFFSET % 8 + BITSIZE <= lbits, and
+ 0 <= OFFSET, where lbits is the size of a LONGEST in bits. */

void
modify_field (struct type *type, gdb_byte *addr,
- LONGEST fieldval, int bitpos, int bitsize)
+ LONGEST fieldval, LONGEST offset, int bitsize)
{
enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
ULONGEST oword;
ULONGEST mask = (ULONGEST) -1 >> (8 * sizeof (ULONGEST) - bitsize);
- int bytesize;
+ int bitpos, bytesize;

/* Normalize BITPOS. */
- addr += bitpos / 8;
- bitpos %= 8;
+ addr += offset / 8;
+ bitpos = (int)(offset % 8);

/* If a negative fieldval fits in the field in question, chop
off the sign extension bits. */
diff --git a/gdb/value.h b/gdb/value.h
index 2a2274d..6eecbce 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -81,8 +81,8 @@ struct value *value_parent (struct value *);
within the registers structure. Note also the member
embedded_offset below. */

-extern int value_offset (const struct value *);
-extern void set_value_offset (struct value *, int offset);
+extern LONGEST value_offset (const struct value *);
+extern void set_value_offset (struct value *, LONGEST offset);

/* The comment from "struct value" reads: ``Is it modifiable? Only
relevant if lval != not_lval.''. Shouldn't the value instead be
@@ -137,10 +137,10 @@ extern struct type *value_enclosing_type (struct value *);
extern void set_value_enclosing_type (struct value *val,
struct type *new_type);

-extern int value_pointed_to_offset (struct value *value);
-extern void set_value_pointed_to_offset (struct value *value, int val);
-extern int value_embedded_offset (struct value *value);
-extern void set_value_embedded_offset (struct value *value, int val);
+extern LONGEST value_pointed_to_offset (struct value *value);
+extern void set_value_pointed_to_offset (struct value *value, LONGEST val);
+extern LONGEST value_embedded_offset (struct value *value);
+extern void set_value_embedded_offset (struct value *value, LONGEST val);

/* For lval_computed values, this structure holds functions used to
retrieve and set the value (or portions of the value).
@@ -168,7 +168,7 @@ struct lval_funcs
/* Check the validity of some bits in VALUE. This should return 1
if all the bits starting at OFFSET and extending for LENGTH bits
are valid, or 0 if any bit is invalid. */
- int (*check_validity) (const struct value *value, int offset, int length);
+ int (*check_validity) (const struct value *value, LONGEST offset, int length);

/* Return 1 if any bit in VALUE is valid, 0 if they are all invalid. */
int (*check_any_valid) (const struct value *value);
@@ -186,7 +186,7 @@ struct lval_funcs
/* If non-NULL, this is used to determine whether the indicated bits
of VALUE are a synthetic pointer. */
int (*check_synthetic_pointer) (const struct value *value,
- int offset, int length);
+ LONGEST offset, int length);

/* Return a duplicate of VALUE's closure, for use in a new value.
This may simply return the same closure, if VALUE's is
@@ -367,13 +367,13 @@ extern struct value *coerce_array (struct value *value);
bits in the given range are valid, zero if any bit is invalid. */

extern int value_bits_valid (const struct value *value,
- int offset, int length);
+ LONGEST offset, int length);

/* Given a value, determine whether the bits starting at OFFSET and
extending for LENGTH bits are a synthetic pointer. */

extern int value_bits_synthetic_pointer (const struct value *value,
- int offset, int length);
+ LONGEST offset, int length);

/* Given a value, determine whether the contents bytes starting at
OFFSET and extending for LENGTH bytes are available. This returns
@@ -381,7 +381,7 @@ extern int value_bits_synthetic_pointer (const struct value *value,
byte is unavailable. */

extern int value_bytes_available (const struct value *value,
- int offset, int length);
+ LONGEST offset, int length);

/* Like value_bytes_available, but return false if any byte in the
whole object is unavailable. */
@@ -391,7 +391,7 @@ extern int value_entirely_available (struct value *value);
LENGTH bytes as unavailable. */

extern void mark_value_bytes_unavailable (struct value *value,
- int offset, int length);
+ LONGEST offset, int length);

/* Compare LENGTH bytes of VAL1's contents starting at OFFSET1 with
LENGTH bytes of VAL2's contents starting at OFFSET2.
@@ -423,8 +423,8 @@ extern void mark_value_bytes_unavailable (struct value *value,
value_available_contents_eq(val, 3, val, 4, 4) => 0
*/

-extern int value_available_contents_eq (const struct value *val1, int offset1,
- const struct value *val2, int offset2,
+extern int value_available_contents_eq (const struct value *val1, LONGEST offset1,
+ const struct value *val2, LONGEST offset2,
int length);

/* Read LENGTH bytes of memory starting at MEMADDR into BUFFER, which
@@ -461,7 +461,7 @@ extern CORE_ADDR unpack_pointer (struct type *type, const gdb_byte *valaddr);

extern int unpack_value_bits_as_long (struct type *field_type,
const gdb_byte *valaddr,
- int embedded_offset, int bitpos,
+ LONGEST embedded_offset, int bitpos,
int bitsize,
const struct value *original_value,
LONGEST *result);
@@ -470,12 +470,12 @@ extern LONGEST unpack_field_as_long (struct type *type,
const gdb_byte *valaddr,
int fieldno);
extern int unpack_value_field_as_long (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, int fieldno,
+ LONGEST embedded_offset, int fieldno,
const struct value *val, LONGEST *result);

extern struct value *value_field_bitfield (struct type *type, int fieldno,
const gdb_byte *valaddr,
- int embedded_offset,
+ LONGEST embedded_offset,
const struct value *val);

extern void pack_long (gdb_byte *buf, struct type *type, LONGEST num);
@@ -526,11 +526,11 @@ extern struct value *read_var_value (struct symbol *var,
extern struct value *allocate_value (struct type *type);
extern struct value *allocate_value_lazy (struct type *type);
extern void allocate_value_contents (struct value *value);
-extern void value_contents_copy (struct value *dst, int dst_offset,
- struct value *src, int src_offset,
+extern void value_contents_copy (struct value *dst, LONGEST dst_offset,
+ struct value *src, LONGEST src_offset,
int length);
-extern void value_contents_copy_raw (struct value *dst, int dst_offset,
- struct value *src, int src_offset,
+extern void value_contents_copy_raw (struct value *dst, LONGEST dst_offset,
+ struct value *src, LONGEST src_offset,
int length);

extern struct value *allocate_repeat_value (struct type *type, int count);
@@ -597,7 +597,7 @@ extern struct value *value_static_field (struct type *type, int fieldno);
extern struct fn_field *value_find_oload_method_list (struct value **,
const char *,
int, int *,
- struct type **, int *);
+ struct type **, LONGEST *);

enum oload_search_type { NON_METHOD, METHOD, BOTH };

@@ -610,7 +610,7 @@ extern int find_overload_match (struct value **args, int nargs,

extern struct value *value_field (struct value *arg1, int fieldno);

-extern struct value *value_primitive_field (struct value *arg1, int offset,
+extern struct value *value_primitive_field (struct value *arg1, LONGEST offset,
int fieldno,
struct type *arg_type);

@@ -709,7 +709,7 @@ extern void set_internalvar_string (struct internalvar *var,
extern void clear_internalvar (struct internalvar *var);

extern void set_internalvar_component (struct internalvar *var,
- int offset,
+ LONGEST offset,
int bitpos, int bitsize,
struct value *newvalue);

@@ -747,7 +747,7 @@ extern struct value *value_x_unop (struct value *arg1, enum exp_opcode op,
enum noside noside);

extern struct value *value_fn_field (struct value **arg1p, struct fn_field *f,
- int j, struct type *type, int offset);
+ int j, struct type *type, LONGEST offset);

extern int binop_types_user_defined_p (enum exp_opcode op,
struct type *type1,
@@ -775,7 +775,7 @@ extern void release_value_or_incref (struct value *val);
extern int record_latest_value (struct value *val);

extern void modify_field (struct type *type, gdb_byte *addr,
- LONGEST fieldval, int bitpos, int bitsize);
+ LONGEST fieldval, LONGEST bitpos, int bitsize);

extern void type_print (struct type *type, const char *varstring,
struct ui_file *stream, int show);
@@ -805,7 +805,7 @@ extern void value_print_array_elements (struct value *val,
extern struct value *value_release_to_mark (struct value *mark);

extern int val_print (struct type *type, const gdb_byte *valaddr,
- int embedded_offset, CORE_ADDR address,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
const struct value *val,
const struct value_print_options *options,
--
1.7.7.4