X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-endian.h;h=8bdb8a7f8fd0b6109ba2e3666cb1c893b7afef52;hb=c5a5ae4fe72a980bc5c0f7cdb3c8b8e797bf8abd;hp=085ff0728e0f7d6fbde7c43e07c4c7e8591ec195;hpb=7e1ca66a973e074ce18d658f99d756c3e1876e09;p=lttng-ust.git diff --git a/include/lttng/ust-endian.h b/include/lttng/ust-endian.h index 085ff072..8bdb8a7f 100644 --- a/include/lttng/ust-endian.h +++ b/include/lttng/ust-endian.h @@ -1,29 +1,67 @@ -#ifndef _LTTNG_UST_ENDIAN_H -#define _LTTNG_UST_ENDIAN_H - /* - * lttng/ust-endian.h + * SPDX-License-Identifier: MIT * - * Copyright 2012 (c) - Mathieu Desnoyers + * Copyright (C) 2012 Mathieu Desnoyers + */ + +/* + * This header defines the following endian macros based on the current + * platform endian headers: * - * endian.h compatibility layer. + * BYTE_ORDER this macro shall have a value equal to one + * of the *_ENDIAN macros in this header. + * FLOAT_WORD_ORDER this macro shall have a value equal to one + * of the *_ENDIAN macros in this header. + * LITTLE_ENDIAN if BYTE_ORDER == LITTLE_ENDIAN, the host + * byte order is from least significant to + * most significant. + * BIG_ENDIAN if BYTE_ORDER == BIG_ENDIAN, the host byte + * order is from most significant to least + * significant. * - * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED - * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * Direct byte swapping interfaces: * - * Permission is hereby granted to use or copy this program - * for any purpose, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. + * uint16_t bswap_16(uint16_t x); (* swap bytes 16-bit word *) + * uint32_t bswap_32(uint32_t x); (* swap bytes 32-bit word *) + * uint64_t bswap_64(uint32_t x); (* swap bytes 64-bit word *) */ -#ifdef __linux__ +#ifndef _LTTNG_UST_ENDIAN_H +#define _LTTNG_UST_ENDIAN_H + +#if (defined(__linux__) || defined(__CYGWIN__)) #include -#elif __FreeBSD__ -#include +#include + +#define lttng_ust_bswap_16(x) bswap_16(x) +#define lttng_ust_bswap_32(x) bswap_32(x) +#define lttng_ust_bswap_64(x) bswap_64(x) + +#define LTTNG_UST_BYTE_ORDER __BYTE_ORDER +#define LTTNG_UST_LITTLE_ENDIAN __LITTLE_ENDIAN +#define LTTNG_UST_BIG_ENDIAN __BIG_ENDIAN + +#ifdef __FLOAT_WORD_ORDER +#define LTTNG_UST_FLOAT_WORD_ORDER __FLOAT_WORD_ORDER +#else /* __FLOAT_WORD_ORDER */ +#define LTTNG_UST_FLOAT_WORD_ORDER __BYTE_ORDER +#endif /* __FLOAT_WORD_ORDER */ + +#elif defined(__FreeBSD__) + +#include + +#define lttng_ust_bswap_16(x) bswap16(x) +#define lttng_ust_bswap_32(x) bswap32(x) +#define lttng_ust_bswap_64(x) bswap64(x) + +#define LTTNG_UST_BYTE_ORDER BYTE_ORDER +#define LTTNG_UST_LITTLE_ENDIAN LITTLE_ENDIAN +#define LTTNG_UST_BIG_ENDIAN BIG_ENDIAN +#define LTTNG_UST_FLOAT_WORD_ORDER BYTE_ORDER + #else -#error "Please add support for your OS into lttng/ust-endian.h." +#error "Please add support for your OS." #endif #endif /* _LTTNG_UST_ENDIAN_H */