From c1722924cee57e1eb27cad656baf079bf809b8f6 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 22 Feb 2021 12:03:53 -0500 Subject: compiler.h: fix a typo and add some more function attribute macros This fixes the ifndef guard on NONNULL and __CONCAT3 and adds definitions for: - __CONCAT() for a##b with the intermediate tokenization step - ALLOCFUNC for __malloc__ - DEPRECATED for __deprecated__ - PURE for __pure__ - RETURNS_NONNULL for __nonnull__ Signed-off-by: Peter Jones --- .clang-format | 4 +++- include/compiler.h | 31 +++++++++++++++++++++++++++++-- mok.c | 6 +++--- shim.h | 2 -- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/.clang-format b/.clang-format index 5e84eda1..8e78b9bc 100644 --- a/.clang-format +++ b/.clang-format @@ -137,7 +137,9 @@ SpacesInParentheses: false SpacesInSquareBrackets: false SpaceBeforeSquareBrackets: false Standard: c++03 -StatementMacros: [] +StatementMacros: + - ALLOCFUNC + - NONNULL TabWidth: 8 UseCRLF: false UseTab: AlignWithSpaces diff --git a/include/compiler.h b/include/compiler.h index 4e44840d..3cabd09c 100644 --- a/include/compiler.h +++ b/include/compiler.h @@ -3,6 +3,24 @@ #ifndef COMPILER_H_ #define COMPILER_H_ +/* + * These are special ones that get our unit tests in trouble with the + * compiler optimizer dropping out tests... + */ +#ifdef NONNULL +# undef NONNULL +#endif +#ifdef RETURNS_NONNULL +# undef RETURNS_NONNULL +#endif +#ifdef SHIM_UNIT_TEST +# define NONNULL(first, args...) +# define RETURNS_NONNULL +#else +# define NONNULL(first, args...) __attribute__((__nonnull__(first, ## args))) +# define RETURNS_NONNULL __attribute__((__returns_nonnull__)) +#endif + #ifndef UNUSED #define UNUSED __attribute__((__unused__)) #endif @@ -12,6 +30,9 @@ #ifndef PUBLIC #define PUBLIC __attribute__((__visibility__ ("default"))) #endif +#ifndef DEPRECATED +#define DEPRECATED __attribute__((__deprecated__)) +#endif #ifndef DESTRUCTOR #define DESTRUCTOR __attribute__((destructor)) #endif @@ -21,12 +42,15 @@ #ifndef ALIAS #define ALIAS(x) __attribute__((weak, alias (#x))) #endif -#ifndef NONNULL +#ifndef ALLOCFUNC +#define ALLOCFUNC(dealloc, dealloc_arg) __attribute__((__malloc__(dealloc, dealloc_arg))) #endif -#define NONNULL(first, args...) __attribute__((__nonnull__(first, ## args))) #ifndef PRINTF #define PRINTF(first, args...) __attribute__((__format__(printf, first, ## args))) #endif +#ifndef PURE +#define PURE __attribute__((__pure__)) +#endif #ifndef FLATTEN #define FLATTEN __attribute__((__flatten__)) #endif @@ -56,6 +80,9 @@ #endif #ifndef __CONCAT +#define __CONCAT(a, b) a ## b +#endif +#ifndef __CONCAT3 #define __CONCAT3(a, b, c) a ## b ## c #endif #ifndef CAT diff --git a/mok.c b/mok.c index 4b935a49..ac0276ec 100644 --- a/mok.c +++ b/mok.c @@ -250,7 +250,7 @@ struct mok_state_variable mok_state_variables[] = { #define should_mirror_addend(v) (((v)->categorize_addend) && ((v)->categorize_addend(v) != VENDOR_ADDEND_NONE)) -static inline BOOLEAN nonnull(1) +static inline BOOLEAN NONNULL(1) should_mirror_build_cert(struct mok_state_variable *v) { return (v->build_cert && v->build_cert_size && @@ -530,7 +530,7 @@ mirror_mok_db(CHAR16 *name, CHAR8 *name8, EFI_GUID *guid, UINT32 attrs, } -static EFI_STATUS nonnull(1) +static EFI_STATUS NONNULL(1) mirror_one_mok_variable(struct mok_state_variable *v, BOOLEAN only_first) { @@ -840,7 +840,7 @@ mirror_one_mok_variable(struct mok_state_variable *v, * Mirror a variable if it has an rtname, and preserve any * EFI_SECURITY_VIOLATION status at the same time. */ -static EFI_STATUS nonnull(1) +static EFI_STATUS NONNULL(1) maybe_mirror_one_mok_variable(struct mok_state_variable *v, EFI_STATUS ret, BOOLEAN only_first) { diff --git a/shim.h b/shim.h index 44c01555..90d9e89c 100644 --- a/shim.h +++ b/shim.h @@ -33,8 +33,6 @@ #include #include -#define nonnull(...) __attribute__((__nonnull__(__VA_ARGS__))) - #ifdef __x86_64__ #ifndef DEFAULT_LOADER #define DEFAULT_LOADER L"\\grubx64.efi" -- cgit v1.2.3