X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Fwrapper%2Fcompiler.h;fp=include%2Fwrapper%2Fcompiler.h;h=38974c062e0cc9428ee9541c7b8ac2fca736210c;hb=117ab60f69a98dcbc365de8008ab93e6699d153a;hp=0000000000000000000000000000000000000000;hpb=7c6d929d62a6e24fb1dbeaee5cd2c8afe77720b7;p=lttng-modules.git diff --git a/include/wrapper/compiler.h b/include/wrapper/compiler.h new file mode 100644 index 00000000..38974c06 --- /dev/null +++ b/include/wrapper/compiler.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * wrapper/compiler.h + * + * Copyright (C) 2013 Mathieu Desnoyers + */ + +#ifndef _LTTNG_WRAPPER_COMPILER_H +#define _LTTNG_WRAPPER_COMPILER_H + +#include + +/* + * Don't allow compiling with buggy compiler. + */ + +#ifdef GCC_VERSION + +/* + * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854 + */ +# ifdef __ARMEL__ +# if GCC_VERSION >= 40800 && GCC_VERSION <= 40802 +# error Your gcc version produces clobbered frame accesses +# endif +# endif +#endif + +/* + * READ/WRITE_ONCE were introduced in kernel 3.19 and ACCESS_ONCE + * was removed in 4.15. Prefer READ/WRITE but fallback to ACCESS + * when they are not available. + */ +#ifndef READ_ONCE +# define READ_ONCE(x) ACCESS_ONCE(x) +#endif + +#ifndef WRITE_ONCE +# define WRITE_ONCE(x, val) ({ ACCESS_ONCE(x) = val; }) +#endif + +#define __LTTNG_COMPOUND_LITERAL(type, ...) (type[]) { __VA_ARGS__ } + +#endif /* _LTTNG_WRAPPER_COMPILER_H */