tpm2: Make compileable on OpenBSD

Make TPM 2 code compileable on OpenBSD where we have an older version
of gcc with missing builtin swap functions and where endianes #defines
area also different.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
This commit is contained in:
Stefan Berger 2017-10-11 21:14:16 -04:00
parent d93761932d
commit 659db6b2b8
2 changed files with 39 additions and 10 deletions

View File

@ -126,9 +126,25 @@
#ifndef _MSC_VER
# define WINAPI
# define __pragma(x)
# define REVERSE_ENDIAN_16(_Number) __builtin_bswap16(_Number)
# define REVERSE_ENDIAN_32(_Number) __builtin_bswap32(_Number)
# define REVERSE_ENDIAN_64(_Number) __builtin_bswap64(_Number)
# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR >= 2)
# define REVERSE_ENDIAN_16(_Number) __builtin_bswap16(_Number)
# define REVERSE_ENDIAN_32(_Number) __builtin_bswap32(_Number)
# define REVERSE_ENDIAN_64(_Number) __builtin_bswap64(_Number)
# else
# if defined __linux__ || defined __CYGWIN__
# include <byteswap.h>
# define REVERSE_ENDIAN_16(_Number) bswap_16(_Number)
# define REVERSE_ENDIAN_32(_Number) bswap_32(_Number)
# define REVERSE_ENDIAN_64(_Number) bswap_64(_Number)
# elif defined __OpenBSD__
# include <endian.h>
# define REVERSE_ENDIAN_16(_Number) swap16(_Number)
# define REVERSE_ENDIAN_32(_Number) swap32(_Number)
# define REVERSE_ENDIAN_64(_Number) swap64(_Number)
# else
# error Unsupported OS
# endif
# endif
# ifdef INLINE_FUNCTIONS
# define INLINE static inline
# endif

View File

@ -82,13 +82,26 @@
#define CLEAR 0
/* From Vendor-Specific: Table 1 - Defines for Processor Values */
#include <endian.h>
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define BIG_ENDIAN_TPM NO
#define LITTLE_ENDIAN_TPM YES
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
#define BIG_ENDIAN_TPM YES
#define LITTLE_ENDIAN_TPM NO
#if defined __linux__ || defined __CYGWIN__
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define BIG_ENDIAN_TPM NO
#define LITTLE_ENDIAN_TPM YES
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
#define BIG_ENDIAN_TPM YES
#define LITTLE_ENDIAN_TPM NO
#endif
#elif defined __OpenBSD__
#if _BYTE_ORDER == _LITTLE_ENDIAN
#define BIG_ENDIAN_TPM NO
#define LITTLE_ENDIAN_TPM YES
#endif
#if _BYTE_ORDER == _BIG_ENDIAN
#define BIG_ENDIAN_TPM YES
#define LITTLE_ENDIAN_TPM NO
#endif
#else
#error Unsupported OS
#endif
#define MOST_SIGNIFICANT_BIT_0 NO
#define LEAST_SIGNIFICANT_BIT_0 !MOST_SIGNIFICANT_BIT_0