aboutsummaryrefslogtreecommitdiff
path: root/gdb/utils.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2014-01-16 21:41:58 -0700
committerTom Tromey <tromey@redhat.com>2014-02-12 09:59:13 -0700
commit01fd3ea573324b8248efbb236d994420641e3d32 (patch)
tree298d7b46c13980609cae1694319cb37395d0fe8e /gdb/utils.c
parent9fb5010805bdfe0eb8fc5db01e7f4c93b04c8f29 (diff)
downloadgdb-01fd3ea573324b8248efbb236d994420641e3d32.zip
gdb-01fd3ea573324b8248efbb236d994420641e3d32.tar.gz
gdb-01fd3ea573324b8248efbb236d994420641e3d32.tar.bz2
share "cell" code
The "cell"-based printing code, like phex, was duplicated in both gdb and gdbserver. This patch merges the two implementations into a new file in common/. 2014-02-12 Tom Tromey <tromey@redhat.com> * utils.h: Include print-utils.h. (host_address_to_string, plongest, pulongest, phex, phex_nz) (int_string, core_addr_to_string, core_addr_to_string_nz) (hex_string, hex_string_custom): Don't declare. * utils.c (NUMCELLS, CELLSIZE, get_cell, decimal2str, pulongest) (plongest, thirty_two, phex, phex_nz, octal2str, hex_string) (hex_string_custom, int_string, core_addr_to_string) (core_addr_to_string_nz, host_address_to_string): Move to common/print-utils.c. * common/print-utils.h: New file. * common/print-utils.c: New file * Makefile.in (SFILES): Add common/print-utils.c. (HFILES_NO_SRCDIR): Add common/print-utils.h. (COMMON_OBS): Add print-utils.o. (print-utils.o): New target. 2014-02-12 Tom Tromey <tromey@redhat.com> * utils.h (pulongest, plongest, phex_nz): Don't declare. Include print-utils.h. * utils.c (NUMCELLS, CELLSIZE, get_cell, decimal2str, pulongest) (plongest, thirty_two, phex_nz): Remove. * Makefile.in (SFILES): Add common/print-utils.c. (OBS): Add print-utils.o. (print-utils-ipa.o): New target. (print-utils.o): New target. (IPA_OBJS): Add print-utils-ipa.o.
Diffstat (limited to 'gdb/utils.c')
-rw-r--r--gdb/utils.c296
1 files changed, 0 insertions, 296 deletions
diff --git a/gdb/utils.c b/gdb/utils.c
index a802bfa..9d068c5 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -2707,21 +2707,6 @@ When set, debugging messages will be marked with seconds and microseconds."),
&setdebuglist, &showdebuglist);
}
-/* Print routines to handle variable size regs, etc. */
-/* Temporary storage using circular buffer. */
-#define NUMCELLS 16
-#define CELLSIZE 50
-static char *
-get_cell (void)
-{
- static char buf[NUMCELLS][CELLSIZE];
- static int cell = 0;
-
- if (++cell >= NUMCELLS)
- cell = 0;
- return buf[cell];
-}
-
const char *
paddress (struct gdbarch *gdbarch, CORE_ADDR addr)
{
@@ -2781,278 +2766,6 @@ core_addr_eq (const void *ap, const void *bp)
return *addr_ap == *addr_bp;
}
-static char *
-decimal2str (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? */
- unsigned long temp[3];
- char *str = get_cell ();
- int i = 0;
-
- do
- {
- 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:
- xsnprintf (str, CELLSIZE, "%s%0*lu", sign, width, temp[0]);
- break;
- case 2:
- xsnprintf (str, CELLSIZE, "%s%0*lu%09lu", sign, width,
- temp[1], temp[0]);
- break;
- case 3:
- xsnprintf (str, CELLSIZE, "%s%0*lu%09lu%09lu", sign, width,
- temp[2], temp[1], temp[0]);
- break;
- default:
- internal_error (__FILE__, __LINE__,
- _("failed internal consistency check"));
- }
-
- return str;
-}
-
-static char *
-octal2str (ULONGEST addr, int width)
-{
- unsigned long temp[3];
- char *str = get_cell ();
- 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)
- xsnprintf (str, CELLSIZE, "%*o", width, 0);
- else
- xsnprintf (str, CELLSIZE, "0%0*lo", width, temp[0]);
- break;
- case 2:
- xsnprintf (str, CELLSIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
- break;
- case 3:
- xsnprintf (str, CELLSIZE, "0%0*lo%010lo%010lo", width,
- temp[2], temp[1], temp[0]);
- break;
- default:
- internal_error (__FILE__, __LINE__,
- _("failed internal consistency check"));
- }
-
- return str;
-}
-
-char *
-pulongest (ULONGEST u)
-{
- return decimal2str ("", u, 0);
-}
-
-char *
-plongest (LONGEST l)
-{
- if (l < 0)
- return decimal2str ("-", -l, 0);
- else
- return decimal2str ("", l, 0);
-}
-
-/* Eliminate warning from compiler on 32-bit systems. */
-static int thirty_two = 32;
-
-char *
-phex (ULONGEST l, int sizeof_l)
-{
- char *str;
-
- switch (sizeof_l)
- {
- case 8:
- str = get_cell ();
- xsnprintf (str, CELLSIZE, "%08lx%08lx",
- (unsigned long) (l >> thirty_two),
- (unsigned long) (l & 0xffffffff));
- break;
- case 4:
- str = get_cell ();
- xsnprintf (str, CELLSIZE, "%08lx", (unsigned long) l);
- break;
- case 2:
- str = get_cell ();
- xsnprintf (str, CELLSIZE, "%04x", (unsigned short) (l & 0xffff));
- break;
- default:
- str = phex (l, sizeof (l));
- break;
- }
-
- return str;
-}
-
-char *
-phex_nz (ULONGEST l, int sizeof_l)
-{
- char *str;
-
- switch (sizeof_l)
- {
- case 8:
- {
- unsigned long high = (unsigned long) (l >> thirty_two);
-
- str = get_cell ();
- if (high == 0)
- xsnprintf (str, CELLSIZE, "%lx",
- (unsigned long) (l & 0xffffffff));
- else
- xsnprintf (str, CELLSIZE, "%lx%08lx", high,
- (unsigned long) (l & 0xffffffff));
- break;
- }
- case 4:
- str = get_cell ();
- xsnprintf (str, CELLSIZE, "%lx", (unsigned long) l);
- break;
- case 2:
- str = get_cell ();
- xsnprintf (str, CELLSIZE, "%x", (unsigned short) (l & 0xffff));
- break;
- default:
- str = phex_nz (l, sizeof (l));
- break;
- }
-
- return str;
-}
-
-/* Converts a LONGEST to a C-format hexadecimal literal and stores it
- in a static string. Returns a pointer to this string. */
-char *
-hex_string (LONGEST num)
-{
- char *result = get_cell ();
-
- xsnprintf (result, CELLSIZE, "0x%s", phex_nz (num, sizeof (num)));
- return result;
-}
-
-/* Converts a LONGEST number to a C-format hexadecimal literal and
- stores it in a static string. Returns a pointer to this string
- that is valid until the next call. The number is padded on the
- left with 0s to at least WIDTH characters. */
-char *
-hex_string_custom (LONGEST num, int width)
-{
- char *result = get_cell ();
- char *result_end = result + CELLSIZE - 1;
- const char *hex = phex_nz (num, sizeof (num));
- int hex_len = strlen (hex);
-
- if (hex_len > width)
- width = hex_len;
- if (width + 2 >= CELLSIZE)
- internal_error (__FILE__, __LINE__, _("\
-hex_string_custom: insufficient space to store result"));
-
- strcpy (result_end - width - 2, "0x");
- memset (result_end - width, '0', width);
- strcpy (result_end - hex_len, hex);
- return result_end - width - 2;
-}
-
-/* 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:
- {
- if (is_signed && val < 0)
- return decimal2str ("-", -val, width);
- else
- return decimal2str ("", val, width);
- }
- case 8:
- {
- char *result = octal2str (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)
-{
- char *str = get_cell ();
-
- strcpy (str, "0x");
- strcat (str, phex (addr, sizeof (addr)));
- return str;
-}
-
-const char *
-core_addr_to_string_nz (const CORE_ADDR addr)
-{
- char *str = get_cell ();
-
- strcpy (str, "0x");
- strcat (str, phex_nz (addr, sizeof (addr)));
- return str;
-}
-
/* Convert a string back into a CORE_ADDR. */
CORE_ADDR
string_to_core_addr (const char *my_string)
@@ -3091,15 +2804,6 @@ string_to_core_addr (const char *my_string)
return addr;
}
-const char *
-host_address_to_string (const void *addr)
-{
- char *str = get_cell ();
-
- xsnprintf (str, CELLSIZE, "0x%s", phex_nz ((uintptr_t) addr, sizeof (addr)));
- return str;
-}
-
char *
gdb_realpath (const char *filename)
{