X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-endian.h;h=5a6085f9e5a0acbd41c25db5cf8e20d95e6c6107;hb=HEAD;hp=f676162b067a1ec2f61bdf856e7a1d5402b62537;hpb=d2428e875af8666473fb689429eaf1022862510d;p=lttng-ust.git diff --git a/include/lttng/ust-endian.h b/include/lttng/ust-endian.h index f676162b..5a6085f9 100644 --- a/include/lttng/ust-endian.h +++ b/include/lttng/ust-endian.h @@ -1,46 +1,65 @@ -#ifndef _LTTNG_UST_ENDIAN_H -#define _LTTNG_UST_ENDIAN_H +// SPDX-FileCopyrightText: 2012 Mathieu Desnoyers +// +// SPDX-License-Identifier: MIT /* - * lttng/ust-endian.h - * - * Copyright 2012 (c) - 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. * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: + * Direct byte swapping interfaces: * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * 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 *) */ +#ifndef _LTTNG_UST_ENDIAN_H +#define _LTTNG_UST_ENDIAN_H + #if (defined(__linux__) || defined(__CYGWIN__)) #include -#elif defined(__FreeBSD__) -#include -#else -#error "Please add support for your OS." -#endif +#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 -#ifndef FLOAT_WORD_ORDER #ifdef __FLOAT_WORD_ORDER -#define FLOAT_WORD_ORDER __FLOAT_WORD_ORDER +#define LTTNG_UST_FLOAT_WORD_ORDER __FLOAT_WORD_ORDER #else /* __FLOAT_WORD_ORDER */ -#define FLOAT_WORD_ORDER BYTE_ORDER +#define LTTNG_UST_FLOAT_WORD_ORDER __BYTE_ORDER #endif /* __FLOAT_WORD_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." +#endif #endif /* _LTTNG_UST_ENDIAN_H */