diff options
author | Tom Tromey <tromey@redhat.com> | 2008-10-28 17:19:58 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2008-10-28 17:19:58 +0000 |
commit | 79a45b7d67b37d45cdb44d3ee2761a768474dd73 (patch) | |
tree | 27cb759eb2c872534a37cf9aef25a5ceabc47bd4 /gdb/printcmd.c | |
parent | 7c8a8b0498cb16b1a36e3210977eae12cca98f64 (diff) | |
download | gdb-79a45b7d67b37d45cdb44d3ee2761a768474dd73.zip gdb-79a45b7d67b37d45cdb44d3ee2761a768474dd73.tar.gz gdb-79a45b7d67b37d45cdb44d3ee2761a768474dd73.tar.bz2 |
gdb
* varobj.c (value_get_print_value): Include valprint.h.
(value_get_print_value): Use get_formatted_print_options.
* value.h (struct value_print_options): Declare.
(value_print, val_print, common_val_print, val_print_string):
Update.
* value.c: Include valprint.h.
(show_values): Use get_user_print_options.
(show_convenience): Likewise.
* valprint.h (prettyprint_arrays, prettyprint_structs): Don't
declare.
(struct value_print_options): New type.
(vtblprint, unionprint, addressprint, objectprint, print_max,
inspect_it, repeat_count_threshold, output_format,
stop_print_at_null): Don't declare.
(user_print_options, get_user_print_options,
get_raw_print_options, get_formatted_print_options): Declare.
(print_array_indexes_p): Don't declare.
(maybe_print_array_index, val_print_array_elements): Update.
* valprint.c (print_max): Remove.
(user_print_options): New global.
(get_user_print_options, get_raw_print_options,
get_formatted_print_options): New functions.
(print_array_indexes, repeat_count_threshold, stop_print_at_null,
prettyprint_structs, prettyprint_arrays, unionprint,
addressprint): Remove.
(val_print): Remove format, deref_ref, pretty arguments; add
options. Update.
(common_val_print): Likewise.
(print_array_indexes_p): Remove.
(maybe_print_array_index): Remove format, pretty arguments; add
options. Update.
(val_print_array_elements): Remove format, deref_ref, pretty
arguments; add options. Update.
(val_print_string): Add options argument. Update.
(_initialize_valprint): Use user_print_options.
(output_format): Remove.
(set_output_radix_1): Use user_print_options.
* typeprint.c: Include valprint.h.
(objectprint): Don't declare.
(whatis_exp): Use get_user_print_options.
* tui/tui-regs.c: Include valprint.h.
(tui_register_format): Use get_formatted_print_options.
* tracepoint.c: Include valprint.h.
(addressprint): Don't declare.
(trace_mention): Use get_user_print_options.
(tracepoints_info): Likewise.
* stack.c (print_frame_args): Use get_raw_print_options.
(print_frame_info): Use get_user_print_options.
(print_frame): Likewise.
* sh64-tdep.c: Include valprint.h
(sh64_do_register): Use get_formatted_print_options.
* scm-valprint.c (scm_inferior_print): Remove format, deref_ref,
pretty arguments; add options.
(scm_scmlist_print): Likewise. Update.
(scm_scmval_print): Likewise.
(scm_val_print): Likewise.
(scm_value_print): Remove format, pretty arguments; add options.
Update.
* scm-lang.h (scm_value_print, scm_val_print, scm_scmval_print):
Update.
* scm-lang.c (scm_printstr): Add options argument.
* python/python-value.c: Include valprint.h.
(valpy_str): Use get_user_print_options.
* printcmd.c: Include valprint.h.
(addressprint): Don't declare.
(inspect_it): Remove.
(print_formatted): Remove format option; add options. Update.
(print_scalar_formatted): Likewise.
(print_address_demangle): Use get_user_print_options.
(do_examine): Use get_formatted_print_options.
(print_command_1): Likewise.
(output_command): Use get_formatted_print_options.
(do_one_display): Likewise.
(print_variable_value): Use get_user_print_options.
* p-valprint.c (pascal_val_print): Remove format, deref_ref,
pretty arguments; add options. Update.
(pascal_value_print): Remove format, pretty arguments; add
options. Update.
(vtblprint, objectprint): Don't declare.
(pascal_static_field_print): Remove.
(pascal_object_print_value_fields): Remove format, pretty
arguments; add options. Update.
(pascal_object_print_static_field): Likewise.
(_initialize_pascal_valprint): Use user_print_options. Update.
* p-lang.h (pascal_val_print, pascal_value_print,
pascal_printstr, pascal_object_print_value_fields): Update.
(vtblprint, static_field_print): Don't declare.
* p-lang.c (pascal_printstr): Add options argument. Update.
* objc-lang.c (objc_printstr): Add options argument. Update.
* mt-tdep.c: Include valprint.h.
(mt_registers_info): Use get_raw_print_options.
* mips-tdep.c: Include valprint.h.
(mips_print_fp_register): Use get_formatted_print_options.
(mips_print_register): Likewise.
* mi/mi-main.c: Include valprint.h.
(get_register): Use get_user_print_options.
(mi_cmd_data_evaluate_expression): Likewise.
(mi_cmd_data_read_memory): Use get_formatted_print_options.
* mi/mi-cmd-stack.c: Include valprint.h.
(list_args_or_locals): Use get_raw_print_options.
* m2-valprint.c (print_function_pointer_address): Add addressprint
argument.
(m2_print_long_set): Remove format, pretty arguments.
(m2_print_unbounded_array): Remove format, deref_ref, pretty
arguments; add options. Update.
(print_unpacked_pointer): Remove format argument; add options.
Now static. Update.
(print_variable_at_address): Remove format, deref_ref, pretty
arguments; add options. Update.
(m2_print_array_contents): Likewise.
(m2_val_print): Likewise.
* m2-lang.h (m2_val_print): Update.
* m2-lang.c (m2_printstr): Add options argument. Update.
* language.h (struct value_print_options): Declare.
(struct language_defn) <la_printstr>: Add options argument.
<la_val_print>: Remove format, deref_ref, pretty argument; add
options.
<la_value_print>: Remove format, pretty arguments; add options.
<la_print_array_index>: Likewise.
(LA_VAL_PRINT, LA_VALUE_PRINT, LA_PRINT_STRING,
LA_PRINT_ARRAY_INDEX): Update.
(default_print_array_index): Update.
* language.c (default_print_array_index): Remove format, pretty
arguments; add options. Update.
(unk_lang_printstr): Add options argument.
(unk_lang_val_print): Remove format, deref_ref, pretty arguments;
add options.
(unk_lang_value_print): Remove format, pretty arguments; add
options.
* jv-valprint.c (java_value_print): Remove format, pretty
arguments; add options. Update.
(java_print_value_fields): Likewise.
(java_val_print): Remove format, deref_ref, pretty arguments; add
options. Update.
* jv-lang.h (java_val_print, java_value_print): Declare.
* infcmd.c: Include valprint.h.
(print_return_value): Use get_raw_print_options.
(default_print_registers_info): Use get_user_print_options,
get_formatted_print_options.
(registers_info): Use get_formatted_print_options.
* gdbtypes.h (struct value_print_options): Declare.
(print_scalar_formatted): Update.
* f-valprint.c (f77_print_array_1): Remove format, deref_ref,
pretty arguments; add options. Update.
(f77_print_array): Likewise.
(f_val_print): Likewise.
* f-lang.h (f_val_print): Update.
* f-lang.c (f_printstr): Add options argument. Update.
(c_value_print): Update declaration.
* expprint.c: Include valprint.h.
(print_subexp_standard): Use get_raw_print_options,
get_user_print_options.
* eval.c: Include valprint.h.
(objectprint): Don't declare.
(evaluate_subexp_standard): Use get_user_print_options.
* cp-valprint.c (vtblprint, objectprint, static_field_print):
Remove.
(cp_print_value_fields): Remove format, pretty arguments; add
options. Update.
(cp_print_value): Likewise.
(cp_print_static_field): Likewise.
(_initialize_cp_valprint): Use user_print_options. Update.
* c-valprint.c (print_function_pointer_address): Add addressprint
argument.
(c_val_print): Remove format, deref_ref, pretty arguments; add
options. Update.
(c_value_print): Add options argument. Update.
* c-lang.h (c_val_print, c_value_print, c_printstr): Update.
(vtblprint, static_field_print): Don't declare.
(cp_print_value_fields): Update.
* c-lang.c (c_printstr): Add options argument. Update.
* breakpoint.c: Include valprint.h.
(addressprint): Don't declare.
(watchpoint_value_print): Use get_user_print_options.
(print_one_breakpoint_location): Likewise.
(breakpoint_1, print_it_catch_fork, print_it_catch_vfork, mention,
print_exception_catchpoint): Likewise.
* auxv.c (fprint_target_auxv): Don't declare addressprint. Use
get_user_print_options.
* ada-valprint.c (struct ada_val_print_args): Remove format,
deref_ref, and pretty; add options.
(print_optional_low_bound): Add options argument.
(val_print_packed_array_elements): Remove format and pretty
arguments; add options. Update.
(printstr): Add options argument. Update.
(ada_printstr): Likewise.
(ada_val_print): Remove format, deref_ref, pretty arguments; add
options argument. Update.
(ada_val_print_stub): Update.
(ada_val_print_array): Remove format, deref_ref, pretty arguments;
add options. Update.
(ada_val_print_1): Likewise.
(print_variant_part): Likewise.
(ada_value_print): Remove format, pretty arguments; add options.
Update.
(print_record): Likewise.
(print_field_values): Likewise.
* ada-lang.h (ada_val_print, ada_value_print, ada_printstr):
Update.
* ada-lang.c (ada_print_array_index): Add options argument; remove
format and pretty arguments.
(print_one_exception): Use get_user_print_options.
gdb/testsuite
* gdb.base/exprs.exp (test_expr): Add enum formatting tests.
Diffstat (limited to 'gdb/printcmd.c')
-rw-r--r-- | gdb/printcmd.c | 104 |
1 files changed, 57 insertions, 47 deletions
diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 021e191..355552d 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -42,6 +42,7 @@ #include "block.h" #include "disasm.h" #include "dfp.h" +#include "valprint.h" #ifdef TUI #include "tui/tui.h" /* For tui_active et.al. */ @@ -55,7 +56,6 @@ #endif extern int asm_demangle; /* Whether to demangle syms in asm printouts */ -extern int addressprint; /* Whether to print hex addresses in HLL " */ struct format_data { @@ -120,13 +120,6 @@ Printing of source filename and line number with <symbol> is %s.\n"), int current_display_number; -/* Flag to low-level print routines that this value is being printed - in an epoch window. We'd like to pass this as a parameter, but - every routine would need to take it. Perhaps we can encapsulate - this in the I/O stream once we have GNU stdio. */ - -int inspect_it = 0; - struct display { /* Chain link to next auto-display item. */ @@ -254,15 +247,15 @@ decode_format (char **string_ptr, int oformat, int osize) return val; } -/* Print value VAL on stream according to FORMAT, a letter or 0. +/* Print value VAL on stream according to OPTIONS. Do not end with a newline. - 0 means print VAL according to its own type. SIZE is the letter for the size of datum being printed. This is used to pad hex numbers so they line up. SIZE is 0 for print / output and set for examine. */ static void -print_formatted (struct value *val, int format, int size, +print_formatted (struct value *val, int size, + const struct value_print_options *options, struct ui_file *stream) { struct type *type = check_typedef (value_type (val)); @@ -273,12 +266,13 @@ print_formatted (struct value *val, int format, int size, if (size) { - switch (format) + switch (options->format) { case 's': /* FIXME: Need to handle wchar_t's here... */ next_address = VALUE_ADDRESS (val) - + val_print_string (VALUE_ADDRESS (val), -1, 1, stream); + + val_print_string (VALUE_ADDRESS (val), -1, 1, stream, + options); return; case 'i': @@ -291,22 +285,19 @@ print_formatted (struct value *val, int format, int size, } } - if (format == 0 || format == 's' + if (options->format == 0 || options->format == 's' || TYPE_CODE (type) == TYPE_CODE_REF || TYPE_CODE (type) == TYPE_CODE_ARRAY || TYPE_CODE (type) == TYPE_CODE_STRING || TYPE_CODE (type) == TYPE_CODE_STRUCT || TYPE_CODE (type) == TYPE_CODE_UNION || TYPE_CODE (type) == TYPE_CODE_NAMESPACE) - /* If format is 0, use the 'natural' format for that type of - value. If the type is non-scalar, we have to use language - rules to print it as a series of scalars. */ - value_print (val, stream, format, Val_pretty_default); + value_print (val, stream, options); else /* User specified format, so don't look to the the type to tell us what to do. */ print_scalar_formatted (value_contents (val), type, - format, size, stream); + options, size, stream); } /* Return builtin floating point type of same length as TYPE. @@ -328,15 +319,16 @@ float_type_from_length (struct gdbarch *gdbarch, struct type *type) } /* Print a scalar of data of type TYPE, pointed to in GDB by VALADDR, - according to letters FORMAT and SIZE on STREAM. - FORMAT may not be zero. Formats s and i are not supported at this level. + according to OPTIONS and SIZE on STREAM. + Formats s and i are not supported at this level. This is how the elements of an array or structure are printed with a format. */ void print_scalar_formatted (const void *valaddr, struct type *type, - int format, int size, struct ui_file *stream) + const struct value_print_options *options, + int size, struct ui_file *stream) { LONGEST val_long = 0; unsigned int len = TYPE_LENGTH (type); @@ -345,9 +337,12 @@ print_scalar_formatted (const void *valaddr, struct type *type, /* If we get here with a string format, try again without it. Go all the way back to the language printers, which may call us again. */ - if (format == 's') + if (options->format == 's') { - val_print (type, valaddr, 0, 0, stream, 0, 0, 0, Val_pretty_default, + struct value_print_options opts = *options; + opts.format = 0; + opts.deref_ref = 0; + val_print (type, valaddr, 0, 0, stream, 0, &opts, current_language); return; } @@ -356,7 +351,7 @@ print_scalar_formatted (const void *valaddr, struct type *type, (TYPE_CODE (type) == TYPE_CODE_INT || TYPE_CODE (type) == TYPE_CODE_ENUM)) { - switch (format) + switch (options->format) { case 'o': print_octal_chars (stream, valaddr, len, byte_order); @@ -379,7 +374,7 @@ print_scalar_formatted (const void *valaddr, struct type *type, }; } - if (format != 'f') + if (options->format != 'f') val_long = unpack_long (type, valaddr); /* If the value is a pointer, and pointers and addresses are not the @@ -391,13 +386,13 @@ print_scalar_formatted (const void *valaddr, struct type *type, /* If we are printing it as unsigned, truncate it in case it is actually a negative signed value (e.g. "print/u (short)-1" should print 65535 (if shorts are 16 bits) instead of 4294967295). */ - if (format != 'd') + if (options->format != 'd') { if (len < sizeof (LONGEST)) val_long &= ((LONGEST) 1 << HOST_CHAR_BIT * len) - 1; } - switch (format) + switch (options->format) { case 'x': if (!size) @@ -442,13 +437,17 @@ print_scalar_formatted (const void *valaddr, struct type *type, break; case 'c': - if (TYPE_UNSIGNED (type)) - value_print (value_from_longest (builtin_type_true_unsigned_char, - val_long), - stream, 0, Val_pretty_default); - else - value_print (value_from_longest (builtin_type_true_char, val_long), - stream, 0, Val_pretty_default); + { + struct value_print_options opts = *options; + opts.format = 0; + if (TYPE_UNSIGNED (type)) + value_print (value_from_longest (builtin_type_true_unsigned_char, + val_long), + stream, &opts); + else + value_print (value_from_longest (builtin_type_true_char, val_long), + stream, &opts); + } break; case 'f': @@ -508,7 +507,7 @@ print_scalar_formatted (const void *valaddr, struct type *type, break; default: - error (_("Undefined output format \"%c\"."), format); + error (_("Undefined output format \"%c\"."), options->format); } } @@ -707,11 +706,13 @@ void print_address_demangle (CORE_ADDR addr, struct ui_file *stream, int do_demangle) { + struct value_print_options opts; + get_user_print_options (&opts); if (addr == 0) { fprintf_filtered (stream, "0"); } - else if (addressprint) + else if (opts.addressprint) { fputs_filtered (paddress (addr), stream); print_address_symbolic (addr, stream, do_demangle, " "); @@ -745,6 +746,7 @@ do_examine (struct format_data fmt, CORE_ADDR addr) struct type *val_type = NULL; int i; int maxelts; + struct value_print_options opts; format = fmt.format; size = fmt.size; @@ -775,6 +777,8 @@ do_examine (struct format_data fmt, CORE_ADDR addr) if (format == 's' || format == 'i') maxelts = 1; + get_formatted_print_options (&opts, format); + /* Print as many objects as specified in COUNT, at most maxelts per line, with the address of the next one at the start of each line. */ @@ -809,7 +813,7 @@ do_examine (struct format_data fmt, CORE_ADDR addr) if (last_examine_value) release_value (last_examine_value); - print_formatted (last_examine_value, format, size, gdb_stdout); + print_formatted (last_examine_value, size, &opts, gdb_stdout); /* Display any branch delay slots following the final insn. */ if (format == 'i' && count == 1) @@ -847,10 +851,6 @@ print_command_1 (char *exp, int inspect, int voidprint) struct format_data fmt; int cleanup = 0; - /* Pass inspect flag to the rest of the print routines in a global - (sigh). */ - inspect_it = inspect; - if (exp && *exp == '/') { exp++; @@ -879,6 +879,7 @@ print_command_1 (char *exp, int inspect, int voidprint) if (voidprint || (val && value_type (val) && TYPE_CODE (value_type (val)) != TYPE_CODE_VOID)) { + struct value_print_options opts; int histindex = record_latest_value (val); if (histindex >= 0) @@ -895,7 +896,10 @@ print_command_1 (char *exp, int inspect, int voidprint) if (histindex >= 0) annotate_value_history_value (); - print_formatted (val, format, fmt.size, gdb_stdout); + get_formatted_print_options (&opts, format); + opts.inspect_it = inspect; + + print_formatted (val, fmt.size, &opts, gdb_stdout); printf_filtered ("\n"); if (histindex >= 0) @@ -909,7 +913,6 @@ print_command_1 (char *exp, int inspect, int voidprint) if (cleanup) do_cleanups (old_chain); - inspect_it = 0; /* Reset print routines to normal. */ } static void @@ -942,6 +945,7 @@ output_command (char *exp, int from_tty) char format = 0; struct value *val; struct format_data fmt; + struct value_print_options opts; fmt.size = 0; @@ -960,7 +964,8 @@ output_command (char *exp, int from_tty) annotate_value_begin (value_type (val)); - print_formatted (val, format, fmt.size, gdb_stdout); + get_formatted_print_options (&opts, format); + print_formatted (val, fmt.size, &opts, gdb_stdout); annotate_value_end (); @@ -1507,6 +1512,8 @@ do_one_display (struct display *d) } else { + struct value_print_options opts; + annotate_display_format (); if (d->format.format) @@ -1521,8 +1528,9 @@ do_one_display (struct display *d) annotate_display_expression (); + get_formatted_print_options (&opts, d->format.format); print_formatted (evaluate_expression (d->exp), - d->format.format, d->format.size, gdb_stdout); + d->format.size, &opts, gdb_stdout); printf_filtered ("\n"); } @@ -1677,8 +1685,10 @@ print_variable_value (struct symbol *var, struct frame_info *frame, struct ui_file *stream) { struct value *val = read_var_value (var, frame); + struct value_print_options opts; - value_print (val, stream, 0, Val_pretty_default); + get_user_print_options (&opts); + value_print (val, stream, &opts); } static void |