]> Git Repo - secp256k1.git/commitdiff
Merge #787: Use preprocessor macros instead of autoconf to detect endianness
authorTim Ruffing <[email protected]>
Thu, 13 Aug 2020 10:25:29 +0000 (12:25 +0200)
committerTim Ruffing <[email protected]>
Thu, 13 Aug 2020 10:36:53 +0000 (12:36 +0200)
0dccf98a21beb245f6cd9ed76fb7368529df09c7 Use preprocessor macros instead of autoconf to detect endianness (Tim Ruffing)

Pull request description:

  This does not fix any particular issue but it's preferable to not
  rely on autoconf. This avoids endianness mess for users on BE hosts
  if they use their build without autoconf.

  The macros are carefully written to err on the side of the caution,
  e.g., we #error if the user manually configures a different endianness
  than what we detect.

  Supersedes #770 .

ACKs for top commit:
  sipa:
    ACK 0dccf98a21beb245f6cd9ed76fb7368529df09c7
  gmaxwell:
    ACK 0dccf98a21beb245f6cd9ed76fb7368529df09c7

Tree-SHA512: 6779458de5cb6eaef2ac37f9d4b8fa6c9b299f58f6e5b72f2b0d7e36c12ea06074e483acfb85085a147e0f4b51cd67d897f61a67250ec1cea284a0f7680eb2e8

1  2 
configure.ac
src/util.h

diff --cc configure.ac
Simple merge
diff --cc src/util.h
index c14bf0e5ef621e3263ab05c4c4f3db1e3bb3bc58,befb9dccdb414f1e23475e096f31f7b18697b338..eb4db4faf53bfbc0146ed6c645f47ec53312a404
@@@ -170,12 -170,29 +170,26 @@@ static SECP256K1_INLINE void *manual_al
  # define I64uFORMAT "llu"
  #endif
  
 -#if defined(HAVE___INT128)
 -# if defined(__GNUC__)
 -#  define SECP256K1_GNUC_EXT __extension__
 -# else
 -#  define SECP256K1_GNUC_EXT
 -# endif
 -SECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t;
 +#if defined(__GNUC__)
 +# define SECP256K1_GNUC_EXT __extension__
 +#else
 +# define SECP256K1_GNUC_EXT
  #endif
  
+ #if defined(__BYTE_ORDER__)
+ # if defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && !defined(SECP256K1_LITTLE_ENDIAN)
+ #  define SECP256K1_LITTLE_ENDIAN
+ # elif defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && !defined(SECP256K1_BIG_ENDIAN)
+ #  define SECP256K1_BIG_ENDIAN
+ # endif
+ #endif
+ #if defined(_MSC_VER) && defined(_WIN32) && !defined(SECP256K1_LITTLE_ENDIAN)
+ # define SECP256K1_LITTLE_ENDIAN
+ #endif
+ #if defined(SECP256K1_LITTLE_ENDIAN) == defined(SECP256K1_BIG_ENDIAN)
+ # error Please make sure that either SECP256K1_LITTLE_ENDIAN or SECP256K1_BIG_ENDIAN is set, see src/util.h.
+ #endif
  /* Zero memory if flag == 1. Flag must be 0 or 1. Constant time. */
  static SECP256K1_INLINE void memczero(void *s, size_t len, int flag) {
      unsigned char *p = (unsigned char *)s;
This page took 0.028785 seconds and 4 git commands to generate.