summaryrefslogtreecommitdiff
path: root/gdb/valarith.c
diff options
context:
space:
mode:
authorDavid Taylor <dtaylor@emc.com>2016-04-12 15:02:57 -0400
committerDavid Taylor <david.taylor@emc.com>2016-06-24 21:02:36 -0400
commit6b8505468e64c2be8d0eea1f2b8db86fa3897600 (patch)
tree81de3154cfc05d9811239c11ef05cbb3a6fec06d /gdb/valarith.c
parente0204c4d4ceb9be0b0ccf8f92ab683aab54f67cd (diff)
downloadbinutils-gdb-6b8505468e64c2be8d0eea1f2b8db86fa3897600.tar.gz
Support structure offsets that are 512K or larger.
GDB computes structure byte offsets using a 32 bit integer. And, first it computes the offset in bits and then converts to bytes. The result is that any offset that if 512K bytes or larger overflows. This patch changes GDB to use LONGEST for such calculations. 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.
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r--gdb/valarith.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c
index 254d99838a9..de6fcfd79ab 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)