The branch stable/14 has been updated by wulf:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c3a10c23329b35001fbc4ef171aa1739efb27f8d

commit c3a10c23329b35001fbc4ef171aa1739efb27f8d
Author:     Vladimir Kondratyev <w...@freebsd.org>
AuthorDate: 2023-12-24 08:19:58 +0000
Commit:     Vladimir Kondratyev <w...@freebsd.org>
CommitDate: 2024-02-17 20:58:36 +0000

    LinuxKPI: Add static_assert() macro
    
    And move it along BUILD_BUG family in to
    linux/build_bug.h to match Linux.
    
    Sponsored by:   Serenity Cyber Security, LLC
    Reviewed by:    manu, bz
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D42800
    
    (cherry picked from commit 31ef29091b0fbadefb4ccfb21e4b30ca7ddca3ed)
---
 .../linuxkpi/common/include/linux/build_bug.h      | 65 ++++++++++++++++++++++
 sys/compat/linuxkpi/common/include/linux/kernel.h  | 23 +-------
 2 files changed, 66 insertions(+), 22 deletions(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/build_bug.h 
b/sys/compat/linuxkpi/common/include/linux/build_bug.h
new file mode 100644
index 000000000000..59d1fc228afc
--- /dev/null
+++ b/sys/compat/linuxkpi/common/include/linux/build_bug.h
@@ -0,0 +1,65 @@
+/*-
+ * Copyright (c) 2017 Mark Johnston <ma...@freebsd.org>
+ * Copyright (c) 2018 Johannes Lundberg <johal...@gmail.com>
+ * Copyright (c) 2021 The FreeBSD Foundation
+ * Copyright (c) 2021 Vladimir Kondratyev <w...@freebsd.org>
+ * Copyright (c) 2023 Serenity Cyber Security, LLC
+ *
+ * Portions of this software were developed by Bjoern A. Zeeb
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice unmodified, this list of conditions, and the following
+ *    disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef        _LINUXKPI_LINUX_BUILD_BUG_H_
+#define        _LINUXKPI_LINUX_BUILD_BUG_H_
+
+#include <sys/param.h>
+
+#include <linux/compiler.h>
+
+/*
+ * BUILD_BUG_ON() can happen inside functions where _Static_assert() does not
+ * seem to work.  Use old-schoold-ish CTASSERT from before commit
+ * a3085588a88fa58eb5b1eaae471999e1995a29cf but also make sure we do not
+ * end up with an unused typedef or variable. The compiler should optimise
+ * it away entirely.
+ */
+#define        _O_CTASSERT(x)          _O__CTASSERT(x, __LINE__)
+#define        _O__CTASSERT(x, y)      _O___CTASSERT(x, y)
+#define        _O___CTASSERT(x, y)     while (0) { \
+    typedef char __assert_line_ ## y[(x) ? 1 : -1]; \
+    __assert_line_ ## y _x; \
+    _x[0] = '\0'; \
+}
+
+#define        BUILD_BUG()                     do { CTASSERT(0); } while (0)
+#define        BUILD_BUG_ON(x)                 do { _O_CTASSERT(!(x)) } while 
(0)
+#define        BUILD_BUG_ON_MSG(x, msg)        BUILD_BUG_ON(x)
+#define        BUILD_BUG_ON_NOT_POWER_OF_2(x)  BUILD_BUG_ON(!powerof2(x))
+#define        BUILD_BUG_ON_INVALID(expr)      while (0) { (void)(expr); }
+#define        BUILD_BUG_ON_ZERO(x)    ((int)sizeof(struct { int:-((x) != 0); 
}))
+
+#define static_assert(x, ...)          __static_assert(x, ##__VA_ARGS__, #x)
+#define __static_assert(x, msg, ...)   _Static_assert(x, msg)
+
+#endif
diff --git a/sys/compat/linuxkpi/common/include/linux/kernel.h 
b/sys/compat/linuxkpi/common/include/linux/kernel.h
index 2ee452cb39ed..fe844777e469 100644
--- a/sys/compat/linuxkpi/common/include/linux/kernel.h
+++ b/sys/compat/linuxkpi/common/include/linux/kernel.h
@@ -42,6 +42,7 @@
 #include <sys/time.h>
 
 #include <linux/bitops.h>
+#include <linux/build_bug.h>
 #include <linux/compiler.h>
 #include <linux/stringify.h>
 #include <linux/errno.h>
@@ -91,28 +92,6 @@
 #define        S64_C(x) x ## LL
 #define        U64_C(x) x ## ULL
 
-/*
- * BUILD_BUG_ON() can happen inside functions where _Static_assert() does not
- * seem to work.  Use old-schoold-ish CTASSERT from before commit
- * a3085588a88fa58eb5b1eaae471999e1995a29cf but also make sure we do not
- * end up with an unused typedef or variable. The compiler should optimise
- * it away entirely.
- */
-#define        _O_CTASSERT(x)          _O__CTASSERT(x, __LINE__)
-#define        _O__CTASSERT(x, y)      _O___CTASSERT(x, y)
-#define        _O___CTASSERT(x, y)     while (0) { \
-    typedef char __unused __assert_line_ ## y[(x) ? 1 : -1]; \
-    __assert_line_ ## y _x; \
-    _x[0] = '\0'; \
-}
-
-#define        BUILD_BUG()                     do { CTASSERT(0); } while (0)
-#define        BUILD_BUG_ON(x)                 do { _O_CTASSERT(!(x)) } while 
(0)
-#define        BUILD_BUG_ON_MSG(x, msg)        BUILD_BUG_ON(x)
-#define        BUILD_BUG_ON_NOT_POWER_OF_2(x)  BUILD_BUG_ON(!powerof2(x))
-#define        BUILD_BUG_ON_INVALID(expr)      while (0) { (void)(expr); }
-#define        BUILD_BUG_ON_ZERO(x)    ((int)sizeof(struct { int:-((x) != 0); 
}))
-
 #define        BUG()                   panic("BUG at %s:%d", __FILE__, 
__LINE__)
 #define        BUG_ON(cond)            do {                            \
        if (cond) {                                             \

Reply via email to