From e49f2768b32028b9b64243b783624bd7d37ec6dd Mon Sep 17 00:00:00 2001 From: Owen Yamauchi Date: Fri, 3 May 2013 12:16:14 -0700 Subject: [PATCH] Break dependency on endian.h Summary: gcc and clang both give you these three macros pre-defined. I've found a reference on the interweb to this being broken (http://gcc.gnu.org/ml/gcc/2011-08/msg00152.html) but that was with gcc 4.4. I've tested with 4.6, 4.7 and clang 3.2 and they all do the right thing on little-endian (internal build and OS X). Alas, I don't have a big-endian system handy to test with. Test Plan: fbconfig/fbmake runtests. Reviewed By: simpkins@fb.com FB internal diff: D799416 --- folly/Bits.h | 13 ++++++------- folly/experimental/EliasFanoCoding.h | 3 +-- folly/experimental/symbolizer/Elf.cpp | 5 ++--- folly/test/EndianTest.cpp | 6 +++--- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/folly/Bits.h b/folly/Bits.h index d9bf1ad0..83c61708 100644 --- a/folly/Bits.h +++ b/folly/Bits.h @@ -76,7 +76,6 @@ #include #include -#include #include #include #include @@ -268,7 +267,7 @@ FB_GEN(uint16_t, our_bswap16) #undef FB_GEN -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ template struct EndianInt : public detail::EndianIntBase { @@ -277,7 +276,7 @@ struct EndianInt : public detail::EndianIntBase { static T little(T x) { return x; } }; -#elif __BYTE_ORDER == __BIG_ENDIAN +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ template struct EndianInt : public detail::EndianIntBase { @@ -288,7 +287,7 @@ struct EndianInt : public detail::EndianIntBase { #else # error Your machine uses a weird endianness! -#endif /* __BYTE_ORDER */ +#endif /* __BYTE_ORDER__ */ } // namespace detail @@ -318,13 +317,13 @@ class Endian { }; static constexpr Order order = -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ Order::LITTLE; -#elif __BYTE_ORDER == __BIG_ENDIAN +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ Order::BIG; #else # error Your machine uses a weird endianness! -#endif /* __BYTE_ORDER */ +#endif /* __BYTE_ORDER__ */ template static T swap(T x) { return detail::EndianInt::swap(x); diff --git a/folly/experimental/EliasFanoCoding.h b/folly/experimental/EliasFanoCoding.h index 06d54978..d6232b2d 100644 --- a/folly/experimental/EliasFanoCoding.h +++ b/folly/experimental/EliasFanoCoding.h @@ -33,7 +33,6 @@ #endif #include -#include #include #include #include @@ -44,7 +43,7 @@ #include "folly/Likely.h" #include "folly/Range.h" -#if __BYTE_ORDER != __LITTLE_ENDIAN +#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ #error EliasFanoCoding.h requires little endianness #endif diff --git a/folly/experimental/symbolizer/Elf.cpp b/folly/experimental/symbolizer/Elf.cpp index f28ed07b..33e20dde 100644 --- a/folly/experimental/symbolizer/Elf.cpp +++ b/folly/experimental/symbolizer/Elf.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include @@ -130,9 +129,9 @@ void ElfFile::init() { #undef EXPECTED_CLASS // Validate ELF data encoding (LSB/MSB) -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ # define EXPECTED_ENCODING ELFDATA2LSB -#elif __BYTE_ORDER == __BIG_ENDIAN +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ # define EXPECTED_ENCODING ELFDATA2MSB #else # error Unsupported byte order diff --git a/folly/test/EndianTest.cpp b/folly/test/EndianTest.cpp index cc65d803..a08748bb 100644 --- a/folly/test/EndianTest.cpp +++ b/folly/test/EndianTest.cpp @@ -30,7 +30,7 @@ TEST(Endian, Basic) { uint64_t v64 = 0x123456789abcdef0ULL; uint64_t v64s = 0xf0debc9a78563412ULL; -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #define GEN1(sz) \ EXPECT_EQ(v##sz, Endian::little(v##sz)); \ @@ -38,7 +38,7 @@ TEST(Endian, Basic) { EXPECT_EQ(v##sz##s, Endian::big(v##sz)); \ EXPECT_EQ(v##sz##s, Endian::big##sz(v##sz)); -#elif __BYTE_ORDER == __BIG_ENDIAN +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ #define GEN1(sz) \ EXPECT_EQ(v##sz##s, Endian::little(v##sz)); \ @@ -48,7 +48,7 @@ TEST(Endian, Basic) { #else # error Your machine uses a weird endianness! -#endif /* __BYTE_ORDER */ +#endif /* __BYTE_ORDER__ */ #define GEN(sz) \ EXPECT_EQ(v##sz##s, Endian::swap(v##sz)); \ -- 2.34.1