From bb599908a8d0f463182ab1fd0abb56ea15bfd627 Mon Sep 17 00:00:00 2001 From: "Paul N. Hilfinger" Date: Sat, 11 Sep 2004 10:24:53 +0000 Subject: * language.c (local_hex_format_custom): Remove. (local_hex_string): Rename to hex_string, use C format, and move to utils.c (local_hex_string_custom): Rename to hex_string_custom and change interface. Now uses C format. Move to utils.c (local_octal_format_custom): Remove. (local_decimal_format_custom): Remove. (unknown_language_defn): Remove language-specific number formatting entries. (auto_language_defn): Ditto. (local_language_defn): Ditto. * language.h (struct language_format_info): Delete declaration. (struct language_defn): Remove language_format_info fields la_binary_format, la_octal_format, la_decimal_format, la_hex_format. (local_binary_format): Remove macro. (local_binary_format_prefix): Remove macro. (local_binary_format_specifier): Remove macro. (local_binary_format_suffix): Remove macro. (local_octal_format): Remove macro. (local_octal_format_prefix): Remove macro. (local_octal_format_specifier): Remove macro. (local_octal_format_suffix): Remove macro. (local_decimal_format): Remove macro. (local_decimal_format_prefix): Remove macro. (local_decimal_format_specifier): Remove macro. (local_decimal_format_suffix): Remove macro. (local_hex_format): Remove macro. (local_hex_format_prefix): Remove macro. (local_hex_format_specifier): Remove macro. (local_hex_format_suffix): Remove macro. (local_decimal_format_custom): Remove. (local_octal_format_custom): Remove. (local_hex_format_custom): Remove. (local_hex_string): Rename to hex_string and move to defs.h. (local_hex_string_custom): Rename to hex_string_custom, change interface, and move to defs.h. * utils.c: (int_string): New function. (hex_string): New function (from language.c). (hex_string_custom): New function (from language.c). (octal2str): New function. (decimal2str): Add width parameter. (paddr_u): Use new decimal2str interface. (paddr_d): Ditto. * defs.h (hex_string): Declare. (hex_string_custom): Declare. (int_string): Declare. * printcmd.c (print_scalar_formatted): Remove localized binary formatting. * valprint.c (print_longest): Use int_string. (print_floating): Use C hex format. (print_hex_chars): Ditto. (print_binary_chars): Remove language-specific formatting. (print_octal_chars): Use C octal format. (print_decimal_chars): Delocalize format. (print_decimal): Remove. * ada-lang.c (ada_language_defn): Remove language-specific number formatting entries. * p-lang.c (pascal_language_defn): Ditto. * c-lang.c (c_language_defn): Ditto. (cplus_language_defn): Ditto. (asm_language_defn): Ditto. (minimal_language_defn): Ditto. * f-lang.c (f_language_defn): Ditto. * jv-lang.c (java_language_defn): Ditto. * m2-lang.c (m2_language_defn): Ditto. * scm-lang.c (scm_language_defn): Ditto. * objc-lang.c (objc_language_defn): Ditto. * memattr.c (mem_info_command): Use renamed hex_string_custom with new interface. * pa64solib.c (pa64_sharedlibrary_info_command): Ditto. * ui-out.c (ui_out_field_core_addr): Ditto. * breakpoint.c (breakpoint_adjustment_warning): Ditto. * exec.c (print_section_info): Ditto. * i387-tdep.c (print_i387_status_word): Ditto. (print_i387_control_word): Ditto. (i387_print_float_info): Ditto. * maint.c (maint_print_section_info): Ditto. * solib.c (info_sharedlibrary_command): Ditto. * somsolib.c (som_sharedlibrary_info_command): Ditto. * symtab.c (print_msymbol_info): Ditto. * tracepoint.c (tracepoints_info): Ditto. * solib-frv.c (lm_base): Ditto. (frv_current_sos): Ditto. (enable_break2): Ditto. (enable_break): Ditto. * dbxread.c (read_dbx_symtab): Use renamed hex_string. (process_one_symbol): Ditto. * infcmd.c (program_info): Ditto. * mdebugread.c (parse_partial_symbols): Ditto. * symfile.c (add_symbol_file_command): Ditto. * cli/cli-cmds.c (edit_command): Ditto. (list_command): Ditto. * infcall.c (call_function_by_hand): Ditto. * remote-vx.c (vx_run_files_info): Ditto. (vx_wait): Ditto. (vx_attach): Ditto. (vx_detach): Ditto. (vx_kill): Ditto. * aix-thread.c (pdc_symbol_addrs): Ditto. (pdc_read_regs): Ditto. (pdc_write_regs): Ditto. (pdc_read_data): Ditto. (pdc_write_data): Ditto. * d10v-tdep.c (display_trace): Ditto. * rs6000-nat.c (find_toc_address): Ditto. * aix-thread.c: Don't include language.h. * buildsym.c: Ditto. * dbxread.c: Ditto. * mdebugread.c: Ditto. * rs6000-nat.c: Ditto. * buildsym.c (make_blockvector): Use renamed hex_string. --- gdb/utils.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 97 insertions(+), 7 deletions(-) (limited to 'gdb/utils.c') diff --git a/gdb/utils.c b/gdb/utils.c index 10c40c7..846b97d 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -2636,7 +2636,7 @@ paddr_nz (CORE_ADDR addr) } static void -decimal2str (char *paddr_str, char *sign, ULONGEST addr) +decimal2str (char *paddr_str, char *sign, ULONGEST addr, int width) { /* steal code from valprint.c:print_decimal(). Should this worry about the real size of addr as the above does? */ @@ -2647,18 +2647,60 @@ decimal2str (char *paddr_str, char *sign, ULONGEST addr) temp[i] = addr % (1000 * 1000 * 1000); addr /= (1000 * 1000 * 1000); i++; + width -= 9; } while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0]))); + width += 9; + if (width < 0) + width = 0; switch (i) { case 1: - sprintf (paddr_str, "%s%lu", sign, temp[0]); + sprintf (paddr_str, "%s%0*lu", sign, width, temp[0]); break; case 2: - sprintf (paddr_str, "%s%lu%09lu", sign, temp[1], temp[0]); + sprintf (paddr_str, "%s%0*lu%09lu", sign, width, temp[1], temp[0]); break; case 3: - sprintf (paddr_str, "%s%lu%09lu%09lu", sign, temp[2], temp[1], temp[0]); + sprintf (paddr_str, "%s%0*lu%09lu%09lu", sign, width, + temp[2], temp[1], temp[0]); + break; + default: + internal_error (__FILE__, __LINE__, + "failed internal consistency check"); + } +} + +static void +octal2str (char *paddr_str, ULONGEST addr, int width) +{ + unsigned long temp[3]; + int i = 0; + do + { + temp[i] = addr % (0100000 * 0100000); + addr /= (0100000 * 0100000); + i++; + width -= 10; + } + while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0]))); + width += 10; + if (width < 0) + width = 0; + switch (i) + { + case 1: + if (temp[0] == 0) + sprintf (paddr_str, "%*o", width, 0); + else + sprintf (paddr_str, "0%0*lo", width, temp[0]); + break; + case 2: + sprintf (paddr_str, "0%0*lo%010lo", width, temp[1], temp[0]); + break; + case 3: + sprintf (paddr_str, "0%0*lo%010lo%010lo", width, + temp[2], temp[1], temp[0]); break; default: internal_error (__FILE__, __LINE__, @@ -2670,7 +2712,7 @@ char * paddr_u (CORE_ADDR addr) { char *paddr_str = get_cell (); - decimal2str (paddr_str, "", addr); + decimal2str (paddr_str, "", addr, 0); return paddr_str; } @@ -2679,9 +2721,9 @@ paddr_d (LONGEST addr) { char *paddr_str = get_cell (); if (addr < 0) - decimal2str (paddr_str, "-", -addr); + decimal2str (paddr_str, "-", -addr, 0); else - decimal2str (paddr_str, "", addr); + decimal2str (paddr_str, "", addr, 0); return paddr_str; } @@ -2747,6 +2789,54 @@ phex_nz (ULONGEST l, int sizeof_l) } +/* Convert VAL to a numeral in the given radix. For + * radix 10, IS_SIGNED may be true, indicating a signed quantity; + * otherwise VAL is interpreted as unsigned. If WIDTH is supplied, + * it is the minimum width (0-padded if needed). USE_C_FORMAT means + * to use C format in all cases. If it is false, then 'x' + * and 'o' formats do not include a prefix (0x or leading 0). */ + +char * +int_string (LONGEST val, int radix, int is_signed, int width, + int use_c_format) +{ + switch (radix) + { + case 16: + { + char *result; + if (width == 0) + result = hex_string (val); + else + result = hex_string_custom (val, width); + if (! use_c_format) + result += 2; + return result; + } + case 10: + { + char *result = get_cell (); + if (is_signed && val < 0) + decimal2str (result, "-", -val, width); + else + decimal2str (result, "", val, width); + return result; + } + case 8: + { + char *result = get_cell (); + octal2str (result, val, width); + if (use_c_format || val == 0) + return result; + else + return result + 1; + } + default: + internal_error (__FILE__, __LINE__, + "failed internal consistency check"); + } +} + /* Convert a CORE_ADDR into a string. */ const char * core_addr_to_string (const CORE_ADDR addr) -- cgit v1.1