1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-27 07:22:31 +03:00

boot: only use __builtin_object_size with -O>0

__builtin_object_size() returns -1 with -O0, so disable this and warn
about it instead.
This commit is contained in:
Jason A. Donenfeld 2022-11-16 19:46:41 +01:00
parent 5d29d07b34
commit 1a2b1e10bd

View File

@ -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)