public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PING] RE: [PATCH v2] Support structure offsets that are 512K bytes or larger.
@ 2016-06-20 13:18 taylor, david
  2016-06-21  7:56 ` Yao Qi
  0 siblings, 1 reply; 4+ messages in thread
From: taylor, david @ 2016-06-20 13:18 UTC (permalink / raw)
  To: taylor, david, gdb-patches

Ping.  Previous ping failed to add '[PING]' to subject line.

> -----Original Message-----
> From: David Taylor [mailto:dtaylor@emc.com]
> Sent: Friday, June 03, 2016 5:16 PM
> To: gdb-patches@sourceware.org
> Cc: taylor, david
> Subject: [PATCH v2] Support structure offsets that are 512K bytes or larger.
> 
> This patch was originally posted in Dec 2014.  I got busy with other
> things.  It has been updated.  I think I addressed the issues raised in
> the original review (long lines, plongest vs %lld, ChangeLog entry,
> copyright notice) and hopefully did not introduce any new issues.
> 
> We have a copyright assignment on file.
> 
> GDB historically uses a 32 bit integer for computing structure
> offsets.  And first computes the bit offset and then divides by 8 to
> get the byte offset.  This means that if the offset is 512K bytes or
> larger, it overflows.  This modifies GDB to use LONGEST instead.
> 
> No regressions on x86-64 GNU/Linux.
> 
> 	PR gdb/17520 Structure offset wrong when 1/4 GB or greater.
> 	* c-lang.h: Change all parameters, variables, and struct or union
> 	members used as struct or union fieild offsets from int to
> 	LONGEST.
> 	* c-valprint.c: Likewise.
> 	* cp-abi.c: Likewise.
> 	* cp-abi.h: Likewise.
> 	* cp-valprint.c: Likewise.
> 	* d-valprint.c: Likewise.
> 	* dwarf2loc.c: Likewise.
> 	* eval.c: Likewise.
> 	* extension-priv.h: Likewise.
> 	* extension.c: Likewise.
> 	* extension.h: Likewise.
> 	* findvar.c: Likewise.
> 	* gdbtypes.h: Likewise.
> 	* gnu-v2-abi.c: Likewise.
> 	* gnu-v3-abi.c: Likewise.
> 	* go-valprint.c: Likewise.
> 	* guile/guile-internal.h: Likewise.
> 	* guile/scm-pretty-print.c: Likewise.
> 	* jv-valprint.c Likewise.
> 	* opencl-lang.c: Likewise.
> 	* p-lang.h: Likewise.
> 	* python/py-prettyprint.c: Likewise.
> 	* python/python-internal.h: Likewise.
> 	* spu-tdep.c: Likewise.
> 	* typeprint.c: Likewise.
> 	* valarith.c: Likewise.
> 	* valops.c: Likewise.
> 	* valprint.c: Likewise.
> 	* valprint.h: Likewise.
> 	* value.c: Likewise.
> 	* value.h: Likewise.
> 	* p-valprint.c: Likewise.
> 	* c-typeprint.c (c_type_print_base): When printing offset, use
> plongest, not %d.
> 	* gdbtypes.c (recursive_dump_type): Ditto.
> 
> 	* gdb.base/offsets.exp: New file.
> 	* gdb.base/offsets.c: New file.
> ---
>  gdb/ChangeLog                      |  40 ++++++++++++
>  gdb/c-lang.h                       |   4 +-
>  gdb/c-typeprint.c                  |  11 ++--
>  gdb/c-valprint.c                   |   3 +-
>  gdb/cp-abi.c                       |   4 +-
>  gdb/cp-abi.h                       |   8 +--
>  gdb/cp-valprint.c                  |  15 ++---
>  gdb/d-valprint.c                   |   2 +-
>  gdb/dwarf2loc.c                    |   7 ++-
>  gdb/eval.c                         |   3 +-
>  gdb/extension-priv.h               |   2 +-
>  gdb/extension.c                    |   2 +-
>  gdb/extension.h                    |   2 +-
>  gdb/findvar.c                      |   4 +-
>  gdb/gdbtypes.c                     |   4 +-
>  gdb/gdbtypes.h                     |   2 +-
>  gdb/gnu-v2-abi.c                   |   6 +-
>  gdb/gnu-v3-abi.c                   |   4 +-
>  gdb/go-valprint.c                  |   2 +-
>  gdb/guile/guile-internal.h         |   2 +-
>  gdb/guile/scm-pretty-print.c       |   2 +-
>  gdb/jv-valprint.c                  |   2 +-
>  gdb/opencl-lang.c                  |  10 +--
>  gdb/p-lang.h                       |   2 +-
>  gdb/p-valprint.c                   |  11 ++--
>  gdb/python/py-prettyprint.c        |   2 +-
>  gdb/python/python-internal.h       |   2 +-
>  gdb/spu-tdep.c                     |   2 +-
>  gdb/testsuite/ChangeLog            |   5 ++
>  gdb/testsuite/gdb.base/offsets.c   |  28 +++++++++
>  gdb/testsuite/gdb.base/offsets.exp |  45 ++++++++++++++
>  gdb/typeprint.c                    |   2 +-
>  gdb/valarith.c                     |   4 +-
>  gdb/valops.c                       |  65 ++++++++++----------
>  gdb/valprint.c                     |   8 +--
>  gdb/valprint.h                     |   4 +-
>  gdb/value.c                        | 122 +++++++++++++++++++------------------
>  gdb/value.h                        |  79 ++++++++++++------------
>  38 files changed, 328 insertions(+), 194 deletions(-)
>  create mode 100644 gdb/testsuite/gdb.base/offsets.c
>  create mode 100644 gdb/testsuite/gdb.base/offsets.exp
> 
> diff --git a/gdb/ChangeLog b/gdb/ChangeLog
> index 04c1686..1a3b780 100644
> --- a/gdb/ChangeLog
> +++ b/gdb/ChangeLog
> @@ -1,3 +1,43 @@
> +2016-06-01  David Taylor  <dtaylor@emc.com>
> +
> +	PR gdb/17520 Structure offset wrong when 1/4 GB or greater.
> +	* c-lang.h: Change all parameters, variables, and struct or union
> +	members used as struct or union fie3ld offsets from int to
> +	LONGEST.
> +	* c-valprint.c: Likewise.
> +	* cp-abi.c: Likewise.
> +	* cp-abi.h: Likewise.
> +	* cp-valprint.c: Likewise.
> +	* d-valprint.c: Likewise.
> +	* dwarf2loc.c: Likewise.
> +	* eval.c: Likewise.
> +	* extension-priv.h: Likewise.
> +	* extension.c: Likewise.
> +	* extension.h: Likewise.
> +	* findvar.c: Likewise.
> +	* gdbtypes.h: Likewise.
> +	* gnu-v2-abi.c: Likewise.
> +	* gnu-v3-abi.c: Likewise.
> +	* go-valprint.c: Likewise.
> +	* guile/guile-internal.h: Likewise.
> +	* guile/scm-pretty-print.c: Likewise.
> +	* jv-valprint.c Likewise.
> +	* opencl-lang.c: Likewise.
> +	* p-lang.h: Likewise.
> +	* python/py-prettyprint.c: Likewise.
> +	* python/python-internal.h: Likewise.
> +	* spu-tdep.c: Likewise.
> +	* typeprint.c: Likewise.
> +	* valarith.c: Likewise.
> +	* valops.c: Likewise.
> +	* valprint.c: Likewise.
> +	* valprint.h: Likewise.
> +	* value.c: Likewise.
> +	* value.h: Likewise.
> +	* p-valprint.c: Likewise.
> +	* c-typeprint.c (c_type_print_base): When printing offset, use
> plongest, not %d.
> +	* gdbtypes.c (recursive_dump_type): Ditto.
> +
>  2016-05-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
> 
>  	PR c++/15231
> diff --git a/gdb/c-lang.h b/gdb/c-lang.h
> index bf50afc..12be8bf 100644
> --- a/gdb/c-lang.h
> +++ b/gdb/c-lang.h
> @@ -123,14 +123,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 ed16fc3..2564ebc 100644
> --- a/gdb/c-typeprint.c
> +++ b/gdb/c-typeprint.c
> @@ -1437,13 +1437,14 @@ c_type_print_base (struct type *type, struct
> ui_file *stream,
>  			      TYPE_FIELD_NAME (type, i),
>  			      stream, show, level + 4,
>  			      &local_flags);
> -		fprintf_filtered (stream, " @%d",
> -				  TYPE_FIELD_BITPOS (type, i));
> +		fprintf_filtered (stream, " @%s",
> +				  plongest (TYPE_FIELD_BITPOS (type, i)));
>  		if (TYPE_FIELD_BITSIZE (type, i) > 1)
>  		  {
> -		    fprintf_filtered (stream, "-%d",
> -				      TYPE_FIELD_BITPOS (type, i)
> -				      + TYPE_FIELD_BITSIZE (type, i) - 1);
> +		    fprintf_filtered (stream, "-%s",
> +				      plongest (TYPE_FIELD_BITPOS (type, i)
> +						+ TYPE_FIELD_BITSIZE (type,
> i)
> +						- 1));
>  		  }
>  		fprintf_filtered (stream, ";\n");
>  	      }
> diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
> index 61302a3..2cb418d 100644
> --- a/gdb/c-valprint.c
> +++ b/gdb/c-valprint.c
> @@ -567,7 +567,8 @@ c_value_print (struct value *val, struct ui_file
> *stream,
>  	       const struct value_print_options *options)
>  {
>    struct type *type, *real_type, *val_type;
> -  int full, top, using_enc;
> +  int full, using_enc;
> +  LONGEST top;
>    struct value_print_options opts = *options;
> 
>    opts.deref_ref = 1;
> diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c
> index 96533b1..afc4d4a 100644
> --- a/gdb/cp-abi.c
> +++ b/gdb/cp-abi.c
> @@ -66,7 +66,7 @@ is_operator_name (const char *name)
> 
>  int
>  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)
>  {
>    int res = 0;
> @@ -106,7 +106,7 @@ value_virtual_fn_field (struct value **arg1p,
> 
>  struct type *
>  value_rtti_type (struct value *v, int *full,
> -		 int *top, int *using_enc)
> +		 LONGEST *top, int *using_enc)
>  {
>    struct type *ret = NULL;
> 
> diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h
> index 6d038f3..4349a4a 100644
> --- a/gdb/cp-abi.h
> +++ b/gdb/cp-abi.h
> @@ -135,7 +135,7 @@ extern struct value *value_virtual_fn_field (struct
> value **valuep,
>     FULL, TOP, and USING_ENC can each be zero, in which case we don't
>     provide the corresponding piece of information.  */
>  extern struct type *value_rtti_type (struct value *value,
> -                                     int *full, int *top,
> +                                     int *full, LONGEST *top,
>  				     int *using_enc);
> 
>  /* Compute the offset of the baseclass which is the INDEXth baseclass
> @@ -146,7 +146,7 @@ extern struct type *value_rtti_type (struct value
> *value,
> 
>  extern int baseclass_offset (struct type *type,
>  			     int index, const gdb_byte *valaddr,
> -			     int embedded_offset,
> +			     LONGEST embedded_offset,
>  			     CORE_ADDR address,
>  			     const struct value *val);
> 
> @@ -229,9 +229,9 @@ struct cp_abi_ops
>  				     int j, struct type * type,
>  				     int offset);
>    struct type *(*rtti_type) (struct value *v, int *full,
> -			     int *top, int *using_enc);
> +			     LONGEST *top, int *using_enc);
>    int (*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);
>    void (*print_method_ptr) (const gdb_byte *contents,
>  			    struct type *type,
> diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
> index effce30..7b0c19a 100644
> --- a/gdb/cp-valprint.c
> +++ b/gdb/cp-valprint.c
> @@ -80,7 +80,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 *,
> @@ -154,7 +154,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,
> @@ -417,7 +417,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,
> @@ -434,7 +434,8 @@ cp_print_value_fields_rtti (struct type *type,
>  				     TARGET_CHAR_BIT * TYPE_LENGTH
> (type)))
>      {
>        struct value *value;
> -      int full, top, using_enc;
> +      int full, using_enc;
> +      LONGEST top;
> 
>        /* Ugh, we have to convert back to a value here.  */
>        value = value_from_contents_and_address (type, valaddr + offset,
> @@ -459,7 +460,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,
> @@ -469,7 +470,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)
> @@ -483,7 +484,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 = 0;
>        struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
>        const char *basename = TYPE_NAME (baseclass);
> diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
> index 8527424..620688b 100644
> --- a/gdb/d-valprint.c
> +++ b/gdb/d-valprint.c
> @@ -29,7 +29,7 @@
> 
>  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)
> diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
> index bfe1173..f53b436 100644
> --- a/gdb/dwarf2loc.c
> +++ b/gdb/dwarf2loc.c
> @@ -1765,7 +1765,7 @@ read_pieced_value (struct value *v)
>  	    struct gdbarch *arch = get_frame_arch (frame);
>  	    int gdb_regnum = dwarf_reg_to_regnum_or_error (arch, p-
> >v.regno);
>  	    int optim, unavail;
> -	    int reg_offset = source_offset;
> +	    LONGEST reg_offset = source_offset;
> 
>  	    if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
>  		&& this_size < register_size (arch, gdb_regnum))
> @@ -2016,7 +2016,7 @@ write_pieced_value (struct value *to, struct value
> *from)
>     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)
>  {
>    struct piece_closure *c
> @@ -2072,7 +2072,8 @@ 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;
> +  LONGEST bit_offset;
>    struct dwarf_expr_piece *piece = NULL;
>    LONGEST byte_offset;
>    enum bfd_endian byte_order;
> diff --git a/gdb/eval.c b/gdb/eval.c
> index de1c663..00a107c 100644
> --- a/gdb/eval.c
> +++ b/gdb/eval.c
> @@ -1900,7 +1900,8 @@ evaluate_subexp_standard (struct type
> *expect_type,
>        {
>          struct type *type = value_type (arg1);
>          struct type *real_type;
> -        int full, top, using_enc;
> +        int full, using_enc;
> +        LONGEST top;
>  	struct value_print_options opts;
> 
>  	get_user_print_options (&opts);
> diff --git a/gdb/extension-priv.h b/gdb/extension-priv.h
> index d7bc572..26bd21f 100644
> --- a/gdb/extension-priv.h
> +++ b/gdb/extension-priv.h
> @@ -181,7 +181,7 @@ struct extension_language_ops
>    enum ext_lang_rc (*apply_val_pretty_printer)
>      (const struct extension_language_defn *,
>       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,
>       const struct language_defn *language);
> diff --git a/gdb/extension.c b/gdb/extension.c
> index ae24518..c9f5664 100644
> --- a/gdb/extension.c
> +++ b/gdb/extension.c
> @@ -497,7 +497,7 @@ free_ext_lang_type_printers (struct
> ext_lang_type_printers *printers)
> 
>  int
>  apply_ext_lang_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/extension.h b/gdb/extension.h
> index e9980a7..fa11f25 100644
> --- a/gdb/extension.h
> +++ b/gdb/extension.h
> @@ -226,7 +226,7 @@ extern void free_ext_lang_type_printers (struct
> ext_lang_type_printers *);
> 
>  extern int apply_ext_lang_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,
>     const struct language_defn *language);
> diff --git a/gdb/findvar.c b/gdb/findvar.c
> index a39d897..6733ff1 100644
> --- a/gdb/findvar.c
> +++ b/gdb/findvar.c
> @@ -834,8 +834,8 @@ void
>  read_frame_register_value (struct value *value, struct frame_info *frame)
>  {
>    struct gdbarch *gdbarch = get_frame_arch (frame);
> -  int offset = 0;
> -  int reg_offset = value_offset (value);
> +  LONGEST offset = 0;
> +  LONGEST reg_offset = value_offset (value);
>    int regnum = VALUE_REGNUM (value);
>    int len = type_length_units (check_typedef (value_type (value)));
> 
> diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
> index 9e1759b..d721d65 100644
> --- a/gdb/gdbtypes.c
> +++ b/gdb/gdbtypes.c
> @@ -4297,8 +4297,8 @@ recursive_dump_type (struct type *type, int
> spaces)
>  			  idx, plongest (TYPE_FIELD_ENUMVAL (type, idx)));
>        else
>  	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 c651c88..bbf2672 100644
> --- a/gdb/gdbtypes.h
> +++ b/gdb/gdbtypes.h
> @@ -511,7 +511,7 @@ union field_location
>       gdbarch_bits_big_endian=0 targets, it is the bit offset to
>       the LSB.  */
> 
> -  int bitpos;
> +  LONGEST bitpos;
> 
>    /* * Enum value.  */
>    LONGEST enumval;
> diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c
> index 7618d48..d2a0e35 100644
> --- a/gdb/gnu-v2-abi.c
> +++ b/gdb/gnu-v2-abi.c
> @@ -183,7 +183,7 @@ gnuv2_virtual_fn_field (struct value **arg1p, struct
> fn_field * f, int j,
> 
> 
>  static struct type *
> -gnuv2_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
> +gnuv2_value_rtti_type (struct value *v, int *full, LONGEST *top, int
> *using_enc)
>  {
>    struct type *known_type;
>    struct type *rtti_type;
> @@ -340,7 +340,7 @@ vb_match (struct type *type, int index, struct type
> *basetype)
> 
>  static int
>  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);
> @@ -358,7 +358,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;
> 
> diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c
> index ae84b36..5bf36a2 100644
> --- a/gdb/gnu-v3-abi.c
> +++ b/gdb/gnu-v3-abi.c
> @@ -286,7 +286,7 @@ gnuv3_get_vtable (struct gdbarch *gdbarch,
> 
>  static struct type *
>  gnuv3_rtti_type (struct value *value,
> -                 int *full_p, int *top_p, int *using_enc_p)
> +                 int *full_p, LONGEST *top_p, int *using_enc_p)
>  {
>    struct gdbarch *gdbarch;
>    struct type *values_type = check_typedef (value_type (value));
> @@ -443,7 +443,7 @@ gnuv3_virtual_fn_field (struct value **value_p,
> 
>  static int
>  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;
> diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c
> index 7bb7b55..34ed8e0 100644
> --- a/gdb/go-valprint.c
> +++ b/gdb/go-valprint.c
> @@ -37,7 +37,7 @@
> 
>  static void
>  print_go_string (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/guile/guile-internal.h b/gdb/guile/guile-internal.h
> index b7f104d..0aa4a0a 100644
> --- a/gdb/guile/guile-internal.h
> +++ b/gdb/guile/guile-internal.h
> @@ -606,7 +606,7 @@ extern void gdbscm_preserve_values
>  extern enum ext_lang_rc gdbscm_apply_val_pretty_printer
>    (const struct extension_language_defn *,
>     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/guile/scm-pretty-print.c b/gdb/guile/scm-pretty-print.c
> index b1cbbdd..afdd0c7 100644
> --- a/gdb/guile/scm-pretty-print.c
> +++ b/gdb/guile/scm-pretty-print.c
> @@ -958,7 +958,7 @@ ppscm_print_children (SCM printer, enum
> display_hint hint,
>  enum ext_lang_rc
>  gdbscm_apply_val_pretty_printer (const struct extension_language_defn
> *extlang,
>  				 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/jv-valprint.c b/gdb/jv-valprint.c
> index 6f7ef4b..2988737 100644
> --- a/gdb/jv-valprint.c
> +++ b/gdb/jv-valprint.c
> @@ -266,7 +266,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,
> diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
> index 767d3bc..d304d44 100644
> --- a/gdb/opencl-lang.c
> +++ b/gdb/opencl-lang.c
> @@ -172,8 +172,8 @@ 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);
> -  int elsize = TYPE_LENGTH (eltype);
> +  LONGEST offset = value_offset (v);
> +  LONGEST elsize = TYPE_LENGTH (eltype);
>    int n, i, j = 0;
>    LONGEST lowb = 0;
>    LONGEST highb = 0;
> @@ -201,8 +201,8 @@ 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);
> -  int elsize = TYPE_LENGTH (eltype);
> +  LONGEST offset = value_offset (v);
> +  LONGEST elsize = TYPE_LENGTH (eltype);
>    int n, i, j = 0;
>    LONGEST lowb = 0;
>    LONGEST highb = 0;
> @@ -243,7 +243,7 @@ lval_func_write (struct value *v, struct value
> *fromval)
> 
>  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.  */
> diff --git a/gdb/p-lang.h b/gdb/p-lang.h
> index d862b49..287c0f4 100644
> --- a/gdb/p-lang.h
> +++ b/gdb/p-lang.h
> @@ -72,7 +72,7 @@ extern void
>  				    const struct type_print_options *);
> 
>  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-valprint.c b/gdb/p-valprint.c
> index 3e840d8..dcd9f07 100644
> --- a/gdb/p-valprint.c
> +++ b/gdb/p-valprint.c
> @@ -469,7 +469,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 *,
> @@ -528,7 +528,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,
> @@ -700,7 +700,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,
> @@ -723,11 +723,12 @@ 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; /* XXX */
>        int skip = 0;
> 
>        if (BASETYPE_VIA_VIRTUAL (type, i))
> diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c
> index e97769b..8834344 100644
> --- a/gdb/python/py-prettyprint.c
> +++ b/gdb/python/py-prettyprint.c
> @@ -703,7 +703,7 @@ print_children (PyObject *printer, const char *hint,
>  enum ext_lang_rc
>  gdbpy_apply_val_pretty_printer (const struct extension_language_defn
> *extlang,
>  				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-internal.h b/gdb/python/python-internal.h
> index 6a2619c..8606850 100644
> --- a/gdb/python/python-internal.h
> +++ b/gdb/python/python-internal.h
> @@ -316,7 +316,7 @@ extern int gdbpy_auto_load_enabled (const struct
> extension_language_defn *);
>  extern enum ext_lang_rc gdbpy_apply_val_pretty_printer
>    (const struct extension_language_defn *,
>     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/spu-tdep.c b/gdb/spu-tdep.c
> index ea3229c..f62e8e7 100644
> --- a/gdb/spu-tdep.c
> +++ b/gdb/spu-tdep.c
> @@ -363,7 +363,7 @@ spu_value_from_register (struct gdbarch *gdbarch,
> struct type *type,
>  {
>    struct value *value = default_value_from_register (gdbarch, type,
>  						     regnum, frame_id);
> -  int len = TYPE_LENGTH (type);
> +  LONGEST len = TYPE_LENGTH (type);
> 
>    if (regnum < SPU_NUM_GPRS && len < 16)
>      {
> diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
> index b91ddce..d8497e8 100644
> --- a/gdb/testsuite/ChangeLog
> +++ b/gdb/testsuite/ChangeLog
> @@ -1,3 +1,8 @@
> +2016-06-02  David Taylor  <dtaylor@emc.com>
> +
> +	* gdb.base/offsets.exp: New file.
> +	* gdb.base/offsets.c: New file.
> +
>  2016-05-30  Antoine Tremblay  <antoine.tremblay@ericsson.com>
> 
>  	* gdb.trace/trace-condition.exp: Add 64bit tests.
> diff --git a/gdb/testsuite/gdb.base/offsets.c
> b/gdb/testsuite/gdb.base/offsets.c
> new file mode 100644
> index 0000000..4923d33
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/offsets.c
> @@ -0,0 +1,28 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 2015 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/>.  */
> +
> +struct big_struct
> +{
> +  char first[0x10000000 + 16];
> +  long second;
> +} big_struct;
> +
> +int
> +main (int argc, char *argv[])
> +{
> +  return (0);
> +}
> diff --git a/gdb/testsuite/gdb.base/offsets.exp
> b/gdb/testsuite/gdb.base/offsets.exp
> new file mode 100644
> index 0000000..42c0c5d
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/offsets.exp
> @@ -0,0 +1,45 @@
> +# Test big offsets
> +
> +# Copyright (c) 2015 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/>.
> +
> +standard_testfile offsets.c
> +
> +if { [prepare_for_testing "failed to prepare for testing large offsets" \
> +	  ${testfile} ${srcfile}] } {
> +    untested offsets.exp
> +    return -1
> +}
> +
> +set test "print &big_struct test"
> +gdb_test_multiple "print &big_struct" "$test" {
> +    -re "\\$\[0-9\]* = .* (0x\[0-9a-fA-F\]*) .*\[\r\n\]*$gdb_prompt $" {
> +	set addr1 $expect_out(1,string)
> +	pass "$test ($addr1)"
> +    }
> +}
> +
> +set test "print &big_struct.second test"
> +gdb_test_multiple "print &big_struct.second" "$test" {
> +    -re "\\$\[0-9\]* = .* (0x\[0-9a-fA-F\]*) .*\[\r\n\]*$gdb_prompt $" {
> +	set addr2 $expect_out(1,string)
> +
> +	if {[expr $addr2 - $addr1] == [expr 0x10000000 + 16]} {
> +	    pass "big offsets"
> +	} else {
> +	    fail "big offsets"
> +	}
> +    }
> +}
> diff --git a/gdb/typeprint.c b/gdb/typeprint.c
> index 48a809b..e77513e 100644
> --- a/gdb/typeprint.c
> +++ b/gdb/typeprint.c
> @@ -406,7 +406,7 @@ whatis_exp (char *exp, int show)
>    struct type *real_type = NULL;
>    struct type *type;
>    int full = 0;
> -  int top = -1;
> +  LONGEST top = -1;
>    int using_enc = 0;
>    struct value_print_options opts;
>    struct type_print_options flags = default_ptype_flags;
> diff --git a/gdb/valarith.c b/gdb/valarith.c
> index 254d998..de6fcfd 100644
> --- a/gdb/valarith.c
> +++ b/gdb/valarith.c
> @@ -192,8 +192,8 @@ value_subscripted_rvalue (struct value *array,
> LONGEST index, int lowerbound)
>  {
>    struct type *array_type = check_typedef (value_type (array));
>    struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type));
> -  unsigned int elt_size = type_length_units (elt_type);
> -  unsigned int elt_offs = elt_size * longest_to_int (index - lowerbound);
> +  ULONGEST elt_size = type_length_units (elt_type);
> +  ULONGEST elt_offs = elt_size * (index - lowerbound);
>    struct value *v;
> 
>    if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED
> (array_type)
> diff --git a/gdb/valops.c b/gdb/valops.c
> index 71fb1b3..dbc36cb 100644
> --- a/gdb/valops.c
> +++ b/gdb/valops.c
> @@ -51,7 +51,7 @@ static struct value *search_struct_field (const char *,
> struct value *,
> 
>  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 *,
> @@ -96,9 +96,9 @@ static CORE_ADDR allocate_space_in_inferior (int);
>  static struct value *cast_into_complex (struct type *, struct value *);
> 
>  static void find_method_list (struct value **, const char *,
> -			      int, struct type *, struct fn_field **, int *,
> +			      LONGEST, struct type *, struct fn_field **, int *,
>  			      VEC (xmethod_worker_ptr) **,
> -			      struct type **, int *);
> +			      struct type **, LONGEST *);
> 
>  void _initialize_valops (void);
> 
> @@ -256,7 +256,8 @@ value_cast_structs (struct type *type, struct value
> *v2)
>    if (TYPE_NAME (t2) != NULL)
>      {
>        /* Try downcasting using the run-time type of the value.  */
> -      int full, top, using_enc;
> +      int full, using_enc;
> +      LONGEST top;
>        struct type *real_type;
> 
>        real_type = value_rtti_type (v2, &full, &top, &using_enc);
> @@ -635,7 +636,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,
> @@ -647,8 +648,9 @@ 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,
> -				     address, val);
> +      LONGEST offset = baseclass_offset (search_type, i, valaddr,
> +					 embedded_offset,
> +					 address, val);
> 
>        if (class_types_same_p (desired_type, TYPE_BASECLASS (search_type,
> i)))
>  	{
> @@ -682,7 +684,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,
> @@ -692,7 +694,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;
> @@ -723,7 +725,8 @@ dynamic_cast_check_2 (struct type *desired_type,
>  struct value *
>  value_dynamic_cast (struct type *type, struct value *arg)
>  {
> -  int full, top, using_enc;
> +  int full, using_enc;
> +  LONGEST top;
>    struct type *resolved_type = check_typedef (type);
>    struct type *arg_type = check_typedef (value_type (arg));
>    struct type *class_type, *rtti_type;
> @@ -954,7 +957,7 @@ value_at_lazy (struct type *type, CORE_ADDR addr)
>  }
> 
>  void
> -read_value_memory (struct value *val, int embedded_offset,
> +read_value_memory (struct value *val, LONGEST embedded_offset,
>  		   int stack, CORE_ADDR memaddr,
>  		   gdb_byte *buffer, size_t length)
>  {
> @@ -1034,7 +1037,7 @@ value_assign (struct value *toval, struct value
> *fromval)
> 
>      case lval_internalvar_component:
>        {
> -	int offset = value_offset (toval);
> +	LONGEST offset = value_offset (toval);
> 
>  	/* Are we dealing with a bitfield?
> 
> @@ -1121,7 +1124,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;
> @@ -1594,7 +1597,7 @@ value_array (int lowbound, int highbound, struct
> value **elemvec)
>  {
>    int nelem;
>    int idx;
> -  unsigned int typelength;
> +  ULONGEST typelength;
>    struct value *val;
>    struct type *arraytype;
> 
> @@ -1770,7 +1773,7 @@ typecmp (int staticp, int varargs, int nargs,
> 
>  static void
>  update_search_result (struct value **result_ptr, struct value *v,
> -		      int *last_boffset, int boffset,
> +		      LONGEST *last_boffset, LONGEST boffset,
>  		      const char *name, struct type *type)
>  {
>    if (v != NULL)
> @@ -1794,10 +1797,10 @@ update_search_result (struct value **result_ptr,
> struct value *v,
>     lookup is ambiguous.  */
> 
>  static void
> -do_search_struct_field (const char *name, struct value *arg1, int offset,
> +do_search_struct_field (const char *name, struct value *arg1, LONGEST
> offset,
>  			struct type *type, int looking_for_baseclass,
>  			struct value **result_ptr,
> -			int *last_boffset,
> +			LONGEST *last_boffset,
>  			struct type *outermost_type)
>  {
>    int i;
> @@ -1844,7 +1847,7 @@ do_search_struct_field (const char *name, struct
> value *arg1, int offset,
>  		   <variant field>.  */
> 
>  		struct value *v = NULL;
> -		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
> @@ -1883,7 +1886,7 @@ do_search_struct_field (const char *name, struct
> value *arg1, int offset,
>  			     && (strcmp_iw (name,
>  					    TYPE_BASECLASS_NAME (type,
>  								 i)) == 0));
> -      int boffset = value_embedded_offset (arg1) + offset;
> +      LONGEST boffset = value_embedded_offset (arg1) + offset;
> 
>        if (BASETYPE_VIA_VIRTUAL (type, i))
>  	{
> @@ -1959,7 +1962,7 @@ search_struct_field (const char *name, struct value
> *arg1,
>  		     struct type *type, int looking_for_baseclass)
>  {
>    struct value *result = NULL;
> -  int boffset = 0;
> +  LONGEST boffset = 0;
> 
>    do_search_struct_field (name, arg1, 0, type, looking_for_baseclass,
>  			  &result, &boffset, type);
> @@ -1976,7 +1979,7 @@ search_struct_field (const char *name, struct value
> *arg1,
> 
>  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;
> @@ -2040,8 +2043,8 @@ search_struct_method (const char *name, struct
> value **arg1p,
> 
>    for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
>      {
> -      int base_offset;
> -      int this_offset;
> +      LONGEST base_offset;
> +      LONGEST this_offset;
> 
>        if (BASETYPE_VIA_VIRTUAL (type, i))
>  	{
> @@ -2274,10 +2277,10 @@ value_struct_elt_bitpos (struct value **argp, int
> bitpos, struct type *ftype,
> 
>  static void
>  find_method_list (struct value **argp, const char *method,
> -		  int offset, struct type *type,
> +		  LONGEST offset, struct type *type,
>  		  struct fn_field **fn_list, int *num_fns,
>  		  VEC (xmethod_worker_ptr) **xm_worker_vec,
> -		  struct type **basetype, int *boffset)
> +		  struct type **basetype, LONGEST *boffset)
>  {
>    int i;
>    struct fn_field *f = NULL;
> @@ -2334,7 +2337,7 @@ find_method_list (struct value **argp, const char
> *method,
>       extension methods.  */
>    for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
>      {
> -      int base_offset;
> +      LONGEST base_offset;
> 
>        if (BASETYPE_VIA_VIRTUAL (type, i))
>  	{
> @@ -2374,10 +2377,10 @@ find_method_list (struct value **argp, const char
> *method,
> 
>  static void
>  value_find_oload_method_list (struct value **argp, const char *method,
> -                              int offset, struct fn_field **fn_list,
> +                              LONGEST offset, struct fn_field **fn_list,
>                                int *num_fns,
>                                VEC (xmethod_worker_ptr) **xm_worker_vec,
> -			      struct type **basetype, int *boffset)
> +			      struct type **basetype, LONGEST *boffset)
>  {
>    struct type *t;
> 
> @@ -2487,7 +2490,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);
> 
> @@ -3582,7 +3585,7 @@ value_maybe_namespace_elt (const struct type
> *curtype,
> 
>  struct type *
>  value_rtti_indirect_type (struct value *v, int *full,
> -			  int *top, int *using_enc)
> +			  LONGEST *top, int *using_enc)
>  {
>    struct value *target = NULL;
>    struct type *type, *real_type, *target_type;
> @@ -3655,7 +3658,7 @@ value_full_object (struct value *argp,
>  {
>    struct type *real_type;
>    int full = 0;
> -  int top = -1;
> +  LONGEST top = -1;
>    int using_enc = 0;
>    struct value *new_val;
> 
> diff --git a/gdb/valprint.c b/gdb/valprint.c
> index cea69f3..dc7e362 100644
> --- a/gdb/valprint.c
> +++ b/gdb/valprint.c
> @@ -303,7 +303,7 @@ val_print_scalar_type_p (struct type *type)
>  int
>  valprint_check_validity (struct ui_file *stream,
>  			 struct type *type,
> -			 int embedded_offset,
> +			 LONGEST embedded_offset,
>  			 const struct value *val)
>  {
>    type = check_typedef (type);
> @@ -975,7 +975,7 @@ generic_val_print (struct type *type, const gdb_byte
> *valaddr,
>     RECURSE.  */
> 
>  void
> -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,
> @@ -1236,7 +1236,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,
> @@ -1898,7 +1898,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 451b5fe..23a4c12 100644
> --- a/gdb/valprint.h
> +++ b/gdb/valprint.h
> @@ -115,7 +115,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 *,
> @@ -125,7 +125,7 @@ extern void val_print_type_code_int (struct type *,
> const gdb_byte *,
>  				     struct ui_file *);
> 
>  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 35fb503..cd59f43 100644
> --- a/gdb/value.c
> +++ b/gdb/value.c
> @@ -65,10 +65,10 @@ struct internal_function
>  struct range
>  {
>    /* Lowest offset in the range.  */
> -  int offset;
> +  LONGEST offset;
> 
>    /* Length of the range.  */
> -  int length;
> +  LONGEST length;
>  };
> 
>  typedef struct range range_s;
> @@ -79,8 +79,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, LONGEST len1,
> +		LONGEST offset2, LONGEST len2)
>  {
>    ULONGEST h, l;
> 
> @@ -104,10 +104,10 @@ 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, LONGEST length)
>  {
>    range_s what;
> -  int i;
> +  LONGEST i;
> 
>    what.offset = offset;
>    what.length = length;
> @@ -239,15 +239,15 @@ struct value
>       the address.  If 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;
> +  LONGEST bitsize;
> 
>    /* Only used for bitfields; position of start of field.  For
>       gdbarch_bits_big_endian=0 targets, it is the position of the LSB.  For
>       gdbarch_bits_big_endian=1 targets, it is the position of the MSB.  */
> -  int bitpos;
> +  LONGEST bitpos;
> 
>    /* The number of references to this value.  When a value is created,
>       the value chain holds a reference, so REFERENCE_COUNT is 1.  If
> @@ -309,8 +309,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
> @@ -349,7 +349,7 @@ get_value_arch (const struct value *value)
>  }
> 
>  int
> -value_bits_available (const struct value *value, int offset, int length)
> +value_bits_available (const struct value *value, LONGEST offset, LONGEST
> length)
>  {
>    gdb_assert (!value->lazy);
> 
> @@ -357,7 +357,8 @@ value_bits_available (const struct value *value, int
> offset, int length)
>  }
> 
>  int
> -value_bytes_available (const struct value *value, int offset, int length)
> +value_bytes_available (const struct value *value,
> +		       LONGEST offset, LONGEST length)
>  {
>    return value_bits_available (value,
>  			       offset * TARGET_CHAR_BIT,
> @@ -427,7 +428,8 @@ value_entirely_optimized_out (struct value *value)
>     OFFSET bits, and extending for the next LENGTH bits.  */
> 
>  static void
> -insert_into_bit_range_vector (VEC(range_s) **vectorp, int offset, int
> length)
> +insert_into_bit_range_vector (VEC(range_s) **vectorp,
> +			      LONGEST offset, LONGEST length)
>  {
>    range_s newr;
>    int i;
> @@ -592,13 +594,15 @@ insert_into_bit_range_vector (VEC(range_s)
> **vectorp, int offset, int length)
>  }
> 
>  void
> -mark_value_bits_unavailable (struct value *value, int offset, int length)
> +mark_value_bits_unavailable (struct value *value,
> +			     LONGEST offset, LONGEST length)
>  {
>    insert_into_bit_range_vector (&value->unavailable, offset, length);
>  }
> 
>  void
> -mark_value_bytes_unavailable (struct value *value, int offset, int length)
> +mark_value_bytes_unavailable (struct value *value,
> +			      LONGEST offset, LONGEST length)
>  {
>    mark_value_bits_unavailable (value,
>  			       offset * TARGET_CHAR_BIT,
> @@ -612,7 +616,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, LONGEST length)
>  {
>    range_s *r;
>    int i;
> @@ -748,8 +752,8 @@ struct ranges_and_idx
>  static int
>  find_first_range_overlap_and_match (struct ranges_and_idx *rp1,
>  				    struct ranges_and_idx *rp2,
> -				    int offset1, int offset2,
> -				    int length, ULONGEST *l, ULONGEST *h)
> +				    LONGEST offset1, LONGEST offset2,
> +				    LONGEST length, ULONGEST *l, ULONGEST
> *h)
>  {
>    rp1->idx = find_first_range_overlap (rp1->ranges, rp1->idx,
>  				       offset1, length);
> @@ -870,9 +874,9 @@ value_contents_bits_eq (const struct value *val1, int
> offset1,
>  }
> 
>  int
> -value_contents_eq (const struct value *val1, int offset1,
> -		   const struct value *val2, int offset2,
> -		   int length)
> +value_contents_eq (const struct value *val1, LONGEST offset1,
> +		   const struct value *val2, LONGEST offset2,
> +		   LONGEST length)
>  {
>    return value_contents_bits_eq (val1, offset1 * TARGET_CHAR_BIT,
>  				 val2, offset2 * TARGET_CHAR_BIT,
> @@ -1109,35 +1113,35 @@ 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;
>  }
> 
> -int
> +LONGEST
>  value_bitpos (const struct value *value)
>  {
>    return value->bitpos;
>  }
>  void
> -set_value_bitpos (struct value *value, int bit)
> +set_value_bitpos (struct value *value, LONGEST bit)
>  {
>    value->bitpos = bit;
>  }
> 
> -int
> +LONGEST
>  value_bitsize (const struct value *value)
>  {
>    return value->bitsize;
>  }
>  void
> -set_value_bitsize (struct value *value, int bit)
> +set_value_bitsize (struct value *value, LONGEST bit)
>  {
>    value->bitsize = bit;
>  }
> @@ -1330,10 +1334,10 @@ value_ranges_copy_adjusted (struct value *dst,
> int dst_bit_offset,
>     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, LONGEST
> length)
>  {
> -  int src_bit_offset, dst_bit_offset, bit_length;
> +  LONGEST src_bit_offset, dst_bit_offset, bit_length;
>    struct gdbarch *arch = get_value_arch (src);
>    int unit_size = gdbarch_addressable_memory_unit_size (arch);
> 
> @@ -1377,8 +1381,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, LONGEST length)
>  {
>    if (src->lazy)
>      value_fetch_lazy (src);
> @@ -1462,14 +1466,15 @@ mark_value_bytes_optimized_out (struct value
> *value, int offset, int length)
>  /* See value.h.  */
> 
>  void
> -mark_value_bits_optimized_out (struct value *value, int offset, int length)
> +mark_value_bits_optimized_out (struct value *value,
> +			       LONGEST offset, LONGEST length)
>  {
>    insert_into_bit_range_vector (&value->optimized_out, offset, length);
>  }
> 
>  int
>  value_bits_synthetic_pointer (const struct value *value,
> -			      int offset, int length)
> +			      LONGEST offset, LONGEST length)
>  {
>    if (value->lval != lval_computed
>        || !value->location.computed.funcs->check_synthetic_pointer)
> @@ -1479,26 +1484,26 @@ value_bits_synthetic_pointer (const struct value
> *value,
>  								  length);
>  }
> 
> -int
> +LONGEST
>  value_embedded_offset (const 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 (const 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;
>  }
> @@ -2371,8 +2376,9 @@ get_internalvar_function (struct internalvar *var,
>  }
> 
>  void
> -set_internalvar_component (struct internalvar *var, int offset, int bitpos,
> -			   int bitsize, struct value *newval)
> +set_internalvar_component (struct internalvar *var,
> +			   LONGEST offset, LONGEST bitpos,
> +			   LONGEST bitsize, struct value *newval)
>  {
>    gdb_byte *addr;
>    struct gdbarch *arch;
> @@ -3107,7 +3113,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;
> @@ -3137,8 +3143,8 @@ 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);
> -      int container_bitsize = TYPE_LENGTH (type) * 8;
> +      LONGEST bitpos = TYPE_FIELD_BITPOS (arg_type, fieldno);
> +      LONGEST container_bitsize = TYPE_LENGTH (type) * 8;
> 
>        v = allocate_value_lazy (type);
>        v->bitsize = TYPE_FIELD_BITSIZE (arg_type, fieldno);
> @@ -3159,7 +3165,7 @@ value_primitive_field (struct value *arg1, int offset,
>        /* This field is actually a base subobject, so preserve the
>  	 entire object's contents for later references to virtual
>  	 bases, etc.  */
> -      int boffset;
> +      LONGEST boffset;
> 
>        /* Lazy register values with offsets are not supported.  */
>        if (VALUE_LVAL (arg1) == lval_register && value_lazy (arg1))
> @@ -3248,7 +3254,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);
> @@ -3318,14 +3324,14 @@ value_fn_field (struct value **arg1p, struct
> fn_field *f,
> 
>  static LONGEST
>  unpack_bits_as_long (struct type *field_type, const gdb_byte *valaddr,
> -		     int bitpos, int bitsize)
> +		     LONGEST bitpos, LONGEST bitsize)
>  {
>    enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch
> (field_type));
>    ULONGEST val;
>    ULONGEST valmask;
>    int lsbcount;
> -  int bytes_read;
> -  int read_offset;
> +  LONGEST bytes_read;
> +  LONGEST read_offset;
> 
>    /* Read the minimum number of bytes required; there may not be
>       enough bytes to read an entire ULONGEST.  */
> @@ -3374,7 +3380,7 @@ unpack_bits_as_long (struct type *field_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)
>  {
>    int bitpos = TYPE_FIELD_BITPOS (type, fieldno);
> @@ -3417,8 +3423,8 @@ unpack_field_as_long (struct type *type, const
> gdb_byte *valaddr, int fieldno)
> 
>  void
>  unpack_value_bitfield (struct value *dest_val,
> -		       int bitpos, int bitsize,
> -		       const gdb_byte *valaddr, int embedded_offset,
> +		       LONGEST bitpos, LONGEST bitsize,
> +		       const gdb_byte *valaddr, LONGEST embedded_offset,
>  		       const struct value *val)
>  {
>    enum bfd_endian byte_order;
> @@ -3456,7 +3462,7 @@ unpack_value_bitfield (struct value *dest_val,
>  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)
>  {
>    int bitpos = TYPE_FIELD_BITPOS (type, fieldno);
>    int bitsize = TYPE_FIELD_BITSIZE (type, fieldno);
> @@ -3477,12 +3483,12 @@ value_field_bitfield (struct type *type, int
> fieldno,
> 
>  void
>  modify_field (struct type *type, gdb_byte *addr,
> -	      LONGEST fieldval, int bitpos, int bitsize)
> +	      LONGEST fieldval, LONGEST bitpos, LONGEST 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;
> +  LONGEST bytesize;
> 
>    /* Normalize BITPOS.  */
>    addr += bitpos / 8;
> @@ -3498,7 +3504,7 @@ modify_field (struct type *type, gdb_byte *addr,
>      {
>        /* FIXME: would like to include fieldval in the message, but
>           we don't have a sprintf_longest.  */
> -      warning (_("Value does not fit in %d bits."), bitsize);
> +      warning (_("Value does not fit in %s bits."), plongest (bitsize));
> 
>        /* Truncate it, otherwise adjoining fields may be corrupted.  */
>        fieldval &= mask;
> @@ -3526,7 +3532,7 @@ void
>  pack_long (gdb_byte *buf, struct type *type, LONGEST num)
>  {
>    enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch
> (type));
> -  int len;
> +  LONGEST len;
> 
>    type = check_typedef (type);
>    len = TYPE_LENGTH (type);
> @@ -3560,7 +3566,7 @@ pack_long (gdb_byte *buf, struct type *type,
> LONGEST num)
>  static void
>  pack_unsigned_long (gdb_byte *buf, struct type *type, ULONGEST num)
>  {
> -  int len;
> +  LONGEST len;
>    enum bfd_endian byte_order;
> 
>    type = check_typedef (type);
> diff --git a/gdb/value.h b/gdb/value.h
> index f8ec854..0b417b4 100644
> --- a/gdb/value.h
> +++ b/gdb/value.h
> @@ -112,15 +112,15 @@ extern void deprecated_set_value_type (struct
> value *value,
> 
>  /* Only used for bitfields; number of bits contained in them.  */
> 
> -extern int value_bitsize (const struct value *);
> -extern void set_value_bitsize (struct value *, int bit);
> +extern LONGEST value_bitsize (const struct value *);
> +extern void set_value_bitsize (struct value *, LONGEST bit);
> 
>  /* Only used for bitfields; position of start of field.  For
>     gdbarch_bits_big_endian=0 targets, it is the position of the LSB.  For
>     gdbarch_bits_big_endian=1 targets, it is the position of the MSB.  */
> 
> -extern int value_bitpos (const struct value *);
> -extern void set_value_bitpos (struct value *, int bit);
> +extern LONGEST value_bitpos (const struct value *);
> +extern void set_value_bitpos (struct value *, LONGEST bit);
> 
>  /* Only used for bitfields; the containing value.  This allows a
>     single read from the target when displaying multiple
> @@ -135,8 +135,8 @@ extern void set_value_parent (struct value *value,
> struct value *parent);
>     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
> @@ -205,10 +205,10 @@ extern struct type *value_actual_type (struct value
> *value,
>  				       int resolve_simple_types,
>  				       int *real_type_found);
> 
> -extern int value_pointed_to_offset (const struct value *value);
> -extern void set_value_pointed_to_offset (struct value *value, int val);
> -extern int value_embedded_offset (const struct value *value);
> -extern void set_value_embedded_offset (struct value *value, int val);
> +extern LONGEST value_pointed_to_offset (const struct value *value);
> +extern void set_value_pointed_to_offset (struct value *value, LONGEST
> val);
> +extern LONGEST value_embedded_offset (const 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).
> @@ -246,7 +246,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
> @@ -283,7 +283,7 @@ extern struct value *allocate_computed_value (struct
> type *type,
>     Otherwise, return 1.  */
> 
>  extern int valprint_check_validity (struct ui_file *stream, struct type *type,
> -				    int embedded_offset,
> +				    LONGEST embedded_offset,
>  				    const struct value *val);
> 
>  extern struct value *allocate_optimized_out_value (struct type *type);
> @@ -393,7 +393,7 @@ extern void mark_value_bytes_optimized_out (struct
> value *value,
>     LENGTH bits as optimized out.  */
> 
>  extern void mark_value_bits_optimized_out (struct value *value,
> -					   int offset, int length);
> +					   LONGEST offset, LONGEST length);
> 
>  /* Set or return field indicating whether a variable is initialized or
>     not, based on debugging information supplied by the compiler.
> @@ -476,7 +476,7 @@ extern struct value *coerce_array (struct value
> *value);
>     extending for LENGTH bits are a synthetic pointer.  */
> 
>  extern int value_bits_synthetic_pointer (const struct value *value,
> -					 int offset, int length);
> +					 LONGEST offset, LONGEST length);
> 
>  /* Given a value, determine whether the contents bytes starting at
>     OFFSET and extending for LENGTH bytes are available.  This returns
> @@ -484,7 +484,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, LONGEST length);
> 
>  /* Given a value, determine whether the contents bits starting at
>     OFFSET and extending for LENGTH bits are available.  This returns
> @@ -492,7 +492,7 @@ extern int value_bytes_available (const struct value
> *value,
>     bit is unavailable.  */
> 
>  extern int value_bits_available (const struct value *value,
> -				 int offset, int length);
> +				 LONGEST offset, LONGEST length);
> 
>  /* Like value_bytes_available, but return false if any byte in the
>     whole object is unavailable.  */
> @@ -506,13 +506,13 @@ extern int value_entirely_unavailable (struct value
> *value);
>     LENGTH bytes as unavailable.  */
> 
>  extern void mark_value_bytes_unavailable (struct value *value,
> -					  int offset, int length);
> +					  LONGEST offset, LONGEST length);
> 
>  /* Mark VALUE's content bits starting at OFFSET and extending for
>     LENGTH bits as unavailable.  */
> 
>  extern void mark_value_bits_unavailable (struct value *value,
> -					 int offset, int length);
> +					 LONGEST offset, LONGEST length);
> 
>  /* Compare LENGTH bytes of VAL1's contents starting at OFFSET1 with
>     LENGTH bytes of VAL2's contents starting at OFFSET2.
> @@ -567,9 +567,9 @@ extern void mark_value_bits_unavailable (struct
> value *value,
>     after the inferior is gone, it works with const values.  Therefore,
>     this routine must not be called with lazy values.  */
> 
> -extern int value_contents_eq (const struct value *val1, int offset1,
> -			      const struct value *val2, int offset2,
> -			      int length);
> +extern int value_contents_eq (const struct value *val1, LONGEST offset1,
> +			      const struct value *val2, LONGEST offset2,
> +			      LONGEST length);
> 
>  /* Read LENGTH addressable memory units starting at MEMADDR into
> BUFFER,
>     which is (or will be copied to) VAL's contents buffer offset by
> @@ -578,7 +578,7 @@ extern int value_contents_eq (const struct value
> *val1, int offset1,
>     memory is likewise unavailable.  STACK indicates whether the memory
>     is known to be stack memory.  */
> 
> -extern void read_value_memory (struct value *val, int embedded_offset,
> +extern void read_value_memory (struct value *val, LONGEST
> embedded_offset,
>  			       int stack, CORE_ADDR memaddr,
>  			       gdb_byte *buffer, size_t length);
> 
> @@ -614,17 +614,18 @@ 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 void unpack_value_bitfield (struct value *dest_val,
> -				   int bitpos, int bitsize,
> -				   const gdb_byte *valaddr, int
> embedded_offset,
> +				   LONGEST bitpos, LONGEST bitsize,
> +				   const gdb_byte *valaddr,
> +				   LONGEST embedded_offset,
>  				   const struct value *val);
> 
>  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);
> @@ -683,12 +684,12 @@ extern struct value *default_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 value_contents_copy (struct value *dst, int dst_offset,
> -				 struct value *src, int src_offset,
> -				 int length);
> -extern void value_contents_copy_raw (struct value *dst, int dst_offset,
> -				     struct value *src, int src_offset,
> -				     int length);
> +extern void value_contents_copy (struct value *dst, LONGEST dst_offset,
> +				 struct value *src, LONGEST src_offset,
> +				 LONGEST length);
> +extern void value_contents_copy_raw (struct value *dst, LONGEST
> dst_offset,
> +				     struct value *src, LONGEST src_offset,
> +				     LONGEST length);
> 
>  extern struct value *allocate_repeat_value (struct type *type, int count);
> 
> @@ -766,12 +767,12 @@ 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);
> 
> 
> -extern struct type *value_rtti_indirect_type (struct value *, int *, int *,
> +extern struct type *value_rtti_indirect_type (struct value *, int *, LONGEST
> *,
>  					      int *);
> 
>  extern struct value *value_full_object (struct value *, struct type *, int,
> @@ -870,8 +871,8 @@ 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,
> -				       int bitpos, int bitsize,
> +				       LONGEST offset,
> +				       LONGEST bitpos, LONGEST bitsize,
>  				       struct value *newvalue);
> 
>  extern struct internalvar *lookup_only_internalvar (const char *name);
> @@ -951,7 +952,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,
> @@ -979,7 +980,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, LONGEST
> bitsize);
> 
>  extern void type_print (struct type *type, const char *varstring,
>  			struct ui_file *stream, int show);
> @@ -1009,7 +1010,7 @@ extern void value_print_array_elements (struct
> value *val,
>  extern struct value *value_release_to_mark (const struct value *mark);
> 
>  extern void 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.9.1

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PING] RE: [PATCH v2] Support structure offsets that are 512K bytes or larger.
  2016-06-20 13:18 [PING] RE: [PATCH v2] Support structure offsets that are 512K bytes or larger taylor, david
@ 2016-06-21  7:56 ` Yao Qi
  2016-06-21 12:08   ` taylor, david
  0 siblings, 1 reply; 4+ messages in thread
From: Yao Qi @ 2016-06-21  7:56 UTC (permalink / raw)
  To: taylor, david; +Cc: gdb-patches

On Mon, Jun 20, 2016 at 2:17 PM, taylor, david <david.taylor@emc.com> wrote:
> Ping.  Previous ping failed to add '[PING]' to subject line.

I reviewed the patch https://sourceware.org/ml/gdb-patches/2016-06/msg00194.html
Please fix some nits in my review, and your patch can go in.

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PING] RE: [PATCH v2] Support structure offsets that are 512K bytes or larger.
  2016-06-21  7:56 ` Yao Qi
@ 2016-06-21 12:08   ` taylor, david
  2016-06-21 13:20     ` Yao Qi
  0 siblings, 1 reply; 4+ messages in thread
From: taylor, david @ 2016-06-21 12:08 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches



> -----Original Message-----
> From: Yao Qi [mailto:qiyaoltc@gmail.com]
> Sent: Tuesday, June 21, 2016 3:56 AM
> To: taylor, david
> Cc: gdb-patches@sourceware.org
> Subject: Re: [PING] RE: [PATCH v2] Support structure offsets that are 512K
> bytes or larger.
> 
> On Mon, Jun 20, 2016 at 2:17 PM, taylor, david <david.taylor@emc.com>
> wrote:
> > Ping.  Previous ping failed to add '[PING]' to subject line.
> 
> I reviewed the patch https://sourceware.org/ml/gdb-patches/2016-
> 06/msg00194.html
> Please fix some nits in my review, and your patch can go in.
> 
> --
> Yao (齐尧)
HI Yao,

Thanks.  Your response on Friday never arrived in my mailbox.  A fair bit of gdb-patches
never makes it to my mailbox and I somehow missed your response when I checked
the mailing list archives before sending the ping.  Sorry.

I think that some messages get filtered based on size, but there seem to be other
criteria as well.  EMC's IT department is generally unhelpful.

The nits you point out are all easy to deal with.  One issue.  You say, in part:

> I rebuild native i686-w64-mingw32 gdb with your patch, the build is
> OK.  The patch is good to me, some nits below.  You can push it in if no
> other comments in 3~4 days.

I cannot push it as I do not have 'write after approval' status.

Should I port an updated version addressing the nits?  Or ...?


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PING] RE: [PATCH v2] Support structure offsets that are 512K bytes or larger.
  2016-06-21 12:08   ` taylor, david
@ 2016-06-21 13:20     ` Yao Qi
  0 siblings, 0 replies; 4+ messages in thread
From: Yao Qi @ 2016-06-21 13:20 UTC (permalink / raw)
  To: taylor, david; +Cc: gdb-patches

Hi David,

On Tue, Jun 21, 2016 at 1:08 PM, taylor, david <david.taylor@emc.com> wrote:
> The nits you point out are all easy to deal with.  One issue.  You say, in part:
>
>> I rebuild native i686-w64-mingw32 gdb with your patch, the build is
>> OK.  The patch is good to me, some nits below.  You can push it in if no
>> other comments in 3~4 days.
>
> I cannot push it as I do not have 'write after approval' status.

You can fill in this form to request an account on sourceware.org
https://sourceware.org/cgi-bin/pdw/ps_form.cgi

I can sponsor your request, and "email address of person who approved
request" in the form is yao.qi@arm.com

>
> Should I port an updated version addressing the nits?  Or ...?
>

Please post an updated version for the record, and push the patch in once
your account is ready.  If you don't get the account in one week, I can push the
patch in for you.

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-06-21 13:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-20 13:18 [PING] RE: [PATCH v2] Support structure offsets that are 512K bytes or larger taylor, david
2016-06-21  7:56 ` Yao Qi
2016-06-21 12:08   ` taylor, david
2016-06-21 13:20     ` Yao Qi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).