> On Apr 20, 2021, at 2:00 PM, Bruce Ashfield <[email protected]> wrote: > > These look good to me. > > I've queued them on master .. were you also interested in > getting them into hardknott ?
Yes, I am. I’d appreciate any test reports too. Christopher > > Bruce > > In message: [meta-virtualization][PATCH 1/3] xen-tools: add patches for 4.14 > to enable dropping multilib build >> on 19/04/2021 Christopher Clark wrote: >> >> Backport Xen patches to enable hvmloader to be built without needing >> 32-bit glibc. >> >> Signed-off-by: Christopher Clark <[email protected]> >> --- >> ...-stand-alone-set-of-headers-Xen-4.14.patch | 178 ++++++++++++++++++ >> ...d-firmware-as-ffreestanding-Xen-4.14.patch | 83 ++++++++ >> recipes-extended/xen/xen-tools_4.14.bb | 2 + >> 3 files changed, 263 insertions(+) >> create mode 100644 >> recipes-extended/xen/files/0001-firmware-provide-a-stand-alone-set-of-headers-Xen-4.14.patch >> create mode 100644 >> recipes-extended/xen/files/0001-tools-firmware-Build-firmware-as-ffreestanding-Xen-4.14.patch >> >> diff --git >> a/recipes-extended/xen/files/0001-firmware-provide-a-stand-alone-set-of-headers-Xen-4.14.patch >> >> b/recipes-extended/xen/files/0001-firmware-provide-a-stand-alone-set-of-headers-Xen-4.14.patch >> new file mode 100644 >> index 0000000..7b062b7 >> --- /dev/null >> +++ >> b/recipes-extended/xen/files/0001-firmware-provide-a-stand-alone-set-of-headers-Xen-4.14.patch >> @@ -0,0 +1,178 @@ >> +From 73b13705af7c3bb8fdf11932eb68788d090a443f Mon Sep 17 00:00:00 2001 >> +From: =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= <[email protected]> >> +Date: Thu, 4 Mar 2021 16:49:00 +0100 >> +Subject: [PATCH] firmware: provide a stand alone set of headers >> +MIME-Version: 1.0 >> +Content-Type: text/plain; charset=UTF-8 >> +Content-Transfer-Encoding: 8bit >> + >> +The current build of the firmware relies on having 32bit compatible >> +headers installed in order to build some of the 32bit firmware. >> +Usually this can be solved by using the -ffreestanding compiler option >> +which drops the usage of the system headers in favor of a private set >> +of freestanding headers provided by the compiler itself that are not >> +tied to libc. >> + >> +However such option is broken at least in the gcc compiler provided in >> +Alpine Linux, as the system include path (ie: /usr/include) takes >> +precedence over the gcc private include path: >> + >> +#include <...> search starts here: >> + /usr/include >> + /usr/lib/gcc/x86_64-alpine-linux-musl/10.2.1/include >> + >> +And the headers in /usr/include are exclusively 64bit. >> + >> +Since -ffreestanding is currently broken on at least that distro, and >> +for resilience against future compilers also having the option broken >> +provide a set of stand alone 32bit headers required for the firmware >> +build. >> + >> +Signed-off-by: Roger Pau Monné <[email protected]> >> +Reviewed-by: Jan Beulich <[email protected]> >> +Release-Acked-by: Ian Jackson <[email protected]> >> +Applied to Xen 4.14 by: Christopher Clark <[email protected]> >> +--- >> + tools/firmware/Rules.mk | 13 +++++++ >> + tools/firmware/include/stdarg.h | 10 +++++ >> + tools/firmware/include/stdbool.h | 9 +++++ >> + tools/firmware/include/stddef.h | 10 +++++ >> + tools/firmware/include/stdint.h | 39 +++++++++++++++++++ >> + tools/firmware/rombios/32bit/rombios_compat.h | 4 +- >> + 6 files changed, 82 insertions(+), 3 deletions(-) >> + create mode 100644 tools/firmware/include/stdarg.h >> + create mode 100644 tools/firmware/include/stdbool.h >> + create mode 100644 tools/firmware/include/stddef.h >> + create mode 100644 tools/firmware/include/stdint.h >> + >> +diff --git a/tools/firmware/include/stdarg.h >> b/tools/firmware/include/stdarg.h >> +new file mode 100644 >> +index 0000000000..c5e3761cd2 >> +--- /dev/null >> ++++ b/tools/firmware/include/stdarg.h >> +@@ -0,0 +1,10 @@ >> ++#ifndef _STDARG_H_ >> ++#define _STDARG_H_ >> ++ >> ++typedef __builtin_va_list va_list; >> ++#define va_copy(dest, src) __builtin_va_copy(dest, src) >> ++#define va_start(ap, last) __builtin_va_start(ap, last) >> ++#define va_end(ap) __builtin_va_end(ap) >> ++#define va_arg __builtin_va_arg >> ++ >> ++#endif >> +diff --git a/tools/firmware/include/stdbool.h >> b/tools/firmware/include/stdbool.h >> +new file mode 100644 >> +index 0000000000..0cf76b106c >> +--- /dev/null >> ++++ b/tools/firmware/include/stdbool.h >> +@@ -0,0 +1,9 @@ >> ++#ifndef _STDBOOL_H_ >> ++#define _STDBOOL_H_ >> ++ >> ++#define bool _Bool >> ++#define true 1 >> ++#define false 0 >> ++#define __bool_true_false_are_defined 1 >> ++ >> ++#endif >> +diff --git a/tools/firmware/include/stddef.h >> b/tools/firmware/include/stddef.h >> +new file mode 100644 >> +index 0000000000..c7f974608a >> +--- /dev/null >> ++++ b/tools/firmware/include/stddef.h >> +@@ -0,0 +1,10 @@ >> ++#ifndef _STDDEF_H_ >> ++#define _STDDEF_H_ >> ++ >> ++typedef __SIZE_TYPE__ size_t; >> ++ >> ++#define NULL ((void*)0) >> ++ >> ++#define offsetof(t, m) __builtin_offsetof(t, m) >> ++ >> ++#endif >> +diff --git a/tools/firmware/include/stdint.h >> b/tools/firmware/include/stdint.h >> +new file mode 100644 >> +index 0000000000..16a0b6de19 >> +--- /dev/null >> ++++ b/tools/firmware/include/stdint.h >> +@@ -0,0 +1,39 @@ >> ++#ifndef _STDINT_H_ >> ++#define _STDINT_H_ >> ++ >> ++#if defined(__LP64__) || defined(__P64__) >> ++#error "32bit only header" >> ++#endif >> ++ >> ++typedef unsigned char uint8_t; >> ++typedef signed char int8_t; >> ++ >> ++typedef unsigned short uint16_t; >> ++typedef signed short int16_t; >> ++ >> ++typedef unsigned int uint32_t; >> ++typedef signed int int32_t; >> ++ >> ++typedef unsigned long long uint64_t; >> ++typedef signed long long int64_t; >> ++ >> ++#define INT8_MIN (-0x7f-1) >> ++#define INT16_MIN (-0x7fff-1) >> ++#define INT32_MIN (-0x7fffffff-1) >> ++#define INT64_MIN (-0x7fffffffffffffffll-1) >> ++ >> ++#define INT8_MAX 0x7f >> ++#define INT16_MAX 0x7fff >> ++#define INT32_MAX 0x7fffffff >> ++#define INT64_MAX 0x7fffffffffffffffll >> ++ >> ++#define UINT8_MAX 0xff >> ++#define UINT16_MAX 0xffff >> ++#define UINT32_MAX 0xffffffffu >> ++#define UINT64_MAX 0xffffffffffffffffull >> ++ >> ++typedef uint32_t uintptr_t; >> ++ >> ++#define UINTPTR_MAX UINT32_MAX >> ++ >> ++#endif >> +diff --git a/tools/firmware/rombios/32bit/rombios_compat.h >> b/tools/firmware/rombios/32bit/rombios_compat.h >> +index 3fe7d67721..8ba4c17ffd 100644 >> +--- a/tools/firmware/rombios/32bit/rombios_compat.h >> ++++ b/tools/firmware/rombios/32bit/rombios_compat.h >> +@@ -8,9 +8,7 @@ >> + >> + #define ADDR_FROM_SEG_OFF(seg, off) (void *)((((uint32_t)(seg)) << 4) + >> (off)) >> + >> +-typedef unsigned char uint8_t; >> +-typedef unsigned short int uint16_t; >> +-typedef unsigned int uint32_t; >> ++#include <stdint.h> >> + >> + typedef uint8_t Bit8u; >> + typedef uint16_t Bit16u; >> +diff --git a/tools/firmware/Rules.mk b/tools/firmware/Rules.mk >> +index 26bbddccd4..cb388b7011 100644 >> +--- a/tools/firmware/Rules.mk >> ++++ b/tools/firmware/Rules.mk >> +@@ -17,3 +17,16 @@ $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS)) >> + >> + # Extra CFLAGS suitable for an embedded type of environment. >> + CFLAGS += -fno-builtin -msoft-float >> ++ >> ++# Use our own set of stand alone headers to build firmware. >> ++# >> ++# Ideally using -ffreestanding should be enough, but that relies on the >> ++# compiler having the right order for include paths (ie: compiler private >> ++# headers before system ones) or the libc headers having proper >> arch-agnostic >> ++# freestanding support. This is not the case in Alpine at least which >> searches >> ++# system headers before compiler ones and has arch-specific libc headers. >> This >> ++# has been reported upstream: >> ++# https://gitlab.alpinelinux.org/alpine/aports/-/issues/12477 >> ++# In the meantime (and for resilience against broken systems) use our own >> set >> ++# of headers that provide what's needed for the firmware build. >> ++CFLAGS += -nostdinc -I$(XEN_ROOT)/tools/firmware/include >> +-- >> +2.25.1 >> + >> diff --git >> a/recipes-extended/xen/files/0001-tools-firmware-Build-firmware-as-ffreestanding-Xen-4.14.patch >> >> b/recipes-extended/xen/files/0001-tools-firmware-Build-firmware-as-ffreestanding-Xen-4.14.patch >> new file mode 100644 >> index 0000000..001b196 >> --- /dev/null >> +++ >> b/recipes-extended/xen/files/0001-tools-firmware-Build-firmware-as-ffreestanding-Xen-4.14.patch >> @@ -0,0 +1,83 @@ >> +From 0eae016b6e3dce69e3fb86aca5c4f221591a2f12 Mon Sep 17 00:00:00 2001 >> +From: Andrew Cooper <[email protected]> >> +Date: Thu, 25 Feb 2021 19:15:08 +0000 >> +Subject: [PATCH] tools/firmware: Build firmware as -ffreestanding >> + >> +firmware should always have been -ffreestanding, as it doesn't execute in >> the >> +host environment. -ffreestanding implies -fno-builtin, so replace the >> option. >> + >> +inttypes.h isn't a freestanding header, but the 32bitbios_support.c only >> wants >> +the stdint.h types so switch to the more appropriate include. >> + >> +This removes the build time dependency on a 32bit libc just to compile the >> +hvmloader and friends. >> + >> +Update README and the TravisCI configuration. >> + >> +Signed-off-by: Andrew Cooper <[email protected]> >> +Reviewed-by: Jan Beulich <[email protected]> >> +Reviewed-by: Ian Jackson <[email protected]> >> +Release-Acked-by: Ian Jackson <[email protected]> >> +Applied to m-v Xen 4.14 series: Christopher Clark >> <[email protected]> >> +--- >> + .travis.yml | 1 - >> + README | 3 --- >> + tools/firmware/Rules.mk | 2 +- >> + tools/firmware/hvmloader/32bitbios_support.c | 2 +- >> + 4 files changed, 2 insertions(+), 6 deletions(-) >> + >> +diff --git a/.travis.yml b/.travis.yml >> +index 15ca9e9047..2362475f7a 100644 >> +--- a/.travis.yml >> ++++ b/.travis.yml >> +@@ -58,7 +58,6 @@ addons: >> + - acpica-tools >> + - bin86 >> + - bcc >> +- - libc6-dev-i386 >> + - libnl-3-dev >> + - ocaml-nox >> + - libfindlib-ocaml-dev >> +diff --git a/README b/README >> +index 6e15242ae1..8c99c30986 100644 >> +--- a/README >> ++++ b/README >> +@@ -62,9 +62,6 @@ provided by your OS distributor: >> + * GNU bison and GNU flex >> + * GNU gettext >> + * ACPI ASL compiler (iasl) >> +- * Libc multiarch package (e.g. libc6-dev-i386 / glibc-devel.i686). >> +- Required when building on a 64-bit platform to build >> +- 32-bit components which are enabled on a default build. >> + >> + In addition to the above there are a number of optional build >> + prerequisites. Omitting these will cause the related features to be >> +diff --git a/tools/firmware/Rules.mk b/tools/firmware/Rules.mk >> +index cb388b7011..9f78a7dec9 100644 >> +--- a/tools/firmware/Rules.mk >> ++++ b/tools/firmware/Rules.mk >> +@@ -16,7 +16,7 @@ CFLAGS += -Werror >> + $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS)) >> + >> + # Extra CFLAGS suitable for an embedded type of environment. >> +-CFLAGS += -fno-builtin -msoft-float >> ++CFLAGS += -ffreestanding -msoft-float >> + >> + # Use our own set of stand alone headers to build firmware. >> + # >> +diff --git a/tools/firmware/hvmloader/32bitbios_support.c >> b/tools/firmware/hvmloader/32bitbios_support.c >> +index 114135022e..ef681d4f57 100644 >> +--- a/tools/firmware/hvmloader/32bitbios_support.c >> ++++ b/tools/firmware/hvmloader/32bitbios_support.c >> +@@ -20,7 +20,7 @@ >> + * this program; If not, see <http://www.gnu.org/licenses/>. >> + */ >> + >> +-#include <inttypes.h> >> ++#include <stdint.h> >> + #include <elf.h> >> + #ifdef __sun__ >> + #include <sys/machelf.h> >> +-- >> +2.25.1 >> + >> diff --git a/recipes-extended/xen/xen-tools_4.14.bb >> b/recipes-extended/xen/xen-tools_4.14.bb >> index a79b41d..10982a2 100644 >> --- a/recipes-extended/xen/xen-tools_4.14.bb >> +++ b/recipes-extended/xen/xen-tools_4.14.bb >> @@ -6,6 +6,8 @@ XEN_BRANCH ?= "stable-${XEN_REL}" >> SRC_URI = " \ >> git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH} \ >> file://0001-python-pygrub-pass-DISTUTILS-xen-4.14.patch \ >> + >> file://0001-firmware-provide-a-stand-alone-set-of-headers-Xen-4.14.patch \ >> + >> file://0001-tools-firmware-Build-firmware-as-ffreestanding-Xen-4.14.patch \ >> " >> >> LIC_FILES_CHKSUM ?= "file://COPYING;md5=419739e325a50f3d7b4501338e44a4e5" >> -- >> 2.25.1 >>
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#6426): https://lists.yoctoproject.org/g/meta-virtualization/message/6426 Mute This Topic: https://lists.yoctoproject.org/mt/82222257/21656 Group Owner: [email protected] Unsubscribe: https://lists.yoctoproject.org/g/meta-virtualization/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
