[Bug 193649] ring->nr_buf_size will be calculated wrongly on PPC machine
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Tue Sep 23 16:16:50 UTC 2014
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193649
--- Comment #1 from dongshan <thomasyang1206 at 126.com> ---
the bug is caused as following:
imaging a 32-bit integer 0x00000800, on little endian machine, the data in
memory is arranged like this:
[0000 0000] 0000
[0000 0001] 0000
[0000 0002] 1000
[0000 0003] 0000
[0000 0004] 0000
[0000 0005] 0000
[0000 0006] 0000
[0000 0007] 0000
However, on a big endian machine, the value in memory is:
[0000 0000] 0000
[0000 0001] 0000
[0000 0002] 0000
[0000 0003] 0000
[0000 0004] 0000
[0000 0005] 1000
[0000 0006] 0000
[0000 0007] 0000
-------------------------------------------------------------------------------
Here is the trick:
uint32_t foo; // let assume the address of foo is 0x0, as showed above.
uint32_t *p = &foo;
*(uint16_t *)p = 0x00000800;
printf("foo: 0x%x", foo); // the output of foo will be 0x08000000
printf("foo1:0x%x", (uint16_t)foo); // the output will be 0x00000800
Dump the memory on big endian machine:
[0000 0000] 0000
[0000 0001] 1000
[0000 0002] 0000
[0000 0003] 0000
[0000 0004] 0000
[0000 0005] 0000
[0000 0006] 0000
[0000 0007] 0000
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list