]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
efi: de-inline xmalloc to fix build failure with gcc 12.2 and -O2
authorLuca Boccassi <bluca@debian.org>
Thu, 22 Feb 2024 14:23:06 +0000 (14:23 +0000)
committerMike Yuan <me@yhndnzj.com>
Sat, 24 Feb 2024 00:16:07 +0000 (08:16 +0800)
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.

src/boot/efi/util.c
src/boot/efi/util.h

index 9cedc15d6a780a75b42c174c54251437c106f896..b5c8c6306e2d5e82a12e6caad34f03a108d808cb 100644 (file)
@@ -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;
+}
index f01cb30b8e875529f0ffbe114c17f8a563ac041d..44614593ee9530c93d0f6f47a293fb8872df65e1 100644 (file)
@@ -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) {