aboutsummaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-12-29 01:36:00 -0500
committerJunio C Hamano <gitster@pobox.com>2016-01-04 09:51:33 -0800
commita0df2e5a7efe90e932af66e70ba6c863a5826833 (patch)
tree02b8f24be01127a96e3f1ba20f269d54e773ff10 /compat
parent9a93c6686f56086fe5280a85513041bbfebf41d0 (diff)
downloadgit-a0df2e5a7efe90e932af66e70ba6c863a5826833.tar.gz
git-a0df2e5a7efe90e932af66e70ba6c863a5826833.tar.xz
bswap: add NO_UNALIGNED_LOADS define
The byte-swapping code automatically decides, based on the platform, whether it is sensible to cast and do a potentially unaligned ntohl(), or to pick individual bytes out of an array. It can be handy to override this decision, though, when turning on compiler flags that will complain about unaligned loads (such as -fsanitize=undefined). This patch adds a macro check to make this possible. There's no nice Makefile knob here; this is for prodding at Git's internals, and anybody using it can set "-DNO_UNALIGNED_LOADS" in the same place they are setting up "-fsanitize". Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat')
-rw-r--r--compat/bswap.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/compat/bswap.h b/compat/bswap.h
index 7fed637ed..d47c00354 100644
--- a/compat/bswap.h
+++ b/compat/bswap.h
@@ -149,11 +149,12 @@ static inline uint64_t git_bswap64(uint64_t x)
* and is faster on architectures with memory alignment issues.
*/
-#if defined(__i386__) || defined(__x86_64__) || \
+#if !defined(NO_UNALIGNED_LOADS) && ( \
+ defined(__i386__) || defined(__x86_64__) || \
defined(_M_IX86) || defined(_M_X64) || \
defined(__ppc__) || defined(__ppc64__) || \
defined(__powerpc__) || defined(__powerpc64__) || \
- defined(__s390__) || defined(__s390x__)
+ defined(__s390__) || defined(__s390x__))
#define get_be16(p) ntohs(*(unsigned short *)(p))
#define get_be32(p) ntohl(*(unsigned int *)(p))