> 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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to