X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fprintcmd.c;h=77cdd77a16115e7bce27deec51ffab0d9ea10759;hb=9b30da15e72bd4e8265169bfd511272aa3875738;hp=7529842e73b9b566b3bd9119b1d90e267089cb54;hpb=590042fc45f857c981bee4e0c76f6b3b528a224e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 7529842e73..77cdd77a16 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -100,7 +100,7 @@ show_max_symbolic_offset (struct ui_file *file, int from_tty, /* Append the source filename and linenumber of the symbol when printing a symbolic value as `' if set. */ -static int print_symbol_filename = 0; +static bool print_symbol_filename = false; static void show_print_symbol_filename (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) @@ -356,7 +356,7 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type, { struct gdbarch *gdbarch = get_type_arch (type); unsigned int len = TYPE_LENGTH (type); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + enum bfd_endian byte_order = type_byte_order (type); /* String printing should go through val_print_scalar_formatted. */ gdb_assert (options->format != 's'); @@ -405,21 +405,30 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type, /* Historically gdb has printed floats by first casting them to a long, and then printing the long. PR cli/16242 suggests changing - this to using C-style hex float format. */ - gdb::byte_vector converted_float_bytes; - if (TYPE_CODE (type) == TYPE_CODE_FLT - && (options->format == 'o' - || options->format == 'x' - || options->format == 't' - || options->format == 'z' - || options->format == 'd' - || options->format == 'u')) - { - LONGEST val_long = unpack_long (type, valaddr); - converted_float_bytes.resize (TYPE_LENGTH (type)); - store_signed_integer (converted_float_bytes.data (), TYPE_LENGTH (type), - byte_order, val_long); - valaddr = converted_float_bytes.data (); + this to using C-style hex float format. + + Biased range types must also be unbiased here; the unbiasing is + done by unpack_long. */ + gdb::byte_vector converted_bytes; + /* Some cases below will unpack the value again. In the biased + range case, we want to avoid this, so we store the unpacked value + here for possible use later. */ + gdb::optional val_long; + if ((TYPE_CODE (type) == TYPE_CODE_FLT + && (options->format == 'o' + || options->format == 'x' + || options->format == 't' + || options->format == 'z' + || options->format == 'd' + || options->format == 'u')) + || (TYPE_CODE (type) == TYPE_CODE_RANGE + && TYPE_RANGE_DATA (type)->bias != 0)) + { + val_long.emplace (unpack_long (type, valaddr)); + converted_bytes.resize (TYPE_LENGTH (type)); + store_signed_integer (converted_bytes.data (), TYPE_LENGTH (type), + byte_order, *val_long); + valaddr = converted_bytes.data (); } /* Printing a non-float type as 'f' will interpret the data as if it were @@ -469,7 +478,8 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type, { struct value_print_options opts = *options; - LONGEST val_long = unpack_long (type, valaddr); + if (!val_long.has_value ()) + val_long.emplace (unpack_long (type, valaddr)); opts.format = 0; if (TYPE_UNSIGNED (type)) @@ -477,15 +487,15 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type, else type = builtin_type (gdbarch)->builtin_true_char; - value_print (value_from_longest (type, val_long), stream, &opts); + value_print (value_from_longest (type, *val_long), stream, &opts); } break; case 'a': { - CORE_ADDR addr = unpack_pointer (type, valaddr); - - print_address (gdbarch, addr, stream); + if (!val_long.has_value ()) + val_long.emplace (unpack_long (type, valaddr)); + print_address (gdbarch, *val_long, stream); } break; @@ -618,9 +628,9 @@ build_address_symbolic (struct gdbarch *gdbarch, name_location = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (symbol)); if (do_demangle || asm_demangle) - name_temp = SYMBOL_PRINT_NAME (symbol); + name_temp = symbol->print_name (); else - name_temp = SYMBOL_LINKAGE_NAME (symbol); + name_temp = symbol->linkage_name (); } if (msymbol.minsym != NULL @@ -661,9 +671,9 @@ build_address_symbolic (struct gdbarch *gdbarch, symbol = 0; name_location = BMSYMBOL_VALUE_ADDRESS (msymbol); if (do_demangle || asm_demangle) - name_temp = MSYMBOL_PRINT_NAME (msymbol.minsym); + name_temp = msymbol.minsym->print_name (); else - name_temp = MSYMBOL_LINKAGE_NAME (msymbol.minsym); + name_temp = msymbol.minsym->linkage_name (); } } if (symbol == NULL && msymbol.minsym == NULL) @@ -1142,6 +1152,9 @@ print_command_parse_format (const char **expp, const char *cmdname, { const char *exp = *expp; + /* opts->raw value might already have been set by 'set print raw-values' + or by using 'print -raw-values'. + So, do not set opts->raw to 0, only set it to 1 if /r is given. */ if (exp && *exp == '/') { format_data fmt; @@ -1152,12 +1165,11 @@ print_command_parse_format (const char **expp, const char *cmdname, last_format = fmt.format; opts->format = fmt.format; - opts->raw = fmt.raw; + opts->raw = opts->raw || fmt.raw; } else { opts->format = 0; - opts->raw = 0; } *expp = exp; @@ -1339,7 +1351,7 @@ info_symbol_command (const char *arg, int from_tty) offset = sect_addr - MSYMBOL_VALUE_ADDRESS (objfile, msymbol); mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped"); sec_name = osect->the_bfd_section->name; - msym_name = MSYMBOL_PRINT_NAME (msymbol); + msym_name = msymbol->print_name (); /* Don't print the offset if it is zero. We assume there's no need to handle i18n of "sym + offset". */ @@ -1355,7 +1367,7 @@ info_symbol_command (const char *arg, int from_tty) gdb_assert (osect->objfile && objfile_name (osect->objfile)); obj_name = objfile_name (osect->objfile); - if (MULTI_OBJFILE_P ()) + if (current_program_space->multi_objfile_p ()) if (pc_in_unmapped_range (addr, osect)) if (section_is_overlay (osect)) printf_filtered (_("%s in load address range of " @@ -1462,7 +1474,7 @@ info_address_command (const char *exp, int from_tty) } printf_filtered ("Symbol \""); - fprintf_symbol_filtered (gdb_stdout, SYMBOL_PRINT_NAME (sym), + fprintf_symbol_filtered (gdb_stdout, sym->print_name (), current_language->la_language, DMGL_ANSI); printf_filtered ("\" is "); val = SYMBOL_VALUE (sym); @@ -1582,7 +1594,7 @@ info_address_command (const char *exp, int from_tty) { struct bound_minimal_symbol msym; - msym = lookup_bound_minimal_symbol (SYMBOL_LINKAGE_NAME (sym)); + msym = lookup_bound_minimal_symbol (sym->linkage_name ()); if (msym.minsym == NULL) printf_filtered ("unresolved"); else @@ -1936,7 +1948,8 @@ do_one_display (struct display *d) if (d->block) { if (d->pspace == current_program_space) - within_current_scope = contained_in (get_selected_block (0), d->block); + within_current_scope = contained_in (get_selected_block (0), d->block, + true); else within_current_scope = 0; } @@ -1990,8 +2003,9 @@ do_one_display (struct display *d) } catch (const gdb_exception_error &ex) { - fprintf_filtered (gdb_stdout, _("\n"), - ex.what ()); + fprintf_filtered (gdb_stdout, _("%p[%p]\n"), + metadata_style.style ().ptr (), ex.what (), + nullptr); } } else @@ -2024,7 +2038,8 @@ do_one_display (struct display *d) } catch (const gdb_exception_error &ex) { - fprintf_filtered (gdb_stdout, _(""), ex.what ()); + fprintf_styled (gdb_stdout, metadata_style.style (), + _(""), ex.what ()); } printf_filtered ("\n"); @@ -2098,7 +2113,7 @@ Num Enb Expression\n")); else if (d->format.format) printf_filtered ("/%c ", d->format.format); puts_filtered (d->exp_string); - if (d->block && !contained_in (get_selected_block (0), d->block)) + if (d->block && !contained_in (get_selected_block (0), d->block, true)) printf_filtered (_(" (cannot be evaluated in the current context)")); printf_filtered ("\n"); } @@ -2113,7 +2128,7 @@ do_enable_disable_display (struct display *d, void *data) d->enabled_p = *(int *) data; } -/* Implamentation of both the "disable display" and "enable display" +/* Implementation of both the "disable display" and "enable display" commands. ENABLE decides what to do. */ static void @@ -2201,11 +2216,10 @@ print_variable_and_value (const char *name, struct symbol *var, { if (!name) - name = SYMBOL_PRINT_NAME (var); + name = var->print_name (); - fputs_filtered (n_spaces (2 * indent), stream); - fputs_styled (name, variable_name_style.style (), stream); - fputs_filtered (" = ", stream); + fprintf_filtered (stream, "%s%ps = ", n_spaces (2 * indent), + styled_string (variable_name_style.style (), name)); try { @@ -2227,8 +2241,9 @@ print_variable_and_value (const char *name, struct symbol *var, } catch (const gdb_exception_error &except) { - fprintf_filtered (stream, "", name, - except.what ()); + fprintf_styled (stream, metadata_style.style (), + "", name, + except.what ()); } fprintf_filtered (stream, "\n"); @@ -2313,7 +2328,7 @@ printf_wide_c_string (struct ui_file *stream, const char *format, const gdb_byte *str; size_t len; struct gdbarch *gdbarch = get_type_arch (value_type (value)); - struct type *wctype = lookup_typename (current_language, gdbarch, + struct type *wctype = lookup_typename (current_language, "wchar_t", NULL, 0); int wcwidth = TYPE_LENGTH (wctype); @@ -2588,7 +2603,7 @@ ui_printf (const char *arg, struct ui_file *stream) { struct gdbarch *gdbarch = get_type_arch (value_type (val_args[i])); - struct type *wctype = lookup_typename (current_language, gdbarch, + struct type *wctype = lookup_typename (current_language, "wchar_t", NULL, 0); struct type *valtype; const gdb_byte *bytes; @@ -2644,6 +2659,16 @@ ui_printf (const char *arg, struct ui_file *stream) { long val = value_as_long (val_args[i]); + DIAGNOSTIC_PUSH + DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL + fprintf_filtered (stream, current_substring, val); + DIAGNOSTIC_POP + break; + } + case size_t_arg: + { + size_t val = value_as_long (val_args[i]); + DIAGNOSTIC_PUSH DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL fprintf_filtered (stream, current_substring, val);