git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] bswap: add NO_UNALIGNED_LOADS define

From
Jeff King <peff@peff.net>
Date
Dec 29, 2015, 06:36 UTC
Message-ID
<20151229063600.GB30340@sigill.intra.peff.net>
In-Reply-To
<20151229063449.GA28755@sigill.intra.peff.net>

The byte-swapping code automatically decides, based on the platform, whether it is sensible to cast an 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>
---
 compat/bswap.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/compat/bswap.h b/compat/bswap.h
index 7fed637..d47c003 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))
-- 
2.7.0.rc2.368.g1cbb535
Previous: Jeff KingNext: Eric Sunshine
Message 9 of 12 in “compiling with -fsanitize=undefined”
  1. 0/2 compiling with -fsanitize=undefinedJeff King, Dec 29, 2015
  2. 1/2 avoid shifting signed integers 31 bitsJeff King, Dec 29, 2015
  3. Junio C HamanoDec 30, 2015
  4. Jeff KingDec 30, 2015
  5. Duy NguyenDec 31, 2015
  6. Jeff KingDec 31, 2015
  7. Junio C HamanoJan 4, 2016
  8. Jeff KingJan 4, 2016
  9. 2/2 bswap: add NO_UNALIGNED_LOADS defineJeff King, Dec 29, 2015
  10. Eric SunshineDec 29, 2015
  11. Jeff KingDec 29, 2015
  12. Jeff KingDec 29, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.