diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h index eed28c0342..4c5b6cab13 100644 --- a/src/boot/efi/util.h +++ b/src/boot/efi/util.h @@ -10,7 +10,6 @@ #define UINTN_MAX (~(UINTN)0) #define INTN_MAX ((INTN)(UINTN_MAX>>1)) -#ifdef __OPTIMIZE__ #ifndef __has_attribute #define __has_attribute(x) 0 #endif @@ -21,9 +20,6 @@ __attribute__((noreturn)) extern void __assert_cl_failure__(void); #endif /* assert_cl generates a later-stage compile-time assertion when constant folding occurs. */ #define assert_cl(condition) ({ if (!(condition)) __assert_cl_failure__(); }) -#else -#define assert_cl(condition) assert(condition) -#endif /* gnu-efi format specifiers for integers are fixed to either 64bit with 'l' and 32bit without a size prefix. * We rely on %u/%d/%x to format regular ints, so ensure the size is what we expect. At the same time, we also @@ -59,11 +55,15 @@ static inline void freep(void *p) { #define _cleanup_free_ _cleanup_(freep) static __always_inline void erase_obj(void *p) { +#ifdef __OPTIMIZE__ size_t l; assert_cl(p); l = __builtin_object_size(p, 0); assert_cl(l != (size_t) -1); explicit_bzero_safe(p, l); +#else +#warning "Object will not be erased with -O0; do not release to production." +#endif } #define _cleanup_erase_ _cleanup_(erase_obj)