From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gnu.wildebeest.org (gnu.wildebeest.org [45.83.234.184]) by sourceware.org (Postfix) with ESMTPS id 4BBCA3858D33 for ; Sun, 24 Apr 2022 17:49:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4BBCA3858D33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=klomp.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=klomp.org Received: from reform (deer0x0b.wildebeest.org [172.31.17.141]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 14E3B302BBED; Sun, 24 Apr 2022 19:49:07 +0200 (CEST) Received: by reform (Postfix, from userid 1000) id 191762E822B8; Sun, 24 Apr 2022 19:49:07 +0200 (CEST) From: Mark Wielaard To: elfutils-devel@sourceware.org Cc: Mark Wielaard Subject: [COMMITTED] libelf: Check for mremap, elf_update needs it for ELF_C_RDWR_MMAP Date: Sun, 24 Apr 2022 19:49:03 +0200 Message-Id: <20220424174903.340864-1-mark@klomp.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Apr 2022 17:49:20 -0000 Add a AC_CHECK_FUNCS configure check for mremap. Some systems like KFreeBSD and the Hurd don't have it. Also add a configure warning because without mremap elf_update will often fail when ELF_C_RDWR_MMAP is used. ELF_C_RDWR_MMAP is an elfutils extension to libelf. https://sourceware.org/bugzilla/show_bug.cgi?id=27337 Signed-off-by: Mark Wielaard --- ChangeLog | 4 ++++ configure.ac | 5 ++++- libelf/ChangeLog | 4 ++++ libelf/elf_update.c | 2 ++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3357f69b..f0cd28a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2022-04-24 Mark Wielaard + + * configure.ac (AC_CHECK_FUNCS): Add mremap. + 2021-03-20 Mark Wielaard * configure.ac: Remove -m64 on 32bit target comments for diff --git a/configure.ac b/configure.ac index 2418d474..33c4b5e5 100644 --- a/configure.ac +++ b/configure.ac @@ -435,7 +435,10 @@ AC_CHECK_DECLS([reallocarray],[],[], [#define _GNU_SOURCE #include ]) -AC_CHECK_FUNCS([process_vm_readv]) +AC_CHECK_FUNCS([process_vm_readv mremap]) + +AS_IF([test "x$ac_cv_func_mremap" = "xno"], + [AC_MSG_WARN([elf_update needs mremap to support ELF_C_RDWR_MMAP])]) AC_CHECK_HEADERS([error.h]) AC_CHECK_HEADERS([err.h]) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 985f795d..00d4ac0f 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,7 @@ +2022-04-24 Mark Wielaard + + * elf_update.c (write_file): Check HAVE_MREMAP. + 2022-04-01 Mark Wielaard * libelfP.h (struct Elf_Data_Chunk): Add an int64_t offset field. diff --git a/libelf/elf_update.c b/libelf/elf_update.c index 9b8867ce..97ca9ca9 100644 --- a/libelf/elf_update.c +++ b/libelf/elf_update.c @@ -106,8 +106,10 @@ write_file (Elf *elf, int64_t size, int change_bo, size_t shnum) if (elf->cmd == ELF_C_RDWR_MMAP && (size_t) size > elf->maximum_size) { +#ifdef HAVE_MREMAP if (mremap (elf->map_address, elf->maximum_size, size, 0) == MAP_FAILED) +#endif { __libelf_seterrno (ELF_E_WRITE_ERROR); return -1; -- 2.30.2