* valprint.c (print_hex_chars, print_octal_chars, print_decimal_chars,

print_binary_chars, print_char_chars): Add byte_order parameter and
	replace gdbarch_byte_order.
	(print_decimal_chars): Replace START_P, NOT_END_P and NEXT_P by their
	expressions and remove them.  Remove unused TWO_TO_FOURTH.
	(val_print_type_code_int): Introduce gdbarch_byte_order to get at the
	endianness.  Update call to print_hex_chars.
	* valprint.h (print_hex_chars, print_octal_chars, print_decimal_chars,
	print_binary_chars, print_char_chars): Add byte_order parameter.
	* printcmd.c (print_scalar_formatted): Introduce gdbarch_byte_order to
	get at the endianness.  Update print_*_char calls to use byte_order.
This commit is contained in:
Markus Deuling
2008-05-23 04:28:05 +00:00
parent cbc80391d0
commit d44e847372
4 changed files with 43 additions and 30 deletions

View File

@ -1,3 +1,17 @@
2008-05-23 Markus Deuling <deuling@de.ibm.com>
* valprint.c (print_hex_chars, print_octal_chars, print_decimal_chars,
print_binary_chars, print_char_chars): Add byte_order parameter and
replace gdbarch_byte_order.
(print_decimal_chars): Replace START_P, NOT_END_P and NEXT_P by their
expressions and remove them. Remove unused TWO_TO_FOURTH.
(val_print_type_code_int): Introduce gdbarch_byte_order to get at the
endianness. Update call to print_hex_chars.
* valprint.h (print_hex_chars, print_octal_chars, print_decimal_chars,
print_binary_chars, print_char_chars): Add byte_order parameter.
* printcmd.c (print_scalar_formatted): Introduce gdbarch_byte_order to
get at the endianness. Update print_*_char calls to use byte_order.
2008-05-22 Ulrich Weigand <uweigand@de.ibm.com> 2008-05-22 Ulrich Weigand <uweigand@de.ibm.com>
* symtab.h (struct symbol): Make "aux_value" member a void pointer * symtab.h (struct symbol): Make "aux_value" member a void pointer

View File

@ -322,6 +322,7 @@ print_scalar_formatted (const void *valaddr, struct type *type,
{ {
LONGEST val_long = 0; LONGEST val_long = 0;
unsigned int len = TYPE_LENGTH (type); unsigned int len = TYPE_LENGTH (type);
enum bfd_endian byte_order = gdbarch_byte_order (current_gdbarch);
/* If we get here with a string format, try again without it. Go /* If we get here with a string format, try again without it. Go
all the way back to the language printers, which may call us all the way back to the language printers, which may call us
@ -340,20 +341,20 @@ print_scalar_formatted (const void *valaddr, struct type *type,
switch (format) switch (format)
{ {
case 'o': case 'o':
print_octal_chars (stream, valaddr, len); print_octal_chars (stream, valaddr, len, byte_order);
return; return;
case 'u': case 'u':
case 'd': case 'd':
print_decimal_chars (stream, valaddr, len); print_decimal_chars (stream, valaddr, len, byte_order);
return; return;
case 't': case 't':
print_binary_chars (stream, valaddr, len); print_binary_chars (stream, valaddr, len, byte_order);
return; return;
case 'x': case 'x':
print_hex_chars (stream, valaddr, len); print_hex_chars (stream, valaddr, len, byte_order);
return; return;
case 'c': case 'c':
print_char_chars (stream, valaddr, len); print_char_chars (stream, valaddr, len, byte_order);
return; return;
default: default:
break; break;

View File

@ -313,6 +313,8 @@ void
val_print_type_code_int (struct type *type, const gdb_byte *valaddr, val_print_type_code_int (struct type *type, const gdb_byte *valaddr,
struct ui_file *stream) struct ui_file *stream)
{ {
enum bfd_endian byte_order = gdbarch_byte_order (current_gdbarch);
if (TYPE_LENGTH (type) > sizeof (LONGEST)) if (TYPE_LENGTH (type) > sizeof (LONGEST))
{ {
LONGEST val; LONGEST val;
@ -330,7 +332,7 @@ val_print_type_code_int (struct type *type, const gdb_byte *valaddr,
complement (a reasonable assumption, I think) and do complement (a reasonable assumption, I think) and do
better than this. */ better than this. */
print_hex_chars (stream, (unsigned char *) valaddr, print_hex_chars (stream, (unsigned char *) valaddr,
TYPE_LENGTH (type)); TYPE_LENGTH (type), byte_order);
} }
} }
else else
@ -525,7 +527,7 @@ print_decimal_floating (const gdb_byte *valaddr, struct type *type,
void void
print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr, print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
unsigned len) unsigned len, enum bfd_endian byte_order)
{ {
#define BITS_IN_BYTES 8 #define BITS_IN_BYTES 8
@ -541,7 +543,7 @@ print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
/* FIXME: We should be not printing leading zeroes in most cases. */ /* FIXME: We should be not printing leading zeroes in most cases. */
if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) if (byte_order == BFD_ENDIAN_BIG)
{ {
for (p = valaddr; for (p = valaddr;
p < valaddr + len; p < valaddr + len;
@ -585,7 +587,7 @@ print_binary_chars (struct ui_file *stream, const gdb_byte *valaddr,
*/ */
void void
print_octal_chars (struct ui_file *stream, const gdb_byte *valaddr, print_octal_chars (struct ui_file *stream, const gdb_byte *valaddr,
unsigned len) unsigned len, enum bfd_endian byte_order)
{ {
const gdb_byte *p; const gdb_byte *p;
unsigned char octa1, octa2, octa3, carry; unsigned char octa1, octa2, octa3, carry;
@ -628,7 +630,7 @@ print_octal_chars (struct ui_file *stream, const gdb_byte *valaddr,
carry = 0; carry = 0;
fputs_filtered ("0", stream); fputs_filtered ("0", stream);
if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) if (byte_order == BFD_ENDIAN_BIG)
{ {
for (p = valaddr; for (p = valaddr;
p < valaddr + len; p < valaddr + len;
@ -733,19 +735,12 @@ print_octal_chars (struct ui_file *stream, const gdb_byte *valaddr,
*/ */
void void
print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr, print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
unsigned len) unsigned len, enum bfd_endian byte_order)
{ {
#define TEN 10 #define TEN 10
#define TWO_TO_FOURTH 16
#define CARRY_OUT( x ) ((x) / TEN) /* extend char to int */ #define CARRY_OUT( x ) ((x) / TEN) /* extend char to int */
#define CARRY_LEFT( x ) ((x) % TEN) #define CARRY_LEFT( x ) ((x) % TEN)
#define SHIFT( x ) ((x) << 4) #define SHIFT( x ) ((x) << 4)
#define START_P \
((gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) ? valaddr : valaddr + len - 1)
#define NOT_END_P \
((gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) ? (p < valaddr + len) : (p >= valaddr))
#define NEXT_P \
((gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) ? p++ : p-- )
#define LOW_NIBBLE( x ) ( (x) & 0x00F) #define LOW_NIBBLE( x ) ( (x) & 0x00F)
#define HIGH_NIBBLE( x ) (((x) & 0x0F0) >> 4) #define HIGH_NIBBLE( x ) (((x) & 0x0F0) >> 4)
@ -782,9 +777,9 @@ print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
* LSD end. * LSD end.
*/ */
decimal_digits = 0; /* Number of decimal digits so far */ decimal_digits = 0; /* Number of decimal digits so far */
p = START_P; p = (byte_order == BFD_ENDIAN_BIG) ? valaddr : valaddr + len - 1;
flip = 0; flip = 0;
while (NOT_END_P) while ((byte_order == BFD_ENDIAN_BIG) ? (p < valaddr + len) : (p >= valaddr))
{ {
/* /*
* Multiply current base-ten number by 16 in place. * Multiply current base-ten number by 16 in place.
@ -814,7 +809,10 @@ print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
/* Take low nibble and bump our pointer "p". /* Take low nibble and bump our pointer "p".
*/ */
digits[0] += LOW_NIBBLE (*p); digits[0] += LOW_NIBBLE (*p);
NEXT_P; if (byte_order == BFD_ENDIAN_BIG)
p++;
else
p--;
flip = 0; flip = 0;
} }
@ -868,14 +866,14 @@ print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
void void
print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr, print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr,
unsigned len) unsigned len, enum bfd_endian byte_order)
{ {
const gdb_byte *p; const gdb_byte *p;
/* FIXME: We should be not printing leading zeroes in most cases. */ /* FIXME: We should be not printing leading zeroes in most cases. */
fputs_filtered ("0x", stream); fputs_filtered ("0x", stream);
if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) if (byte_order == BFD_ENDIAN_BIG)
{ {
for (p = valaddr; for (p = valaddr;
p < valaddr + len; p < valaddr + len;
@ -900,11 +898,11 @@ print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr,
void void
print_char_chars (struct ui_file *stream, const gdb_byte *valaddr, print_char_chars (struct ui_file *stream, const gdb_byte *valaddr,
unsigned len) unsigned len, enum bfd_endian byte_order)
{ {
const gdb_byte *p; const gdb_byte *p;
if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG) if (byte_order == BFD_ENDIAN_BIG)
{ {
p = valaddr; p = valaddr;
while (p < valaddr + len - 1 && *p == 0) while (p < valaddr + len - 1 && *p == 0)

View File

@ -69,17 +69,17 @@ extern void val_print_type_code_flags (struct type *type,
struct ui_file *stream); struct ui_file *stream);
extern void print_binary_chars (struct ui_file *, const gdb_byte *, extern void print_binary_chars (struct ui_file *, const gdb_byte *,
unsigned int); unsigned int, enum bfd_endian);
extern void print_octal_chars (struct ui_file *, const gdb_byte *, extern void print_octal_chars (struct ui_file *, const gdb_byte *,
unsigned int); unsigned int, enum bfd_endian);
extern void print_decimal_chars (struct ui_file *, const gdb_byte *, extern void print_decimal_chars (struct ui_file *, const gdb_byte *,
unsigned int); unsigned int, enum bfd_endian);
extern void print_hex_chars (struct ui_file *, const gdb_byte *, extern void print_hex_chars (struct ui_file *, const gdb_byte *,
unsigned int); unsigned int, enum bfd_endian);
extern void print_char_chars (struct ui_file *, const gdb_byte *, extern void print_char_chars (struct ui_file *, const gdb_byte *,
unsigned int); unsigned int, enum bfd_endian);
#endif #endif