git: 10944178948b - main - {sysutils,emulators}/xen-{tools,kernel}: update to latest stable hash

From: Roger Pau Monné <royger_at_FreeBSD.org>
Date: Thu, 22 Feb 2024 17:47:08 UTC
The branch main has been updated by royger:

URL: https://cgit.FreeBSD.org/ports/commit/?id=10944178948b26e458cb4f077e3537bd0671c056

commit 10944178948b26e458cb4f077e3537bd0671c056
Author:     Roger Pau Monné <royger@FreeBSD.org>
AuthorDate: 2024-02-22 16:53:07 +0000
Commit:     Roger Pau Monné <royger@FreeBSD.org>
CommitDate: 2024-02-22 17:46:42 +0000

    {sysutils,emulators}/xen-{tools,kernel}: update to latest stable hash
    
    Update the kernel and tools packages and also include a fix for a clang code
    generation bug.
    
    Sponsored by: Cloud Software Group
    Approved by: bapt (implicit)
---
 emulators/xen-kernel/Makefile                      |   7 +-
 emulators/xen-kernel/distinfo                      |   6 +-
 ...all-use-an-union-as-register-type-for-fun.patch | 137 +++++++++++++++++++++
 sysutils/xen-tools/Makefile                        |   4 +-
 sysutils/xen-tools/distinfo                        |   6 +-
 5 files changed, 150 insertions(+), 10 deletions(-)

diff --git a/emulators/xen-kernel/Makefile b/emulators/xen-kernel/Makefile
index e86397813da8..cb81823d89d6 100644
--- a/emulators/xen-kernel/Makefile
+++ b/emulators/xen-kernel/Makefile
@@ -1,11 +1,11 @@
 PORTNAME=	xen
 PKGNAMESUFFIX=	-kernel
-DISTVERSION=	4.18.0.20231212
+DISTVERSION=	4.18.0.20240201
 CATEGORIES=	emulators
 
 USE_GITLAB=	yes
 GL_ACCOUNT=	xen-project
-GL_TAGNAME=	1792d1723b7fb45a20b145d2de4d233913b22c09
+GL_TAGNAME=	b1fdd7d0e47e0831ac7a99d0417385fc10d3068c
 
 MAINTAINER=	royger@FreeBSD.org
 COMMENT=	Hypervisor using a microkernel design
@@ -28,6 +28,9 @@ PLIST_FILES=	/boot/xen \
 		lib/debug/boot/xen.debug \
 		lib/debug/boot/xen-debug.debug
 
+# Workaround clang code generation bug.
+EXTRA_PATCHES+=        ${PATCHDIR}/v2-0001-x86-altcall-use-an-union-as-register-type-for-fun.patch:-p1
+
 .include <bsd.port.options.mk>
 
 .if ${OPSYS} != FreeBSD
diff --git a/emulators/xen-kernel/distinfo b/emulators/xen-kernel/distinfo
index b769fc627058..629e0923053c 100644
--- a/emulators/xen-kernel/distinfo
+++ b/emulators/xen-kernel/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1702977481
-SHA256 (xen-project-xen-1792d1723b7fb45a20b145d2de4d233913b22c09_GL0.tar.gz) = cd999c5c715190cffa80e51d2099423039aca535d478d0090c31bacdf33a3401
-SIZE (xen-project-xen-1792d1723b7fb45a20b145d2de4d233913b22c09_GL0.tar.gz) = 6825501
+TIMESTAMP = 1708622887
+SHA256 (xen-project-xen-b1fdd7d0e47e0831ac7a99d0417385fc10d3068c_GL0.tar.gz) = 4cb7ef37b51d9d1ff58272fafebfa91d48aadacdb5cc4ee6f046488234be8c1b
+SIZE (xen-project-xen-b1fdd7d0e47e0831ac7a99d0417385fc10d3068c_GL0.tar.gz) = 6826601
diff --git a/emulators/xen-kernel/files/v2-0001-x86-altcall-use-an-union-as-register-type-for-fun.patch b/emulators/xen-kernel/files/v2-0001-x86-altcall-use-an-union-as-register-type-for-fun.patch
new file mode 100644
index 000000000000..ec00a478cb23
--- /dev/null
+++ b/emulators/xen-kernel/files/v2-0001-x86-altcall-use-an-union-as-register-type-for-fun.patch
@@ -0,0 +1,137 @@
+From e0d563ca60b16dfab45956f60a6c1b7b1e218ba4 Mon Sep 17 00:00:00 2001
+From: Roger Pau Monne <roger.pau@citrix.com>
+To: xen-devel@lists.xenproject.org
+Cc: Jan Beulich <jbeulich@suse.com>
+Cc: Andrew Cooper <andrew.cooper3@citrix.com>
+Cc: "Roger Pau Monné" <roger.pau@citrix.com>
+Cc: Wei Liu <wl@xen.org>
+Date: Wed, 21 Feb 2024 16:55:12 +0100
+Subject: [PATCH v2] x86/altcall: use an union as register type for function
+ parameters
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The current code for alternative calls uses the caller parameter types as the
+types for the register variables that serve as function parameters:
+
+uint8_t foo;
+[...]
+alternative_call(myfunc, foo);
+
+Would expand roughly into:
+
+register unint8_t a1_ asm("rdi") = foo;
+register unsigned long a2_ asm("rsi");
+[...]
+asm volatile ("call *%c[addr](%%rip)"...);
+
+However under certain circumstances clang >= 16.0.0 with -O2 can generate
+incorrect code, given the following example:
+
+unsigned int func(uint8_t t)
+{
+    return t;
+}
+
+static void bar(uint8_t b)
+{
+    int ret_;
+    register uint8_t di asm("rdi") = b;
+    register unsigned long si asm("rsi");
+    register unsigned long dx asm("rdx");
+    register unsigned long cx asm("rcx");
+    register unsigned long r8 asm("r8");
+    register unsigned long r9 asm("r9");
+    register unsigned long r10 asm("r10");
+    register unsigned long r11 asm("r11");
+
+    asm volatile ( "call %c[addr]"
+                   : "+r" (di), "=r" (si), "=r" (dx),
+                     "=r" (cx), "=r" (r8), "=r" (r9),
+                     "=r" (r10), "=r" (r11), "=a" (ret_)
+                   : [addr] "i" (&(func)), "g" (func)
+                   : "memory" );
+}
+
+void foo(unsigned int a)
+{
+    bar(a);
+}
+
+Clang generates the following code:
+
+func:                                   # @func
+        movl    %edi, %eax
+        retq
+foo:                                    # @foo
+        callq   func
+        retq
+
+Note the truncation of the unsigned int parameter 'a' of foo() to uint8_t when
+passed into bar() is lost.
+
+The above can be worked around by using an union when defining the register
+variables, so that `di` becomes:
+
+register union {
+    uint8_t e;
+    unsigned long r;
+} di asm("rdi") = { .e = b };
+
+Which results in following code generated for `foo()`:
+
+foo:                                    # @foo
+        movzbl  %dil, %edi
+        callq   func
+        retq
+
+So the truncation is not longer lost.  Apply such workaround only when built
+with clang.
+
+Reported-by: Matthew Grooms <mgrooms@shrew.net>
+Link: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=277200
+Link: https://github.com/llvm/llvm-project/issues/82598
+Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
+---
+Changes since v1:
+ - Only apply the union workaround with clang.
+
+Seems like all gitlab build tests are OK with this approach.
+---
+ xen/arch/x86/include/asm/alternative.h | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/xen/arch/x86/include/asm/alternative.h b/xen/arch/x86/include/asm/alternative.h
+index a1cd6a9fe5b8..3fe27ea791bf 100644
+--- a/xen/arch/x86/include/asm/alternative.h
++++ b/xen/arch/x86/include/asm/alternative.h
+@@ -167,9 +167,25 @@ extern void alternative_branches(void);
+ #define ALT_CALL_arg5 "r8"
+ #define ALT_CALL_arg6 "r9"
+ 
++#ifdef CONFIG_CC_IS_CLANG
++/*
++ * Use an union with an unsigned long in order to prevent clang from skipping a
++ * possible truncation of the value.  By using the union any truncation is
++ * carried before the call instruction.
++ * https://github.com/llvm/llvm-project/issues/82598
++ */
++#define ALT_CALL_ARG(arg, n)                                            \
++    register union {                                                    \
++        typeof(arg) e;                                                  \
++        unsigned long r;                                                \
++    } a ## n ## _ asm ( ALT_CALL_arg ## n ) = {                         \
++        .e = ({ BUILD_BUG_ON(sizeof(arg) > sizeof(void *)); (arg); })   \
++    }
++#else
+ #define ALT_CALL_ARG(arg, n) \
+     register typeof(arg) a ## n ## _ asm ( ALT_CALL_arg ## n ) = \
+         ({ BUILD_BUG_ON(sizeof(arg) > sizeof(void *)); (arg); })
++#endif
+ #define ALT_CALL_NO_ARG(n) \
+     register unsigned long a ## n ## _ asm ( ALT_CALL_arg ## n )
+ 
+-- 
+2.43.0
+
diff --git a/sysutils/xen-tools/Makefile b/sysutils/xen-tools/Makefile
index d44e36e0deeb..a38f0c4d4ffa 100644
--- a/sysutils/xen-tools/Makefile
+++ b/sysutils/xen-tools/Makefile
@@ -1,12 +1,12 @@
 PORTNAME=	xen
 PKGNAMESUFFIX=	-tools
-DISTVERSION=	4.18.0.20231212
+DISTVERSION=	4.18.0.20240201
 PORTREVISION=	1
 CATEGORIES=	sysutils emulators
 
 USE_GITLAB=	yes
 GL_ACCOUNT=	xen-project
-GL_TAGNAME=	1792d1723b7fb45a20b145d2de4d233913b22c09
+GL_TAGNAME=	b1fdd7d0e47e0831ac7a99d0417385fc10d3068c
 GL_TUPLE=	qemu-project:qemu:v8.0.4:qemu \
 		qemu-project:dtc:b6910bec:dtc \
 		qemu-project:meson:3a9b285a:meson \
diff --git a/sysutils/xen-tools/distinfo b/sysutils/xen-tools/distinfo
index 7ca93c276af3..97bbb13a4006 100644
--- a/sysutils/xen-tools/distinfo
+++ b/sysutils/xen-tools/distinfo
@@ -1,6 +1,6 @@
-TIMESTAMP = 1702977532
-SHA256 (xen-project-xen-1792d1723b7fb45a20b145d2de4d233913b22c09_GL0.tar.gz) = cd999c5c715190cffa80e51d2099423039aca535d478d0090c31bacdf33a3401
-SIZE (xen-project-xen-1792d1723b7fb45a20b145d2de4d233913b22c09_GL0.tar.gz) = 6825501
+TIMESTAMP = 1708623243
+SHA256 (xen-project-xen-b1fdd7d0e47e0831ac7a99d0417385fc10d3068c_GL0.tar.gz) = 4cb7ef37b51d9d1ff58272fafebfa91d48aadacdb5cc4ee6f046488234be8c1b
+SIZE (xen-project-xen-b1fdd7d0e47e0831ac7a99d0417385fc10d3068c_GL0.tar.gz) = 6826601
 SHA256 (qemu-v8.0.4.tar.bz2) = 958eae6b32046bb512b5b968f66e896258fa8c4ec5c7fdf2d780fd206c677774
 SIZE (qemu-v8.0.4.tar.bz2) = 31468222
 SHA256 (dtc-b6910bec.tar.bz2) = f180420b105bdd35cfee9977d6ee2ee5d6601aa2a84693c048a985a604bd2c1c