Add header for access to potentially unaligned data.
authorBen Pfaff <blp@nicira.com>
Fri, 7 May 2010 21:31:04 +0000 (14:31 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 7 May 2010 21:36:07 +0000 (14:36 -0700)
commitafa3a93165f1f576d03cbf9fc1a2f8ddc2a64d01
treeeccaaedbe044e65ab42d3069204c8c58ec7860b0
parenta1ae5dc8da2d30704f7654e0d593cf2ca1e088f7
Add header for access to potentially unaligned data.

I had been under the impression that "memcpy" was a valid way to copy
unaligned data into an aligned location for access.  But testing on SPARC
has shown that GCC doesn't always honor that intention.  It seems that, if
GCC can see that there is a pointer of a type that requires alignment to
a given object, then it will access it directly regardless of whether
memcpy() is used to copy it.

This commit adds a new header with functions to access unaligned data.  I
managed to come up with two techniques, one GCC-specific, one generic, that
do avoid the misaligned access in my test case.  The GCC-specific technique
is the same one used by the Linux kernel (although no code has been
literally copied).  The other one seemed obvious but possibly slow
depending on the compiler's ability to optimize.

The following commit adds a user.
lib/automake.mk
lib/unaligned.h [new file with mode: 0644]