Discussion:
gdb print /x always big endian order?
J K
2004-02-05 18:00:42 UTC
Permalink
Hello,

I've used a simple code to examine the storage
of a short on a big and little endian machine.

It seems in GNU gdb Red Hat Linux (5.1-1) when
I do a print /x the order is Big Endian regardless
of the host architecture. Just wondering if this
is expected, I didn't see anything in the docs.

short short_val = 31415;
unsigned char buff[8];
memcpy(buff,&short_val,2);
printf("Short bytes 0x%x 0x%x\n",buff[0],buff[1]);

on Little Endian machine:
Short bytes 0xb7 0x7a

on Big Endian machine:
Short bytes 0x7a 0xb7

On the Little Endian machine in gdb:
(gdb) p short_val
$18 = 31415
(gdb) p /x short_val
$19 = 0x7ab7 <- not what I expected.
(gdb) x/2xb &short_val
0xbffff82a: 0xb7 0x7a
(gdb) x/2ub &short_val
0xbffff82a: 183 122

Memory is in the order I would expect but the
print /x shows the order as Big Endian.

Thanks,
J.K.







__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html
Daniel Jacobowitz
2004-02-05 18:04:25 UTC
Permalink
Post by J K
Hello,
I've used a simple code to examine the storage
of a short on a big and little endian machine.
It seems in GNU gdb Red Hat Linux (5.1-1) when
I do a print /x the order is Big Endian regardless
of the host architecture. Just wondering if this
is expected, I didn't see anything in the docs.
short short_val = 31415;
What would C do if you said short_val = 0x7ab7?
Post by J K
Short bytes 0xb7 0x7a
Precisely the same thing :)
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
Andreas Schwab
2004-02-06 01:03:34 UTC
Permalink
Post by J K
It seems in GNU gdb Red Hat Linux (5.1-1) when
I do a print /x the order is Big Endian regardless
of the host architecture.
The print command just prints a value, and values don't have endianess.
Only memory contents have.

Andreas.
--
Andreas Schwab, SuSE Labs, ***@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Bill Gatliff
2004-02-06 01:14:05 UTC
Permalink
JK:


Indeed. If you want to see endianness, use 'x' instead, and ask it for a
string of hex bytes. :^)


b.g.
Post by Andreas Schwab
Post by J K
It seems in GNU gdb Red Hat Linux (5.1-1) when
I do a print /x the order is Big Endian regardless
of the host architecture.
The print command just prints a value, and values don't have endianess.
Only memory contents have.
Andreas.
--
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
--
Bill Gatliff
Embedded GNU, Linux training and development.
***@billgatliff.com

Loading...