aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Pau Monné <royger@FreeBSD.org>2024-02-22 16:53:07 +0000
committerRoger Pau Monné <royger@FreeBSD.org>2024-02-22 17:46:42 +0000
commit10944178948b26e458cb4f077e3537bd0671c056 (patch)
treed397dab6a68816116b87a891c005432e4864b1c3
parente86f4ac9642148525a2b4356dc211526226acdd5 (diff)
downloadports-10944178948b26e458cb4f077e3537bd0671c056.tar.gz
ports-10944178948b26e458cb4f077e3537bd0671c056.zip
{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)
-rw-r--r--emulators/xen-kernel/Makefile7
-rw-r--r--emulators/xen-kernel/distinfo6
-rw-r--r--emulators/xen-kernel/files/v2-0001-x86-altcall-use-an-union-as-register-type-for-fun.patch137
-rw-r--r--sysutils/xen-tools/Makefile4
-rw-r--r--sysutils/xen-tools/distinfo6
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