Browse Source

* dwarf2loc.c (loclist_read_variable): Set optimized_out

instead of reporting an error.
	* valprint.c (value_check_printable): New function.
	(common_val_print): New function.  Use value_check_printable.
	(value_print): Use value_check_printable.
	* value.h (common_val_print): Add prototype.

	* c-valprint.c (c_val_print): Use common_val_print.
	* cp-valprint.c (cp_print_value_fields): Likewise.
	(cp_print_hpacc_virtual_table_entries): Likewise.
	* f-valprint.c (f_val_print): Likewise.
	* jv-valprint.c (java_value_print, java_print_value_fields):
	Likewise.
	* scm-valprint.c (scm_value_print): Likewise.
	* stack.c (print_frame_args): Likewise.
	* varobj.c (c_value_of_variable): Likewise.
	* p-valprint.c (pascal_val_print, pascal_value_print): Likewise.
	(pascal_object_print_value_fields): Likewise.  Update call to
	pascal_object_print_static_field.
	(pascal_object_print_static_field): Remove TYPE argument.  Use
	common_val_print.
binutils-csl-arm-2005q1-branch
Daniel Jacobowitz 22 years ago
parent
commit
806048c68a
  1. 24
      gdb/ChangeLog
  2. 16
      gdb/c-valprint.c
  3. 9
      gdb/cp-valprint.c
  4. 11
      gdb/dwarf2loc.c
  5. 11
      gdb/f-valprint.c
  6. 14
      gdb/jv-valprint.c
  7. 34
      gdb/p-valprint.c
  8. 3
      gdb/scm-valprint.c
  9. 4
      gdb/stack.c
  10. 59
      gdb/valprint.c
  11. 5
      gdb/value.h
  12. 6
      gdb/varobj.c

24
gdb/ChangeLog

@ -1,3 +1,27 @@
2005-02-28 Daniel Jacobowitz <dan@codesourcery.com>
* dwarf2loc.c (loclist_read_variable): Set optimized_out
instead of reporting an error.
* valprint.c (value_check_printable): New function.
(common_val_print): New function. Use value_check_printable.
(value_print): Use value_check_printable.
* value.h (common_val_print): Add prototype.
* c-valprint.c (c_val_print): Use common_val_print.
* cp-valprint.c (cp_print_value_fields): Likewise.
(cp_print_hpacc_virtual_table_entries): Likewise.
* f-valprint.c (f_val_print): Likewise.
* jv-valprint.c (java_value_print, java_print_value_fields):
Likewise.
* scm-valprint.c (scm_value_print): Likewise.
* stack.c (print_frame_args): Likewise.
* varobj.c (c_value_of_variable): Likewise.
* p-valprint.c (pascal_val_print, pascal_value_print): Likewise.
(pascal_object_print_value_fields): Likewise. Update call to
pascal_object_print_static_field.
(pascal_object_print_static_field): Remove TYPE argument. Use
common_val_print.
2005-02-25 Mark Kettenis <kettenis@gnu.org> 2005-02-25 Mark Kettenis <kettenis@gnu.org>
Committed by Elena Zannoni <ezannoni@redhat.com> Committed by Elena Zannoni <ezannoni@redhat.com>

16
gdb/c-valprint.c

@ -233,9 +233,8 @@ c_val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
wtype = TYPE_TARGET_TYPE (type); wtype = TYPE_TARGET_TYPE (type);
} }
vt_val = value_at (wtype, vt_address); vt_val = value_at (wtype, vt_address);
val_print (value_type (vt_val), value_contents (vt_val), 0, common_val_print (vt_val, stream, format,
VALUE_ADDRESS (vt_val), stream, format, deref_ref, recurse + 1, pretty);
deref_ref, recurse + 1, pretty);
if (pretty) if (pretty)
{ {
fprintf_filtered (stream, "\n"); fprintf_filtered (stream, "\n");
@ -283,15 +282,8 @@ c_val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
(TYPE_TARGET_TYPE (type), (TYPE_TARGET_TYPE (type),
unpack_pointer (lookup_pointer_type (builtin_type_void), unpack_pointer (lookup_pointer_type (builtin_type_void),
valaddr + embedded_offset)); valaddr + embedded_offset));
val_print (value_type (deref_val), common_val_print (deref_val, stream, format, deref_ref,
value_contents (deref_val), recurse, pretty);
0,
VALUE_ADDRESS (deref_val),
stream,
format,
deref_ref,
recurse,
pretty);
} }
else else
fputs_filtered ("???", stream); fputs_filtered ("???", stream);

9
gdb/cp-valprint.c

@ -389,8 +389,7 @@ cp_print_value_fields (struct type *type, struct type *real_type,
(TYPE_FIELD_TYPE (type, i), (TYPE_FIELD_TYPE (type, i),
unpack_field_as_long (type, valaddr + offset, i)); unpack_field_as_long (type, valaddr + offset, i));
val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), common_val_print (v, stream, format, 0, recurse + 1, pretty);
0, 0, stream, format, 0, recurse + 1, pretty);
} }
} }
else else
@ -454,8 +453,7 @@ cp_print_value_fields (struct type *type, struct type *real_type,
v = value_from_pointer (lookup_pointer_type (builtin_type_unsigned_long), v = value_from_pointer (lookup_pointer_type (builtin_type_unsigned_long),
*(unsigned long *) (valaddr + offset)); *(unsigned long *) (valaddr + offset));
val_print (value_type (v), value_contents (v), 0, 0, common_val_print (v, stream, format, 0, recurse + 1, pretty);
stream, format, 0, recurse + 1, pretty);
fields_seen = 1; fields_seen = 1;
if (vtblprint) if (vtblprint)
@ -822,8 +820,7 @@ cp_print_hpacc_virtual_table_entries (struct type *type, int *vfuncs,
deprecated_set_value_type (vf, value_type (v)); deprecated_set_value_type (vf, value_type (v));
/* print out the entry */ /* print out the entry */
val_print (value_type (vf), value_contents (vf), 0, 0, common_val_print (vf, stream, format, 0, recurse + 1, pretty);
stream, format, 0, recurse + 1, pretty);
field_physname field_physname
= TYPE_FN_FIELD_PHYSNAME (TYPE_FN_FIELDLIST1 (type, fn), oi); = TYPE_FN_FIELD_PHYSNAME (TYPE_FN_FIELDLIST1 (type, fn), oi);
/* pai: (temp) FIXME Maybe this should be DMGL_ANSI */ /* pai: (temp) FIXME Maybe this should be DMGL_ANSI */

11
gdb/dwarf2loc.c

@ -512,9 +512,14 @@ loclist_read_variable (struct symbol *symbol, struct frame_info *frame)
data = find_location_expression (dlbaton, &size, data = find_location_expression (dlbaton, &size,
frame ? get_frame_pc (frame) : 0); frame ? get_frame_pc (frame) : 0);
if (data == NULL) if (data == NULL)
error (_("Variable \"%s\" is not available."), SYMBOL_NATURAL_NAME (symbol)); {
val = allocate_value (SYMBOL_TYPE (symbol));
val = dwarf2_evaluate_loc_desc (symbol, frame, data, size, dlbaton->objfile); VALUE_LVAL (val) = not_lval;
set_value_optimized_out (val, 1);
}
else
val = dwarf2_evaluate_loc_desc (symbol, frame, data, size,
dlbaton->objfile);
return val; return val;
} }

11
gdb/f-valprint.c

@ -440,15 +440,8 @@ f_val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
(TYPE_TARGET_TYPE (type), (TYPE_TARGET_TYPE (type),
unpack_pointer (lookup_pointer_type (builtin_type_void), unpack_pointer (lookup_pointer_type (builtin_type_void),
valaddr + embedded_offset)); valaddr + embedded_offset));
val_print (value_type (deref_val), common_val_print (deref_val, stream, format, deref_ref, recurse,
value_contents (deref_val), pretty);
0,
VALUE_ADDRESS (deref_val),
stream,
format,
deref_ref,
recurse,
pretty);
} }
else else
fputs_filtered ("???", stream); fputs_filtered ("???", stream);

14
gdb/jv-valprint.c

@ -182,8 +182,7 @@ java_value_print (struct value *val, struct ui_file *stream, int format,
else else
fprintf_filtered (stream, "%d..%d: ", i, i + reps - 1); fprintf_filtered (stream, "%d..%d: ", i, i + reps - 1);
val_print (value_type (v), value_contents (v), 0, 0, common_val_print (v, stream, format, 2, 1, pretty);
stream, format, 2, 1, pretty);
things_printed++; things_printed++;
i += reps; i += reps;
@ -235,8 +234,7 @@ java_value_print (struct value *val, struct ui_file *stream, int format,
return 0; return 0;
} }
return (val_print (type, value_contents (val), 0, address, return common_val_print (val, stream, format, 1, 0, pretty);
stream, format, 1, 0, pretty));
} }
/* TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and PRETTY have the /* TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and PRETTY have the
@ -384,8 +382,7 @@ java_print_value_fields (struct type *type, const bfd_byte *valaddr,
v = value_from_longest (TYPE_FIELD_TYPE (type, i), v = value_from_longest (TYPE_FIELD_TYPE (type, i),
unpack_field_as_long (type, valaddr, i)); unpack_field_as_long (type, valaddr, i));
val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), 0, common_val_print (v, stream, format, 0, recurse + 1, pretty);
0, stream, format, 0, recurse + 1, pretty);
} }
} }
else else
@ -404,9 +401,8 @@ java_print_value_fields (struct type *type, const bfd_byte *valaddr,
struct type *t = check_typedef (value_type (v)); struct type *t = check_typedef (value_type (v));
if (TYPE_CODE (t) == TYPE_CODE_STRUCT) if (TYPE_CODE (t) == TYPE_CODE_STRUCT)
v = value_addr (v); v = value_addr (v);
val_print (value_type (v), common_val_print (v, stream, format, 0, recurse + 1,
value_contents (v), 0, VALUE_ADDRESS (v), pretty);
stream, format, 0, recurse + 1, pretty);
} }
} }
else if (TYPE_FIELD_TYPE (type, i) == NULL) else if (TYPE_FIELD_TYPE (type, i) == NULL)

34
gdb/p-valprint.c

@ -240,9 +240,8 @@ pascal_val_print (struct type *type, const bfd_byte *valaddr,
wtype = TYPE_TARGET_TYPE (type); wtype = TYPE_TARGET_TYPE (type);
} }
vt_val = value_at (wtype, vt_address); vt_val = value_at (wtype, vt_address);
val_print (value_type (vt_val), value_contents (vt_val), 0, common_val_print (vt_val, stream, format, deref_ref,
VALUE_ADDRESS (vt_val), stream, format, recurse + 1, pretty);
deref_ref, recurse + 1, pretty);
if (pretty) if (pretty)
{ {
fprintf_filtered (stream, "\n"); fprintf_filtered (stream, "\n");
@ -292,10 +291,8 @@ pascal_val_print (struct type *type, const bfd_byte *valaddr,
(TYPE_TARGET_TYPE (type), (TYPE_TARGET_TYPE (type),
unpack_pointer (lookup_pointer_type (builtin_type_void), unpack_pointer (lookup_pointer_type (builtin_type_void),
valaddr + embedded_offset)); valaddr + embedded_offset));
val_print (value_type (deref_val), common_val_print (deref_val, stream, format, deref_ref,
value_contents (deref_val), 0, recurse + 1, pretty);
VALUE_ADDRESS (deref_val), stream, format,
deref_ref, recurse + 1, pretty);
} }
else else
fputs_filtered ("???", stream); fputs_filtered ("???", stream);
@ -566,9 +563,7 @@ pascal_value_print (struct value *val, struct ui_file *stream, int format,
fprintf_filtered (stream, ") "); fprintf_filtered (stream, ") ");
} }
} }
return val_print (type, value_contents (val), value_embedded_offset (val), return common_val_print (val, stream, format, 1, 0, pretty);
VALUE_ADDRESS (val) + value_offset (val),
stream, format, 1, 0, pretty);
} }
@ -591,7 +586,7 @@ show_pascal_static_field_print (struct ui_file *file, int from_tty,
static struct obstack dont_print_vb_obstack; static struct obstack dont_print_vb_obstack;
static struct obstack dont_print_statmem_obstack; static struct obstack dont_print_statmem_obstack;
static void pascal_object_print_static_field (struct type *, struct value *, static void pascal_object_print_static_field (struct value *,
struct ui_file *, int, int, struct ui_file *, int, int,
enum val_prettyprint); enum val_prettyprint);
@ -854,8 +849,7 @@ pascal_object_print_value_fields (struct type *type, const bfd_byte *valaddr,
v = value_from_longest (TYPE_FIELD_TYPE (type, i), v = value_from_longest (TYPE_FIELD_TYPE (type, i),
unpack_field_as_long (type, valaddr, i)); unpack_field_as_long (type, valaddr, i));
val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), 0, 0, common_val_print (v, stream, format, 0, recurse + 1, pretty);
stream, format, 0, recurse + 1, pretty);
} }
} }
else else
@ -874,9 +868,8 @@ pascal_object_print_value_fields (struct type *type, const bfd_byte *valaddr,
if (v == NULL) if (v == NULL)
fputs_filtered ("<optimized out>", stream); fputs_filtered ("<optimized out>", stream);
else else
pascal_object_print_static_field (TYPE_FIELD_TYPE (type, i), v, pascal_object_print_static_field (v, stream, format,
stream, format, recurse + 1, recurse + 1, pretty);
pretty);
} }
else else
{ {
@ -1017,14 +1010,16 @@ pascal_object_print_value (struct type *type, const bfd_byte *valaddr,
static member classes in an obstack and refuse to print them more static member classes in an obstack and refuse to print them more
than once. than once.
VAL contains the value to print, TYPE, STREAM, RECURSE, and PRETTY VAL contains the value to print, STREAM, RECURSE, and PRETTY
have the same meanings as in c_val_print. */ have the same meanings as in c_val_print. */
static void static void
pascal_object_print_static_field (struct type *type, struct value *val, pascal_object_print_static_field (struct value *val,
struct ui_file *stream, int format, struct ui_file *stream, int format,
int recurse, enum val_prettyprint pretty) int recurse, enum val_prettyprint pretty)
{ {
struct type *type = value_type (val);
if (TYPE_CODE (type) == TYPE_CODE_STRUCT) if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
{ {
CORE_ADDR *first_dont_print; CORE_ADDR *first_dont_print;
@ -1053,8 +1048,7 @@ pascal_object_print_static_field (struct type *type, struct value *val,
stream, format, recurse, pretty, NULL, 1); stream, format, recurse, pretty, NULL, 1);
return; return;
} }
val_print (type, value_contents (val), 0, VALUE_ADDRESS (val), common_val_print (val, stream, format, 0, recurse, pretty);
stream, format, 0, recurse, pretty);
} }
void void

3
gdb/scm-valprint.c

@ -391,6 +391,5 @@ int
scm_value_print (struct value *val, struct ui_file *stream, int format, scm_value_print (struct value *val, struct ui_file *stream, int format,
enum val_prettyprint pretty) enum val_prettyprint pretty)
{ {
return (val_print (value_type (val), value_contents (val), 0, return (common_val_print (val, stream, format, 1, 0, pretty));
VALUE_ADDRESS (val), stream, format, 1, 0, pretty));
} }

4
gdb/stack.c

@ -354,9 +354,7 @@ print_frame_args (struct symbol *func, struct frame_info *fi, int num,
if (val) if (val)
{ {
val_print (value_type (val), value_contents (val), 0, common_val_print (val, stb->stream, 0, 0, 2, Val_no_prettyprint);
VALUE_ADDRESS (val),
stb->stream, 0, 0, 2, Val_no_prettyprint);
ui_out_field_stream (uiout, "value", stb); ui_out_field_stream (uiout, "value", stb);
} }
else else

59
gdb/valprint.c

@ -217,25 +217,66 @@ val_print (struct type *type, const bfd_byte *valaddr, int embedded_offset,
stream, format, deref_ref, recurse, pretty)); stream, format, deref_ref, recurse, pretty));
} }
/* Print the value VAL in C-ish syntax on stream STREAM. /* Check whether the value VAL is printable. Return 1 if it is;
FORMAT is a format-letter, or 0 for print in natural format of data type. return 0 and print an appropriate error message to STREAM if it
If the object printed is a string pointer, returns is not. */
the number of string bytes printed. */
int static int
value_print (struct value *val, struct ui_file *stream, int format, value_check_printable (struct value *val, struct ui_file *stream)
enum val_prettyprint pretty)
{ {
if (val == 0) if (val == 0)
{ {
printf_filtered (_("<address of value unknown>")); fprintf_filtered (stream, _("<address of value unknown>"));
return 0; return 0;
} }
if (value_optimized_out (val)) if (value_optimized_out (val))
{ {
printf_filtered (_("<value optimized out>")); fprintf_filtered (stream, _("<value optimized out>"));
return 0; return 0;
} }
return 1;
}
/* Print the value VAL onto stream STREAM according to FORMAT (a
letter, or 0 for natural format using TYPE).
If DEREF_REF is nonzero, then dereference references, otherwise just print
them like pointers.
The PRETTY parameter controls prettyprinting.
If the data are a string pointer, returns the number of string characters
printed.
This is a preferable interface to val_print, above, because it uses
GDB's value mechanism. */
int
common_val_print (struct value *val, struct ui_file *stream, int format,
int deref_ref, int recurse, enum val_prettyprint pretty)
{
if (!value_check_printable (val, stream))
return 0;
return val_print (value_type (val), value_contents_all (val),
value_embedded_offset (val), VALUE_ADDRESS (val),
stream, format, deref_ref, recurse, pretty);
}
/* Print the value VAL in C-ish syntax on stream STREAM.
FORMAT is a format-letter, or 0 for print in natural format of data type.
If the object printed is a string pointer, returns
the number of string bytes printed. */
int
value_print (struct value *val, struct ui_file *stream, int format,
enum val_prettyprint pretty)
{
if (!value_check_printable (val, stream))
return 0;
return LA_VALUE_PRINT (val, stream, format, pretty); return LA_VALUE_PRINT (val, stream, format, pretty);
} }

5
gdb/value.h

@ -479,6 +479,11 @@ extern int val_print (struct type *type, const bfd_byte *valaddr,
int deref_ref, int recurse, int deref_ref, int recurse,
enum val_prettyprint pretty); enum val_prettyprint pretty);
extern int common_val_print (struct value *val,
struct ui_file *stream, int format,
int deref_ref, int recurse,
enum val_prettyprint pretty);
extern int val_print_string (CORE_ADDR addr, int len, int width, extern int val_print_string (CORE_ADDR addr, int len, int width,
struct ui_file *stream); struct ui_file *stream);

6
gdb/varobj.c

@ -2080,10 +2080,8 @@ c_value_of_variable (struct varobj *var)
if (value_lazy (var->value)) if (value_lazy (var->value))
gdb_value_fetch_lazy (var->value); gdb_value_fetch_lazy (var->value);
val_print (value_type (var->value), common_val_print (var->value, stb,
value_contents_raw (var->value), 0, format_code[(int) var->format], 1, 0, 0);
VALUE_ADDRESS (var->value), stb,
format_code[(int) var->format], 1, 0, 0);
thevalue = ui_file_xstrdup (stb, &dummy); thevalue = ui_file_xstrdup (stb, &dummy);
do_cleanups (old_chain); do_cleanups (old_chain);
return thevalue; return thevalue;

Loading…
Cancel
Save