Message ID | 20230809210227.2723296-1-raj.khem@gmail.com |
---|---|
State | New |
Headers | show |
Series | systemd-boot: Fix build on musl | expand |
Hello, I tested this with the meson/systemd series from Ross and it actually breaks the build: https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio On 09/08/2023 14:02:27-0700, Khem Raj wrote: > Signed-off-by: Khem Raj <raj.khem@gmail.com> > --- > .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++ > meta/recipes-core/systemd/systemd-boot_254.bb | 2 + > 2 files changed, 81 insertions(+) > create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > > diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > new file mode 100644 > index 00000000000..1988d50ac90 > --- /dev/null > +++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > @@ -0,0 +1,79 @@ > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001 > +From: Khem Raj <raj.khem@gmail.com> > +Date: Tue, 8 Aug 2023 00:57:12 -0700 > +Subject: [PATCH] efi: Use char16_t on musl > + > +musl does not support configurations with under-sized definitions of > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can > +represent the full range of values are supported. musl does however > +have the C11 uchar.h functions which can operate on char16_t, so you > +could use char16_t and the corresponding c16 conversion functions > +instead of the wc versions > + > +Upstream-Status: Inappropriate [Musl specific] > +Signed-off-by: Khem Raj <raj.khem@gmail.com> > +--- > + src/boot/efi/efi-string.c | 2 +- > + src/boot/efi/efi.h | 2 ++ > + src/boot/efi/meson.build | 1 - > + src/fundamental/string-util-fundamental.h | 4 ++++ > + 4 files changed, 7 insertions(+), 2 deletions(-) > + > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c > +index 4400591255..421b2c262d 100644 > +--- a/src/boot/efi/efi-string.c > ++++ b/src/boot/efi/efi-string.c > +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) { > + case 's': > + if (sp->long_arg) { > + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)"; > +- sp->len = wcsnlen(sp->wstr, sp->len); > ++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len); > + } else { > + sp->str = va_arg(ctx->ap, const char *) ?: "(null)"; > + sp->len = strnlen8(sp->str, sp->len); > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h > +index 5c34668383..459f675ea5 100644 > +--- a/src/boot/efi/efi.h > ++++ b/src/boot/efi/efi.h > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1); > + assert_cc(sizeof(uint16_t) == 2); > + assert_cc(sizeof(uint32_t) == 4); > + assert_cc(sizeof(uint64_t) == 8); > ++#if defined(__linux__) && defined(__GLIBC__) > + assert_cc(sizeof(wchar_t) == 2); > ++#endif > + assert_cc(sizeof(char16_t) == 2); > + assert_cc(sizeof(char32_t) == 4); > + assert_cc(sizeof(size_t) == sizeof(void *)); > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build > +index 1c52629651..4a64838295 100644 > +--- a/src/boot/efi/meson.build > ++++ b/src/boot/efi/meson.build > +@@ -132,7 +132,6 @@ efi_c_args = [ > + '-DSD_BOOT=1', > + '-ffreestanding', > + '-fno-strict-aliasing', > +- '-fshort-wchar', > + '-include', 'efi_config.h', > + ] > + > +diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h > +index 9019542b16..1b46f42995 100644 > +--- a/src/fundamental/string-util-fundamental.h > ++++ b/src/fundamental/string-util-fundamental.h > +@@ -16,7 +16,11 @@ > + # define strncmp strncmp16 > + # define strcasecmp strcasecmp16 > + # define strncasecmp strncasecmp16 > ++#if defined (__linux__) && !defined(__GLIBC__) > ++# define STR_C(str) (u ## str) > ++#else > + # define STR_C(str) (L ## str) > ++#endif > + typedef char16_t sd_char; > + #else > + # define STR_C(str) (str) > +-- > +2.41.0 > + > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb > index 5d69cf83abc..ae86450d2a6 100644 > --- a/meta/recipes-core/systemd/systemd-boot_254.bb > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb > @@ -1,6 +1,8 @@ > require systemd.inc > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" > > +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch " > + > require conf/image-uefi.conf > > DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native" > -- > 2.41.0 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#185718): https://lists.openembedded.org/g/openembedded-core/message/185718 > Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com] > -=-=-=-=-=-=-=-=-=-=-=- >
On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni < alexandre.belloni@bootlin.com> wrote: > Hello, > > I tested this with the meson/systemd series from Ross and it actually > breaks the build: > > > https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio Patch applies only to musl builds did you test a musl + systemd > > <https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio> > > On 09/08/2023 14:02:27-0700, Khem Raj wrote: > > Signed-off-by: Khem Raj <raj.khem@gmail.com> > > --- > > .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++ > > meta/recipes-core/systemd/systemd-boot_254.bb | 2 + > > 2 files changed, 81 insertions(+) > > create mode 100644 > meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > > > > diff --git > a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > > new file mode 100644 > > index 00000000000..1988d50ac90 > > --- /dev/null > > +++ > b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > > @@ -0,0 +1,79 @@ > > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001 > > +From: Khem Raj <raj.khem@gmail.com> > > +Date: Tue, 8 Aug 2023 00:57:12 -0700 > > +Subject: [PATCH] efi: Use char16_t on musl > > + > > +musl does not support configurations with under-sized definitions of > > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can > > +represent the full range of values are supported. musl does however > > +have the C11 uchar.h functions which can operate on char16_t, so you > > +could use char16_t and the corresponding c16 conversion functions > > +instead of the wc versions > > + > > +Upstream-Status: Inappropriate [Musl specific] > > +Signed-off-by: Khem Raj <raj.khem@gmail.com> > > +--- > > + src/boot/efi/efi-string.c | 2 +- > > + src/boot/efi/efi.h | 2 ++ > > + src/boot/efi/meson.build | 1 - > > + src/fundamental/string-util-fundamental.h | 4 ++++ > > + 4 files changed, 7 insertions(+), 2 deletions(-) > > + > > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c > > +index 4400591255..421b2c262d 100644 > > +--- a/src/boot/efi/efi-string.c > > ++++ b/src/boot/efi/efi-string.c > > +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext > *ctx, SpecifierContext *sp) { > > + case 's': > > + if (sp->long_arg) { > > + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: > L"(null)"; > > +- sp->len = wcsnlen(sp->wstr, sp->len); > > ++ sp->len = wcsnlen((char16_t*)sp->wstr, > sp->len); > > + } else { > > + sp->str = va_arg(ctx->ap, const char *) ?: > "(null)"; > > + sp->len = strnlen8(sp->str, sp->len); > > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h > > +index 5c34668383..459f675ea5 100644 > > +--- a/src/boot/efi/efi.h > > ++++ b/src/boot/efi/efi.h > > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1); > > + assert_cc(sizeof(uint16_t) == 2); > > + assert_cc(sizeof(uint32_t) == 4); > > + assert_cc(sizeof(uint64_t) == 8); > > ++#if defined(__linux__) && defined(__GLIBC__) > > + assert_cc(sizeof(wchar_t) == 2); > > ++#endif > > + assert_cc(sizeof(char16_t) == 2); > > + assert_cc(sizeof(char32_t) == 4); > > + assert_cc(sizeof(size_t) == sizeof(void *)); > > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build > > +index 1c52629651..4a64838295 100644 > > +--- a/src/boot/efi/meson.build > > ++++ b/src/boot/efi/meson.build > > +@@ -132,7 +132,6 @@ efi_c_args = [ > > + '-DSD_BOOT=1', > > + '-ffreestanding', > > + '-fno-strict-aliasing', > > +- '-fshort-wchar', > > + '-include', 'efi_config.h', > > + ] > > + > > +diff --git a/src/fundamental/string-util-fundamental.h > b/src/fundamental/string-util-fundamental.h > > +index 9019542b16..1b46f42995 100644 > > +--- a/src/fundamental/string-util-fundamental.h > > ++++ b/src/fundamental/string-util-fundamental.h > > +@@ -16,7 +16,11 @@ > > + # define strncmp strncmp16 > > + # define strcasecmp strcasecmp16 > > + # define strncasecmp strncasecmp16 > > ++#if defined (__linux__) && !defined(__GLIBC__) > > ++# define STR_C(str) (u ## str) > > ++#else > > + # define STR_C(str) (L ## str) > > ++#endif > > + typedef char16_t sd_char; > > + #else > > + # define STR_C(str) (str) > > +-- > > +2.41.0 > > + > > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb > b/meta/recipes-core/systemd/systemd-boot_254.bb > > index 5d69cf83abc..ae86450d2a6 100644 > > --- a/meta/recipes-core/systemd/systemd-boot_254.bb > > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb > > @@ -1,6 +1,8 @@ > > require systemd.inc > > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" > > > > +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch > " > > + > > require conf/image-uefi.conf > > > > DEPENDS = "intltool-native libcap util-linux gperf-native > python3-jinja2-native python3-pyelftools-native" > > -- > > 2.41.0 > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- > > Links: You receive all messages sent to this group. > > View/Reply Online (#185718): > https://lists.openembedded.org/g/openembedded-core/message/185718 > > Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179 > > Group Owner: openembedded-core+owner@lists.openembedded.org > > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ > alexandre.belloni@bootlin.com] > > -=-=-=-=-=-=-=-=-=-=-=- > > > > > -- > Alexandre Belloni, co-owner and COO, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com >
On Thu, Aug 10, 2023 at 7:36 AM Khem Raj <raj.khem@gmail.com> wrote: > > > > On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni <alexandre.belloni@bootlin.com> wrote: >> >> Hello, >> >> I tested this with the meson/systemd series from Ross and it actually >> breaks the build: >> >> https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio > > > Patch applies only to musl builds did you test a musl + systemd ah 32bit, let me try to reproduce. >> >> >> >> On 09/08/2023 14:02:27-0700, Khem Raj wrote: >> > Signed-off-by: Khem Raj <raj.khem@gmail.com> >> > --- >> > .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++ >> > meta/recipes-core/systemd/systemd-boot_254.bb | 2 + >> > 2 files changed, 81 insertions(+) >> > create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch >> > >> > diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch >> > new file mode 100644 >> > index 00000000000..1988d50ac90 >> > --- /dev/null >> > +++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch >> > @@ -0,0 +1,79 @@ >> > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001 >> > +From: Khem Raj <raj.khem@gmail.com> >> > +Date: Tue, 8 Aug 2023 00:57:12 -0700 >> > +Subject: [PATCH] efi: Use char16_t on musl >> > + >> > +musl does not support configurations with under-sized definitions of >> > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can >> > +represent the full range of values are supported. musl does however >> > +have the C11 uchar.h functions which can operate on char16_t, so you >> > +could use char16_t and the corresponding c16 conversion functions >> > +instead of the wc versions >> > + >> > +Upstream-Status: Inappropriate [Musl specific] >> > +Signed-off-by: Khem Raj <raj.khem@gmail.com> >> > +--- >> > + src/boot/efi/efi-string.c | 2 +- >> > + src/boot/efi/efi.h | 2 ++ >> > + src/boot/efi/meson.build | 1 - >> > + src/fundamental/string-util-fundamental.h | 4 ++++ >> > + 4 files changed, 7 insertions(+), 2 deletions(-) >> > + >> > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c >> > +index 4400591255..421b2c262d 100644 >> > +--- a/src/boot/efi/efi-string.c >> > ++++ b/src/boot/efi/efi-string.c >> > +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) { >> > + case 's': >> > + if (sp->long_arg) { >> > + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)"; >> > +- sp->len = wcsnlen(sp->wstr, sp->len); >> > ++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len); >> > + } else { >> > + sp->str = va_arg(ctx->ap, const char *) ?: "(null)"; >> > + sp->len = strnlen8(sp->str, sp->len); >> > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h >> > +index 5c34668383..459f675ea5 100644 >> > +--- a/src/boot/efi/efi.h >> > ++++ b/src/boot/efi/efi.h >> > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1); >> > + assert_cc(sizeof(uint16_t) == 2); >> > + assert_cc(sizeof(uint32_t) == 4); >> > + assert_cc(sizeof(uint64_t) == 8); >> > ++#if defined(__linux__) && defined(__GLIBC__) >> > + assert_cc(sizeof(wchar_t) == 2); >> > ++#endif >> > + assert_cc(sizeof(char16_t) == 2); >> > + assert_cc(sizeof(char32_t) == 4); >> > + assert_cc(sizeof(size_t) == sizeof(void *)); >> > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build >> > +index 1c52629651..4a64838295 100644 >> > +--- a/src/boot/efi/meson.build >> > ++++ b/src/boot/efi/meson.build >> > +@@ -132,7 +132,6 @@ efi_c_args = [ >> > + '-DSD_BOOT=1', >> > + '-ffreestanding', >> > + '-fno-strict-aliasing', >> > +- '-fshort-wchar', >> > + '-include', 'efi_config.h', >> > + ] >> > + >> > +diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h >> > +index 9019542b16..1b46f42995 100644 >> > +--- a/src/fundamental/string-util-fundamental.h >> > ++++ b/src/fundamental/string-util-fundamental.h >> > +@@ -16,7 +16,11 @@ >> > + # define strncmp strncmp16 >> > + # define strcasecmp strcasecmp16 >> > + # define strncasecmp strncasecmp16 >> > ++#if defined (__linux__) && !defined(__GLIBC__) >> > ++# define STR_C(str) (u ## str) >> > ++#else >> > + # define STR_C(str) (L ## str) >> > ++#endif >> > + typedef char16_t sd_char; >> > + #else >> > + # define STR_C(str) (str) >> > +-- >> > +2.41.0 >> > + >> > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb >> > index 5d69cf83abc..ae86450d2a6 100644 >> > --- a/meta/recipes-core/systemd/systemd-boot_254.bb >> > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb >> > @@ -1,6 +1,8 @@ >> > require systemd.inc >> > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" >> > >> > +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch " >> > + >> > require conf/image-uefi.conf >> > >> > DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native" >> > -- >> > 2.41.0 >> > >> >> > >> > -=-=-=-=-=-=-=-=-=-=-=- >> > Links: You receive all messages sent to this group. >> > View/Reply Online (#185718): https://lists.openembedded.org/g/openembedded-core/message/185718 >> > Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179 >> > Group Owner: openembedded-core+owner@lists.openembedded.org >> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com] >> > -=-=-=-=-=-=-=-=-=-=-=- >> > >> >> >> -- >> Alexandre Belloni, co-owner and COO, Bootlin >> Embedded Linux and Kernel engineering >> https://bootlin.com
On 10/08/2023 07:45:16-0700, Khem Raj wrote: > On Thu, Aug 10, 2023 at 7:36 AM Khem Raj <raj.khem@gmail.com> wrote: > > > > > > > > On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni <alexandre.belloni@bootlin.com> wrote: > >> > >> Hello, > >> > >> I tested this with the meson/systemd series from Ross and it actually > >> breaks the build: > >> > >> https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio > > > > > > Patch applies only to musl builds did you test a musl + systemd > > ah 32bit, let me try to reproduce. It also happened on qemux86-64: https://autobuilder.yoctoproject.org/typhoon/#/builders/45/builds/7604/steps/11/logs/stdio > > >> > >> > >> > >> On 09/08/2023 14:02:27-0700, Khem Raj wrote: > >> > Signed-off-by: Khem Raj <raj.khem@gmail.com> > >> > --- > >> > .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++ > >> > meta/recipes-core/systemd/systemd-boot_254.bb | 2 + > >> > 2 files changed, 81 insertions(+) > >> > create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > >> > > >> > diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > >> > new file mode 100644 > >> > index 00000000000..1988d50ac90 > >> > --- /dev/null > >> > +++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > >> > @@ -0,0 +1,79 @@ > >> > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001 > >> > +From: Khem Raj <raj.khem@gmail.com> > >> > +Date: Tue, 8 Aug 2023 00:57:12 -0700 > >> > +Subject: [PATCH] efi: Use char16_t on musl > >> > + > >> > +musl does not support configurations with under-sized definitions of > >> > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can > >> > +represent the full range of values are supported. musl does however > >> > +have the C11 uchar.h functions which can operate on char16_t, so you > >> > +could use char16_t and the corresponding c16 conversion functions > >> > +instead of the wc versions > >> > + > >> > +Upstream-Status: Inappropriate [Musl specific] > >> > +Signed-off-by: Khem Raj <raj.khem@gmail.com> > >> > +--- > >> > + src/boot/efi/efi-string.c | 2 +- > >> > + src/boot/efi/efi.h | 2 ++ > >> > + src/boot/efi/meson.build | 1 - > >> > + src/fundamental/string-util-fundamental.h | 4 ++++ > >> > + 4 files changed, 7 insertions(+), 2 deletions(-) > >> > + > >> > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c > >> > +index 4400591255..421b2c262d 100644 > >> > +--- a/src/boot/efi/efi-string.c > >> > ++++ b/src/boot/efi/efi-string.c > >> > +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) { > >> > + case 's': > >> > + if (sp->long_arg) { > >> > + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)"; > >> > +- sp->len = wcsnlen(sp->wstr, sp->len); > >> > ++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len); > >> > + } else { > >> > + sp->str = va_arg(ctx->ap, const char *) ?: "(null)"; > >> > + sp->len = strnlen8(sp->str, sp->len); > >> > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h > >> > +index 5c34668383..459f675ea5 100644 > >> > +--- a/src/boot/efi/efi.h > >> > ++++ b/src/boot/efi/efi.h > >> > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1); > >> > + assert_cc(sizeof(uint16_t) == 2); > >> > + assert_cc(sizeof(uint32_t) == 4); > >> > + assert_cc(sizeof(uint64_t) == 8); > >> > ++#if defined(__linux__) && defined(__GLIBC__) > >> > + assert_cc(sizeof(wchar_t) == 2); > >> > ++#endif > >> > + assert_cc(sizeof(char16_t) == 2); > >> > + assert_cc(sizeof(char32_t) == 4); > >> > + assert_cc(sizeof(size_t) == sizeof(void *)); > >> > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build > >> > +index 1c52629651..4a64838295 100644 > >> > +--- a/src/boot/efi/meson.build > >> > ++++ b/src/boot/efi/meson.build > >> > +@@ -132,7 +132,6 @@ efi_c_args = [ > >> > + '-DSD_BOOT=1', > >> > + '-ffreestanding', > >> > + '-fno-strict-aliasing', > >> > +- '-fshort-wchar', > >> > + '-include', 'efi_config.h', > >> > + ] > >> > + > >> > +diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h > >> > +index 9019542b16..1b46f42995 100644 > >> > +--- a/src/fundamental/string-util-fundamental.h > >> > ++++ b/src/fundamental/string-util-fundamental.h > >> > +@@ -16,7 +16,11 @@ > >> > + # define strncmp strncmp16 > >> > + # define strcasecmp strcasecmp16 > >> > + # define strncasecmp strncasecmp16 > >> > ++#if defined (__linux__) && !defined(__GLIBC__) > >> > ++# define STR_C(str) (u ## str) > >> > ++#else > >> > + # define STR_C(str) (L ## str) > >> > ++#endif > >> > + typedef char16_t sd_char; > >> > + #else > >> > + # define STR_C(str) (str) > >> > +-- > >> > +2.41.0 > >> > + > >> > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb > >> > index 5d69cf83abc..ae86450d2a6 100644 > >> > --- a/meta/recipes-core/systemd/systemd-boot_254.bb > >> > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb > >> > @@ -1,6 +1,8 @@ > >> > require systemd.inc > >> > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" > >> > > >> > +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch " > >> > + > >> > require conf/image-uefi.conf > >> > > >> > DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native" > >> > -- > >> > 2.41.0 > >> > > >> > >> > > >> > -=-=-=-=-=-=-=-=-=-=-=- > >> > Links: You receive all messages sent to this group. > >> > View/Reply Online (#185718): https://lists.openembedded.org/g/openembedded-core/message/185718 > >> > Mute This Topic: https://lists.openembedded.org/mt/100652047/3617179 > >> > Group Owner: openembedded-core+owner@lists.openembedded.org > >> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com] > >> > -=-=-=-=-=-=-=-=-=-=-=- > >> > > >> > >> > >> -- > >> Alexandre Belloni, co-owner and COO, Bootlin > >> Embedded Linux and Kernel engineering > >> https://bootlin.com
On Thu, Aug 10, 2023 at 8:01 AM Alexandre Belloni < alexandre.belloni@bootlin.com> wrote: > On 10/08/2023 07:45:16-0700, Khem Raj wrote: > > On Thu, Aug 10, 2023 at 7:36 AM Khem Raj <raj.khem@gmail.com> wrote: > > > > > > > > > > > > On Thu, Aug 10, 2023 at 6:05 AM Alexandre Belloni < > alexandre.belloni@bootlin.com> wrote: > > >> > > >> Hello, > > >> > > >> I tested this with the meson/systemd series from Ross and it actually > > >> breaks the build: > > >> > > >> > https://autobuilder.yoctoproject.org/typhoon/#/builders/64/builds/7581/steps/12/logs/stdio > > > > > > > > > Patch applies only to musl builds did you test a musl + systemd > > > > ah 32bit, let me try to reproduce. > > It also happened on qemux86-64: > > > https://autobuilder.yoctoproject.org/typhoon/#/builders/45/builds/7604/steps/11/logs/stdio > Yeah it’s more of clang vs gcc then 32 vs 64bit in my env > > > > >> > > >> > > >> > > >> On 09/08/2023 14:02:27-0700, Khem Raj wrote: > > >> > Signed-off-by: Khem Raj <raj.khem@gmail.com> > > >> > --- > > >> > .../0001-efi-Use-char16_t-on-musl.patch | 79 > +++++++++++++++++++ > > >> > meta/recipes-core/systemd/systemd-boot_254.bb | 2 + > > >> > 2 files changed, 81 insertions(+) > > >> > create mode 100644 > meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > > >> > > > >> > diff --git > a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > > >> > new file mode 100644 > > >> > index 00000000000..1988d50ac90 > > >> > --- /dev/null > > >> > +++ > b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch > > >> > @@ -0,0 +1,79 @@ > > >> > +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 > 2001 > > >> > +From: Khem Raj <raj.khem@gmail.com> > > >> > +Date: Tue, 8 Aug 2023 00:57:12 -0700 > > >> > +Subject: [PATCH] efi: Use char16_t on musl > > >> > + > > >> > +musl does not support configurations with under-sized definitions > of > > >> > +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can > > >> > +represent the full range of values are supported. musl does however > > >> > +have the C11 uchar.h functions which can operate on char16_t, so > you > > >> > +could use char16_t and the corresponding c16 conversion functions > > >> > +instead of the wc versions > > >> > + > > >> > +Upstream-Status: Inappropriate [Musl specific] > > >> > +Signed-off-by: Khem Raj <raj.khem@gmail.com> > > >> > +--- > > >> > + src/boot/efi/efi-string.c | 2 +- > > >> > + src/boot/efi/efi.h | 2 ++ > > >> > + src/boot/efi/meson.build | 1 - > > >> > + src/fundamental/string-util-fundamental.h | 4 ++++ > > >> > + 4 files changed, 7 insertions(+), 2 deletions(-) > > >> > + > > >> > +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c > > >> > +index 4400591255..421b2c262d 100644 > > >> > +--- a/src/boot/efi/efi-string.c > > >> > ++++ b/src/boot/efi/efi-string.c > > >> > +@@ -735,7 +735,7 @@ static bool > handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) { > > >> > + case 's': > > >> > + if (sp->long_arg) { > > >> > + sp->wstr = va_arg(ctx->ap, const wchar_t > *) ?: L"(null)"; > > >> > +- sp->len = wcsnlen(sp->wstr, sp->len); > > >> > ++ sp->len = wcsnlen((char16_t*)sp->wstr, > sp->len); > > >> > + } else { > > >> > + sp->str = va_arg(ctx->ap, const char *) > ?: "(null)"; > > >> > + sp->len = strnlen8(sp->str, sp->len); > > >> > +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h > > >> > +index 5c34668383..459f675ea5 100644 > > >> > +--- a/src/boot/efi/efi.h > > >> > ++++ b/src/boot/efi/efi.h > > >> > +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1); > > >> > + assert_cc(sizeof(uint16_t) == 2); > > >> > + assert_cc(sizeof(uint32_t) == 4); > > >> > + assert_cc(sizeof(uint64_t) == 8); > > >> > ++#if defined(__linux__) && defined(__GLIBC__) > > >> > + assert_cc(sizeof(wchar_t) == 2); > > >> > ++#endif > > >> > + assert_cc(sizeof(char16_t) == 2); > > >> > + assert_cc(sizeof(char32_t) == 4); > > >> > + assert_cc(sizeof(size_t) == sizeof(void *)); > > >> > +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build > > >> > +index 1c52629651..4a64838295 100644 > > >> > +--- a/src/boot/efi/meson.build > > >> > ++++ b/src/boot/efi/meson.build > > >> > +@@ -132,7 +132,6 @@ efi_c_args = [ > > >> > + '-DSD_BOOT=1', > > >> > + '-ffreestanding', > > >> > + '-fno-strict-aliasing', > > >> > +- '-fshort-wchar', > > >> > + '-include', 'efi_config.h', > > >> > + ] > > >> > + > > >> > +diff --git a/src/fundamental/string-util-fundamental.h > b/src/fundamental/string-util-fundamental.h > > >> > +index 9019542b16..1b46f42995 100644 > > >> > +--- a/src/fundamental/string-util-fundamental.h > > >> > ++++ b/src/fundamental/string-util-fundamental.h > > >> > +@@ -16,7 +16,11 @@ > > >> > + # define strncmp strncmp16 > > >> > + # define strcasecmp strcasecmp16 > > >> > + # define strncasecmp strncasecmp16 > > >> > ++#if defined (__linux__) && !defined(__GLIBC__) > > >> > ++# define STR_C(str) (u ## str) > > >> > ++#else > > >> > + # define STR_C(str) (L ## str) > > >> > ++#endif > > >> > + typedef char16_t sd_char; > > >> > + #else > > >> > + # define STR_C(str) (str) > > >> > +-- > > >> > +2.41.0 > > >> > + > > >> > diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb > b/meta/recipes-core/systemd/systemd-boot_254.bb > > >> > index 5d69cf83abc..ae86450d2a6 100644 > > >> > --- a/meta/recipes-core/systemd/systemd-boot_254.bb > > >> > +++ b/meta/recipes-core/systemd/systemd-boot_254.bb > > >> > @@ -1,6 +1,8 @@ > > >> > require systemd.inc > > >> > FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" > > >> > > > >> > +SRC_URI:append:libc-musl = " > file://0001-efi-Use-char16_t-on-musl.patch " > > >> > + > > >> > require conf/image-uefi.conf > > >> > > > >> > DEPENDS = "intltool-native libcap util-linux gperf-native > python3-jinja2-native python3-pyelftools-native" > > >> > -- > > >> > 2.41.0 > > >> > > > >> > > >> > > > >> > -=-=-=-=-=-=-=-=-=-=-=- > > >> > Links: You receive all messages sent to this group. > > >> > View/Reply Online (#185718): > https://lists.openembedded.org/g/openembedded-core/message/185718 > > >> > Mute This Topic: > https://lists.openembedded.org/mt/100652047/3617179 > > >> > Group Owner: openembedded-core+owner@lists.openembedded.org > > >> > Unsubscribe: > https://lists.openembedded.org/g/openembedded-core/unsub [ > alexandre.belloni@bootlin.com] > > >> > -=-=-=-=-=-=-=-=-=-=-=- > > >> > > > >> > > >> > > >> -- > > >> Alexandre Belloni, co-owner and COO, Bootlin > > >> Embedded Linux and Kernel engineering > > >> https://bootlin.com > > -- > Alexandre Belloni, co-owner and COO, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com >
diff --git a/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch new file mode 100644 index 00000000000..1988d50ac90 --- /dev/null +++ b/meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch @@ -0,0 +1,79 @@ +From efe1720de61534c814580fec61fe0025308482b2 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Tue, 8 Aug 2023 00:57:12 -0700 +Subject: [PATCH] efi: Use char16_t on musl + +musl does not support configurations with under-sized definitions of +types like 16-bit wchar_t or 32-bit off_t. Only the sizes that can +represent the full range of values are supported. musl does however +have the C11 uchar.h functions which can operate on char16_t, so you +could use char16_t and the corresponding c16 conversion functions +instead of the wc versions + +Upstream-Status: Inappropriate [Musl specific] +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + src/boot/efi/efi-string.c | 2 +- + src/boot/efi/efi.h | 2 ++ + src/boot/efi/meson.build | 1 - + src/fundamental/string-util-fundamental.h | 4 ++++ + 4 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c +index 4400591255..421b2c262d 100644 +--- a/src/boot/efi/efi-string.c ++++ b/src/boot/efi/efi-string.c +@@ -735,7 +735,7 @@ static bool handle_format_specifier(FormatContext *ctx, SpecifierContext *sp) { + case 's': + if (sp->long_arg) { + sp->wstr = va_arg(ctx->ap, const wchar_t *) ?: L"(null)"; +- sp->len = wcsnlen(sp->wstr, sp->len); ++ sp->len = wcsnlen((char16_t*)sp->wstr, sp->len); + } else { + sp->str = va_arg(ctx->ap, const char *) ?: "(null)"; + sp->len = strnlen8(sp->str, sp->len); +diff --git a/src/boot/efi/efi.h b/src/boot/efi/efi.h +index 5c34668383..459f675ea5 100644 +--- a/src/boot/efi/efi.h ++++ b/src/boot/efi/efi.h +@@ -21,7 +21,9 @@ assert_cc(sizeof(uint8_t) == 1); + assert_cc(sizeof(uint16_t) == 2); + assert_cc(sizeof(uint32_t) == 4); + assert_cc(sizeof(uint64_t) == 8); ++#if defined(__linux__) && defined(__GLIBC__) + assert_cc(sizeof(wchar_t) == 2); ++#endif + assert_cc(sizeof(char16_t) == 2); + assert_cc(sizeof(char32_t) == 4); + assert_cc(sizeof(size_t) == sizeof(void *)); +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 1c52629651..4a64838295 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -132,7 +132,6 @@ efi_c_args = [ + '-DSD_BOOT=1', + '-ffreestanding', + '-fno-strict-aliasing', +- '-fshort-wchar', + '-include', 'efi_config.h', + ] + +diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h +index 9019542b16..1b46f42995 100644 +--- a/src/fundamental/string-util-fundamental.h ++++ b/src/fundamental/string-util-fundamental.h +@@ -16,7 +16,11 @@ + # define strncmp strncmp16 + # define strcasecmp strcasecmp16 + # define strncasecmp strncasecmp16 ++#if defined (__linux__) && !defined(__GLIBC__) ++# define STR_C(str) (u ## str) ++#else + # define STR_C(str) (L ## str) ++#endif + typedef char16_t sd_char; + #else + # define STR_C(str) (str) +-- +2.41.0 + diff --git a/meta/recipes-core/systemd/systemd-boot_254.bb b/meta/recipes-core/systemd/systemd-boot_254.bb index 5d69cf83abc..ae86450d2a6 100644 --- a/meta/recipes-core/systemd/systemd-boot_254.bb +++ b/meta/recipes-core/systemd/systemd-boot_254.bb @@ -1,6 +1,8 @@ require systemd.inc FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" +SRC_URI:append:libc-musl = " file://0001-efi-Use-char16_t-on-musl.patch " + require conf/image-uefi.conf DEPENDS = "intltool-native libcap util-linux gperf-native python3-jinja2-native python3-pyelftools-native"
Signed-off-by: Khem Raj <raj.khem@gmail.com> --- .../0001-efi-Use-char16_t-on-musl.patch | 79 +++++++++++++++++++ meta/recipes-core/systemd/systemd-boot_254.bb | 2 + 2 files changed, 81 insertions(+) create mode 100644 meta/recipes-core/systemd/systemd-boot/0001-efi-Use-char16_t-on-musl.patch