Do not define __NO_STRICT_ALIGNMENT for armv6. While the requirements

are no longer natural-alignment strict, there are still some restrictions.

FreeBSD network code assumes data is naturally-aligned or is running
on a platform with no restrictions; pointers are not annotated to
indicate the data pointed to may be packed or unaligned.  The clang
optimizer can sometimes combine the load or store of a pair of adjacent
32-bit values into a single doubleword load/store, and that operation
requires at least 4-byte alignment.  __NO_STRICT_ALIGNMENT can lead
to tcp headers being only 2-byte aligned.

Note that alignment faults remain disabled on armv6, this change reverts
only the defining of the symbol which leads to some overly-agressive code
shortcuts when building common/shared drivers and network code for arm.

Approved by:	re(kib)
This commit is contained in:
Ian Lepore
2016-06-13 16:48:27 +00:00
parent 47c5f8f2fe
commit e2a03c1fe5
-4
View File
@@ -43,10 +43,6 @@
#error this file needs sys/cdefs.h as a prerequisite
#endif
#if __ARM_ARCH >= 6
#define __NO_STRICT_ALIGNMENT
#endif
/*
* Basic types upon which most other types are built.
*/