X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Falign.h;h=e46c03015b39aa712024d45111ef93d44d8278b8;hb=c0c0989ab70574e09b2f7e8b48c2da6af664a849;hp=f2163e08d56c74918e026347ef43e3054c3c05cb;hpb=8e3484cf85747d476302a2049dfa9741cc128b32;p=lttng-ust.git diff --git a/include/lttng/align.h b/include/lttng/align.h index f2163e08..e46c0301 100644 --- a/include/lttng/align.h +++ b/include/lttng/align.h @@ -1,45 +1,44 @@ -#ifndef _UST_ALIGN_H -#define _UST_ALIGN_H - /* - * lttng/align.h - * - * (C) Copyright 2010-2011 - Mathieu Desnoyers + * SPDX-License-Identifier: MIT * - * 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: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * Copyright (C) 2010-2011 Mathieu Desnoyers */ +#ifndef _UST_ALIGN_H +#define _UST_ALIGN_H + #include #include #include -#ifndef PAGE_SIZE /* Cygwin limits.h defines its own PAGE_SIZE */ -#define PAGE_SIZE sysconf(_SC_PAGE_SIZE) +#ifdef __FreeBSD__ +#include +#endif + +#ifdef _SC_PAGE_SIZE +#define LTTNG_UST_PAGE_SIZE sysconf(_SC_PAGE_SIZE) +#elif defined(PAGE_SIZE) +#define LTTNG_UST_PAGE_SIZE PAGE_SIZE +#else +#error "Please add page size detection for your OS." #endif -#define PAGE_MASK (~(PAGE_SIZE - 1)) -#define __ALIGN_MASK(v, mask) (((v) + (mask)) & ~(mask)) -#define ALIGN(v, align) __ALIGN_MASK(v, (typeof(v)) (align) - 1) -#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) +#define LTTNG_UST_PAGE_MASK (~(LTTNG_UST_PAGE_SIZE - 1)) + +#define __LTTNG_UST_ALIGN_MASK(v, mask) (((v) + (mask)) & ~(mask)) +#define LTTNG_UST_ALIGN(v, align) __LTTNG_UST_ALIGN_MASK(v, (__typeof__(v)) (align) - 1) +#define LTTNG_UST_PAGE_ALIGN(addr) LTTNG_UST_ALIGN(addr, LTTNG_UST_PAGE_SIZE) /** - * offset_align - Calculate the offset needed to align an object on its natural - * alignment towards higher addresses. + * lttng_ust_offset_align - Calculate the offset needed to align an object on + * its natural alignment towards higher addresses. * @align_drift: object offset from an "alignment"-aligned address. * @alignment: natural object alignment. Must be non-zero, power of 2. * * Returns the offset that must be added to align towards higher * addresses. */ -#define offset_align(align_drift, alignment) \ +#define lttng_ust_offset_align(align_drift, alignment) \ ({ \ LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 \ || ((alignment) & ((alignment) - 1))); \ @@ -47,18 +46,50 @@ }) /** - * offset_align_floor - Calculate the offset needed to align an object - * on its natural alignment towards lower addresses. + * lttng_ust_offset_align_floor - Calculate the offset needed to align an + * object on its natural alignment towards lower addresses. * @align_drift: object offset from an "alignment"-aligned address. * @alignment: natural object alignment. Must be non-zero, power of 2. * * Returns the offset that must be substracted to align towards lower addresses. */ -#define offset_align_floor(align_drift, alignment) \ +#define lttng_ust_offset_align_floor(align_drift, alignment) \ ({ \ LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 \ || ((alignment) & ((alignment) - 1))); \ - (((align_drift) - (alignment)) & ((alignment) - 1); \ + (((align_drift) - (alignment)) & ((alignment) - 1)); \ }) +/* + * Non-namespaced defines for backwards compatibility, + * introduced in 2.13, should be removed in the future. + */ + +/* Cygwin limits.h defines its own PAGE_SIZE */ +#ifndef PAGE_SIZE +#define PAGE_SIZE LTTNG_UST_PAGE_SIZE +#endif + +/* FreeBSD and macOS defines their own PAGE_MASK. */ +#ifndef PAGE_MASK +#define PAGE_MASK LTTNG_UST_PAGE_MASK +#endif + +/* FreeBSD machine/param.h defines its own ALIGN */ +#ifndef ALIGN +#define ALIGN LTTNG_UST_ALIGN +#endif + +#ifndef PAGE_ALIGN +#define PAGE_ALIGN LTTNG_UST_PAGE_ALIGN +#endif + +#ifndef offset_align +#define offset_align lttng_ust_offset_align +#endif + +#ifndef offset_align_floor +#define offset_align_floor lttng_ust_offset_align_floor +#endif + #endif /* _UST_ALIGN_H */