summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Weiser <michael.weiser@gmx.de>2018-02-13 22:13:12 +0100
committerNiels Möller <nisse@lysator.liu.se>2018-03-25 11:27:28 +0200
commitd5738a574daee265ebfcf28dd51dfdca56c1798b (patch)
treed2bf5be49288022e341f25a10fafa6ea46f20a39
parent8c210b4e53b8566faea7ff0a175ad323236dd5d2 (diff)
downloadnettle-d5738a574daee265ebfcf28dd51dfdca56c1798b.tar.gz
Add arm endianness-aware assembly infrastructure
Introduce m4 macros to conditionally handle differences of little- and big-endian arm in assembler code.
-rw-r--r--asm.m48
-rw-r--r--config.m4.in1
-rw-r--r--configure.ac7
3 files changed, 15 insertions, 1 deletions
diff --git a/asm.m4 b/asm.m4
index 4018c235..8da47201 100644
--- a/asm.m4
+++ b/asm.m4
@@ -51,6 +51,14 @@ define(<ALIGN>,
<.align ifelse(ALIGN_LOG,yes,<m4_log2($1)>,$1)
>)
+define(<IF_BE>, <ifelse(
+WORDS_BIGENDIAN,yes,<$1>,
+WORDS_BIGENDIAN,no,<$2>,
+<errprint(<Unsupported endianness value>,WORDS_BIGENDIAN,<
+>)
+ m4exit(1)>)>)
+define(<IF_LE>, <IF_BE(<$2>, <$1>)>)
+
dnl Struct defining macros
dnl STRUCTURE(prefix)
diff --git a/config.m4.in b/config.m4.in
index e39c880c..11f90a40 100644
--- a/config.m4.in
+++ b/config.m4.in
@@ -7,6 +7,7 @@ define(<TYPE_PROGBITS>, <@ASM_TYPE_PROGBITS@>)dnl
define(<ALIGN_LOG>, <@ASM_ALIGN_LOG@>)dnl
define(<W64_ABI>, <@W64_ABI@>)dnl
define(<RODATA>, <@ASM_RODATA@>)dnl
+define(<WORDS_BIGENDIAN>, <@ASM_WORDS_BIGENDIAN@>)dnl
divert(1)
@ASM_MARK_NOEXEC_STACK@
divert
diff --git a/configure.ac b/configure.ac
index 0a35d3dd..a3460853 100644
--- a/configure.ac
+++ b/configure.ac
@@ -205,7 +205,11 @@ LSH_FUNC_STRERROR
# getenv_secure is used for fat overrides,
# getline is used in the testsuite
AC_CHECK_FUNCS(secure_getenv getline)
-AC_C_BIGENDIAN
+
+ASM_WORDS_BIGENDIAN=unknown
+AC_C_BIGENDIAN([AC_DEFINE([WORDS_BIGENDIAN], 1)
+ ASM_WORDS_BIGENDIAN=yes],
+ [ASM_WORDS_BIGENDIAN=no])
AC_CACHE_CHECK([for __builtin_bswap64],
nettle_cv_c_builtin_bswap64,
@@ -820,6 +824,7 @@ AC_SUBST(ASM_TYPE_PROGBITS)
AC_SUBST(ASM_MARK_NOEXEC_STACK)
AC_SUBST(ASM_ALIGN_LOG)
AC_SUBST(W64_ABI)
+AC_SUBST(ASM_WORDS_BIGENDIAN)
AC_SUBST(EMULATOR)
AC_SUBST(LIBNETTLE_MAJOR)