Преглед изворни кода

package/xen: fix build for gcc 14 and aarch64

Backport two commits from upstream Xen to fix the build for AArch64
with gcc 14.

This repairs the tests.package.test_xen.TestXen runtime test
introduced in [1], which uses an external AArch64 toolchain that has
been upgraded to gcc 14 in [2].

Fixes:
    utils/docker-run support/testing/run-tests \
        -d dl -o output_folder -s \
        tests.package.test_xen
    ...
    checking for openpty et al... configure: error: in '/build/xen-4.14.6/tools':
    configure: error: Unable to find library for openpty and login_tty

[1] https://gitlab.com/buildroot.org/buildroot/-/commit/055f82ebbd07b582c992eed30ef5191f18873ba4
[2] https://gitlab.com/buildroot.org/buildroot/-/commit/e5a965a648adfc0bcd571fed04ee50b2ec3ebd29

Signed-off-by: Vincent Stehlé <vincent.stehle@laposte.net>
Cc: Alistair Francis <alistair@alistair23.me>
[Julien:
  - fix "make check-package" errors
  - add info in the commit log
]
Signed-off-by: Julien Olivain <ju.o@free.fr>
Vincent Stehlé пре 6 месеци
родитељ
комит
ea55aa2819

+ 253 - 0
package/xen/0005-tools-drop-bogus-and-obsolete-ptyfuncs.m4.patch

@@ -0,0 +1,253 @@
+From 13a088627ae0c99f6c7c763ce0883dc804b54b66 Mon Sep 17 00:00:00 2001
+From: Olaf Hering <olaf@aepfle.de>
+Date: Fri, 12 May 2023 12:26:14 +0000
+Subject: [PATCH] tools: drop bogus and obsolete ptyfuncs.m4
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+According to openpty(3) it is required to include <pty.h> to get the
+prototypes for openpty() and login_tty(). But this is not what the
+function AX_CHECK_PTYFUNCS actually does. It makes no attempt to include
+the required header.
+
+The two source files which call openpty() and login_tty() already contain
+the conditionals to include the required header.
+
+Remove the bogus m4 file to fix build with clang, which complains about
+calls to undeclared functions.
+
+Remove usage of INCLUDE_LIBUTIL_H in libxl_bootloader.c, it is already
+covered by inclusion of libxl_osdep.h.
+
+Remove usage of PTYFUNCS_LIBS in libxl/Makefile, it is already covered
+by UTIL_LIBS from config/StdGNU.mk.
+
+Signed-off-by: Olaf Hering <olaf@aepfle.de>
+Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
+[Vincent: backported to 4.14.6]
+Signed-off-by: Vincent Stehlé <vincent.stehle@laposte.net>
+Upstream: https://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=42abf5b9c53eb1b1a902002fcda68708234152c3
+---
+ config/Tools.mk.in             |  2 -
+ m4/ptyfuncs.m4                 | 35 -----------------
+ tools/config.h.in              |  3 --
+ tools/configure                | 68 ----------------------------------
+ tools/configure.ac             |  2 -
+ tools/libxl/Makefile           |  2 +-
+ tools/libxl/libxl_bootloader.c |  4 --
+ 7 files changed, 1 insertion(+), 115 deletions(-)
+ delete mode 100644 m4/ptyfuncs.m4
+
+diff --git a/config/Tools.mk.in b/config/Tools.mk.in
+index 23df47af8d..4971c3f526 100644
+--- a/config/Tools.mk.in
++++ b/config/Tools.mk.in
+@@ -31,8 +31,6 @@ PTHREAD_CFLAGS      := @PTHREAD_CFLAGS@
+ PTHREAD_LDFLAGS     := @PTHREAD_LDFLAGS@
+ PTHREAD_LIBS        := @PTHREAD_LIBS@
+ 
+-PTYFUNCS_LIBS       := @PTYFUNCS_LIBS@
+-
+ LIBNL3_LIBS         := @LIBNL3_LIBS@
+ LIBNL3_CFLAGS       := @LIBNL3_CFLAGS@
+ XEN_TOOLS_RPATH     := @rpath@
+diff --git a/m4/ptyfuncs.m4 b/m4/ptyfuncs.m4
+deleted file mode 100644
+index 3e37b5a23c..0000000000
+--- a/m4/ptyfuncs.m4
++++ /dev/null
+@@ -1,35 +0,0 @@
+-AC_DEFUN([AX_CHECK_PTYFUNCS], [
+-    dnl This is a workaround for a bug in Debian package
+-    dnl libbsd-dev-0.3.0-1. Once we no longer support that
+-    dnl package we can remove the addition of -Werror to
+-    dnl CPPFLAGS.
+-    AX_SAVEVAR_SAVE(CPPFLAGS)
+-    CPPFLAGS="$CPPFLAGS -Werror"
+-    AC_CHECK_HEADER([libutil.h],[
+-      AC_DEFINE([INCLUDE_LIBUTIL_H],[<libutil.h>],[libutil header file name])
+-    ])
+-    AX_SAVEVAR_RESTORE(CPPFLAGS)
+-    AC_CACHE_CHECK([for openpty et al], [ax_cv_ptyfuncs_libs], [
+-        for ax_cv_ptyfuncs_libs in -lutil "" NOT_FOUND; do
+-            if test "x$ax_cv_ptyfuncs_libs" = "xNOT_FOUND"; then
+-                AC_MSG_FAILURE([Unable to find library for openpty and login_tty])
+-            fi
+-            AX_SAVEVAR_SAVE(LIBS)
+-            LIBS="$LIBS $ax_cv_ptyfuncs_libs"
+-            AC_LINK_IFELSE([AC_LANG_SOURCE([
+-#ifdef INCLUDE_LIBUTIL_H
+-#include INCLUDE_LIBUTIL_H
+-#endif
+-int main(void) {
+-  openpty(0,0,0,0,0);
+-  login_tty(0);
+-}
+-])],[
+-                break
+-            ],[])
+-            AX_SAVEVAR_RESTORE(LIBS)
+-        done
+-    ])
+-    PTYFUNCS_LIBS="$ax_cv_ptyfuncs_libs"
+-    AC_SUBST(PTYFUNCS_LIBS)
+-])
+diff --git a/tools/config.h.in b/tools/config.h.in
+index 5abf6092de..6b9a479928 100644
+--- a/tools/config.h.in
++++ b/tools/config.h.in
+@@ -87,9 +87,6 @@
+ /* Define extfs header to use */
+ #undef INCLUDE_EXTFS_H
+ 
+-/* libutil header file name */
+-#undef INCLUDE_LIBUTIL_H
+-
+ /* IPXE path */
+ #undef IPXE_PATH
+ 
+diff --git a/tools/configure b/tools/configure
+index cf937c9b7a..5102297210 100755
+--- a/tools/configure
++++ b/tools/configure
+@@ -636,7 +636,6 @@ LIBNL3_LIBS
+ LIBNL3_CFLAGS
+ argp_ldflags
+ libiconv
+-PTYFUNCS_LIBS
+ PTHREAD_LIBS
+ PTHREAD_LDFLAGS
+ PTHREAD_CFLAGS
+@@ -3739,8 +3738,6 @@ esac
+ 
+ 
+ 
+-
+-
+ # Fetched from http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_compare_version.m4
+ # Commit ID: 27948f49ca30e4222bb7cdd55182bd7341ac50c5
+ # ===========================================================================
+@@ -8871,71 +8868,6 @@ $as_echo "$ax_cv_pthread_flags" >&6; }
+ 
+ 
+ 
+-
+-
+-    saved_CPPFLAGS="$CPPFLAGS"
+-
+-    CPPFLAGS="$CPPFLAGS -Werror"
+-    ac_fn_c_check_header_mongrel "$LINENO" "libutil.h" "ac_cv_header_libutil_h" "$ac_includes_default"
+-if test "x$ac_cv_header_libutil_h" = xyes; then :
+-
+-
+-$as_echo "#define INCLUDE_LIBUTIL_H <libutil.h>" >>confdefs.h
+-
+-
+-fi
+-
+-
+-
+-    CPPFLAGS="$saved_CPPFLAGS"
+-
+-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty et al" >&5
+-$as_echo_n "checking for openpty et al... " >&6; }
+-if ${ax_cv_ptyfuncs_libs+:} false; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-
+-        for ax_cv_ptyfuncs_libs in -lutil "" NOT_FOUND; do
+-            if test "x$ax_cv_ptyfuncs_libs" = "xNOT_FOUND"; then
+-                { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "Unable to find library for openpty and login_tty
+-See \`config.log' for more details" "$LINENO" 5; }
+-            fi
+-
+-    saved_LIBS="$LIBS"
+-
+-            LIBS="$LIBS $ax_cv_ptyfuncs_libs"
+-            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
+-
+-#ifdef INCLUDE_LIBUTIL_H
+-#include INCLUDE_LIBUTIL_H
+-#endif
+-int main(void) {
+-  openpty(0,0,0,0,0);
+-  login_tty(0);
+-}
+-
+-_ACEOF
+-if ac_fn_c_try_link "$LINENO"; then :
+-
+-                break
+-
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+-    conftest$ac_exeext conftest.$ac_ext
+-
+-    LIBS="$saved_LIBS"
+-
+-        done
+-
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_ptyfuncs_libs" >&5
+-$as_echo "$ax_cv_ptyfuncs_libs" >&6; }
+-    PTYFUNCS_LIBS="$ax_cv_ptyfuncs_libs"
+-
+-
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yajl_alloc in -lyajl" >&5
+ $as_echo_n "checking for yajl_alloc in -lyajl... " >&6; }
+ if ${ac_cv_lib_yajl_yajl_alloc+:} false; then :
+diff --git a/tools/configure.ac b/tools/configure.ac
+index 1808cffafb..9e5cf3aae0 100644
+--- a/tools/configure.ac
++++ b/tools/configure.ac
+@@ -67,7 +67,6 @@ m4_include([../m4/uuid.m4])
+ m4_include([../m4/pkg.m4])
+ m4_include([../m4/curses.m4])
+ m4_include([../m4/pthread.m4])
+-m4_include([../m4/ptyfuncs.m4])
+ m4_include([../m4/extfs.m4])
+ m4_include([../m4/fetcher.m4])
+ m4_include([../m4/ax_compare_version.m4])
+@@ -417,7 +416,6 @@ AC_SUBST(zlib)
+ AC_SUBST(system_aio)
+ AX_CHECK_EXTFS
+ AX_CHECK_PTHREAD
+-AX_CHECK_PTYFUNCS
+ AC_CHECK_LIB([yajl], [yajl_alloc], [],
+     [AC_MSG_ERROR([Could not find yajl])])
+ AC_CHECK_LIB([z], [deflateCopy], [], [AC_MSG_ERROR([Could not find zlib])])
+diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile
+index 38cd43abae..0f09be1624 100644
+--- a/tools/libxl/Makefile
++++ b/tools/libxl/Makefile
+@@ -20,7 +20,7 @@ LIBUUID_LIBS += -luuid
+ endif
+ 
+ LIBXL_LIBS =
+-LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenhypfs) $(LDLIBS_libxenstore) $(LDLIBS_libxentoolcore) $(PTYFUNCS_LIBS) $(LIBUUID_LIBS)
++LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenhypfs) $(LDLIBS_libxenstore) $(LDLIBS_libxentoolcore) $(UTIL_LIBS) $(LIBUUID_LIBS)
+ ifeq ($(CONFIG_LIBNL),y)
+ LIBXL_LIBS += $(LIBNL3_LIBS)
+ endif
+diff --git a/tools/libxl/libxl_bootloader.c b/tools/libxl/libxl_bootloader.c
+index 18e9ebd714..1bc6e51827 100644
+--- a/tools/libxl/libxl_bootloader.c
++++ b/tools/libxl/libxl_bootloader.c
+@@ -19,10 +19,6 @@
+ #include <utmp.h>
+ #endif
+ 
+-#ifdef INCLUDE_LIBUTIL_H
+-#include INCLUDE_LIBUTIL_H
+-#endif
+-
+ #include "libxl_internal.h"
+ 
+ #define BOOTLOADER_BUF_OUT 65536
+-- 
+2.45.2
+

+ 62 - 0
package/xen/0006-Arm64-adjust-__irq_to_desc-to-fix-build-with-gcc14.patch

@@ -0,0 +1,62 @@
+From a17dda1d2bf9c25b91f9e72625696cf26b32673a Mon Sep 17 00:00:00 2001
+From: Jan Beulich <jbeulich@suse.com>
+Date: Thu, 29 Aug 2024 10:03:53 +0200
+Subject: [PATCH] Arm64: adjust __irq_to_desc() to fix build with gcc14
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+With the original code I observe
+
+In function ‘__irq_to_desc’,
+    inlined from ‘route_irq_to_guest’ at arch/arm/irq.c:465:12:
+arch/arm/irq.c:54:16: error: array subscript -2 is below array bounds of ‘irq_desc_t[32]’ {aka ‘struct irq_desc[32]’} [-Werror=array-bounds=]
+   54 |         return &this_cpu(local_irq_desc)[irq];
+      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+which looks pretty bogus: How in the world does the compiler arrive at
+-2 when compiling route_irq_to_guest()? Yet independent of that the
+function's parameter wants to be of unsigned type anyway, as shown by
+a vast majority of callers (others use plain int when they really mean
+non-negative quantities). With that adjustment the code compiles fine
+again.
+
+Signed-off-by: Jan Beulich <jbeulich@suse.com>
+Acked-by: Michal Orzel <michal.orzel@amd.com>
+[Vincent: backported to 4.14.6]
+Signed-off-by: Vincent Stehlé <vincent.stehle@laposte.net>
+Upstream: https://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=99f942f3d410059dc223ee0a908827e928ef3592
+---
+ xen/arch/arm/irq.c        | 2 +-
+ xen/include/asm-arm/irq.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
+index 3877657a52..2862de00d9 100644
+--- a/xen/arch/arm/irq.c
++++ b/xen/arch/arm/irq.c
+@@ -66,7 +66,7 @@ hw_irq_controller no_irq_type = {
+ static irq_desc_t irq_desc[NR_IRQS];
+ static DEFINE_PER_CPU(irq_desc_t[NR_LOCAL_IRQS], local_irq_desc);
+ 
+-irq_desc_t *__irq_to_desc(int irq)
++irq_desc_t *__irq_to_desc(unsigned int irq)
+ {
+     if ( irq < NR_LOCAL_IRQS )
+         return &this_cpu(local_irq_desc)[irq];
+diff --git a/xen/include/asm-arm/irq.h b/xen/include/asm-arm/irq.h
+index e45d574598..33fbbadb34 100644
+--- a/xen/include/asm-arm/irq.h
++++ b/xen/include/asm-arm/irq.h
+@@ -57,7 +57,7 @@ extern const unsigned int nr_irqs;
+ struct irq_desc;
+ struct irqaction;
+ 
+-struct irq_desc *__irq_to_desc(int irq);
++struct irq_desc *__irq_to_desc(unsigned int irq);
+ 
+ #define irq_to_desc(irq)    __irq_to_desc(irq)
+ 
+-- 
+2.45.2
+