summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2022-08-30 00:12:13 -0700
committerKhem Raj <raj.khem@gmail.com>2022-08-31 10:06:32 -0700
commit704014e5a9106edb90ba21e4671bdfd5010720b1 (patch)
tree9286c5d7be1415f42a29eb3371fcd61f00d87de0
parent97045ab0132e7f0c1e4f262945552d028b0af52a (diff)
downloadmeta-openembedded-704014e5a9106edb90ba21e4671bdfd5010720b1.tar.gz
ot-daemon,ot-br-posix: Fix mbedtls module builds
Add a backport to fix build of mbedTLS on x86 Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch68
-rw-r--r--meta-networking/recipes-connectivity/openthread/ot-br-posix/mbedtls.patch43
-rw-r--r--meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb7
-rw-r--r--meta-networking/recipes-connectivity/openthread/ot-daemon/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch68
-rw-r--r--meta-networking/recipes-connectivity/openthread/ot-daemon/mbedtls.patch43
-rw-r--r--meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb2
6 files changed, 229 insertions, 2 deletions
diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch b/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch
new file mode 100644
index 000000000..8122e725e
--- /dev/null
+++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch
@@ -0,0 +1,68 @@
1From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001
2From: Peter Korsgaard <peter@korsgaard.com>
3Date: Mon, 27 Aug 2018 22:50:57 +0200
4Subject: [PATCH] bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9Fixes #1910
10
11With ebx added to the MULADDC_STOP clobber list to fix #1550, the inline
12assembly fails to build with GCC < 5 in PIC mode with the following error:
13
14include/mbedtls/bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’
15
16This is because older GCC versions treated the x86 ebx register (which is
17used for the GOT) as a fixed reserved register when building as PIC.
18
19This is fixed by an improved register allocator in GCC 5+. From the release
20notes:
21
22Register allocation improvements: Reuse of the PIC hard register, instead of
23using a fixed register, was implemented on x86/x86-64 targets. This
24improves generated PIC code performance as more hard registers can be used.
25
26https://www.gnu.org/software/gcc/gcc-5/changes.html
27
28As a workaround, detect this situation and disable the inline assembly,
29similar to the MULADDC_CANNOT_USE_R7 logic.
30
31Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/c0546e351f6d7ab50eb1de8cef1d0d167760fccc]
32Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
33---
34 library/bn_mul.h | 18 +++++++++++++++++-
35 1 file changed, 17 insertions(+), 1 deletion(-)
36
37--- a/third_party/openthread/repo/third_party/mbedtls/repo/include/mbedtls/bn_mul.h
38+++ b/third_party/openthread/repo/third_party/mbedtls/repo/include/mbedtls/bn_mul.h
39@@ -55,12 +55,28 @@
40 ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 )
41
42 /*
43+ * GCC < 5.0 treated the x86 ebx (which is used for the GOT) as a
44+ * fixed reserved register when building as PIC, leading to errors
45+ * like: bn_mul.h:46:13: error: PIC register clobbered by 'ebx' in 'asm'
46+ *
47+ * This is fixed by an improved register allocator in GCC 5+. From the
48+ * release notes:
49+ * Register allocation improvements: Reuse of the PIC hard register,
50+ * instead of using a fixed register, was implemented on x86/x86-64
51+ * targets. This improves generated PIC code performance as more hard
52+ * registers can be used.
53+ */
54+#if defined(__GNUC__) && __GNUC__ < 5 && defined(__PIC__)
55+#define MULADDC_CANNOT_USE_EBX
56+#endif
57+
58+/*
59 * Disable use of the i386 assembly code below if option -O0, to disable all
60 * compiler optimisations, is passed, detected with __OPTIMIZE__
61 * This is done as the number of registers used in the assembly code doesn't
62 * work with the -O0 option.
63 */
64-#if defined(__i386__) && defined(__OPTIMIZE__)
65+#if defined(__i386__) && defined(__OPTIMIZE__) && !defined(MULADDC_CANNOT_USE_EBX)
66
67 #define MULADDC_INIT \
68 asm( \
diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix/mbedtls.patch b/meta-networking/recipes-connectivity/openthread/ot-br-posix/mbedtls.patch
new file mode 100644
index 000000000..91b304648
--- /dev/null
+++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix/mbedtls.patch
@@ -0,0 +1,43 @@
1mbedtls: Disable documentation warning as error with clang
2
3There are shortcomings with doxygen info which clang-15+ flags, dont
4treat them as errors
5
6Remove unused variable
7
8Fixes
9library/bignum.c:1395:29: error: variable 't' set but not used [-Werror,-Wunused-but-set-variable]
10
11Upstream-Status: Pending
12Signed-off-by: Khem Raj <raj.khem@gmail.com>
13--- a/third_party/openthread/repo/third_party/mbedtls/repo/library/bignum.c
14+++ b/third_party/openthread/repo/third_party/mbedtls/repo/library/bignum.c
15@@ -1544,7 +1544,7 @@ __attribute__ ((noinline))
16 #endif
17 void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mpi_uint b )
18 {
19- mbedtls_mpi_uint c = 0, t = 0;
20+ mbedtls_mpi_uint c = 0;
21
22 #if defined(MULADDC_HUIT)
23 for( ; i >= 8; i -= 8 )
24@@ -1595,8 +1595,6 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_
25 }
26 #endif /* MULADDC_HUIT */
27
28- t++;
29-
30 do {
31 *d += c; c = ( *d < c ); d++;
32 }
33--- a/third_party/openthread/repo/third_party/mbedtls/repo/CMakeLists.txt
34+++ b/third_party/openthread/repo/third_party/mbedtls/repo/CMakeLists.txt
35@@ -192,7 +192,7 @@ if(CMAKE_COMPILER_IS_GNU)
36 endif(CMAKE_COMPILER_IS_GNU)
37
38 if(CMAKE_COMPILER_IS_CLANG)
39- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla")
40+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wno-error=documentation")
41 set(CMAKE_C_FLAGS_RELEASE "-O2")
42 set(CMAKE_C_FLAGS_DEBUG "-O0 -g3")
43 set(CMAKE_C_FLAGS_COVERAGE "-O0 -g3 --coverage")
diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb b/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb
index a16b77849..bbec81c27 100644
--- a/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb
+++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb
@@ -17,14 +17,17 @@ PV = "0.3.0+git${SRCPV}"
17SRC_URI = "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main \ 17SRC_URI = "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main \
18 file://0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch \ 18 file://0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch \
19 file://0001-cmake-Disable-nonnull-compare-warning-on-gcc.patch \ 19 file://0001-cmake-Disable-nonnull-compare-warning-on-gcc.patch \
20 file://0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch \
21 file://mbedtls.patch \
20 " 22 "
21 23
22S = "${WORKDIR}/git" 24S = "${WORKDIR}/git"
23SYSTEMD_SERVICE:${PN} = "otbr-agent.service" 25SYSTEMD_SERVICE:${PN} = "otbr-agent.service"
24 26
25inherit pkgconfig cmake systemd 27inherit pkgconfig cmake systemd
26 28# openthread/repo/src/cli/cli.cpp:1786:18: fatal error: variable 'i' set but not used [-Wunused-but-set-variable]
27CXXFLAGS:append:libc-musl:toolchain-clang = " -Wno-error=sign-compare" 29# for (uint8_t i = 0;; i++)
30CXXFLAGS:append:libc-musl:toolchain-clang = " -Wno-error=sign-compare -Wno-error=unused-but-set-variable"
28 31
29EXTRA_OECMAKE = "-DBUILD_TESTING=OFF \ 32EXTRA_OECMAKE = "-DBUILD_TESTING=OFF \
30 -DOTBR_DBUS=ON \ 33 -DOTBR_DBUS=ON \
diff --git a/meta-networking/recipes-connectivity/openthread/ot-daemon/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch b/meta-networking/recipes-connectivity/openthread/ot-daemon/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch
new file mode 100644
index 000000000..c9edb0098
--- /dev/null
+++ b/meta-networking/recipes-connectivity/openthread/ot-daemon/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch
@@ -0,0 +1,68 @@
1From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001
2From: Peter Korsgaard <peter@korsgaard.com>
3Date: Mon, 27 Aug 2018 22:50:57 +0200
4Subject: [PATCH] bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9Fixes #1910
10
11With ebx added to the MULADDC_STOP clobber list to fix #1550, the inline
12assembly fails to build with GCC < 5 in PIC mode with the following error:
13
14include/mbedtls/bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’
15
16This is because older GCC versions treated the x86 ebx register (which is
17used for the GOT) as a fixed reserved register when building as PIC.
18
19This is fixed by an improved register allocator in GCC 5+. From the release
20notes:
21
22Register allocation improvements: Reuse of the PIC hard register, instead of
23using a fixed register, was implemented on x86/x86-64 targets. This
24improves generated PIC code performance as more hard registers can be used.
25
26https://www.gnu.org/software/gcc/gcc-5/changes.html
27
28As a workaround, detect this situation and disable the inline assembly,
29similar to the MULADDC_CANNOT_USE_R7 logic.
30
31Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/c0546e351f6d7ab50eb1de8cef1d0d167760fccc]
32Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
33---
34 library/bn_mul.h | 18 +++++++++++++++++-
35 1 file changed, 17 insertions(+), 1 deletion(-)
36
37--- a/third_party/mbedtls/repo/include/mbedtls/bn_mul.h
38+++ b/third_party/mbedtls/repo/include/mbedtls/bn_mul.h
39@@ -55,12 +55,28 @@
40 ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 )
41
42 /*
43+ * GCC < 5.0 treated the x86 ebx (which is used for the GOT) as a
44+ * fixed reserved register when building as PIC, leading to errors
45+ * like: bn_mul.h:46:13: error: PIC register clobbered by 'ebx' in 'asm'
46+ *
47+ * This is fixed by an improved register allocator in GCC 5+. From the
48+ * release notes:
49+ * Register allocation improvements: Reuse of the PIC hard register,
50+ * instead of using a fixed register, was implemented on x86/x86-64
51+ * targets. This improves generated PIC code performance as more hard
52+ * registers can be used.
53+ */
54+#if defined(__GNUC__) && __GNUC__ < 5 && defined(__PIC__)
55+#define MULADDC_CANNOT_USE_EBX
56+#endif
57+
58+/*
59 * Disable use of the i386 assembly code below if option -O0, to disable all
60 * compiler optimisations, is passed, detected with __OPTIMIZE__
61 * This is done as the number of registers used in the assembly code doesn't
62 * work with the -O0 option.
63 */
64-#if defined(__i386__) && defined(__OPTIMIZE__)
65+#if defined(__i386__) && defined(__OPTIMIZE__) && !defined(MULADDC_CANNOT_USE_EBX)
66
67 #define MULADDC_INIT \
68 asm( \
diff --git a/meta-networking/recipes-connectivity/openthread/ot-daemon/mbedtls.patch b/meta-networking/recipes-connectivity/openthread/ot-daemon/mbedtls.patch
new file mode 100644
index 000000000..be26a20da
--- /dev/null
+++ b/meta-networking/recipes-connectivity/openthread/ot-daemon/mbedtls.patch
@@ -0,0 +1,43 @@
1mbedtls: Disable documentation warning as error with clang
2
3There are shortcomings with doxygen info which clang-15+ flags, dont
4treat them as errors
5
6Remove unused variable
7
8Fixes
9library/bignum.c:1395:29: error: variable 't' set but not used [-Werror,-Wunused-but-set-variable]
10
11Upstream-Status: Pending
12Signed-off-by: Khem Raj <raj.khem@gmail.com>
13--- a/third_party/mbedtls/repo/library/bignum.c
14+++ b/third_party/mbedtls/repo/library/bignum.c
15@@ -1544,7 +1544,7 @@ __attribute__ ((noinline))
16 #endif
17 void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mpi_uint b )
18 {
19- mbedtls_mpi_uint c = 0, t = 0;
20+ mbedtls_mpi_uint c = 0;
21
22 #if defined(MULADDC_HUIT)
23 for( ; i >= 8; i -= 8 )
24@@ -1595,8 +1595,6 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_
25 }
26 #endif /* MULADDC_HUIT */
27
28- t++;
29-
30 do {
31 *d += c; c = ( *d < c ); d++;
32 }
33--- a/third_party/mbedtls/repo/CMakeLists.txt
34+++ b/third_party/mbedtls/repo/CMakeLists.txt
35@@ -192,7 +192,7 @@ if(CMAKE_COMPILER_IS_GNU)
36 endif(CMAKE_COMPILER_IS_GNU)
37
38 if(CMAKE_COMPILER_IS_CLANG)
39- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla")
40+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wno-error=documentation")
41 set(CMAKE_C_FLAGS_RELEASE "-O2")
42 set(CMAKE_C_FLAGS_DEBUG "-O0 -g3")
43 set(CMAKE_C_FLAGS_COVERAGE "-O0 -g3 --coverage")
diff --git a/meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb b/meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb
index f3f4c70fa..18703d6c4 100644
--- a/meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb
+++ b/meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb
@@ -12,6 +12,8 @@ SRCREV = "7dfde1f12923f03c9680be4d838b94b7a2320324"
12PV = "0.1+git${SRCPV}" 12PV = "0.1+git${SRCPV}"
13 13
14SRC_URI = "git://github.com/openthread/openthread.git;protocol=https;branch=main \ 14SRC_URI = "git://github.com/openthread/openthread.git;protocol=https;branch=main \
15 file://0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch \
16 file://mbedtls.patch \
15 " 17 "
16 18
17S = "${WORKDIR}/git" 19S = "${WORKDIR}/git"