summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@samba.org>2014-05-05 13:42:36 +0200
committerKarolin Seeger <kseeger@samba.org>2014-05-19 12:18:00 +0200
commit8f0c74e860644b6eb0fc1c8d0bce0e776b053848 (patch)
tree787ca654830be25126c1b599e1312d3ff88c3b62 /lib/util
parent1d255d2138e74eca2ad5e0ad906d7a34a9819095 (diff)
downloadsamba-8f0c74e860644b6eb0fc1c8d0bce0e776b053848.tar.gz
byteorder: do not assume PowerPC is big-endian
byteorder.h currently uses reverse-indexing ASM instructions for little endian multi-byte storage/retrieval on PowerPC. With Power8 this is an incorrect assumption, as it can be big or little endian. Bug: https://bugzilla.samba.org/show_bug.cgi?id=10590 Signed-off-by: David Disseldorp <ddiss@samba.org> Reviewed-by: Christof Schmitt <cs@samba.org> (cherry picked from commit 5bf6ed5ebd0dc5ecdc5bcfb1d4720e9251849adc)
Diffstat (limited to 'lib/util')
-rw-r--r--lib/util/byteorder.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/util/byteorder.h b/lib/util/byteorder.h
index 58cd68abf9..297be52ec3 100644
--- a/lib/util/byteorder.h
+++ b/lib/util/byteorder.h
@@ -89,10 +89,12 @@ it also defines lots of intermediate macros, just ignore those :-)
/*
- on powerpc we can use the magic instructions to load/store
- in little endian
-*/
-#if (defined(__powerpc__) && defined(__GNUC__))
+ * On powerpc we can use the magic instructions to load/store in little endian.
+ * The instructions are reverse-indexing, so assume a big endian Power
+ * processor. Power8 can be big or little endian, so we need to explicitly
+ * check.
+ */
+#if (defined(__powerpc__) && defined(__GNUC__) && HAVE_BIG_ENDIAN)
static __inline__ uint16_t ld_le16(const uint16_t *addr)
{
uint16_t val;