2005-02-02 Andrew Cagney <cagney@gnu.org>

* value.c (value_enclosing_type): New function.
	* value.h (VALUE_ENCLOSING_TYPE): Delete.
	(value_enclosing_type): Declare.
	* xstormy16-tdep.c, vax-tdep.c, m68k-tdep.c, i386-tdep.c: Update.
	* gnu-v3-abi.c, hpacc-abi.c, infcall.c, valops.c: Update.
This commit is contained in:
Andrew Cagney 2005-02-02 20:31:35 +00:00
parent 161f49a316
commit 4754a64e16
12 changed files with 56 additions and 40 deletions

View file

@ -1,3 +1,11 @@
2005-02-02 Andrew Cagney <cagney@gnu.org>
* value.c (value_enclosing_type): New function.
* value.h (VALUE_ENCLOSING_TYPE): Delete.
(value_enclosing_type): Declare.
* xstormy16-tdep.c, vax-tdep.c, m68k-tdep.c, i386-tdep.c: Update.
* gnu-v3-abi.c, hpacc-abi.c, infcall.c, valops.c: Update.
2005-02-01 Andrew Cagney <cagney@gnu.org> 2005-02-01 Andrew Cagney <cagney@gnu.org>
* value.c (value_contents_all_raw) * value.c (value_contents_all_raw)

View file

@ -1,7 +1,8 @@
/* Support for printing C values for GDB, the GNU debugger. /* Support for printing C values for GDB, the GNU debugger.
Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. 1997, 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation,
Inc.
This file is part of GDB. This file is part of GDB.
@ -578,17 +579,17 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
TYPE_NAME (real_type), TYPE_NAME (real_type),
full ? "" : _(" [incomplete object]")); full ? "" : _(" [incomplete object]"));
/* Print out object: enclosing type is same as real_type if full */ /* Print out object: enclosing type is same as real_type if full */
return val_print (VALUE_ENCLOSING_TYPE (val), VALUE_CONTENTS_ALL (val), 0, return val_print (value_enclosing_type (val), VALUE_CONTENTS_ALL (val), 0,
VALUE_ADDRESS (val), stream, format, 1, 0, pretty); VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
/* Note: When we look up RTTI entries, we don't get any information on /* Note: When we look up RTTI entries, we don't get any information on
const or volatile attributes */ const or volatile attributes */
} }
else if (type != VALUE_ENCLOSING_TYPE (val)) else if (type != value_enclosing_type (val))
{ {
/* No RTTI information, so let's do our best */ /* No RTTI information, so let's do our best */
fprintf_filtered (stream, "(%s ?) ", fprintf_filtered (stream, "(%s ?) ",
TYPE_NAME (VALUE_ENCLOSING_TYPE (val))); TYPE_NAME (value_enclosing_type (val)));
return val_print (VALUE_ENCLOSING_TYPE (val), VALUE_CONTENTS_ALL (val), 0, return val_print (value_enclosing_type (val), VALUE_CONTENTS_ALL (val), 0,
VALUE_ADDRESS (val), stream, format, 1, 0, pretty); VALUE_ADDRESS (val), stream, format, 1, 0, pretty);
} }
/* Otherwise, we end up at the return outside this "if" */ /* Otherwise, we end up at the return outside this "if" */

View file

@ -1,7 +1,7 @@
/* Abstraction of GNU v3 abi. /* Abstraction of GNU v3 abi.
Contributed by Jim Blandy <jimb@redhat.com> Contributed by Jim Blandy <jimb@redhat.com>
Copyright 2001, 2002, 2003 Free Software Foundation, Inc. Copyright 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -266,7 +266,7 @@ gnuv3_rtti_type (struct value *value,
if (full_p) if (full_p)
*full_p = (- offset_to_top == VALUE_EMBEDDED_OFFSET (value) *full_p = (- offset_to_top == VALUE_EMBEDDED_OFFSET (value)
&& (TYPE_LENGTH (VALUE_ENCLOSING_TYPE (value)) && (TYPE_LENGTH (value_enclosing_type (value))
>= TYPE_LENGTH (run_time_type))); >= TYPE_LENGTH (run_time_type)));
if (top_p) if (top_p)
*top_p = - offset_to_top; *top_p = - offset_to_top;

View file

@ -206,7 +206,7 @@ hpacc_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
* we can't do anything. */ * we can't do anything. */
if (!TYPE_HAS_VTABLE (known_type)) if (!TYPE_HAS_VTABLE (known_type))
{ {
known_type = VALUE_ENCLOSING_TYPE (v); known_type = value_enclosing_type (v);
CHECK_TYPEDEF (known_type); CHECK_TYPEDEF (known_type);
if ((TYPE_CODE (known_type) != TYPE_CODE_CLASS) || if ((TYPE_CODE (known_type) != TYPE_CODE_CLASS) ||
!TYPE_HAS_VTABLE (known_type)) !TYPE_HAS_VTABLE (known_type))
@ -280,7 +280,7 @@ hpacc_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
same as the embedded offset */ same as the embedded offset */
((top_offset == VALUE_EMBEDDED_OFFSET (v)) && ((top_offset == VALUE_EMBEDDED_OFFSET (v)) &&
!using_enclosing && !using_enclosing &&
TYPE_LENGTH (VALUE_ENCLOSING_TYPE (v)) == TYPE_LENGTH (rtti_type)))) TYPE_LENGTH (value_enclosing_type (v)) == TYPE_LENGTH (rtti_type))))
*full = 1; *full = 1;

View file

@ -1,7 +1,7 @@
/* Intel 386 target-dependent stuff. /* Intel 386 target-dependent stuff.
Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
Foundation, Inc. Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -1223,7 +1223,7 @@ i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
/* Push arguments in reverse order. */ /* Push arguments in reverse order. */
for (i = nargs - 1; i >= 0; i--) for (i = nargs - 1; i >= 0; i--)
{ {
int len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[i])); int len = TYPE_LENGTH (value_enclosing_type (args[i]));
/* The System V ABI says that: /* The System V ABI says that:

View file

@ -571,7 +571,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
CORE_ADDR addr; CORE_ADDR addr;
int len; /* = TYPE_LENGTH (arg_type); */ int len; /* = TYPE_LENGTH (arg_type); */
int aligned_len; int aligned_len;
arg_type = check_typedef (VALUE_ENCLOSING_TYPE (args[i])); arg_type = check_typedef (value_enclosing_type (args[i]));
len = TYPE_LENGTH (arg_type); len = TYPE_LENGTH (arg_type);
aligned_len = len; aligned_len = len;

View file

@ -1,7 +1,7 @@
/* Target-dependent code for the Motorola 68000 series. /* Target-dependent code for the Motorola 68000 series.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000,
2001, 2002, 2003, 2004 Free Software Foundation, Inc. 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -417,7 +417,7 @@ m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
/* Push arguments in reverse order. */ /* Push arguments in reverse order. */
for (i = nargs - 1; i >= 0; i--) for (i = nargs - 1; i >= 0; i--)
{ {
struct type *value_type = VALUE_ENCLOSING_TYPE (args[i]); struct type *value_type = value_enclosing_type (args[i]);
int len = TYPE_LENGTH (value_type); int len = TYPE_LENGTH (value_type);
int container_len = (len + 3) & ~3; int container_len = (len + 3) & ~3;
int offset; int offset;

View file

@ -501,7 +501,7 @@ int
value_fetch_lazy (struct value *val) value_fetch_lazy (struct value *val)
{ {
CORE_ADDR addr = VALUE_ADDRESS (val) + value_offset (val); CORE_ADDR addr = VALUE_ADDRESS (val) + value_offset (val);
int length = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (val)); int length = TYPE_LENGTH (value_enclosing_type (val));
struct type *type = value_type (val); struct type *type = value_type (val);
if (length) if (length)
@ -544,7 +544,7 @@ value_assign (struct value *toval, struct value *fromval)
case lval_internalvar: case lval_internalvar:
set_internalvar (VALUE_INTERNALVAR (toval), fromval); set_internalvar (VALUE_INTERNALVAR (toval), fromval);
val = value_copy (VALUE_INTERNALVAR (toval)->value); val = value_copy (VALUE_INTERNALVAR (toval)->value);
val = value_change_enclosing_type (val, VALUE_ENCLOSING_TYPE (fromval)); val = value_change_enclosing_type (val, value_enclosing_type (fromval));
VALUE_EMBEDDED_OFFSET (val) = VALUE_EMBEDDED_OFFSET (fromval); VALUE_EMBEDDED_OFFSET (val) = VALUE_EMBEDDED_OFFSET (fromval);
VALUE_POINTED_TO_OFFSET (val) = VALUE_POINTED_TO_OFFSET (fromval); VALUE_POINTED_TO_OFFSET (val) = VALUE_POINTED_TO_OFFSET (fromval);
return val; return val;
@ -732,7 +732,7 @@ value_assign (struct value *toval, struct value *fromval)
memcpy (value_contents_raw (val), VALUE_CONTENTS (fromval), memcpy (value_contents_raw (val), VALUE_CONTENTS (fromval),
TYPE_LENGTH (type)); TYPE_LENGTH (type));
val->type = type; val->type = type;
val = value_change_enclosing_type (val, VALUE_ENCLOSING_TYPE (fromval)); val = value_change_enclosing_type (val, value_enclosing_type (fromval));
VALUE_EMBEDDED_OFFSET (val) = VALUE_EMBEDDED_OFFSET (fromval); VALUE_EMBEDDED_OFFSET (val) = VALUE_EMBEDDED_OFFSET (fromval);
VALUE_POINTED_TO_OFFSET (val) = VALUE_POINTED_TO_OFFSET (fromval); VALUE_POINTED_TO_OFFSET (val) = VALUE_POINTED_TO_OFFSET (fromval);
@ -751,11 +751,11 @@ value_repeat (struct value *arg1, int count)
if (count < 1) if (count < 1)
error ("Invalid number %d of repetitions.", count); error ("Invalid number %d of repetitions.", count);
val = allocate_repeat_value (VALUE_ENCLOSING_TYPE (arg1), count); val = allocate_repeat_value (value_enclosing_type (arg1), count);
read_memory (VALUE_ADDRESS (arg1) + value_offset (arg1), read_memory (VALUE_ADDRESS (arg1) + value_offset (arg1),
value_contents_all_raw (val), value_contents_all_raw (val),
TYPE_LENGTH (VALUE_ENCLOSING_TYPE (val))); TYPE_LENGTH (value_enclosing_type (val)));
VALUE_LVAL (val) = lval_memory; VALUE_LVAL (val) = lval_memory;
VALUE_ADDRESS (val) = VALUE_ADDRESS (arg1) + value_offset (arg1); VALUE_ADDRESS (val) = VALUE_ADDRESS (arg1) + value_offset (arg1);
@ -873,7 +873,7 @@ value_addr (struct value *arg1)
/* This may be a pointer to a base subobject; so remember the /* This may be a pointer to a base subobject; so remember the
full derived object's type ... */ full derived object's type ... */
arg2 = value_change_enclosing_type (arg2, lookup_pointer_type (VALUE_ENCLOSING_TYPE (arg1))); arg2 = value_change_enclosing_type (arg2, lookup_pointer_type (value_enclosing_type (arg1)));
/* ... and also the relative position of the subobject in the full object */ /* ... and also the relative position of the subobject in the full object */
VALUE_POINTED_TO_OFFSET (arg2) = VALUE_EMBEDDED_OFFSET (arg1); VALUE_POINTED_TO_OFFSET (arg2) = VALUE_EMBEDDED_OFFSET (arg1);
return arg2; return arg2;
@ -906,7 +906,7 @@ value_ind (struct value *arg1)
struct type *enc_type; struct type *enc_type;
/* We may be pointing to something embedded in a larger object */ /* We may be pointing to something embedded in a larger object */
/* Get the real type of the enclosing object */ /* Get the real type of the enclosing object */
enc_type = check_typedef (VALUE_ENCLOSING_TYPE (arg1)); enc_type = check_typedef (value_enclosing_type (arg1));
enc_type = TYPE_TARGET_TYPE (enc_type); enc_type = TYPE_TARGET_TYPE (enc_type);
/* Retrieve the enclosing object pointed to */ /* Retrieve the enclosing object pointed to */
arg2 = value_at_lazy (enc_type, (value_as_address (arg1) arg2 = value_at_lazy (enc_type, (value_as_address (arg1)
@ -1003,10 +1003,10 @@ value_array (int lowbound, int highbound, struct value **elemvec)
{ {
error ("bad array bounds (%d, %d)", lowbound, highbound); error ("bad array bounds (%d, %d)", lowbound, highbound);
} }
typelength = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (elemvec[0])); typelength = TYPE_LENGTH (value_enclosing_type (elemvec[0]));
for (idx = 1; idx < nelem; idx++) for (idx = 1; idx < nelem; idx++)
{ {
if (TYPE_LENGTH (VALUE_ENCLOSING_TYPE (elemvec[idx])) != typelength) if (TYPE_LENGTH (value_enclosing_type (elemvec[idx])) != typelength)
{ {
error ("array elements must all be the same size"); error ("array elements must all be the same size");
} }
@ -1015,7 +1015,7 @@ value_array (int lowbound, int highbound, struct value **elemvec)
rangetype = create_range_type ((struct type *) NULL, builtin_type_int, rangetype = create_range_type ((struct type *) NULL, builtin_type_int,
lowbound, highbound); lowbound, highbound);
arraytype = create_array_type ((struct type *) NULL, arraytype = create_array_type ((struct type *) NULL,
VALUE_ENCLOSING_TYPE (elemvec[0]), rangetype); value_enclosing_type (elemvec[0]), rangetype);
if (!current_language->c_style_arrays) if (!current_language->c_style_arrays)
{ {
@ -2600,7 +2600,7 @@ value_full_object (struct value *argp, struct type *rtype, int xfull, int xtop,
real_type = value_rtti_type (argp, &full, &top, &using_enc); real_type = value_rtti_type (argp, &full, &top, &using_enc);
/* If no RTTI data, or if object is already complete, do nothing */ /* If no RTTI data, or if object is already complete, do nothing */
if (!real_type || real_type == VALUE_ENCLOSING_TYPE (argp)) if (!real_type || real_type == value_enclosing_type (argp))
return argp; return argp;
/* If we have the full object, but for some reason the enclosing /* If we have the full object, but for some reason the enclosing

View file

@ -87,7 +87,7 @@ allocate_value (struct type *type)
val->next = all_values; val->next = all_values;
all_values = val; all_values = val;
val->type = type; val->type = type;
VALUE_ENCLOSING_TYPE (val) = type; val->enclosing_type = type;
VALUE_LVAL (val) = not_lval; VALUE_LVAL (val) = not_lval;
VALUE_ADDRESS (val) = 0; VALUE_ADDRESS (val) = 0;
VALUE_FRAME_ID (val) = null_frame_id; VALUE_FRAME_ID (val) = null_frame_id;
@ -159,6 +159,12 @@ value_contents_all_raw (struct value *value)
return value->aligner.contents; return value->aligner.contents;
} }
struct type *
value_enclosing_type (struct value *value)
{
return value->enclosing_type;
}
/* Return a mark in the value chain. All values allocated after the /* Return a mark in the value chain. All values allocated after the
mark is obtained (except for those released) are subject to being freed mark is obtained (except for those released) are subject to being freed
@ -252,7 +258,7 @@ value_release_to_mark (struct value *mark)
struct value * struct value *
value_copy (struct value *arg) value_copy (struct value *arg)
{ {
struct type *encl_type = VALUE_ENCLOSING_TYPE (arg); struct type *encl_type = value_enclosing_type (arg);
struct value *val = allocate_value (encl_type); struct value *val = allocate_value (encl_type);
val->type = arg->type; val->type = arg->type;
VALUE_LVAL (val) = VALUE_LVAL (arg); VALUE_LVAL (val) = VALUE_LVAL (arg);
@ -270,7 +276,7 @@ value_copy (struct value *arg)
if (!VALUE_LAZY (val)) if (!VALUE_LAZY (val))
{ {
memcpy (value_contents_all_raw (val), value_contents_all_raw (arg), memcpy (value_contents_all_raw (val), value_contents_all_raw (arg),
TYPE_LENGTH (VALUE_ENCLOSING_TYPE (arg))); TYPE_LENGTH (value_enclosing_type (arg)));
} }
return val; return val;
@ -877,9 +883,9 @@ value_static_field (struct type *type, int fieldno)
struct value * struct value *
value_change_enclosing_type (struct value *val, struct type *new_encl_type) value_change_enclosing_type (struct value *val, struct type *new_encl_type)
{ {
if (TYPE_LENGTH (new_encl_type) <= TYPE_LENGTH (VALUE_ENCLOSING_TYPE (val))) if (TYPE_LENGTH (new_encl_type) <= TYPE_LENGTH (value_enclosing_type (val)))
{ {
VALUE_ENCLOSING_TYPE (val) = new_encl_type; val->enclosing_type = new_encl_type;
return val; return val;
} }
else else
@ -889,7 +895,7 @@ value_change_enclosing_type (struct value *val, struct type *new_encl_type)
new_val = (struct value *) xrealloc (val, sizeof (struct value) + TYPE_LENGTH (new_encl_type)); new_val = (struct value *) xrealloc (val, sizeof (struct value) + TYPE_LENGTH (new_encl_type));
VALUE_ENCLOSING_TYPE (new_val) = new_encl_type; new_val->enclosing_type = new_encl_type;
/* We have to make sure this ends up in the same place in the value /* We have to make sure this ends up in the same place in the value
chain as the original copy, so it's clean-up behavior is the same. chain as the original copy, so it's clean-up behavior is the same.
@ -946,13 +952,13 @@ value_primitive_field (struct value *arg1, int offset,
/* This field is actually a base subobject, so preserve the /* This field is actually a base subobject, so preserve the
entire object's contents for later references to virtual entire object's contents for later references to virtual
bases, etc. */ bases, etc. */
v = allocate_value (VALUE_ENCLOSING_TYPE (arg1)); v = allocate_value (value_enclosing_type (arg1));
v->type = type; v->type = type;
if (VALUE_LAZY (arg1)) if (VALUE_LAZY (arg1))
VALUE_LAZY (v) = 1; VALUE_LAZY (v) = 1;
else else
memcpy (value_contents_all_raw (v), value_contents_all_raw (arg1), memcpy (value_contents_all_raw (v), value_contents_all_raw (arg1),
TYPE_LENGTH (VALUE_ENCLOSING_TYPE (arg1))); TYPE_LENGTH (value_enclosing_type (arg1)));
v->offset = value_offset (arg1); v->offset = value_offset (arg1);
VALUE_EMBEDDED_OFFSET (v) VALUE_EMBEDDED_OFFSET (v)
= offset + = offset +

View file

@ -1,7 +1,7 @@
/* Definitions for values of C expressions, for GDB. /* Definitions for values of C expressions, for GDB.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -178,7 +178,7 @@ extern int value_bitsize (struct value *);
extern int value_bitpos (struct value *); extern int value_bitpos (struct value *);
extern int value_offset (struct value *); extern int value_offset (struct value *);
#define VALUE_ENCLOSING_TYPE(val) (val)->enclosing_type extern struct type *value_enclosing_type (struct value *);
#define VALUE_LAZY(val) (val)->lazy #define VALUE_LAZY(val) (val)->lazy
/* VALUE_CONTENTS and value_contents_raw() both return the address of /* VALUE_CONTENTS and value_contents_raw() both return the address of

View file

@ -1,7 +1,7 @@
/* Target-dependent code for the VAX. /* Target-dependent code for the VAX.
Copyright 1986, 1989, 1991, 1992, 1995, 1996, 1998, 1999, 2000, Copyright 1986, 1989, 1991, 1992, 1995, 1996, 1998, 1999, 2000,
2002, 2003, 2004 Free Software Foundation, Inc. 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -124,7 +124,7 @@ vax_store_arguments (struct regcache *regcache, int nargs,
/* Push arguments in reverse order. */ /* Push arguments in reverse order. */
for (i = nargs - 1; i >= 0; i--) for (i = nargs - 1; i >= 0; i--)
{ {
int len = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[i])); int len = TYPE_LENGTH (value_enclosing_type (args[i]));
sp -= (len + 3) & ~3; sp -= (len + 3) & ~3;
count += (len + 3) / 4; count += (len + 3) / 4;

View file

@ -1,6 +1,7 @@
/* Target-dependent code for the Sanyo Xstormy16a (LC590000) processor. /* Target-dependent code for the Sanyo Xstormy16a (LC590000) processor.
Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
Inc.
This file is part of GDB. This file is part of GDB.
@ -256,7 +257,7 @@ xstormy16_push_dummy_call (struct gdbarch *gdbarch,
would fit in the remaining unused registers. */ would fit in the remaining unused registers. */
for (i = 0; i < nargs && argreg <= E_LST_ARG_REGNUM; i++) for (i = 0; i < nargs && argreg <= E_LST_ARG_REGNUM; i++)
{ {
typelen = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[i])); typelen = TYPE_LENGTH (value_enclosing_type (args[i]));
if (typelen > E_MAX_RETTYPE_SIZE (argreg)) if (typelen > E_MAX_RETTYPE_SIZE (argreg))
break; break;
@ -277,7 +278,7 @@ xstormy16_push_dummy_call (struct gdbarch *gdbarch,
wordaligned. */ wordaligned. */
for (j = nargs - 1; j >= i; j--) for (j = nargs - 1; j >= i; j--)
{ {
typelen = TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[j])); typelen = TYPE_LENGTH (value_enclosing_type (args[j]));
slacklen = typelen & 1; slacklen = typelen & 1;
val = alloca (typelen + slacklen); val = alloca (typelen + slacklen);
memcpy (val, VALUE_CONTENTS (args[j]), typelen); memcpy (val, VALUE_CONTENTS (args[j]), typelen);