-
Julien BLACHE authored
- endianness issues: on big endian machines, writing out only part of an integer was broken (get_needed_bytes(x) < sizeof(x)) -> shift integer before memcpy() on big endian machines - alignment issues: unaligned reads when loading binary plist. Leads to slow runtime performance (kernel trapping and fixing things up), SIGBUS (kernel not helping us out) -> introduce get_unaligned() and have the compiler generate the code needed for the unaligned access (note that there remains unaligned accesses that I haven't been able to track down - I've seen 2 of them with test #2) - type-punning issues: breaking strict aliasing rules can lead to unexpected results as the compiler takes full advantage of the aliasing while optimizing -> introduce the plist_uint_ptr union instead of casting pointers Tested on amd64, alpha and hppa.
33b8a128
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
Array.cpp | ||
Boolean.cpp | ||
CMakeLists.txt | ||
Data.cpp | ||
Date.cpp | ||
Dictionary.cpp | ||
Integer.cpp | ||
Node.cpp | ||
Real.cpp | ||
String.cpp | ||
Structure.cpp | ||
bplist.c | ||
plist.c | ||
plist.h | ||
xplist.c |