]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
kexec-tools: Fix build with GCC-14 on musl
authorKhem Raj <raj.khem@gmail.com>
Thu, 23 May 2024 14:59:17 +0000 (07:59 -0700)
committerSteve Sakoman <steve@sakoman.com>
Sat, 15 Jun 2024 12:34:59 +0000 (05:34 -0700)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 704f51f72c301bd081a635dbe94e52aa97ffb827)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch [new file with mode: 0644]
meta/recipes-kernel/kexec/kexec-tools_2.0.28.bb

diff --git a/meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch b/meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch
new file mode 100644 (file)
index 0000000..e223f45
--- /dev/null
@@ -0,0 +1,54 @@
+From 32c8ffa7ace6f1b7e63f9ddffab00b00c36a7b57 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 15 May 2024 21:18:08 -0700
+Subject: [PATCH] x86-linux-setup.c: Use POSIX basename API
+
+Musl C library only supports POSIX basename function. while glibc has
+both GNU extention as well as POSIX basename implemented. Switch to
+using posix version, so it can work across musl and glibc
+
+basename prototype has been removed from string.h from latest musl [1]
+compilers e.g. clang-18/GCC-14 flags the absense of prototype as error.
+therefore include libgen.h for providing it.
+
+[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
+
+Upstream-Status: Submitted [https://lists.infradead.org/pipermail/kexec/2024-May/030034.html]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ kexec/arch/i386/x86-linux-setup.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c
+index 9a281dc..73251b9 100644
+--- a/kexec/arch/i386/x86-linux-setup.c
++++ b/kexec/arch/i386/x86-linux-setup.c
+@@ -14,6 +14,7 @@
+  *
+  */
+ #define _GNU_SOURCE
++#include <libgen.h>
+ #include <stdint.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -329,12 +330,14 @@ static int add_edd_entry(struct x86_linux_param_header *real_mode,
+       memset(edd_info, 0, sizeof(struct edd_info));
+       /* extract the device number */
+-      if (sscanf(basename(sysfs_name), "int13_dev%hhx", &devnum) != 1) {
++      char* sysfs_name_copy = strdup(sysfs_name);
++      if (sscanf(basename(sysfs_name_copy), "int13_dev%hhx", &devnum) != 1) {
+               fprintf(stderr, "Invalid format of int13_dev dir "
+-                              "entry: %s\n", basename(sysfs_name));
++                              "entry: %s\n", basename(sysfs_name_copy));
++              free(sysfs_name_copy);
+               return -1;
+       }
+-
++      free(sysfs_name_copy);
+       /* if there's a MBR signature, then add it */
+       if (file_scanf(sysfs_name, "mbr_signature", "0x%x", &mbr_sig) == 1) {
+               real_mode->edd_mbr_sig_buffer[*current_mbr] = mbr_sig;
+-- 
+2.45.1
+
index dec821ea88314b3a2236535f418a94d502f67cfb..f0a484f88431f989eb23b06960540e16270090b7 100644 (file)
@@ -18,6 +18,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz
            file://0005-Disable-PIE-during-link.patch \
            file://0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch \
            file://Fix-building-on-x86_64-with-binutils-2.41.patch \
+           file://0001-x86-linux-setup.c-Use-POSIX-basename-API.patch \
            "
 
 SRC_URI[sha256sum] = "f33d2660b3e38d25a127e87097978e0f7a9a73ab5151a29eb80974d169ff6a29"