mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-26 19:36:58 +08:00
2010-05-17 Michael Snyder <msnyder@vmware.com>
* valarith.c: White space. * valops.c: White space. * valprint.c: White space. * value.c: White space. * varobj.c: White space. * xcoffread.c: White space. * xml-support.c: White space. * xml-tdesc.c: White space.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2010-05-17 Michael Snyder <msnyder@vmware.com>
|
||||||
|
|
||||||
|
* valarith.c: White space.
|
||||||
|
* valops.c: White space.
|
||||||
|
* valprint.c: White space.
|
||||||
|
* value.c: White space.
|
||||||
|
* varobj.c: White space.
|
||||||
|
* xcoffread.c: White space.
|
||||||
|
* xml-support.c: White space.
|
||||||
|
* xml-tdesc.c: White space.
|
||||||
|
|
||||||
2010-05-17 Andreas Schwab <schwab@redhat.com>
|
2010-05-17 Andreas Schwab <schwab@redhat.com>
|
||||||
|
|
||||||
PR gdb/11092
|
PR gdb/11092
|
||||||
|
@ -157,8 +157,8 @@ value_subscript (struct value *array, LONGEST index)
|
|||||||
{
|
{
|
||||||
struct type *range_type = TYPE_INDEX_TYPE (tarray);
|
struct type *range_type = TYPE_INDEX_TYPE (tarray);
|
||||||
LONGEST lowerbound, upperbound;
|
LONGEST lowerbound, upperbound;
|
||||||
get_discrete_bounds (range_type, &lowerbound, &upperbound);
|
|
||||||
|
|
||||||
|
get_discrete_bounds (range_type, &lowerbound, &upperbound);
|
||||||
if (VALUE_LVAL (array) != lval_memory)
|
if (VALUE_LVAL (array) != lval_memory)
|
||||||
return value_subscripted_rvalue (array, index, lowerbound);
|
return value_subscripted_rvalue (array, index, lowerbound);
|
||||||
|
|
||||||
@ -304,6 +304,7 @@ int
|
|||||||
unop_user_defined_p (enum exp_opcode op, struct value *arg1)
|
unop_user_defined_p (enum exp_opcode op, struct value *arg1)
|
||||||
{
|
{
|
||||||
struct type *type1;
|
struct type *type1;
|
||||||
|
|
||||||
if (op == UNOP_ADDR)
|
if (op == UNOP_ADDR)
|
||||||
return 0;
|
return 0;
|
||||||
type1 = check_typedef (value_type (arg1));
|
type1 = check_typedef (value_type (arg1));
|
||||||
@ -470,6 +471,7 @@ value_x_binop (struct value *arg1, struct value *arg2, enum exp_opcode op,
|
|||||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||||
{
|
{
|
||||||
struct type *return_type;
|
struct type *return_type;
|
||||||
|
|
||||||
return_type
|
return_type
|
||||||
= TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
|
= TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
|
||||||
return value_zero (return_type, VALUE_LVAL (arg1));
|
return value_zero (return_type, VALUE_LVAL (arg1));
|
||||||
@ -568,6 +570,7 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside)
|
|||||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||||
{
|
{
|
||||||
struct type *return_type;
|
struct type *return_type;
|
||||||
|
|
||||||
return_type
|
return_type
|
||||||
= TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
|
= TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0])));
|
||||||
return value_zero (return_type, VALUE_LVAL (arg1));
|
return value_zero (return_type, VALUE_LVAL (arg1));
|
||||||
@ -623,6 +626,7 @@ value_concat (struct value *arg1, struct value *arg2)
|
|||||||
if (TYPE_CODE (type2) == TYPE_CODE_INT)
|
if (TYPE_CODE (type2) == TYPE_CODE_INT)
|
||||||
{
|
{
|
||||||
struct type *tmp = type1;
|
struct type *tmp = type1;
|
||||||
|
|
||||||
type1 = tmp;
|
type1 = tmp;
|
||||||
tmp = type2;
|
tmp = type2;
|
||||||
inval1 = arg2;
|
inval1 = arg2;
|
||||||
@ -649,6 +653,7 @@ value_concat (struct value *arg1, struct value *arg2)
|
|||||||
if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
|
if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
|
||||||
{
|
{
|
||||||
char_type = type2;
|
char_type = type2;
|
||||||
|
|
||||||
inchar = (char) unpack_long (type2,
|
inchar = (char) unpack_long (type2,
|
||||||
value_contents (inval2));
|
value_contents (inval2));
|
||||||
for (idx = 0; idx < count; idx++)
|
for (idx = 0; idx < count; idx++)
|
||||||
@ -659,6 +664,7 @@ value_concat (struct value *arg1, struct value *arg2)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char_type = TYPE_TARGET_TYPE (type2);
|
char_type = TYPE_TARGET_TYPE (type2);
|
||||||
|
|
||||||
for (idx = 0; idx < count; idx++)
|
for (idx = 0; idx < count; idx++)
|
||||||
{
|
{
|
||||||
memcpy (ptr + (idx * inval2len), value_contents (inval2),
|
memcpy (ptr + (idx * inval2len), value_contents (inval2),
|
||||||
@ -692,11 +698,13 @@ value_concat (struct value *arg1, struct value *arg2)
|
|||||||
if (TYPE_CODE (type1) == TYPE_CODE_CHAR)
|
if (TYPE_CODE (type1) == TYPE_CODE_CHAR)
|
||||||
{
|
{
|
||||||
char_type = type1;
|
char_type = type1;
|
||||||
|
|
||||||
*ptr = (char) unpack_long (type1, value_contents (inval1));
|
*ptr = (char) unpack_long (type1, value_contents (inval1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char_type = TYPE_TARGET_TYPE (type1);
|
char_type = TYPE_TARGET_TYPE (type1);
|
||||||
|
|
||||||
memcpy (ptr, value_contents (inval1), inval1len);
|
memcpy (ptr, value_contents (inval1), inval1len);
|
||||||
}
|
}
|
||||||
if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
|
if (TYPE_CODE (type2) == TYPE_CODE_CHAR)
|
||||||
@ -927,6 +935,7 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
|
|||||||
in target format. real.c in GCC probably has the necessary
|
in target format. real.c in GCC probably has the necessary
|
||||||
code. */
|
code. */
|
||||||
DOUBLEST v1, v2, v = 0;
|
DOUBLEST v1, v2, v = 0;
|
||||||
|
|
||||||
v1 = value_as_double (arg1);
|
v1 = value_as_double (arg1);
|
||||||
v2 = value_as_double (arg2);
|
v2 = value_as_double (arg2);
|
||||||
|
|
||||||
@ -985,6 +994,7 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
|
|||||||
|| TYPE_CODE (type2) == TYPE_CODE_BOOL)
|
|| TYPE_CODE (type2) == TYPE_CODE_BOOL)
|
||||||
{
|
{
|
||||||
LONGEST v1, v2, v = 0;
|
LONGEST v1, v2, v = 0;
|
||||||
|
|
||||||
v1 = value_as_long (arg1);
|
v1 = value_as_long (arg1);
|
||||||
v2 = value_as_long (arg2);
|
v2 = value_as_long (arg2);
|
||||||
|
|
||||||
@ -1048,6 +1058,7 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
|
|||||||
{
|
{
|
||||||
LONGEST v2_signed = value_as_long (arg2);
|
LONGEST v2_signed = value_as_long (arg2);
|
||||||
ULONGEST v1, v2, v = 0;
|
ULONGEST v1, v2, v = 0;
|
||||||
|
|
||||||
v1 = (ULONGEST) value_as_long (arg1);
|
v1 = (ULONGEST) value_as_long (arg1);
|
||||||
v2 = (ULONGEST) v2_signed;
|
v2 = (ULONGEST) v2_signed;
|
||||||
|
|
||||||
@ -1173,6 +1184,7 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
LONGEST v1, v2, v = 0;
|
LONGEST v1, v2, v = 0;
|
||||||
|
|
||||||
v1 = value_as_long (arg1);
|
v1 = value_as_long (arg1);
|
||||||
v2 = value_as_long (arg2);
|
v2 = value_as_long (arg2);
|
||||||
|
|
||||||
@ -1397,6 +1409,7 @@ value_equal (struct value *arg1, struct value *arg2)
|
|||||||
/* NOTE: kettenis/20050816: Avoid compiler bug on systems where
|
/* NOTE: kettenis/20050816: Avoid compiler bug on systems where
|
||||||
`long double' values are returned in static storage (m68k). */
|
`long double' values are returned in static storage (m68k). */
|
||||||
DOUBLEST d = value_as_double (arg1);
|
DOUBLEST d = value_as_double (arg1);
|
||||||
|
|
||||||
return d == value_as_double (arg2);
|
return d == value_as_double (arg2);
|
||||||
}
|
}
|
||||||
else if ((code1 == TYPE_CODE_DECFLOAT || is_int1)
|
else if ((code1 == TYPE_CODE_DECFLOAT || is_int1)
|
||||||
@ -1492,6 +1505,7 @@ value_less (struct value *arg1, struct value *arg2)
|
|||||||
/* NOTE: kettenis/20050816: Avoid compiler bug on systems where
|
/* NOTE: kettenis/20050816: Avoid compiler bug on systems where
|
||||||
`long double' values are returned in static storage (m68k). */
|
`long double' values are returned in static storage (m68k). */
|
||||||
DOUBLEST d = value_as_double (arg1);
|
DOUBLEST d = value_as_double (arg1);
|
||||||
|
|
||||||
return d < value_as_double (arg2);
|
return d < value_as_double (arg2);
|
||||||
}
|
}
|
||||||
else if ((code1 == TYPE_CODE_DECFLOAT || is_int1)
|
else if ((code1 == TYPE_CODE_DECFLOAT || is_int1)
|
||||||
@ -1613,6 +1627,7 @@ value_bit_index (struct type *type, const gdb_byte *valaddr, int index)
|
|||||||
LONGEST word;
|
LONGEST word;
|
||||||
unsigned rel_index;
|
unsigned rel_index;
|
||||||
struct type *range = TYPE_INDEX_TYPE (type);
|
struct type *range = TYPE_INDEX_TYPE (type);
|
||||||
|
|
||||||
if (get_discrete_bounds (range, &low_bound, &high_bound) < 0)
|
if (get_discrete_bounds (range, &low_bound, &high_bound) < 0)
|
||||||
return -2;
|
return -2;
|
||||||
if (index < low_bound || index > high_bound)
|
if (index < low_bound || index > high_bound)
|
||||||
@ -1632,6 +1647,7 @@ value_in (struct value *element, struct value *set)
|
|||||||
int member;
|
int member;
|
||||||
struct type *settype = check_typedef (value_type (set));
|
struct type *settype = check_typedef (value_type (set));
|
||||||
struct type *eltype = check_typedef (value_type (element));
|
struct type *eltype = check_typedef (value_type (element));
|
||||||
|
|
||||||
if (TYPE_CODE (eltype) == TYPE_CODE_RANGE)
|
if (TYPE_CODE (eltype) == TYPE_CODE_RANGE)
|
||||||
eltype = TYPE_TARGET_TYPE (eltype);
|
eltype = TYPE_TARGET_TYPE (eltype);
|
||||||
if (TYPE_CODE (settype) != TYPE_CODE_SET)
|
if (TYPE_CODE (settype) != TYPE_CODE_SET)
|
||||||
|
41
gdb/valops.c
41
gdb/valops.c
@ -134,6 +134,7 @@ struct value *
|
|||||||
find_function_in_inferior (const char *name, struct objfile **objf_p)
|
find_function_in_inferior (const char *name, struct objfile **objf_p)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
|
|
||||||
sym = lookup_symbol (name, 0, VAR_DOMAIN, 0);
|
sym = lookup_symbol (name, 0, VAR_DOMAIN, 0);
|
||||||
if (sym != NULL)
|
if (sym != NULL)
|
||||||
{
|
{
|
||||||
@ -152,6 +153,7 @@ find_function_in_inferior (const char *name, struct objfile **objf_p)
|
|||||||
{
|
{
|
||||||
struct minimal_symbol *msymbol =
|
struct minimal_symbol *msymbol =
|
||||||
lookup_minimal_symbol (name, NULL, NULL);
|
lookup_minimal_symbol (name, NULL, NULL);
|
||||||
|
|
||||||
if (msymbol != NULL)
|
if (msymbol != NULL)
|
||||||
{
|
{
|
||||||
struct objfile *objfile = msymbol_objfile (msymbol);
|
struct objfile *objfile = msymbol_objfile (msymbol);
|
||||||
@ -285,6 +287,7 @@ value_cast_structs (struct type *type, struct value *v2)
|
|||||||
{
|
{
|
||||||
/* Downcasting is possible (t1 is superclass of v2). */
|
/* Downcasting is possible (t1 is superclass of v2). */
|
||||||
CORE_ADDR addr2 = value_address (v2);
|
CORE_ADDR addr2 = value_address (v2);
|
||||||
|
|
||||||
addr2 -= value_address (v) + value_embedded_offset (v);
|
addr2 -= value_address (v) + value_embedded_offset (v);
|
||||||
return value_at (type, addr2);
|
return value_at (type, addr2);
|
||||||
}
|
}
|
||||||
@ -322,6 +325,7 @@ value_cast_pointers (struct type *type, struct value *arg2)
|
|||||||
if (v2)
|
if (v2)
|
||||||
{
|
{
|
||||||
struct value *v = value_addr (v2);
|
struct value *v = value_addr (v2);
|
||||||
|
|
||||||
deprecated_set_value_type (v, type);
|
deprecated_set_value_type (v, type);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -364,6 +368,7 @@ value_cast (struct type *type, struct value *arg2)
|
|||||||
struct type *t1 = check_typedef (type);
|
struct type *t1 = check_typedef (type);
|
||||||
struct type *dereftype = check_typedef (TYPE_TARGET_TYPE (t1));
|
struct type *dereftype = check_typedef (TYPE_TARGET_TYPE (t1));
|
||||||
struct value *val = value_cast (dereftype, arg2);
|
struct value *val = value_cast (dereftype, arg2);
|
||||||
|
|
||||||
return value_ref (val);
|
return value_ref (val);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,11 +394,13 @@ value_cast (struct type *type, struct value *arg2)
|
|||||||
{
|
{
|
||||||
struct type *element_type = TYPE_TARGET_TYPE (type);
|
struct type *element_type = TYPE_TARGET_TYPE (type);
|
||||||
unsigned element_length = TYPE_LENGTH (check_typedef (element_type));
|
unsigned element_length = TYPE_LENGTH (check_typedef (element_type));
|
||||||
|
|
||||||
if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
||||||
{
|
{
|
||||||
struct type *range_type = TYPE_INDEX_TYPE (type);
|
struct type *range_type = TYPE_INDEX_TYPE (type);
|
||||||
int val_length = TYPE_LENGTH (type2);
|
int val_length = TYPE_LENGTH (type2);
|
||||||
LONGEST low_bound, high_bound, new_length;
|
LONGEST low_bound, high_bound, new_length;
|
||||||
|
|
||||||
if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
|
if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
|
||||||
low_bound = 0, high_bound = 0;
|
low_bound = 0, high_bound = 0;
|
||||||
new_length = val_length / element_length;
|
new_length = val_length / element_length;
|
||||||
@ -444,6 +451,7 @@ value_cast (struct type *type, struct value *arg2)
|
|||||||
&& TYPE_NAME (type) != 0)
|
&& TYPE_NAME (type) != 0)
|
||||||
{
|
{
|
||||||
struct value *v = value_cast_structs (type, arg2);
|
struct value *v = value_cast_structs (type, arg2);
|
||||||
|
|
||||||
if (v)
|
if (v)
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -504,8 +512,8 @@ value_cast (struct type *type, struct value *arg2)
|
|||||||
pointers and four byte addresses. */
|
pointers and four byte addresses. */
|
||||||
|
|
||||||
int addr_bit = gdbarch_addr_bit (get_type_arch (type2));
|
int addr_bit = gdbarch_addr_bit (get_type_arch (type2));
|
||||||
|
|
||||||
LONGEST longest = value_as_long (arg2);
|
LONGEST longest = value_as_long (arg2);
|
||||||
|
|
||||||
if (addr_bit < sizeof (LONGEST) * HOST_CHAR_BIT)
|
if (addr_bit < sizeof (LONGEST) * HOST_CHAR_BIT)
|
||||||
{
|
{
|
||||||
if (longest >= ((LONGEST) 1 << addr_bit)
|
if (longest >= ((LONGEST) 1 << addr_bit)
|
||||||
@ -518,6 +526,7 @@ value_cast (struct type *type, struct value *arg2)
|
|||||||
&& value_as_long (arg2) == 0)
|
&& value_as_long (arg2) == 0)
|
||||||
{
|
{
|
||||||
struct value *result = allocate_value (type);
|
struct value *result = allocate_value (type);
|
||||||
|
|
||||||
cplus_make_method_ptr (type, value_contents_writeable (result), 0, 0);
|
cplus_make_method_ptr (type, value_contents_writeable (result), 0, 0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -625,6 +634,7 @@ dynamic_cast_check_1 (struct type *desired_type,
|
|||||||
for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i)
|
for (i = 0; i < TYPE_N_BASECLASSES (search_type) && result_count < 2; ++i)
|
||||||
{
|
{
|
||||||
int offset = baseclass_offset (search_type, i, contents, address);
|
int offset = baseclass_offset (search_type, i, contents, address);
|
||||||
|
|
||||||
if (offset == -1)
|
if (offset == -1)
|
||||||
error (_("virtual baseclass botch"));
|
error (_("virtual baseclass botch"));
|
||||||
if (class_types_same_p (desired_type, TYPE_BASECLASS (search_type, i)))
|
if (class_types_same_p (desired_type, TYPE_BASECLASS (search_type, i)))
|
||||||
@ -810,8 +820,8 @@ struct value *
|
|||||||
value_zero (struct type *type, enum lval_type lv)
|
value_zero (struct type *type, enum lval_type lv)
|
||||||
{
|
{
|
||||||
struct value *val = allocate_value (type);
|
struct value *val = allocate_value (type);
|
||||||
VALUE_LVAL (val) = lv;
|
|
||||||
|
|
||||||
|
VALUE_LVAL (val) = lv;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -827,6 +837,7 @@ value_one (struct type *type, enum lval_type lv)
|
|||||||
{
|
{
|
||||||
enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
|
enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
|
||||||
gdb_byte v[16];
|
gdb_byte v[16];
|
||||||
|
|
||||||
decimal_from_string (v, TYPE_LENGTH (type), byte_order, "1");
|
decimal_from_string (v, TYPE_LENGTH (type), byte_order, "1");
|
||||||
val = value_from_decfloat (type, v);
|
val = value_from_decfloat (type, v);
|
||||||
}
|
}
|
||||||
@ -934,6 +945,7 @@ value_fetch_lazy (struct value *val)
|
|||||||
value_bitpos (val),
|
value_bitpos (val),
|
||||||
value_bitsize (val));
|
value_bitsize (val));
|
||||||
int length = TYPE_LENGTH (type);
|
int length = TYPE_LENGTH (type);
|
||||||
|
|
||||||
store_signed_integer (value_contents_raw (val), length, byte_order, num);
|
store_signed_integer (value_contents_raw (val), length, byte_order, num);
|
||||||
}
|
}
|
||||||
else if (VALUE_LVAL (val) == lval_memory)
|
else if (VALUE_LVAL (val) == lval_memory)
|
||||||
@ -1110,8 +1122,8 @@ value_assign (struct value *toval, struct value *fromval)
|
|||||||
if (value_bitsize (toval))
|
if (value_bitsize (toval))
|
||||||
{
|
{
|
||||||
struct value *parent = value_parent (toval);
|
struct value *parent = value_parent (toval);
|
||||||
changed_addr = value_address (parent) + value_offset (toval);
|
|
||||||
|
|
||||||
|
changed_addr = value_address (parent) + value_offset (toval);
|
||||||
changed_len = (value_bitpos (toval)
|
changed_len = (value_bitpos (toval)
|
||||||
+ value_bitsize (toval)
|
+ value_bitsize (toval)
|
||||||
+ HOST_CHAR_BIT - 1)
|
+ HOST_CHAR_BIT - 1)
|
||||||
@ -1248,6 +1260,7 @@ value_assign (struct value *toval, struct value *fromval)
|
|||||||
|
|
||||||
{
|
{
|
||||||
struct frame_info *fi = frame_find_by_id (old_frame);
|
struct frame_info *fi = frame_find_by_id (old_frame);
|
||||||
|
|
||||||
if (fi != NULL)
|
if (fi != NULL)
|
||||||
select_frame (fi);
|
select_frame (fi);
|
||||||
}
|
}
|
||||||
@ -1355,6 +1368,7 @@ address_of_variable (struct symbol *var, struct block *b)
|
|||||||
|| TYPE_CODE (type) == TYPE_CODE_FUNC)
|
|| TYPE_CODE (type) == TYPE_CODE_FUNC)
|
||||||
{
|
{
|
||||||
CORE_ADDR addr = value_address (val);
|
CORE_ADDR addr = value_address (val);
|
||||||
|
|
||||||
return value_from_pointer (lookup_pointer_type (type), addr);
|
return value_from_pointer (lookup_pointer_type (type), addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1496,8 +1510,8 @@ struct value *
|
|||||||
value_addr (struct value *arg1)
|
value_addr (struct value *arg1)
|
||||||
{
|
{
|
||||||
struct value *arg2;
|
struct value *arg2;
|
||||||
|
|
||||||
struct type *type = check_typedef (value_type (arg1));
|
struct type *type = check_typedef (value_type (arg1));
|
||||||
|
|
||||||
if (TYPE_CODE (type) == TYPE_CODE_REF)
|
if (TYPE_CODE (type) == TYPE_CODE_REF)
|
||||||
{
|
{
|
||||||
/* Copy the value, but change the type from (T&) to (T*). We
|
/* Copy the value, but change the type from (T&) to (T*). We
|
||||||
@ -1539,8 +1553,8 @@ struct value *
|
|||||||
value_ref (struct value *arg1)
|
value_ref (struct value *arg1)
|
||||||
{
|
{
|
||||||
struct value *arg2;
|
struct value *arg2;
|
||||||
|
|
||||||
struct type *type = check_typedef (value_type (arg1));
|
struct type *type = check_typedef (value_type (arg1));
|
||||||
|
|
||||||
if (TYPE_CODE (type) == TYPE_CODE_REF)
|
if (TYPE_CODE (type) == TYPE_CODE_REF)
|
||||||
return arg1;
|
return arg1;
|
||||||
|
|
||||||
@ -1565,6 +1579,7 @@ value_ind (struct value *arg1)
|
|||||||
if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
|
if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
|
||||||
{
|
{
|
||||||
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));
|
||||||
@ -1704,6 +1719,7 @@ value_bitstring (char *ptr, int len, struct type *index_type)
|
|||||||
struct type *domain_type
|
struct type *domain_type
|
||||||
= create_range_type (NULL, index_type, 0, len - 1);
|
= create_range_type (NULL, index_type, 0, len - 1);
|
||||||
struct type *type = create_set_type (NULL, domain_type);
|
struct type *type = create_set_type (NULL, domain_type);
|
||||||
|
|
||||||
TYPE_CODE (type) = TYPE_CODE_BITSTRING;
|
TYPE_CODE (type) = TYPE_CODE_BITSTRING;
|
||||||
val = allocate_value (type);
|
val = allocate_value (type);
|
||||||
memcpy (value_contents_raw (val), ptr, TYPE_LENGTH (type));
|
memcpy (value_contents_raw (val), ptr, TYPE_LENGTH (type));
|
||||||
@ -1824,6 +1840,7 @@ search_struct_field (const char *name, struct value *arg1, int offset,
|
|||||||
if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
|
if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
|
||||||
{
|
{
|
||||||
struct value *v;
|
struct value *v;
|
||||||
|
|
||||||
if (field_is_static (&TYPE_FIELD (type, i)))
|
if (field_is_static (&TYPE_FIELD (type, i)))
|
||||||
{
|
{
|
||||||
v = value_static_field (type, i);
|
v = value_static_field (type, i);
|
||||||
@ -1846,6 +1863,7 @@ search_struct_field (const char *name, struct value *arg1, int offset,
|
|||||||
&& (strcmp_iw (t_field_name, "else") == 0))))
|
&& (strcmp_iw (t_field_name, "else") == 0))))
|
||||||
{
|
{
|
||||||
struct type *field_type = TYPE_FIELD_TYPE (type, i);
|
struct type *field_type = TYPE_FIELD_TYPE (type, i);
|
||||||
|
|
||||||
if (TYPE_CODE (field_type) == TYPE_CODE_UNION
|
if (TYPE_CODE (field_type) == TYPE_CODE_UNION
|
||||||
|| TYPE_CODE (field_type) == TYPE_CODE_STRUCT)
|
|| TYPE_CODE (field_type) == TYPE_CODE_STRUCT)
|
||||||
{
|
{
|
||||||
@ -1977,6 +1995,7 @@ search_struct_method (const char *name, struct value **arg1p,
|
|||||||
for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
|
for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
|
char *t_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
|
||||||
|
|
||||||
/* FIXME! May need to check for ARM demangling here */
|
/* FIXME! May need to check for ARM demangling here */
|
||||||
if (strncmp (t_field_name, "__", 2) == 0 ||
|
if (strncmp (t_field_name, "__", 2) == 0 ||
|
||||||
strncmp (t_field_name, "op", 2) == 0 ||
|
strncmp (t_field_name, "op", 2) == 0 ||
|
||||||
@ -1991,8 +2010,8 @@ search_struct_method (const char *name, struct value **arg1p,
|
|||||||
{
|
{
|
||||||
int j = TYPE_FN_FIELDLIST_LENGTH (type, i) - 1;
|
int j = TYPE_FN_FIELDLIST_LENGTH (type, i) - 1;
|
||||||
struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
|
struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i);
|
||||||
name_matched = 1;
|
|
||||||
|
|
||||||
|
name_matched = 1;
|
||||||
check_stub_method_group (type, i);
|
check_stub_method_group (type, i);
|
||||||
if (j > 0 && args == 0)
|
if (j > 0 && args == 0)
|
||||||
error (_("cannot resolve overloaded method `%s': no arguments supplied"), name);
|
error (_("cannot resolve overloaded method `%s': no arguments supplied"), name);
|
||||||
@ -2041,6 +2060,7 @@ search_struct_method (const char *name, struct value **arg1p,
|
|||||||
if (offset < 0 || offset >= TYPE_LENGTH (type))
|
if (offset < 0 || offset >= TYPE_LENGTH (type))
|
||||||
{
|
{
|
||||||
gdb_byte *tmp = alloca (TYPE_LENGTH (baseclass));
|
gdb_byte *tmp = alloca (TYPE_LENGTH (baseclass));
|
||||||
|
|
||||||
if (target_read_memory (value_address (*arg1p) + offset,
|
if (target_read_memory (value_address (*arg1p) + offset,
|
||||||
tmp, TYPE_LENGTH (baseclass)) != 0)
|
tmp, TYPE_LENGTH (baseclass)) != 0)
|
||||||
error (_("virtual baseclass botch"));
|
error (_("virtual baseclass botch"));
|
||||||
@ -2204,6 +2224,7 @@ find_method_list (struct value **argp, const char *method,
|
|||||||
{
|
{
|
||||||
/* pai: FIXME What about operators and type conversions? */
|
/* pai: FIXME What about operators and type conversions? */
|
||||||
char *fn_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
|
char *fn_field_name = TYPE_FN_FIELDLIST_NAME (type, i);
|
||||||
|
|
||||||
if (fn_field_name && (strcmp_iw (fn_field_name, method) == 0))
|
if (fn_field_name && (strcmp_iw (fn_field_name, method) == 0))
|
||||||
{
|
{
|
||||||
int len = TYPE_FN_FIELDLIST_LENGTH (type, i);
|
int len = TYPE_FN_FIELDLIST_LENGTH (type, i);
|
||||||
@ -2224,6 +2245,7 @@ find_method_list (struct value **argp, const char *method,
|
|||||||
for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
|
for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
int base_offset;
|
int base_offset;
|
||||||
|
|
||||||
if (BASETYPE_VIA_VIRTUAL (type, i))
|
if (BASETYPE_VIA_VIRTUAL (type, i))
|
||||||
{
|
{
|
||||||
base_offset = value_offset (*argp) + offset;
|
base_offset = value_offset (*argp) + offset;
|
||||||
@ -2496,6 +2518,7 @@ find_overload_match (struct type **arg_types, int nargs,
|
|||||||
{
|
{
|
||||||
struct type *temp_type = check_typedef (value_type (temp));
|
struct type *temp_type = check_typedef (value_type (temp));
|
||||||
struct type *obj_type = check_typedef (value_type (*objp));
|
struct type *obj_type = check_typedef (value_type (*objp));
|
||||||
|
|
||||||
if (TYPE_CODE (temp_type) != TYPE_CODE_PTR
|
if (TYPE_CODE (temp_type) != TYPE_CODE_PTR
|
||||||
&& (TYPE_CODE (obj_type) == TYPE_CODE_PTR
|
&& (TYPE_CODE (obj_type) == TYPE_CODE_PTR
|
||||||
|| TYPE_CODE (obj_type) == TYPE_CODE_REF))
|
|| TYPE_CODE (obj_type) == TYPE_CODE_REF))
|
||||||
@ -2845,6 +2868,7 @@ check_field (struct type *type, const char *name)
|
|||||||
for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
|
for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
|
||||||
{
|
{
|
||||||
char *t_field_name = TYPE_FIELD_NAME (type, i);
|
char *t_field_name = TYPE_FIELD_NAME (type, i);
|
||||||
|
|
||||||
if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
|
if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -2929,6 +2953,7 @@ compare_parameters (struct type *t1, struct type *t2, int skip_artificial)
|
|||||||
if ((TYPE_NFIELDS (t1) - start) == TYPE_NFIELDS (t2))
|
if ((TYPE_NFIELDS (t1) - start) == TYPE_NFIELDS (t2))
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < TYPE_NFIELDS (t2); ++i)
|
for (i = 0; i < TYPE_NFIELDS (t2); ++i)
|
||||||
{
|
{
|
||||||
if (rank_one_type (TYPE_FIELD_TYPE (t1, start + i),
|
if (rank_one_type (TYPE_FIELD_TYPE (t1, start + i),
|
||||||
@ -3068,6 +3093,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
|
|||||||
struct symbol *s =
|
struct symbol *s =
|
||||||
lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
|
lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
|
||||||
0, VAR_DOMAIN, 0);
|
0, VAR_DOMAIN, 0);
|
||||||
|
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -3098,6 +3124,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
|
|||||||
struct symbol *s =
|
struct symbol *s =
|
||||||
lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
|
lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f, j),
|
||||||
0, VAR_DOMAIN, 0);
|
0, VAR_DOMAIN, 0);
|
||||||
|
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -3393,11 +3420,13 @@ value_slice (struct value *array, int lowbound, int length)
|
|||||||
int element = value_bit_index (array_type,
|
int element = value_bit_index (array_type,
|
||||||
value_contents (array),
|
value_contents (array),
|
||||||
lowbound + i);
|
lowbound + i);
|
||||||
|
|
||||||
if (element < 0)
|
if (element < 0)
|
||||||
error (_("internal error accessing bitstring"));
|
error (_("internal error accessing bitstring"));
|
||||||
else if (element > 0)
|
else if (element > 0)
|
||||||
{
|
{
|
||||||
int j = i % TARGET_CHAR_BIT;
|
int j = i % TARGET_CHAR_BIT;
|
||||||
|
|
||||||
if (gdbarch_bits_big_endian (get_type_arch (array_type)))
|
if (gdbarch_bits_big_endian (get_type_arch (array_type)))
|
||||||
j = TARGET_CHAR_BIT - 1 - j;
|
j = TARGET_CHAR_BIT - 1 - j;
|
||||||
value_contents_raw (slice)[i / TARGET_CHAR_BIT] |= (1 << j);
|
value_contents_raw (slice)[i / TARGET_CHAR_BIT] |= (1 << j);
|
||||||
|
@ -395,6 +395,7 @@ value_print (struct value *val, struct ui_file *stream,
|
|||||||
value_address (val),
|
value_address (val),
|
||||||
stream, 0, options,
|
stream, 0, options,
|
||||||
current_language);
|
current_language);
|
||||||
|
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -1141,6 +1142,7 @@ val_print_array_elements (struct type *type, const gdb_byte *valaddr,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
long low, hi;
|
long low, hi;
|
||||||
|
|
||||||
if (get_array_bounds (type, &low, &hi))
|
if (get_array_bounds (type, &low, &hi))
|
||||||
len = hi - low + 1;
|
len = hi - low + 1;
|
||||||
else
|
else
|
||||||
|
25
gdb/value.c
25
gdb/value.c
@ -304,6 +304,7 @@ struct value *
|
|||||||
allocate_value (struct type *type)
|
allocate_value (struct type *type)
|
||||||
{
|
{
|
||||||
struct value *val = allocate_value_lazy (type);
|
struct value *val = allocate_value_lazy (type);
|
||||||
|
|
||||||
allocate_value_contents (val);
|
allocate_value_contents (val);
|
||||||
val->lazy = 0;
|
val->lazy = 0;
|
||||||
return val;
|
return val;
|
||||||
@ -320,6 +321,7 @@ allocate_repeat_value (struct type *type, int count)
|
|||||||
done with it. */
|
done with it. */
|
||||||
struct type *array_type
|
struct type *array_type
|
||||||
= lookup_array_range_type (type, low_bound, count + low_bound - 1);
|
= lookup_array_range_type (type, low_bound, count + low_bound - 1);
|
||||||
|
|
||||||
return allocate_value (array_type);
|
return allocate_value (array_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,6 +331,7 @@ allocate_computed_value (struct type *type,
|
|||||||
void *closure)
|
void *closure)
|
||||||
{
|
{
|
||||||
struct value *v = allocate_value (type);
|
struct value *v = allocate_value (type);
|
||||||
|
|
||||||
VALUE_LVAL (v) = lval_computed;
|
VALUE_LVAL (v) = lval_computed;
|
||||||
v->location.computed.funcs = funcs;
|
v->location.computed.funcs = funcs;
|
||||||
v->location.computed.closure = closure;
|
v->location.computed.closure = closure;
|
||||||
@ -817,7 +820,8 @@ record_latest_value (struct value *val)
|
|||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
struct value_history_chunk *new
|
struct value_history_chunk *new
|
||||||
= (struct value_history_chunk *)
|
= (struct value_history_chunk *)
|
||||||
|
|
||||||
xmalloc (sizeof (struct value_history_chunk));
|
xmalloc (sizeof (struct value_history_chunk));
|
||||||
memset (new->values, 0, sizeof new->values);
|
memset (new->values, 0, sizeof new->values);
|
||||||
new->next = value_history_chain;
|
new->next = value_history_chain;
|
||||||
@ -894,6 +898,7 @@ show_values (char *num_exp, int from_tty)
|
|||||||
for (i = num; i < num + 10 && i <= value_history_count; i++)
|
for (i = num; i < num + 10 && i <= value_history_count; i++)
|
||||||
{
|
{
|
||||||
struct value_print_options opts;
|
struct value_print_options opts;
|
||||||
|
|
||||||
val = access_value_history (i);
|
val = access_value_history (i);
|
||||||
printf_filtered (("$%d = "), i);
|
printf_filtered (("$%d = "), i);
|
||||||
get_user_print_options (&opts);
|
get_user_print_options (&opts);
|
||||||
@ -1054,6 +1059,7 @@ struct internalvar *
|
|||||||
create_internalvar (const char *name)
|
create_internalvar (const char *name)
|
||||||
{
|
{
|
||||||
struct internalvar *var;
|
struct internalvar *var;
|
||||||
|
|
||||||
var = (struct internalvar *) xmalloc (sizeof (struct internalvar));
|
var = (struct internalvar *) xmalloc (sizeof (struct internalvar));
|
||||||
var->name = concat (name, (char *)NULL);
|
var->name = concat (name, (char *)NULL);
|
||||||
var->kind = INTERNALVAR_VOID;
|
var->kind = INTERNALVAR_VOID;
|
||||||
@ -1071,6 +1077,7 @@ struct internalvar *
|
|||||||
create_internalvar_type_lazy (char *name, internalvar_make_value fun)
|
create_internalvar_type_lazy (char *name, internalvar_make_value fun)
|
||||||
{
|
{
|
||||||
struct internalvar *var = create_internalvar (name);
|
struct internalvar *var = create_internalvar (name);
|
||||||
|
|
||||||
var->kind = INTERNALVAR_MAKE_VALUE;
|
var->kind = INTERNALVAR_MAKE_VALUE;
|
||||||
var->u.make_value = fun;
|
var->u.make_value = fun;
|
||||||
return var;
|
return var;
|
||||||
@ -1354,6 +1361,7 @@ create_internal_function (const char *name,
|
|||||||
internal_function_fn handler, void *cookie)
|
internal_function_fn handler, void *cookie)
|
||||||
{
|
{
|
||||||
struct internal_function *ifn = XNEW (struct internal_function);
|
struct internal_function *ifn = XNEW (struct internal_function);
|
||||||
|
|
||||||
ifn->name = xstrdup (name);
|
ifn->name = xstrdup (name);
|
||||||
ifn->handler = handler;
|
ifn->handler = handler;
|
||||||
ifn->cookie = cookie;
|
ifn->cookie = cookie;
|
||||||
@ -1818,14 +1826,16 @@ value_static_field (struct type *type, int fieldno)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *phys_name = TYPE_FIELD_STATIC_PHYSNAME (type, fieldno);
|
char *phys_name = TYPE_FIELD_STATIC_PHYSNAME (type, fieldno);
|
||||||
/*TYPE_FIELD_NAME (type, fieldno);*/
|
/*TYPE_FIELD_NAME (type, fieldno);*/
|
||||||
struct symbol *sym = lookup_symbol (phys_name, 0, VAR_DOMAIN, 0);
|
struct symbol *sym = lookup_symbol (phys_name, 0, VAR_DOMAIN, 0);
|
||||||
|
|
||||||
if (sym == NULL)
|
if (sym == NULL)
|
||||||
{
|
{
|
||||||
/* With some compilers, e.g. HP aCC, static data members are reported
|
/* With some compilers, e.g. HP aCC, static data members are
|
||||||
as non-debuggable symbols */
|
reported as non-debuggable symbols */
|
||||||
struct minimal_symbol *msym = lookup_minimal_symbol (phys_name, NULL, NULL);
|
struct minimal_symbol *msym = lookup_minimal_symbol (phys_name,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
if (!msym)
|
if (!msym)
|
||||||
return NULL;
|
return NULL;
|
||||||
else
|
else
|
||||||
@ -2201,7 +2211,6 @@ value_from_longest (struct type *type, LONGEST num)
|
|||||||
struct value *val = allocate_value (type);
|
struct value *val = allocate_value (type);
|
||||||
|
|
||||||
pack_long (value_contents_raw (val), type, num);
|
pack_long (value_contents_raw (val), type, num);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2212,6 +2221,7 @@ struct value *
|
|||||||
value_from_pointer (struct type *type, CORE_ADDR addr)
|
value_from_pointer (struct type *type, CORE_ADDR addr)
|
||||||
{
|
{
|
||||||
struct value *val = allocate_value (type);
|
struct value *val = allocate_value (type);
|
||||||
|
|
||||||
store_typed_address (value_contents_raw (val), check_typedef (type), addr);
|
store_typed_address (value_contents_raw (val), check_typedef (type), addr);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -2227,6 +2237,7 @@ value_from_contents_and_address (struct type *type,
|
|||||||
CORE_ADDR address)
|
CORE_ADDR address)
|
||||||
{
|
{
|
||||||
struct value *v = allocate_value (type);
|
struct value *v = allocate_value (type);
|
||||||
|
|
||||||
if (valaddr == NULL)
|
if (valaddr == NULL)
|
||||||
set_value_lazy (v, 1);
|
set_value_lazy (v, 1);
|
||||||
else
|
else
|
||||||
@ -2259,7 +2270,6 @@ value_from_decfloat (struct type *type, const gdb_byte *dec)
|
|||||||
struct value *val = allocate_value (type);
|
struct value *val = allocate_value (type);
|
||||||
|
|
||||||
memcpy (value_contents_raw (val), dec, TYPE_LENGTH (type));
|
memcpy (value_contents_raw (val), dec, TYPE_LENGTH (type));
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2267,6 +2277,7 @@ struct value *
|
|||||||
coerce_ref (struct value *arg)
|
coerce_ref (struct value *arg)
|
||||||
{
|
{
|
||||||
struct type *value_type_arg_tmp = check_typedef (value_type (arg));
|
struct type *value_type_arg_tmp = check_typedef (value_type (arg));
|
||||||
|
|
||||||
if (TYPE_CODE (value_type_arg_tmp) == TYPE_CODE_REF)
|
if (TYPE_CODE (value_type_arg_tmp) == TYPE_CODE_REF)
|
||||||
arg = value_at_lazy (TYPE_TARGET_TYPE (value_type_arg_tmp),
|
arg = value_at_lazy (TYPE_TARGET_TYPE (value_type_arg_tmp),
|
||||||
unpack_pointer (value_type (arg),
|
unpack_pointer (value_type (arg),
|
||||||
|
45
gdb/varobj.c
45
gdb/varobj.c
@ -512,6 +512,7 @@ find_frame_addr_in_frame_chain (CORE_ADDR frame_addr)
|
|||||||
comparing it against our argument. */
|
comparing it against our argument. */
|
||||||
CORE_ADDR frame_base = get_frame_base_address (frame);
|
CORE_ADDR frame_base = get_frame_base_address (frame);
|
||||||
int addr_bit = gdbarch_addr_bit (get_frame_arch (frame));
|
int addr_bit = gdbarch_addr_bit (get_frame_arch (frame));
|
||||||
|
|
||||||
if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
|
if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
|
||||||
frame_base &= ((CORE_ADDR) 1 << addr_bit) - 1;
|
frame_base &= ((CORE_ADDR) 1 << addr_bit) - 1;
|
||||||
|
|
||||||
@ -622,6 +623,7 @@ varobj_create (char *objname,
|
|||||||
/* Error getting the value. Try to at least get the
|
/* Error getting the value. Try to at least get the
|
||||||
right type. */
|
right type. */
|
||||||
struct value *type_only_value = evaluate_type (var->root->exp);
|
struct value *type_only_value = evaluate_type (var->root->exp);
|
||||||
|
|
||||||
var->type = value_type (type_only_value);
|
var->type = value_type (type_only_value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -924,6 +926,7 @@ install_dynamic_child (struct varobj *var,
|
|||||||
{
|
{
|
||||||
/* There's no child yet. */
|
/* There's no child yet. */
|
||||||
struct varobj *child = varobj_add_child (var, name, value);
|
struct varobj *child = varobj_add_child (var, name, value);
|
||||||
|
|
||||||
if (new)
|
if (new)
|
||||||
{
|
{
|
||||||
VEC_safe_push (varobj_p, *new, child);
|
VEC_safe_push (varobj_p, *new, child);
|
||||||
@ -933,6 +936,7 @@ install_dynamic_child (struct varobj *var,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
varobj_p existing = VEC_index (varobj_p, var->children, index);
|
varobj_p existing = VEC_index (varobj_p, var->children, index);
|
||||||
|
|
||||||
if (install_new_value (existing, value, 0))
|
if (install_new_value (existing, value, 0))
|
||||||
{
|
{
|
||||||
if (changed)
|
if (changed)
|
||||||
@ -1068,6 +1072,7 @@ update_dynamic_varobj_children (struct varobj *var,
|
|||||||
if (i < VEC_length (varobj_p, var->children))
|
if (i < VEC_length (varobj_p, var->children))
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
*cchanged = 1;
|
*cchanged = 1;
|
||||||
for (j = i; j < VEC_length (varobj_p, var->children); ++j)
|
for (j = i; j < VEC_length (varobj_p, var->children); ++j)
|
||||||
varobj_delete (VEC_index (varobj_p, var->children, j), NULL, 0);
|
varobj_delete (VEC_index (varobj_p, var->children, j), NULL, 0);
|
||||||
@ -1171,6 +1176,7 @@ varobj_add_child (struct varobj *var, const char *name, struct value *value)
|
|||||||
varobj_p v = create_child_with_value (var,
|
varobj_p v = create_child_with_value (var,
|
||||||
VEC_length (varobj_p, var->children),
|
VEC_length (varobj_p, var->children),
|
||||||
name, value);
|
name, value);
|
||||||
|
|
||||||
VEC_safe_push (varobj_p, var->children, v);
|
VEC_safe_push (varobj_p, var->children, v);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -1486,6 +1492,7 @@ install_new_value (struct varobj *var, struct value *value, int initial)
|
|||||||
{
|
{
|
||||||
struct varobj *parent = var->parent;
|
struct varobj *parent = var->parent;
|
||||||
int frozen = var->frozen;
|
int frozen = var->frozen;
|
||||||
|
|
||||||
for (; !frozen && parent; parent = parent->parent)
|
for (; !frozen && parent; parent = parent->parent)
|
||||||
frozen |= parent->frozen;
|
frozen |= parent->frozen;
|
||||||
|
|
||||||
@ -1694,6 +1701,7 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
|
|||||||
if (!(*varp)->root->is_valid)
|
if (!(*varp)->root->is_valid)
|
||||||
{
|
{
|
||||||
varobj_update_result r = {0};
|
varobj_update_result r = {0};
|
||||||
|
|
||||||
r.varobj = *varp;
|
r.varobj = *varp;
|
||||||
r.status = VAROBJ_INVALID;
|
r.status = VAROBJ_INVALID;
|
||||||
VEC_safe_push (varobj_update_result, result, &r);
|
VEC_safe_push (varobj_update_result, result, &r);
|
||||||
@ -1703,6 +1711,7 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
|
|||||||
if ((*varp)->root->rootvar == *varp)
|
if ((*varp)->root->rootvar == *varp)
|
||||||
{
|
{
|
||||||
varobj_update_result r = {0};
|
varobj_update_result r = {0};
|
||||||
|
|
||||||
r.varobj = *varp;
|
r.varobj = *varp;
|
||||||
r.status = VAROBJ_IN_SCOPE;
|
r.status = VAROBJ_IN_SCOPE;
|
||||||
|
|
||||||
@ -1734,6 +1743,7 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
varobj_update_result r = {0};
|
varobj_update_result r = {0};
|
||||||
|
|
||||||
r.varobj = *varp;
|
r.varobj = *varp;
|
||||||
VEC_safe_push (varobj_update_result, stack, &r);
|
VEC_safe_push (varobj_update_result, stack, &r);
|
||||||
}
|
}
|
||||||
@ -1812,6 +1822,7 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
|
|||||||
{
|
{
|
||||||
varobj_p tmp = VEC_index (varobj_p, changed, i);
|
varobj_p tmp = VEC_index (varobj_p, changed, i);
|
||||||
varobj_update_result r = {0};
|
varobj_update_result r = {0};
|
||||||
|
|
||||||
r.varobj = tmp;
|
r.varobj = tmp;
|
||||||
r.changed = 1;
|
r.changed = 1;
|
||||||
r.value_installed = 1;
|
r.value_installed = 1;
|
||||||
@ -1820,9 +1831,11 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
|
|||||||
for (i = VEC_length (varobj_p, unchanged) - 1; i >= 0; --i)
|
for (i = VEC_length (varobj_p, unchanged) - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
varobj_p tmp = VEC_index (varobj_p, unchanged, i);
|
varobj_p tmp = VEC_index (varobj_p, unchanged, i);
|
||||||
|
|
||||||
if (!tmp->frozen)
|
if (!tmp->frozen)
|
||||||
{
|
{
|
||||||
varobj_update_result r = {0};
|
varobj_update_result r = {0};
|
||||||
|
|
||||||
r.varobj = tmp;
|
r.varobj = tmp;
|
||||||
r.value_installed = 1;
|
r.value_installed = 1;
|
||||||
VEC_safe_push (varobj_update_result, stack, &r);
|
VEC_safe_push (varobj_update_result, stack, &r);
|
||||||
@ -1847,10 +1860,12 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
|
|||||||
for (i = VEC_length (varobj_p, v->children)-1; i >= 0; --i)
|
for (i = VEC_length (varobj_p, v->children)-1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
varobj_p c = VEC_index (varobj_p, v->children, i);
|
varobj_p c = VEC_index (varobj_p, v->children, i);
|
||||||
|
|
||||||
/* Child may be NULL if explicitly deleted by -var-delete. */
|
/* Child may be NULL if explicitly deleted by -var-delete. */
|
||||||
if (c != NULL && !c->frozen)
|
if (c != NULL && !c->frozen)
|
||||||
{
|
{
|
||||||
varobj_update_result r = {0};
|
varobj_update_result r = {0};
|
||||||
|
|
||||||
r.varobj = c;
|
r.varobj = c;
|
||||||
VEC_safe_push (varobj_update_result, stack, &r);
|
VEC_safe_push (varobj_update_result, stack, &r);
|
||||||
}
|
}
|
||||||
@ -1899,6 +1914,7 @@ delete_variable_1 (struct cpstack **resultp, int *delcountp,
|
|||||||
for (i = 0; i < VEC_length (varobj_p, var->children); ++i)
|
for (i = 0; i < VEC_length (varobj_p, var->children); ++i)
|
||||||
{
|
{
|
||||||
varobj_p child = VEC_index (varobj_p, var->children, i);
|
varobj_p child = VEC_index (varobj_p, var->children, i);
|
||||||
|
|
||||||
if (!child)
|
if (!child)
|
||||||
continue;
|
continue;
|
||||||
if (!remove_from_parent_p)
|
if (!remove_from_parent_p)
|
||||||
@ -2139,6 +2155,7 @@ static struct varobj *
|
|||||||
new_root_variable (void)
|
new_root_variable (void)
|
||||||
{
|
{
|
||||||
struct varobj *var = new_variable ();
|
struct varobj *var = new_variable ();
|
||||||
|
|
||||||
var->root = (struct varobj_root *) xmalloc (sizeof (struct varobj_root));;
|
var->root = (struct varobj_root *) xmalloc (sizeof (struct varobj_root));;
|
||||||
var->root->lang = NULL;
|
var->root->lang = NULL;
|
||||||
var->root->exp = NULL;
|
var->root->exp = NULL;
|
||||||
@ -2204,8 +2221,8 @@ static struct type *
|
|||||||
get_type (struct varobj *var)
|
get_type (struct varobj *var)
|
||||||
{
|
{
|
||||||
struct type *type;
|
struct type *type;
|
||||||
type = var->type;
|
|
||||||
|
|
||||||
|
type = var->type;
|
||||||
if (type != NULL)
|
if (type != NULL)
|
||||||
type = check_typedef (type);
|
type = check_typedef (type);
|
||||||
|
|
||||||
@ -2400,6 +2417,7 @@ value_of_root (struct varobj **var_handle, int *type_changed)
|
|||||||
correct in other frames, so update the expression. */
|
correct in other frames, so update the expression. */
|
||||||
|
|
||||||
struct expression *tmp_exp = var->root->exp;
|
struct expression *tmp_exp = var->root->exp;
|
||||||
|
|
||||||
var->root->exp = tmp_var->root->exp;
|
var->root->exp = tmp_var->root->exp;
|
||||||
tmp_var->root->exp = tmp_exp;
|
tmp_var->root->exp = tmp_exp;
|
||||||
|
|
||||||
@ -2512,9 +2530,11 @@ value_get_print_value (struct value *value, enum varobj_display_formats format,
|
|||||||
{
|
{
|
||||||
PyObject *py_str
|
PyObject *py_str
|
||||||
= python_string_to_target_python_string (output);
|
= python_string_to_target_python_string (output);
|
||||||
|
|
||||||
if (py_str)
|
if (py_str)
|
||||||
{
|
{
|
||||||
char *s = PyString_AsString (py_str);
|
char *s = PyString_AsString (py_str);
|
||||||
|
|
||||||
len = PyString_Size (py_str);
|
len = PyString_Size (py_str);
|
||||||
thevalue = xmemdup (s, len + 1, len + 1);
|
thevalue = xmemdup (s, len + 1, len + 1);
|
||||||
type = builtin_type (gdbarch)->builtin_char;
|
type = builtin_type (gdbarch)->builtin_char;
|
||||||
@ -2671,7 +2691,8 @@ adjust_value_for_child_access (struct value **value,
|
|||||||
{
|
{
|
||||||
if (value && *value)
|
if (value && *value)
|
||||||
{
|
{
|
||||||
int success = gdb_value_ind (*value, value);
|
int success = gdb_value_ind (*value, value);
|
||||||
|
|
||||||
if (!success)
|
if (!success)
|
||||||
*value = NULL;
|
*value = NULL;
|
||||||
}
|
}
|
||||||
@ -2754,8 +2775,8 @@ value_struct_element_index (struct value *value, int type_index)
|
|||||||
{
|
{
|
||||||
struct value *result = NULL;
|
struct value *result = NULL;
|
||||||
volatile struct gdb_exception e;
|
volatile struct gdb_exception e;
|
||||||
|
|
||||||
struct type *type = value_type (value);
|
struct type *type = value_type (value);
|
||||||
|
|
||||||
type = check_typedef (type);
|
type = check_typedef (type);
|
||||||
|
|
||||||
gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
|
gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT
|
||||||
@ -2822,6 +2843,7 @@ c_describe_child (struct varobj *parent, int index,
|
|||||||
if (cvalue && value)
|
if (cvalue && value)
|
||||||
{
|
{
|
||||||
int real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
|
int real_index = index + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (type));
|
||||||
|
|
||||||
gdb_value_subscript (value, real_index, cvalue);
|
gdb_value_subscript (value, real_index, cvalue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2855,6 +2877,7 @@ c_describe_child (struct varobj *parent, int index,
|
|||||||
if (cfull_expression)
|
if (cfull_expression)
|
||||||
{
|
{
|
||||||
char *join = was_ptr ? "->" : ".";
|
char *join = was_ptr ? "->" : ".";
|
||||||
|
|
||||||
*cfull_expression = xstrprintf ("(%s)%s%s", parent_expression, join,
|
*cfull_expression = xstrprintf ("(%s)%s%s", parent_expression, join,
|
||||||
TYPE_FIELD_NAME (type, index));
|
TYPE_FIELD_NAME (type, index));
|
||||||
}
|
}
|
||||||
@ -2868,6 +2891,7 @@ c_describe_child (struct varobj *parent, int index,
|
|||||||
if (cvalue && value)
|
if (cvalue && value)
|
||||||
{
|
{
|
||||||
int success = gdb_value_ind (value, cvalue);
|
int success = gdb_value_ind (value, cvalue);
|
||||||
|
|
||||||
if (!success)
|
if (!success)
|
||||||
*cvalue = NULL;
|
*cvalue = NULL;
|
||||||
}
|
}
|
||||||
@ -2897,6 +2921,7 @@ static char *
|
|||||||
c_name_of_child (struct varobj *parent, int index)
|
c_name_of_child (struct varobj *parent, int index)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
c_describe_child (parent, index, &name, NULL, NULL, NULL);
|
c_describe_child (parent, index, &name, NULL, NULL, NULL);
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@ -2923,6 +2948,7 @@ check_scope (struct varobj *var)
|
|||||||
if (fi)
|
if (fi)
|
||||||
{
|
{
|
||||||
CORE_ADDR pc = get_frame_pc (fi);
|
CORE_ADDR pc = get_frame_pc (fi);
|
||||||
|
|
||||||
if (pc < BLOCK_START (var->root->valid_block) ||
|
if (pc < BLOCK_START (var->root->valid_block) ||
|
||||||
pc >= BLOCK_END (var->root->valid_block))
|
pc >= BLOCK_END (var->root->valid_block))
|
||||||
scope = 0;
|
scope = 0;
|
||||||
@ -2985,8 +3011,8 @@ static struct value *
|
|||||||
c_value_of_child (struct varobj *parent, int index)
|
c_value_of_child (struct varobj *parent, int index)
|
||||||
{
|
{
|
||||||
struct value *value = NULL;
|
struct value *value = NULL;
|
||||||
c_describe_child (parent, index, NULL, &value, NULL, NULL);
|
|
||||||
|
|
||||||
|
c_describe_child (parent, index, NULL, &value, NULL, NULL);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2994,6 +3020,7 @@ static struct type *
|
|||||||
c_type_of_child (struct varobj *parent, int index)
|
c_type_of_child (struct varobj *parent, int index)
|
||||||
{
|
{
|
||||||
struct type *type = NULL;
|
struct type *type = NULL;
|
||||||
|
|
||||||
c_describe_child (parent, index, NULL, NULL, &type, NULL);
|
c_describe_child (parent, index, NULL, NULL, &type, NULL);
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
@ -3025,6 +3052,7 @@ c_value_of_variable (struct varobj *var, enum varobj_display_formats format)
|
|||||||
case TYPE_CODE_ARRAY:
|
case TYPE_CODE_ARRAY:
|
||||||
{
|
{
|
||||||
char *number;
|
char *number;
|
||||||
|
|
||||||
number = xstrprintf ("[%d]", var->num_children);
|
number = xstrprintf ("[%d]", var->num_children);
|
||||||
return (number);
|
return (number);
|
||||||
}
|
}
|
||||||
@ -3217,6 +3245,7 @@ cplus_describe_child (struct varobj *parent, int index,
|
|||||||
|| TYPE_CODE (type) == TYPE_CODE_UNION)
|
|| TYPE_CODE (type) == TYPE_CODE_UNION)
|
||||||
{
|
{
|
||||||
char *join = was_ptr ? "->" : ".";
|
char *join = was_ptr ? "->" : ".";
|
||||||
|
|
||||||
if (CPLUS_FAKE_CHILD (parent))
|
if (CPLUS_FAKE_CHILD (parent))
|
||||||
{
|
{
|
||||||
/* The fields of the class type are ordered as they
|
/* The fields of the class type are ordered as they
|
||||||
@ -3278,6 +3307,7 @@ cplus_describe_child (struct varobj *parent, int index,
|
|||||||
if (cfull_expression)
|
if (cfull_expression)
|
||||||
{
|
{
|
||||||
char *ptr = was_ptr ? "*" : "";
|
char *ptr = was_ptr ? "*" : "";
|
||||||
|
|
||||||
/* Cast the parent to the base' type. Note that in gdb,
|
/* Cast the parent to the base' type. Note that in gdb,
|
||||||
expression like
|
expression like
|
||||||
(Base1)d
|
(Base1)d
|
||||||
@ -3296,6 +3326,7 @@ cplus_describe_child (struct varobj *parent, int index,
|
|||||||
{
|
{
|
||||||
char *access = NULL;
|
char *access = NULL;
|
||||||
int children[3];
|
int children[3];
|
||||||
|
|
||||||
cplus_class_num_children (type, children);
|
cplus_class_num_children (type, children);
|
||||||
|
|
||||||
/* Everything beyond the baseclasses can
|
/* Everything beyond the baseclasses can
|
||||||
@ -3351,6 +3382,7 @@ static char *
|
|||||||
cplus_name_of_child (struct varobj *parent, int index)
|
cplus_name_of_child (struct varobj *parent, int index)
|
||||||
{
|
{
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
|
|
||||||
cplus_describe_child (parent, index, &name, NULL, NULL, NULL);
|
cplus_describe_child (parent, index, &name, NULL, NULL, NULL);
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@ -3373,6 +3405,7 @@ static struct value *
|
|||||||
cplus_value_of_child (struct varobj *parent, int index)
|
cplus_value_of_child (struct varobj *parent, int index)
|
||||||
{
|
{
|
||||||
struct value *value = NULL;
|
struct value *value = NULL;
|
||||||
|
|
||||||
cplus_describe_child (parent, index, NULL, &value, NULL, NULL);
|
cplus_describe_child (parent, index, NULL, &value, NULL, NULL);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@ -3381,12 +3414,14 @@ static struct type *
|
|||||||
cplus_type_of_child (struct varobj *parent, int index)
|
cplus_type_of_child (struct varobj *parent, int index)
|
||||||
{
|
{
|
||||||
struct type *type = NULL;
|
struct type *type = NULL;
|
||||||
|
|
||||||
cplus_describe_child (parent, index, NULL, NULL, &type, NULL);
|
cplus_describe_child (parent, index, NULL, NULL, &type, NULL);
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
cplus_value_of_variable (struct varobj *var, enum varobj_display_formats format)
|
cplus_value_of_variable (struct varobj *var,
|
||||||
|
enum varobj_display_formats format)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* If we have one of our special types, don't print out
|
/* If we have one of our special types, don't print out
|
||||||
|
@ -240,6 +240,7 @@ find_targ_sec (bfd *abfd, asection *sect, void *obj)
|
|||||||
{
|
{
|
||||||
struct find_targ_sec_arg *args = (struct find_targ_sec_arg *) obj;
|
struct find_targ_sec_arg *args = (struct find_targ_sec_arg *) obj;
|
||||||
struct objfile *objfile = args->objfile;
|
struct objfile *objfile = args->objfile;
|
||||||
|
|
||||||
if (sect->target_index == args->targ_index)
|
if (sect->target_index == args->targ_index)
|
||||||
{
|
{
|
||||||
/* This is the section. Figure out what SECT_OFF_* code it is. */
|
/* This is the section. Figure out what SECT_OFF_* code it is. */
|
||||||
@ -258,6 +259,7 @@ static int
|
|||||||
secnum_to_section (int secnum, struct objfile *objfile)
|
secnum_to_section (int secnum, struct objfile *objfile)
|
||||||
{
|
{
|
||||||
int off = SECT_OFF_TEXT (objfile);
|
int off = SECT_OFF_TEXT (objfile);
|
||||||
|
|
||||||
asection *sect = NULL;
|
asection *sect = NULL;
|
||||||
struct find_targ_sec_arg args;
|
struct find_targ_sec_arg args;
|
||||||
args.targ_index = secnum;
|
args.targ_index = secnum;
|
||||||
@ -273,6 +275,7 @@ static asection *
|
|||||||
secnum_to_bfd_section (int secnum, struct objfile *objfile)
|
secnum_to_bfd_section (int secnum, struct objfile *objfile)
|
||||||
{
|
{
|
||||||
int off = SECT_OFF_TEXT (objfile);
|
int off = SECT_OFF_TEXT (objfile);
|
||||||
|
|
||||||
asection *sect = NULL;
|
asection *sect = NULL;
|
||||||
struct find_targ_sec_arg args;
|
struct find_targ_sec_arg args;
|
||||||
args.targ_index = secnum;
|
args.targ_index = secnum;
|
||||||
@ -372,6 +375,7 @@ compare_lte (const void *lte1p, const void *lte2p)
|
|||||||
{
|
{
|
||||||
struct linetable_entry *lte1 = (struct linetable_entry *) lte1p;
|
struct linetable_entry *lte1 = (struct linetable_entry *) lte1p;
|
||||||
struct linetable_entry *lte2 = (struct linetable_entry *) lte2p;
|
struct linetable_entry *lte2 = (struct linetable_entry *) lte2p;
|
||||||
|
|
||||||
return lte1->pc - lte2->pc;
|
return lte1->pc - lte2->pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,10 +403,8 @@ arrange_linetable (struct linetable *oldLineTb)
|
|||||||
|
|
||||||
for (function_count = 0, ii = 0; ii < oldLineTb->nitems; ++ii)
|
for (function_count = 0, ii = 0; ii < oldLineTb->nitems; ++ii)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (oldLineTb->item[ii].line == 0)
|
if (oldLineTb->item[ii].line == 0)
|
||||||
{ /* function entry found. */
|
{ /* function entry found. */
|
||||||
|
|
||||||
if (function_count >= fentry_size)
|
if (function_count >= fentry_size)
|
||||||
{ /* make sure you have room. */
|
{ /* make sure you have room. */
|
||||||
fentry_size *= 2;
|
fentry_size *= 2;
|
||||||
@ -553,8 +555,8 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
|
|||||||
{
|
{
|
||||||
int offset, ii;
|
int offset, ii;
|
||||||
file_ptr max_offset =
|
file_ptr max_offset =
|
||||||
((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)
|
((struct coff_symfile_info *) this_symtab_psymtab->objfile
|
||||||
->max_lineno_offset;
|
->deprecated_sym_private)->max_lineno_offset;
|
||||||
|
|
||||||
/* subfile structure for the main compilation unit. */
|
/* subfile structure for the main compilation unit. */
|
||||||
struct subfile main_subfile;
|
struct subfile main_subfile;
|
||||||
@ -614,7 +616,6 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
/* Have a new subfile for the include file. */
|
/* Have a new subfile for the include file. */
|
||||||
|
|
||||||
tmpSubfile = inclTable[ii].subfile =
|
tmpSubfile = inclTable[ii].subfile =
|
||||||
@ -708,6 +709,7 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
|
|||||||
one when passed to deduce_language_from_filename. Kludge on
|
one when passed to deduce_language_from_filename. Kludge on
|
||||||
top of kludge. */
|
top of kludge. */
|
||||||
char *fakename = strrchr (inclTable[ii].name, '.');
|
char *fakename = strrchr (inclTable[ii].name, '.');
|
||||||
|
|
||||||
if (fakename == NULL)
|
if (fakename == NULL)
|
||||||
fakename = " ?";
|
fakename = " ?";
|
||||||
start_subfile (fakename, (char *) 0);
|
start_subfile (fakename, (char *) 0);
|
||||||
@ -851,11 +853,13 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset, unsigned endoff
|
|||||||
#define RECORD_MINIMAL_SYMBOL(NAME, ADDR, TYPE, SECTION, OBJFILE) \
|
#define RECORD_MINIMAL_SYMBOL(NAME, ADDR, TYPE, SECTION, OBJFILE) \
|
||||||
{ \
|
{ \
|
||||||
char *namestr; \
|
char *namestr; \
|
||||||
namestr = (NAME); \
|
\
|
||||||
if (namestr[0] == '.') ++namestr; \
|
namestr = (NAME); \
|
||||||
prim_record_minimal_symbol_and_info (namestr, (ADDR), (TYPE), \
|
if (namestr[0] == '.') ++namestr; \
|
||||||
(SECTION), (asection *)NULL, (OBJFILE)); \
|
prim_record_minimal_symbol_and_info (namestr, (ADDR), (TYPE), \
|
||||||
misc_func_recorded = 1; \
|
(SECTION), (asection *)NULL, \
|
||||||
|
(OBJFILE)); \
|
||||||
|
misc_func_recorded = 1; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -885,6 +889,7 @@ xcoff_next_symbol_text (struct objfile *objfile)
|
|||||||
{
|
{
|
||||||
struct internal_syment symbol;
|
struct internal_syment symbol;
|
||||||
char *retval;
|
char *retval;
|
||||||
|
|
||||||
/* FIXME: is this the same as the passed arg? */
|
/* FIXME: is this the same as the passed arg? */
|
||||||
if (this_symtab_psymtab)
|
if (this_symtab_psymtab)
|
||||||
objfile = this_symtab_psymtab->objfile;
|
objfile = this_symtab_psymtab->objfile;
|
||||||
@ -926,9 +931,10 @@ read_xcoff_symtab (struct partial_symtab *pst)
|
|||||||
struct objfile *objfile = pst->objfile;
|
struct objfile *objfile = pst->objfile;
|
||||||
bfd *abfd = objfile->obfd;
|
bfd *abfd = objfile->obfd;
|
||||||
char *raw_auxptr; /* Pointer to first raw aux entry for sym */
|
char *raw_auxptr; /* Pointer to first raw aux entry for sym */
|
||||||
char *strtbl = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl;
|
char *strtbl =
|
||||||
|
((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl;
|
||||||
char *debugsec =
|
char *debugsec =
|
||||||
((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec;
|
((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec;
|
||||||
char *debugfmt = bfd_xcoff_is_xcoff64 (abfd) ? "XCOFF64" : "XCOFF";
|
char *debugfmt = bfd_xcoff_is_xcoff64 (abfd) ? "XCOFF64" : "XCOFF";
|
||||||
|
|
||||||
struct internal_syment symbol[1];
|
struct internal_syment symbol[1];
|
||||||
@ -979,7 +985,6 @@ read_xcoff_symtab (struct partial_symtab *pst)
|
|||||||
|
|
||||||
while (symnum < max_symnum)
|
while (symnum < max_symnum)
|
||||||
{
|
{
|
||||||
|
|
||||||
QUIT; /* make this command interruptable. */
|
QUIT; /* make this command interruptable. */
|
||||||
|
|
||||||
/* READ_ONE_SYMBOL (symbol, cs, symname_alloced); */
|
/* READ_ONE_SYMBOL (symbol, cs, symname_alloced); */
|
||||||
@ -1008,6 +1013,7 @@ read_xcoff_symtab (struct partial_symtab *pst)
|
|||||||
if (cs->c_name[E_SYMNMLEN - 1] != '\0')
|
if (cs->c_name[E_SYMNMLEN - 1] != '\0')
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = obstack_alloc (&objfile->objfile_obstack, E_SYMNMLEN + 1);
|
p = obstack_alloc (&objfile->objfile_obstack, E_SYMNMLEN + 1);
|
||||||
strncpy (p, cs->c_name, E_SYMNMLEN);
|
strncpy (p, cs->c_name, E_SYMNMLEN);
|
||||||
p[E_SYMNMLEN] = '\0';
|
p[E_SYMNMLEN] = '\0';
|
||||||
@ -1222,7 +1228,6 @@ read_xcoff_symtab (struct partial_symtab *pst)
|
|||||||
|
|
||||||
switch (cs->c_sclass)
|
switch (cs->c_sclass)
|
||||||
{
|
{
|
||||||
|
|
||||||
case C_FILE:
|
case C_FILE:
|
||||||
|
|
||||||
/* c_value field contains symnum of next .file entry in table
|
/* c_value field contains symnum of next .file entry in table
|
||||||
@ -1275,6 +1280,7 @@ read_xcoff_symtab (struct partial_symtab *pst)
|
|||||||
{
|
{
|
||||||
CORE_ADDR off = ANOFFSET (objfile->section_offsets,
|
CORE_ADDR off = ANOFFSET (objfile->section_offsets,
|
||||||
SECT_OFF_TEXT (objfile));
|
SECT_OFF_TEXT (objfile));
|
||||||
|
|
||||||
bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
|
bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
|
||||||
0, cs->c_naux, &main_aux);
|
0, cs->c_naux, &main_aux);
|
||||||
|
|
||||||
@ -1290,7 +1296,6 @@ read_xcoff_symtab (struct partial_symtab *pst)
|
|||||||
}
|
}
|
||||||
else if (strcmp (cs->c_name, ".ef") == 0)
|
else if (strcmp (cs->c_name, ".ef") == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
|
bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
|
||||||
0, cs->c_naux, &main_aux);
|
0, cs->c_naux, &main_aux);
|
||||||
|
|
||||||
@ -1300,7 +1305,7 @@ read_xcoff_symtab (struct partial_symtab *pst)
|
|||||||
contains number of lines to '}' */
|
contains number of lines to '}' */
|
||||||
|
|
||||||
if (context_stack_depth <= 0)
|
if (context_stack_depth <= 0)
|
||||||
{ /* We attempted to pop an empty context stack */
|
{ /* We attempted to pop an empty context stack */
|
||||||
ef_complaint (cs->c_symnum);
|
ef_complaint (cs->c_symnum);
|
||||||
within_function = 0;
|
within_function = 0;
|
||||||
break;
|
break;
|
||||||
@ -1612,9 +1617,10 @@ static void
|
|||||||
read_symbol (struct internal_syment *symbol, int symno)
|
read_symbol (struct internal_syment *symbol, int symno)
|
||||||
{
|
{
|
||||||
int nsyms =
|
int nsyms =
|
||||||
((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl_num_syms;
|
((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl_num_syms;
|
||||||
char *stbl =
|
char *stbl =
|
||||||
((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl;
|
((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl;
|
||||||
|
|
||||||
if (symno < 0 || symno >= nsyms)
|
if (symno < 0 || symno >= nsyms)
|
||||||
{
|
{
|
||||||
complaint (&symfile_complaints, _("Invalid symbol offset"));
|
complaint (&symfile_complaints, _("Invalid symbol offset"));
|
||||||
@ -1686,6 +1692,7 @@ read_symbol_lineno (int symno)
|
|||||||
if (symbol->n_sclass == C_FCN)
|
if (symbol->n_sclass == C_FCN)
|
||||||
{
|
{
|
||||||
char *name = xcoff64 ? strtbl + symbol->n_offset : symbol->n_name;
|
char *name = xcoff64 ? strtbl + symbol->n_offset : symbol->n_name;
|
||||||
|
|
||||||
if (strcmp (name, ".bf") == 0)
|
if (strcmp (name, ".bf") == 0)
|
||||||
goto gotit;
|
goto gotit;
|
||||||
}
|
}
|
||||||
@ -1953,11 +1960,11 @@ xcoff_start_psymtab (struct objfile *objfile, char *filename, int first_symnum,
|
|||||||
struct partial_symbol **static_syms)
|
struct partial_symbol **static_syms)
|
||||||
{
|
{
|
||||||
struct partial_symtab *result =
|
struct partial_symtab *result =
|
||||||
start_psymtab_common (objfile, objfile->section_offsets,
|
start_psymtab_common (objfile, objfile->section_offsets,
|
||||||
filename,
|
filename,
|
||||||
/* We fill in textlow later. */
|
/* We fill in textlow later. */
|
||||||
0,
|
0,
|
||||||
global_syms, static_syms);
|
global_syms, static_syms);
|
||||||
|
|
||||||
result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
|
result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
|
||||||
sizeof (struct symloc));
|
sizeof (struct symloc));
|
||||||
@ -2018,7 +2025,7 @@ xcoff_end_psymtab (struct partial_symtab *pst, char **include_list,
|
|||||||
for (i = 0; i < num_includes; i++)
|
for (i = 0; i < num_includes; i++)
|
||||||
{
|
{
|
||||||
struct partial_symtab *subpst =
|
struct partial_symtab *subpst =
|
||||||
allocate_psymtab (include_list[i], objfile);
|
allocate_psymtab (include_list[i], objfile);
|
||||||
|
|
||||||
subpst->section_offsets = pst->section_offsets;
|
subpst->section_offsets = pst->section_offsets;
|
||||||
subpst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
|
subpst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
|
||||||
@ -2089,6 +2096,7 @@ swap_sym (struct internal_syment *symbol, union internal_auxent *aux,
|
|||||||
/* FIXME: wastes memory for symbols which we don't end up putting
|
/* FIXME: wastes memory for symbols which we don't end up putting
|
||||||
into the minimal symbols. */
|
into the minimal symbols. */
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
p = obstack_alloc (&objfile->objfile_obstack, E_SYMNMLEN + 1);
|
p = obstack_alloc (&objfile->objfile_obstack, E_SYMNMLEN + 1);
|
||||||
strncpy (p, symbol->n_name, E_SYMNMLEN);
|
strncpy (p, symbol->n_name, E_SYMNMLEN);
|
||||||
p[E_SYMNMLEN] = '\0';
|
p[E_SYMNMLEN] = '\0';
|
||||||
@ -2281,7 +2289,8 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
if (pst != NULL)
|
if (pst != NULL)
|
||||||
{
|
{
|
||||||
CORE_ADDR highval =
|
CORE_ADDR highval =
|
||||||
symbol.n_value + csect_aux.x_csect.x_scnlen.l;
|
symbol.n_value + csect_aux.x_csect.x_scnlen.l;
|
||||||
|
|
||||||
if (highval > pst->texthigh)
|
if (highval > pst->texthigh)
|
||||||
pst->texthigh = highval;
|
pst->texthigh = highval;
|
||||||
if (pst->textlow == 0 || symbol.n_value < pst->textlow)
|
if (pst->textlow == 0 || symbol.n_value < pst->textlow)
|
||||||
@ -2413,7 +2422,6 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
|
|
||||||
if (last_csect_name && !misc_func_recorded)
|
if (last_csect_name && !misc_func_recorded)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* If no misc. function recorded in the last seen csect, enter
|
/* If no misc. function recorded in the last seen csect, enter
|
||||||
it as a function. This will take care of functions like
|
it as a function. This will take care of functions like
|
||||||
strcmp() compiled by xlc. */
|
strcmp() compiled by xlc. */
|
||||||
@ -2507,6 +2515,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
/* We probably could save a few instructions by assuming that
|
/* We probably could save a few instructions by assuming that
|
||||||
C_LSYM, C_PSYM, etc., never have auxents. */
|
C_LSYM, C_PSYM, etc., never have auxents. */
|
||||||
int naux1 = symbol.n_numaux + 1;
|
int naux1 = symbol.n_numaux + 1;
|
||||||
|
|
||||||
ssymnum += naux1;
|
ssymnum += naux1;
|
||||||
sraw_symbol += bfd_coff_symesz (abfd) * naux1;
|
sraw_symbol += bfd_coff_symesz (abfd) * naux1;
|
||||||
}
|
}
|
||||||
@ -2516,6 +2525,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
{
|
{
|
||||||
/* Mark down an include file in the current psymtab */
|
/* Mark down an include file in the current psymtab */
|
||||||
enum language tmp_language;
|
enum language tmp_language;
|
||||||
|
|
||||||
swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
|
swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
|
||||||
&ssymnum, objfile);
|
&ssymnum, objfile);
|
||||||
|
|
||||||
@ -2542,8 +2552,10 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
in a binary tree, if profiling shows this is a major hog). */
|
in a binary tree, if profiling shows this is a major hog). */
|
||||||
if (pst && strcmp (namestring, pst->filename) == 0)
|
if (pst && strcmp (namestring, pst->filename) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < includes_used; i++)
|
for (i = 0; i < includes_used; i++)
|
||||||
if (strcmp (namestring, psymtab_include_list[i]) == 0)
|
if (strcmp (namestring, psymtab_include_list[i]) == 0)
|
||||||
{
|
{
|
||||||
@ -2578,6 +2590,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
case C_STSYM:
|
case C_STSYM:
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
|
swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
|
||||||
&ssymnum, objfile);
|
&ssymnum, objfile);
|
||||||
|
|
||||||
@ -2742,6 +2755,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
{
|
{
|
||||||
int name_len = p - namestring;
|
int name_len = p - namestring;
|
||||||
char *name = xmalloc (name_len + 1);
|
char *name = xmalloc (name_len + 1);
|
||||||
|
|
||||||
memcpy (name, namestring, name_len);
|
memcpy (name, namestring, name_len);
|
||||||
name[name_len] = '\0';
|
name[name_len] = '\0';
|
||||||
function_outside_compilation_unit_complaint (name);
|
function_outside_compilation_unit_complaint (name);
|
||||||
@ -2763,6 +2777,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||||||
{
|
{
|
||||||
int name_len = p - namestring;
|
int name_len = p - namestring;
|
||||||
char *name = xmalloc (name_len + 1);
|
char *name = xmalloc (name_len + 1);
|
||||||
|
|
||||||
memcpy (name, namestring, name_len);
|
memcpy (name, namestring, name_len);
|
||||||
name[name_len] = '\0';
|
name[name_len] = '\0';
|
||||||
function_outside_compilation_unit_complaint (name);
|
function_outside_compilation_unit_complaint (name);
|
||||||
|
@ -560,6 +560,7 @@ gdb_xml_parse (struct gdb_xml_parser *parser, const char *buffer)
|
|||||||
else if (status == XML_STATUS_ERROR)
|
else if (status == XML_STATUS_ERROR)
|
||||||
{
|
{
|
||||||
enum XML_Error err = XML_GetErrorCode (parser->expat_parser);
|
enum XML_Error err = XML_GetErrorCode (parser->expat_parser);
|
||||||
|
|
||||||
error_string = XML_ErrorString (err);
|
error_string = XML_ErrorString (err);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1016,6 +1017,7 @@ obstack_xml_printf (struct obstack *obstack, const char *format, ...)
|
|||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
char *a = va_arg (ap, char *);
|
char *a = va_arg (ap, char *);
|
||||||
|
|
||||||
obstack_grow (obstack, prev, f - prev - 1);
|
obstack_grow (obstack, prev, f - prev - 1);
|
||||||
p = xml_escape_text (a);
|
p = xml_escape_text (a);
|
||||||
obstack_grow_str (obstack, p);
|
obstack_grow_str (obstack, p);
|
||||||
@ -1046,6 +1048,7 @@ xml_fetch_content_from_file (const char *filename, void *baton)
|
|||||||
if (dirname && *dirname)
|
if (dirname && *dirname)
|
||||||
{
|
{
|
||||||
char *fullname = concat (dirname, "/", filename, (char *) NULL);
|
char *fullname = concat (dirname, "/", filename, (char *) NULL);
|
||||||
|
|
||||||
if (fullname == NULL)
|
if (fullname == NULL)
|
||||||
nomem (0);
|
nomem (0);
|
||||||
file = fopen (fullname, FOPEN_RT);
|
file = fopen (fullname, FOPEN_RT);
|
||||||
|
@ -261,6 +261,7 @@ tdesc_start_struct (struct gdb_xml_parser *parser,
|
|||||||
{
|
{
|
||||||
int size = (int) * (ULONGEST *)
|
int size = (int) * (ULONGEST *)
|
||||||
VEC_index (gdb_xml_value_s, attributes, 1)->value;
|
VEC_index (gdb_xml_value_s, attributes, 1)->value;
|
||||||
|
|
||||||
tdesc_set_struct_size (type, size);
|
tdesc_set_struct_size (type, size);
|
||||||
data->current_type_size = size;
|
data->current_type_size = size;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user