From fd3f953c7883b2a5d30cff03c92e34a2b2718953 Mon Sep 17 00:00:00 2001 From: Julien Olivain Date: Wed, 28 Feb 2024 19:14:11 +0100 Subject: [PATCH] boot/syslinux: fix build with gnu-efi >= 3.0.16 Commit fa9893ad8f "package/gnu-efi: bump to version 3.0.17" updated gnu-efi. This update introduced syslinux build failure, as reported in [1]. This commit adds a package patch to fix this issue. For technical details of the issue, see the package patch commit log. Fixes: - https://gitlab.com/buildroot.org/buildroot/-/jobs/6256880937 - https://gitlab.com/buildroot.org/buildroot/-/jobs/6256880949 [1] https://lists.buildroot.org/pipermail/buildroot/2024-February/685971.html Signed-off-by: Julien Olivain Reviewed-by: Romain Naour Signed-off-by: Peter Korsgaard --- ...stddef.h-add-wchar_t-type-definition.patch | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 boot/syslinux/0019-stddef.h-add-wchar_t-type-definition.patch diff --git a/boot/syslinux/0019-stddef.h-add-wchar_t-type-definition.patch b/boot/syslinux/0019-stddef.h-add-wchar_t-type-definition.patch new file mode 100644 index 0000000000..65d9463a6f --- /dev/null +++ b/boot/syslinux/0019-stddef.h-add-wchar_t-type-definition.patch @@ -0,0 +1,59 @@ +From 063dac55c45d0264671c3463e824ab659e5cbb87 Mon Sep 17 00:00:00 2001 +From: Julien Olivain +Date: Tue, 27 Feb 2024 21:09:15 +0100 +Subject: [PATCH] stddef.h: add wchar_t type definition + +Syslinux fail to build with gnu-efi >= 3.0.16 with error: + + In file included from /host/i686-buildroot-linux-gnu/sysroot/usr/include/efi/efi.h:44, + from /build/syslinux-6.03/efi/efi.h:23, + from /build/syslinux-6.03/efi/adv.h:4, + from /build/syslinux-6.03/efi/adv.c:29: + /host/i686-buildroot-linux-gnu/sysroot/usr/include/efi/ia32/efibind.h:90:9: error: unknown type name 'wchar_t' + typedef wchar_t CHAR16; + ^~~~~~~ + +This is because gnu-efi started to use the "wchar_t" type from the +toolchain's header, in commit [1]. Before this commit, +gnu-efi was defining the type as "short". + +Syslinux is including its own minimal stddef.h file, which masks the +one provided by the toolchain. See [2]. This file does not have a type +definition for "wchar_t". + +Finally, the POSIX header is supposed to provide this +"wchar_t" type definition. See [3]. + +This commit fixes the issue by adding the "wchar_t" type definition in +the com32/include/stddef.h header. Since Syslinux has "-fshort-wchar" +in its CFLAGS (see [4]), "wchar_t" is simply defined as "short". This +also follow the previous gnu-efi < 3.0.16 behavior. + +This issue was seen in Buildroot Linux, in [5]. + +[1] https://sourceforge.net/p/gnu-efi/code/ci/189200d0b0f6fff473d302880d9569f45d4d8c4d +[2] https://repo.or.cz/syslinux.git/blob/refs/tags/syslinux-6.03:/com32/include/stddef.h +[3] https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html +[4] https://repo.or.cz/syslinux.git/blob/refs/tags/syslinux-6.03:/mk/efi.mk#l27 +[5] https://lists.buildroot.org/pipermail/buildroot/2024-February/685971.html + +Upstream: Proposed: https://www.syslinux.org/archives/2024-February/026903.html +Signed-off-by: Julien Olivain +--- + com32/include/stddef.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/com32/include/stddef.h b/com32/include/stddef.h +index f52d62f3..437b11f2 100644 +--- a/com32/include/stddef.h ++++ b/com32/include/stddef.h +@@ -29,4 +29,6 @@ + */ + #define container_of(p, c, m) ((c *)((char *)(p) - offsetof(c,m))) + ++typedef short wchar_t; ++ + #endif /* _STDDEF_H */ +-- +2.44.0 +