From 23d24657209d810d39a16c561ea1f68f98f8237b Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Fri, 27 May 2022 19:07:14 -0700 Subject: commonlib: Clean up compiler.h This patch contains several minor cleanups related to compiler.h: - Replace __always_unused() (which is a Linux-specific concept that doesn't make sense without also having __maybe_unused(), and had zero uses in the codebase) with __unused() which moves here from helpers.h - Add __underscores__ to the names of all attributes in the compiler attribute shorthand macros. This is necessary to make them work in files where the same name was already used for an identifier (e.g. cbfstool/cbfs.h's `unused` array of file types). - Remove libpayload's own copy of compiler.h and make it directly pull in the commonlib/bsd copy. Signed-off-by: Julius Werner Change-Id: I9644da594bb69133843c6b7f12ce50b2e45fd24b Reviewed-on: https://review.coreboot.org/c/coreboot/+/64737 Tested-by: build bot (Jenkins) Reviewed-by: Yu-Ping Wu Reviewed-by: Elyes Haouas --- payloads/libpayload/Makefile.inc | 3 +- payloads/libpayload/bin/lpgcc | 4 +- payloads/libpayload/include/compiler.h | 53 ---------------------- payloads/libpayload/tests/Makefile.inc | 3 +- src/arch/riscv/opensbi.c | 4 ++ src/commonlib/bsd/include/commonlib/bsd/compiler.h | 18 ++++---- src/commonlib/include/commonlib/helpers.h | 4 -- 7 files changed, 20 insertions(+), 69 deletions(-) delete mode 100644 payloads/libpayload/include/compiler.h diff --git a/payloads/libpayload/Makefile.inc b/payloads/libpayload/Makefile.inc index 430994b36682..538309a14f6d 100644 --- a/payloads/libpayload/Makefile.inc +++ b/payloads/libpayload/Makefile.inc @@ -60,7 +60,8 @@ subdirs-$(CONFIG_LP_LZ4) += liblz4 subdirs-$(CONFIG_LP_VBOOT_LIB) += vboot INCLUDES := -Iinclude -Iinclude/$(ARCHDIR-y) -I$(obj) -INCLUDES += -include include/kconfig.h -include include/compiler.h +INCLUDES += -include include/kconfig.h +INCLUDES += -include $(coreboottop)/src/commonlib/bsd/include/commonlib/bsd/compiler.h INCLUDES += -I$(coreboottop)/src/commonlib/bsd/include INCLUDES += -I$(VBOOT_SOURCE)/firmware/include diff --git a/payloads/libpayload/bin/lpgcc b/payloads/libpayload/bin/lpgcc index 77ceda3ed98b..5e418e84bd6d 100755 --- a/payloads/libpayload/bin/lpgcc +++ b/payloads/libpayload/bin/lpgcc @@ -168,9 +168,11 @@ if [ $_LIBDIR = $_OBJ ]; then _CFLAGS="$_CFLAGS -I$BASE/../curses" fi + _CFLAGS="$_CFLAGS -include $BASE/../../../src/commonlib/bsd/include/commonlib/bsd/compiler.h" _CFLAGS="$_CFLAGS -I$BASE/../../../src/commonlib/bsd/include" _CFLAGS="$_CFLAGS -I$BASE/../../../3rdparty/vboot/firmware/include" else + _CFLAGS="$_CFLAGS -include $BASE/../include/commonlib/bsd/compiler.h" _CFLAGS="$_CFLAGS -I$_VBOOTINCDIR" fi @@ -179,7 +181,7 @@ fi trygccoption -fno-stack-protector [ $? -eq 0 ] && _CFLAGS="$_CFLAGS -fno-stack-protector" -_CFLAGS="$_CFLAGS -include $BASE/../include/kconfig.h -include $BASE/../include/compiler.h" +_CFLAGS="$_CFLAGS -include $BASE/../include/kconfig.h" _CFLAGS="$_CFLAGS -I`$DEFAULT_CC $_ARCHEXTRA -print-search-dirs | head -n 1 | cut -d' ' -f2`include" if [ "$CONFIG_LP_VBOOT_LIB" = y ]; then diff --git a/payloads/libpayload/include/compiler.h b/payloads/libpayload/include/compiler.h deleted file mode 100644 index ee2ff88d108d..000000000000 --- a/payloads/libpayload/include/compiler.h +++ /dev/null @@ -1,53 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */ - -#ifndef _COMMONLIB_BSD_COMPILER_H_ -#define _COMMONLIB_BSD_COMPILER_H_ - -#ifndef __packed -#if defined(__WIN32) || defined(__WIN64) -#define __packed __attribute__((gcc_struct, packed)) -#else -#define __packed __attribute__((packed)) -#endif -#endif - -#ifndef __aligned -#define __aligned(x) __attribute__((aligned(x))) -#endif - -#ifndef __always_unused -#define __always_unused __attribute__((unused)) -#endif - -#ifndef __must_check -#define __must_check __attribute__((warn_unused_result)) -#endif - -#ifndef __weak -#define __weak __attribute__((weak)) -#endif - -#ifndef __noreturn -#define __noreturn __attribute__((noreturn)) -#endif - -#ifndef __always_inline -#define __always_inline inline __attribute__((always_inline)) -#endif - -/* This evaluates to the type of the first expression, unless that is constant - in which case it evalutates to the type of the second. This is useful when - assigning macro parameters to temporary variables, because that would - normally circumvent the special loosened type promotion rules for integer - literals. By using this macro, the promotion can happen at the time the - literal is assigned to the temporary variable. If the literal doesn't fit in - the chosen type, -Werror=overflow will catch it, so this should be safe. */ -#define __TYPEOF_UNLESS_CONST(expr, fallback_expr) __typeof__( \ - __builtin_choose_expr(__builtin_constant_p(expr), fallback_expr, expr)) - -/* This creates a unique local variable name for use in macros. */ -#define __TMPNAME_3(i) __tmpname_##i -#define __TMPNAME_2(i) __TMPNAME_3(i) -#define __TMPNAME __TMPNAME_2(__COUNTER__) - -#endif diff --git a/payloads/libpayload/tests/Makefile.inc b/payloads/libpayload/tests/Makefile.inc index 529524ca3253..2a067e0f9f98 100644 --- a/payloads/libpayload/tests/Makefile.inc +++ b/payloads/libpayload/tests/Makefile.inc @@ -30,7 +30,8 @@ TEST_CONFIG_ := CONFIG_LP_ # Default includes -TEST_CFLAGS := -include include/kconfig.h -include include/compiler.h +TEST_CFLAGS := -include include/kconfig.h +TEST_CFLAGS += -include $(coreboottop)/src/commonlib/bsd/include/commonlib/bsd/compiler.h TEST_CFLAGS += -Iinclude -Iinclude/mock TEST_CFLAGS += -I$(coreboottop)/src/commonlib/bsd/include TEST_CFLAGS += -I$(dir $(TEST_KCONFIG_AUTOHEADER)) diff --git a/src/arch/riscv/opensbi.c b/src/arch/riscv/opensbi.c index 3a738ec83a5d..eb557d240ac1 100644 --- a/src/arch/riscv/opensbi.c +++ b/src/arch/riscv/opensbi.c @@ -1,5 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +/* OpenSBI wants to make its own definitions for some of our compiler.h macros. */ +#undef __packed +#undef __noreturn + #include #include /* DO NOT INCLUDE COREBOOT HEADERS HERE */ diff --git a/src/commonlib/bsd/include/commonlib/bsd/compiler.h b/src/commonlib/bsd/include/commonlib/bsd/compiler.h index ebf017900d20..42f9235e8ea2 100644 --- a/src/commonlib/bsd/include/commonlib/bsd/compiler.h +++ b/src/commonlib/bsd/include/commonlib/bsd/compiler.h @@ -5,34 +5,34 @@ #ifndef __packed #if defined(__WIN32) || defined(__WIN64) -#define __packed __attribute__((gcc_struct, packed)) +#define __packed __attribute__((__gcc_struct__, __packed__)) #else -#define __packed __attribute__((packed)) +#define __packed __attribute__((__packed__)) #endif #endif #ifndef __aligned -#define __aligned(x) __attribute__((aligned(x))) +#define __aligned(x) __attribute__((__aligned__(x))) #endif -#ifndef __always_unused -#define __always_unused __attribute__((unused)) +#ifndef __unused +#define __unused __attribute__((__unused__)) #endif #ifndef __must_check -#define __must_check __attribute__((warn_unused_result)) +#define __must_check __attribute__((__warn_unused_result__)) #endif #ifndef __weak -#define __weak __attribute__((weak)) +#define __weak __attribute__((__weak__)) #endif #ifndef __noreturn -#define __noreturn __attribute__((noreturn)) +#define __noreturn __attribute__((__noreturn__)) #endif #ifndef __always_inline -#define __always_inline inline __attribute__((always_inline)) +#define __always_inline inline __attribute__((__always_inline__)) #endif #ifndef __fallthrough diff --git a/src/commonlib/include/commonlib/helpers.h b/src/commonlib/include/commonlib/helpers.h index b073e0e4929a..c294bee1179a 100644 --- a/src/commonlib/include/commonlib/helpers.h +++ b/src/commonlib/include/commonlib/helpers.h @@ -34,10 +34,6 @@ const __typeof__(((type *)0)->member) *__mptr = (ptr); \ (type *)((char *)__mptr - offsetof(type, member)); }) -#ifndef __unused -#define __unused __attribute__((unused)) -#endif - #ifndef alloca #define alloca(x) __builtin_alloca(x) #endif -- cgit v1.2.3