Skip to content

Commit

Permalink
common: Move a few more standalone macros from xen/lib.h to xen/macros.h
Browse files Browse the repository at this point in the history
Move a few more macros which have no dependencies on other headers from
xen/lib.h to xen/macros.h. Notably, this includes BUILD_BUG_ON* and
ARRAY_SIZE.

Signed-off-by: Shawn Anastasio <[email protected]>
Reviewed-by: Jan Beulich <[email protected]>
  • Loading branch information
Shawn Anastasio authored and jbeulich committed Jul 24, 2023
1 parent f0437c3 commit 0c683ba
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 28 deletions.
28 changes: 0 additions & 28 deletions xen/include/xen/lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,6 @@
unlikely(ret_warn_on_); \
})

/* All clang versions supported by Xen have _Static_assert. */
#if defined(__clang__) || \
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
/* Force a compilation error if condition is true */
#define BUILD_BUG_ON(cond) ({ _Static_assert(!(cond), "!(" #cond ")"); })

/* Force a compilation error if condition is true, but also produce a
result (of value 0 and type size_t), so the expression can be used
e.g. in a structure initializer (or where-ever else comma expressions
aren't permitted). */
#define BUILD_BUG_ON_ZERO(cond) \
(sizeof(struct { char c; _Static_assert(!(cond), "!(" #cond ")"); }) & 0)
#else
#define BUILD_BUG_ON_ZERO(cond) \
(sizeof(struct { unsigned u : !(cond); }) & 0)
#define BUILD_BUG_ON(cond) ((void)BUILD_BUG_ON_ZERO(cond))
#endif

#ifndef NDEBUG
#define ASSERT(p) \
do { if ( unlikely(!(p)) ) assert_failed(#p); } while (0)
Expand All @@ -48,16 +30,6 @@
#define ASSERT_UNREACHABLE() do { } while (0)
#endif

#define ABS(_x) ({ \
typeof(_x) __x = (_x); \
(__x < 0) ? -__x : __x; \
})

#define SWAP(_a, _b) \
do { typeof(_a) _t = (_a); (_a) = (_b); (_b) = _t; } while ( 0 )

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]) + __must_be_array(x))

#define __ACCESS_ONCE(x) ({ \
(void)(typeof(x))0; /* Scalar typecheck. */ \
(volatile typeof(x) *)&(x); })
Expand Down
34 changes: 34 additions & 0 deletions xen/include/xen/macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,40 @@
#define __STR(...) #__VA_ARGS__
#define STR(...) __STR(__VA_ARGS__)

#ifndef __ASSEMBLY__

/* All clang versions supported by Xen have _Static_assert. */
#if defined(__clang__) || \
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
/* Force a compilation error if condition is true */
#define BUILD_BUG_ON(cond) ({ _Static_assert(!(cond), "!(" #cond ")"); })

/*
* Force a compilation error if condition is true, but also produce a
* result (of value 0 and type size_t), so the expression can be used
* e.g. in a structure initializer (or where-ever else comma expressions
* aren't permitted).
*/
#define BUILD_BUG_ON_ZERO(cond) \
(sizeof(struct { char c; _Static_assert(!(cond), "!(" #cond ")"); }) & 0)
#else
#define BUILD_BUG_ON_ZERO(cond) \
(sizeof(struct { unsigned u : !(cond); }) & 0)
#define BUILD_BUG_ON(cond) ((void)BUILD_BUG_ON_ZERO(cond))
#endif

#define ABS(x) ({ \
typeof(x) x_ = (x); \
(x_ < 0) ? -x_ : x_; \
})

#define SWAP(a, b) \
do { typeof(a) t_ = (a); (a) = (b); (b) = t_; } while ( 0 )

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]) + __must_be_array(x))

#endif /* __ASSEMBLY__ */

#endif /* __MACROS_H__ */

/*
Expand Down

0 comments on commit 0c683ba

Please sign in to comment.