From: Luca Boccassi Date: Thu, 22 Feb 2024 14:23:06 +0000 (+0000) Subject: efi: de-inline xmalloc to fix build failure with gcc 12.2 and -O2 X-Git-Tag: v256-rc1~752 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6036f62c51aea80e199b8c81f8ceb16b5a1a341a;p=thirdparty%2Fsystemd.git efi: de-inline xmalloc to fix build failure with gcc 12.2 and -O2 With meson build --werror --buildtype=plain -Dc_args=" -O2" the build fails: ../src/boot/efi/stub.c: In function ‘load_addons.constprop’:03:06 ../src/boot/efi/stub.c:475:40: error: using a dangling pointer to ‘p’ [-Werror=dangling-pointer=]03:06 475 | dt_bases[n_dt] = xmemdup((uint8_t*)loaded_addon->ImageBase + addrs[UNIFIED_SECTION_DTB],03:06 | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~03:06 476 | dt_sizes[n_dt]);03:06 | ~~~~~~~~~~~~~~~03:06 In file included from ../src/boot/efi/stub.c:20:03:06 ../src/boot/efi/util.h:33:15: note: ‘p’ declared here03:06 33 | void *p;03:06 | ^ De-inline the function and initialize p to make gcc happy. --- diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index 9cedc15d6a7..b5c8c6306e2 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -697,3 +697,9 @@ char16_t *get_extra_dir(const EFI_DEVICE_PATH *file_path) { remove_boot_count(file_path_str); return xasprintf("%ls.extra.d", file_path_str); } + +void *xmalloc(size_t size) { + void *p = NULL; + assert_se(BS->AllocatePool(EfiLoaderData, size, &p) == EFI_SUCCESS); + return p; +} diff --git a/src/boot/efi/util.h b/src/boot/efi/util.h index f01cb30b8e8..44614593ee9 100644 --- a/src/boot/efi/util.h +++ b/src/boot/efi/util.h @@ -29,11 +29,7 @@ static inline void freep(void *p) { #define _cleanup_free_ _cleanup_(freep) _malloc_ _alloc_(1) _returns_nonnull_ _warn_unused_result_ -static inline void *xmalloc(size_t size) { - void *p; - assert_se(BS->AllocatePool(EfiLoaderData, size, &p) == EFI_SUCCESS); - return p; -} +void *xmalloc(size_t size); _malloc_ _alloc_(1, 2) _returns_nonnull_ _warn_unused_result_ static inline void *xmalloc_multiply(size_t n, size_t size) {