diff --git a/gdb/printcmd.c b/gdb/printcmd.c index c6d4a6c29d..d40a2f8138 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -355,39 +355,25 @@ print_scalar_formatted (valaddr, type, format, size, stream) LONGEST val_long; int len = TYPE_LENGTH (type); - if (size == 'g' && sizeof (LONGEST) < 8 - && format == 'x') + if (len > sizeof (LONGEST) + && (format == 't' + || format == 'c' + || format == 'o' + || format == 'u' + || format == 'd' + || format == 'x')) { - /* ok, we're going to have to get fancy here. Assumption: a - long is four bytes. FIXME. */ - unsigned long v1, v2; - - v1 = unpack_long (builtin_type_long, valaddr); - v2 = unpack_long (builtin_type_long, valaddr + 4); - -#if TARGET_BYTE_ORDER == LITTLE_ENDIAN - /* Swap the two for printing */ - { - unsigned long tmp; - - tmp = v1; - v1 = v2; - v2 = tmp; - } -#endif - - switch (format) - { - case 'x': - fprintf_filtered (stream, local_hex_format_custom("08x%08"), v1, v2); - break; - default: - error ("Output size \"g\" unimplemented for format \"%c\".", - format); - } + /* We can't print it normally, but we can print it in hex. + Printing it in the wrong radix is more useful than saying + "use /x, you dummy". */ + /* FIXME: we could also do octal or binary if that was the + desired format. */ + /* FIXME: we should be using the size field to give us a minimum + field width to print. */ + val_print_type_code_int (type, valaddr, stream); return; } - + val_long = unpack_long (type, valaddr); /* If value is unsigned, truncate it in case negative. */ diff --git a/gdb/valprint.c b/gdb/valprint.c index b09474dd4b..b3b1f71dc4 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -304,7 +304,7 @@ val_print_type_code_int (type, valaddr, stream) unpack_long (type, valaddr)); #endif } -} +} /* Print a number according to FORMAT which is one of d,u,x,o,b,h,w,g. The raison d'etre of this function is to consolidate printing of LONG_LONG's @@ -517,8 +517,10 @@ print_hex_chars (stream, valaddr, len) unsigned len; { unsigned char *p; - - fprintf_filtered (stream, "0x"); + + /* FIXME: We should be not printing leading zeroes in most cases. */ + + fprintf_filtered (stream, local_hex_format_prefix ()); #if TARGET_BYTE_ORDER == BIG_ENDIAN for (p = valaddr; p < valaddr + len; @@ -531,6 +533,7 @@ print_hex_chars (stream, valaddr, len) { fprintf_filtered (stream, "%02x", *p); } + fprintf_filtered (stream, local_hex_format_suffix ()); } /* Called by various _val_print routines to print elements of an