X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Flttng%2Falign.h;h=3f43a3b4d8beb5a02e0c908e9a969ea8f26fabbd;hb=b72687b85f4f07a9b63be329ad1fe95b36d24900;hp=8f227eb9ecb49b04cd4d48f1ef763c4a8d6acabb;hpb=bfae873ceedd57108fe2bb53ac5fb095550957d3;p=deliverable%2Flttng-ust.git diff --git a/include/lttng/align.h b/include/lttng/align.h index 8f227eb9..3f43a3b4 100644 --- a/include/lttng/align.h +++ b/include/lttng/align.h @@ -29,29 +29,34 @@ #include #include -#ifndef PAGE_SIZE /* Cygwin limits.h defines its own PAGE_SIZE */ -#define PAGE_SIZE sysconf(_SC_PAGE_SIZE) +#ifdef __FreeBSD__ +#include #endif -#ifndef PAGE_MASK /* FreeBSD and macOS defines their own PAGE_MASK. */ -#define PAGE_MASK (~(PAGE_SIZE - 1)) +#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 __ALIGN_MASK(v, mask) (((v) + (mask)) & ~(mask)) -#ifndef ALIGN /* FreeBSD and macOS defines their own ALIGN. */ -#define ALIGN(v, align) __ALIGN_MASK(v, (__typeof__(v)) (align) - 1) -#endif -#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))); \ @@ -59,18 +64,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)); \ }) +/* + * 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 */