X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Falign.h;h=3f43a3b4d8beb5a02e0c908e9a969ea8f26fabbd;hb=70f9f7f95a5a36231e4a71191bcd88d582c3ca81;hp=1b8810599382eb20db273d11d8e8c381055626de;hpb=d2428e875af8666473fb689429eaf1022862510d;p=lttng-ust.git diff --git a/include/lttng/align.h b/include/lttng/align.h index 1b881059..3f43a3b4 100644 --- a/include/lttng/align.h +++ b/include/lttng/align.h @@ -29,25 +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 -#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) +#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 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))); \ @@ -55,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); \ + (((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 */