X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Fwrapper%2Fcompiler.h;h=ade06fe702de4e4133868fb7ece4509b4c0369de;hb=77d6fd12836060e4354c08179ecc9e0a9f7e2aba;hp=38974c062e0cc9428ee9541c7b8ac2fca736210c;hpb=117ab60f69a98dcbc365de8008ab93e6699d153a;p=lttng-modules.git diff --git a/include/wrapper/compiler.h b/include/wrapper/compiler.h index 38974c06..ade06fe7 100644 --- a/include/wrapper/compiler.h +++ b/include/wrapper/compiler.h @@ -9,6 +9,7 @@ #define _LTTNG_WRAPPER_COMPILER_H #include +#include /* * Don't allow compiling with buggy compiler. @@ -24,6 +25,16 @@ # error Your gcc version produces clobbered frame accesses # endif # endif + +/* + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293 + */ +# ifdef __aarch64__ +# if GCC_VERSION < 50100 +# error Your gcc version performs unsafe access to deallocated stack +# endif +# endif + #endif /* @@ -39,6 +50,35 @@ # define WRITE_ONCE(x, val) ({ ACCESS_ONCE(x) = val; }) #endif +/* + * In v4.15 a smp read barrier was added to READ_ONCE to replace + * lockless_dereference(), replicate this behavior on prior kernels + * and remove calls to smp_read_barrier_depends which was dropped + * in v5.9. + */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) +#define LTTNG_READ_ONCE(x) READ_ONCE(x) +#else +#define LTTNG_READ_ONCE(x) \ +({ \ + typeof(x) __val = READ_ONCE(x); \ + smp_read_barrier_depends(); \ + __val; \ +}) +#endif + #define __LTTNG_COMPOUND_LITERAL(type, ...) (type[]) { __VA_ARGS__ } +/* + * The static_assert macro was defined by the kernel in v5.1. + * If the macro is not defined, we define it. + * (kernel source: include/linux/build_bug.h) + */ +#ifndef static_assert + +# define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr) +# define __static_assert(expr, msg, ...) _Static_assert(expr, msg) + +#endif + #endif /* _LTTNG_WRAPPER_COMPILER_H */