L4Re - L4 Runtime Environment
compiler.h
Go to the documentation of this file.
1
/*****************************************************************************/
7
/*
8
* (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
9
* Alexander Warg <warg@os.inf.tu-dresden.de>,
10
* Frank Mehnert <fm3@os.inf.tu-dresden.de>,
11
* Jork Löser <jork@os.inf.tu-dresden.de>,
12
* Ronald Aigner <ra3@os.inf.tu-dresden.de>
13
* economic rights: Technische Universität Dresden (Germany)
14
*
15
* This file is part of TUD:OS and distributed under the terms of the
16
* GNU General Public License 2.
17
* Please see the COPYING-GPL-2 file for details.
18
*
19
* As a special exception, you may use this file as part of a free software
20
* library without restriction. Specifically, if other files instantiate
21
* templates or use macros or inline functions from this file, or you compile
22
* this file and link it with other files to produce an executable, this
23
* file does not by itself cause the resulting executable to be covered by
24
* the GNU General Public License. This exception does not however
25
* invalidate any other reasons why the executable file might be covered by
26
* the GNU General Public License.
27
*/
28
/*****************************************************************************/
29
#ifndef __L4_COMPILER_H__
30
#define __L4_COMPILER_H__
31
32
#if !defined(__ASSEMBLY__) && !defined(__ASSEMBLER__)
33
40
45
#ifndef L4_INLINE
46
#ifndef __cplusplus
47
# ifdef __OPTIMIZE__
48
# define L4_INLINE_STATIC static __inline__
49
# define L4_INLINE_EXTERN extern __inline__
50
# ifdef __GNUC_STDC_INLINE__
51
# define L4_INLINE L4_INLINE_STATIC
52
# else
53
# define L4_INLINE L4_INLINE_EXTERN
54
# endif
55
# else
/* ! __OPTIMIZE__ */
56
# define L4_INLINE static
57
# endif
/* ! __OPTIMIZE__ */
58
#else
/* __cplusplus */
59
# define L4_INLINE inline
60
#endif
/* __cplusplus */
61
#endif
/* L4_INLINE */
62
67
#define L4_ALWAYS_INLINE L4_INLINE __attribute__((__always_inline__))
68
69
70
#define L4_DECLARE_CONSTRUCTOR(func, prio) \
71
static inline __attribute__((constructor(prio))) void func ## _ctor_func(void) { func(); }
72
73
171
#ifndef __cplusplus
172
# define L4_NOTHROW__A __attribute__((nothrow))
173
# define L4_NOTHROW
174
# define EXTERN_C_BEGIN
175
# define EXTERN_C_END
176
# define EXTERN_C
177
# ifndef __BEGIN_DECLS
178
# define __BEGIN_DECLS
179
# endif
180
# ifndef __END_DECLS
181
# define __END_DECLS
182
# endif
183
# define L4_DEFAULT_PARAM(x)
184
#else
/* __cplusplus */
185
# if __cplusplus >= 201103L
186
# define L4_NOTHROW noexcept
187
# else
/* C++ < 11 */
188
# define L4_NOTHROW throw()
189
# endif
190
# define EXTERN_C_BEGIN extern "C" {
191
# define EXTERN_C_END }
192
# define EXTERN_C extern "C"
193
# ifndef __BEGIN_DECLS
194
# define __BEGIN_DECLS extern "C" {
195
# endif
196
# ifndef __END_DECLS
197
# define __END_DECLS }
198
# endif
199
# define L4_DEFAULT_PARAM(x) = x
200
#endif
/* __cplusplus */
201
206
#define L4_NORETURN __attribute__((noreturn))
207
208
#define L4_PURE __attribute__((pure))
209
214
#define L4_NOINSTRUMENT __attribute__((no_instrument_function))
215
#ifndef L4_HIDDEN
216
# define L4_HIDDEN __attribute__((visibility("hidden")))
217
#endif
218
#ifndef L4_EXPORT
219
# define L4_EXPORT __attribute__((visibility("default")))
220
#endif
221
#ifndef L4_EXPORT_TYPE
222
# ifdef __cplusplus
223
# define L4_EXPORT_TYPE __attribute__((visibility("default")))
224
# else
225
# define L4_EXPORT_TYPE
226
# endif
227
#endif
228
#define L4_STRONG_ALIAS(name, aliasname) L4__STRONG_ALIAS(name, aliasname)
229
#define L4__STRONG_ALIAS(name, aliasname) \
230
extern __typeof (name) aliasname __attribute__ ((alias (#name)));
231
232
233
#endif
/* !__ASSEMBLY__ */
234
235
#include <l4/sys/linkage.h>
236
237
#define L4_LIKELY(x) __builtin_expect((x),1)
238
#define L4_UNLIKELY(x) __builtin_expect((x),0)
239
240
/* Make sure that the function is not removed by optimization. Without the
241
* "used" attribute, unreferenced static functions are removed. */
242
#define L4_STICKY(x) __attribute__((used)) x
243
#define L4_DEPRECATED(s) __attribute__((deprecated(s)))
244
245
#ifndef __GXX_EXPERIMENTAL_CXX0X__
246
#ifndef static_assert
247
#define static_assert(x, y) \
248
do { (void)sizeof(char[-(!(x))]); } while (0)
249
#endif
250
#endif
251
252
#define L4_stringify_helper(x) #x
253
#define L4_stringify(x) L4_stringify_helper(x)
254
255
#ifndef __ASSEMBLER__
256
259
L4_INLINE
void
l4_barrier
(
void
);
260
264
L4_INLINE
void
l4_mb
(
void
);
265
269
L4_INLINE
void
l4_wmb
(
void
);
270
271
272
/* Implementations */
273
L4_INLINE
void
l4_barrier
(
void
)
274
{
275
__asm__ __volatile__ (
""
: : :
"memory"
);
276
}
277
278
L4_INLINE
void
l4_mb
(
void
)
279
{
280
__asm__ __volatile__ (
""
: : :
"memory"
);
281
}
282
283
L4_INLINE
void
l4_wmb
(
void
)
284
{
285
__asm__ __volatile__ (
""
: : :
"memory"
);
286
}
287
#endif
288
291
#endif
/* !__L4_COMPILER_H__ */
l4_mb
void l4_mb(void)
Memory barrier.
Definition:
compiler.h:278
l4_wmb
void l4_wmb(void)
Write memory barrier.
Definition:
compiler.h:283
l4_barrier
void l4_barrier(void)
Memory barrier.
Definition:
compiler.h:273
l4
sys
compiler.h
Generated on Mon Dec 28 2020 10:42:23 for L4Re - L4 Runtime Environment by
1.8.20