tools/elfutils: use gnulib module for posix_fallocate()
authorMichael Pratt <mcpratt@pm.me>
Mon, 10 Jun 2024 18:43:04 +0000 (14:43 -0400)
committerRobert Marko <robimarko@gmail.com>
Wed, 19 Jun 2024 09:22:13 +0000 (11:22 +0200)
The version of posix_fallocate() patched into elfutils
for macOS using code from Mozilla is now patched into gnulib.

Import the fallocate-posix module and always link
the corresponding object to libraries whenever it is built.

Signed-off-by: Michael Pratt <mcpratt@pm.me>
Link: https://github.com/openwrt/openwrt/pull/15690
Signed-off-by: Robert Marko <robimarko@gmail.com>
tools/elfutils/Makefile
tools/elfutils/patches/100-portability.patch

index 6b09f29c68bf44d677ec00a2546898be7db4deb6..260b68c11a817a5e27183fa41b9feb68e2883b8b 100644 (file)
@@ -44,6 +44,7 @@ PKG_GNULIB_ARGS = \
 
 PKG_GNULIB_MODS = \
        argp \
+       fallocate-posix \
        fnmatch-gnu \
        fts \
        obstack \
@@ -54,6 +55,7 @@ PKG_GNULIB_MODS = \
 include $(INCLUDE_DIR)/host-build.mk
 
 export $(PKG_GNULIB_BASE)=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE).la
+export $(PKG_GNULIB_BASE)_fallocate-posix=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-posix_fallocate.lo
 export $(PKG_GNULIB_BASE)_tsearch=$(HOST_BUILD_DIR)/$(PKG_GNULIB_BASE)/$(PKG_GNULIB_BASE)_la-tsearch.lo
 
 HOST_MAKE_FLAGS += \
@@ -62,6 +64,7 @@ HOST_MAKE_FLAGS += \
        libelf_la_LIBADD='../lib/libeu.la -lz $$$$(zstd_LIBS) -lpthread' \
        libdw_la_LIBADD='../libdwfl/libdwfl.la ../libdwelf/libdwelf.la ../libebl/libebl.la ../backends/libebl_backends.la ../libcpu/libcpu.la' \
        LIBS+='$$$$(if $$$$(findstring $(lastword $(PKG_SUBDIRS)),$$$$(subdir)), $$$$($(PKG_GNULIB_BASE)))' \
+       LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_fallocate-posix))' \
        LIBS+='$$$$(wildcard $$$$($(PKG_GNULIB_BASE)_tsearch))' \
        REPLACE_FCNTL=0 REPLACE_FREE=0 REPLACE_FSTAT=0 REPLACE_OPEN=0 \
        bin_PROGRAMS='$(PKG_PROGRAMS)' EXEEXT=
index 1e4233c8fdbe19d9f06ea4f5d7c3a1bd14c57c7a..61d173d0cc4f8892f34dc572ade96cbb4414e79e 100644 (file)
  saved_LIBS="$LIBS"
  AC_SEARCH_LIBS([argp_parse], [argp])
  LIBS="$saved_LIBS"
---- a/libelf/elf_update.c
-+++ b/libelf/elf_update.c
-@@ -37,6 +37,31 @@
- #include "libelfP.h"
-+#ifdef __APPLE__
-+static int posix_fallocate(int fd, off_t offset, off_t len)
-+{
-+     off_t c_test;
-+     int ret;
-+     if (!__builtin_saddll_overflow(offset, len, &c_test)) {
-+         fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, 0, offset + len, 0};
-+         // Try to get a continuous chunk of disk space
-+         ret = fcntl(fd, F_PREALLOCATE, &store);
-+         if (ret < 0) {
-+             // OK, perhaps we are too fragmented, allocate non-continuous
-+             store.fst_flags = F_ALLOCATEALL;
-+             ret = fcntl(fd, F_PREALLOCATE, &store);
-+             if (ret < 0) {
-+                 return ret;
-+             }
-+         }
-+         ret = ftruncate(fd, offset + len);
-+     } else {
-+         // offset+len would overflow.
-+         ret = -1;
-+     }
-+     return ret;
-+}
-+#endif
- static int64_t
- write_file (Elf *elf, int64_t size, int change_bo, size_t shnum)
 --- a/lib/eu-config.h
 +++ b/lib/eu-config.h
 @@ -59,14 +59,18 @@