diff options
author | Paul N. Hilfinger <hilfinger@adacore.com> | 2004-09-11 10:24:53 +0000 |
---|---|---|
committer | Paul N. Hilfinger <hilfinger@adacore.com> | 2004-09-11 10:24:53 +0000 |
commit | bb599908a8d0f463182ab1fd0abb56ea15bfd627 (patch) | |
tree | f97d2d15cede245d00ab45aaed6d82dc0555cb60 /gdb/utils.c | |
parent | 52e08514abb43792800981cc211d6a0eaed25f58 (diff) | |
download | gdb-bb599908a8d0f463182ab1fd0abb56ea15bfd627.zip gdb-bb599908a8d0f463182ab1fd0abb56ea15bfd627.tar.gz gdb-bb599908a8d0f463182ab1fd0abb56ea15bfd627.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/utils.c')
-rw-r--r-- | gdb/utils.c | 104 |
1 files changed, 97 insertions, 7 deletions
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) |