xref: /netbsd-src/external/bsd/jemalloc.old/include/jemalloc/internal/util.h (revision 8e33eff89e26cf71871ead62f0d5063e1313c33a)
1*8e33eff8Schristos #ifndef JEMALLOC_INTERNAL_UTIL_H
2*8e33eff8Schristos #define JEMALLOC_INTERNAL_UTIL_H
3*8e33eff8Schristos 
4*8e33eff8Schristos #define UTIL_INLINE static inline
5*8e33eff8Schristos 
6*8e33eff8Schristos /* Junk fill patterns. */
7*8e33eff8Schristos #ifndef JEMALLOC_ALLOC_JUNK
8*8e33eff8Schristos #  define JEMALLOC_ALLOC_JUNK	((uint8_t)0xa5)
9*8e33eff8Schristos #endif
10*8e33eff8Schristos #ifndef JEMALLOC_FREE_JUNK
11*8e33eff8Schristos #  define JEMALLOC_FREE_JUNK	((uint8_t)0x5a)
12*8e33eff8Schristos #endif
13*8e33eff8Schristos 
14*8e33eff8Schristos /*
15*8e33eff8Schristos  * Wrap a cpp argument that contains commas such that it isn't broken up into
16*8e33eff8Schristos  * multiple arguments.
17*8e33eff8Schristos  */
18*8e33eff8Schristos #define JEMALLOC_ARG_CONCAT(...) __VA_ARGS__
19*8e33eff8Schristos 
20*8e33eff8Schristos /* cpp macro definition stringification. */
21*8e33eff8Schristos #define STRINGIFY_HELPER(x) #x
22*8e33eff8Schristos #define STRINGIFY(x) STRINGIFY_HELPER(x)
23*8e33eff8Schristos 
24*8e33eff8Schristos /*
25*8e33eff8Schristos  * Silence compiler warnings due to uninitialized values.  This is used
26*8e33eff8Schristos  * wherever the compiler fails to recognize that the variable is never used
27*8e33eff8Schristos  * uninitialized.
28*8e33eff8Schristos  */
29*8e33eff8Schristos #define JEMALLOC_CC_SILENCE_INIT(v) = v
30*8e33eff8Schristos 
31*8e33eff8Schristos #ifdef __GNUC__
32*8e33eff8Schristos #  define likely(x)   __builtin_expect(!!(x), 1)
33*8e33eff8Schristos #  define unlikely(x) __builtin_expect(!!(x), 0)
34*8e33eff8Schristos #else
35*8e33eff8Schristos #  define likely(x)   !!(x)
36*8e33eff8Schristos #  define unlikely(x) !!(x)
37*8e33eff8Schristos #endif
38*8e33eff8Schristos 
39*8e33eff8Schristos #if !defined(JEMALLOC_INTERNAL_UNREACHABLE)
40*8e33eff8Schristos #  error JEMALLOC_INTERNAL_UNREACHABLE should have been defined by configure
41*8e33eff8Schristos #endif
42*8e33eff8Schristos 
43*8e33eff8Schristos #define unreachable() JEMALLOC_INTERNAL_UNREACHABLE()
44*8e33eff8Schristos 
45*8e33eff8Schristos /* Set error code. */
46*8e33eff8Schristos UTIL_INLINE void
47*8e33eff8Schristos set_errno(int errnum) {
48*8e33eff8Schristos #ifdef _WIN32
49*8e33eff8Schristos 	SetLastError(errnum);
50*8e33eff8Schristos #else
51*8e33eff8Schristos 	errno = errnum;
52*8e33eff8Schristos #endif
53*8e33eff8Schristos }
54*8e33eff8Schristos 
55*8e33eff8Schristos /* Get last error code. */
56*8e33eff8Schristos UTIL_INLINE int
57*8e33eff8Schristos get_errno(void) {
58*8e33eff8Schristos #ifdef _WIN32
59*8e33eff8Schristos 	return GetLastError();
60*8e33eff8Schristos #else
61*8e33eff8Schristos 	return errno;
62*8e33eff8Schristos #endif
63*8e33eff8Schristos }
64*8e33eff8Schristos 
65*8e33eff8Schristos #undef UTIL_INLINE
66*8e33eff8Schristos 
67*8e33eff8Schristos #endif /* JEMALLOC_INTERNAL_UTIL_H */
68