diff options
author | Khem Raj <raj.khem@gmail.com> | 2022-08-30 00:12:13 -0700 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2022-08-31 10:06:32 -0700 |
commit | 704014e5a9106edb90ba21e4671bdfd5010720b1 (patch) | |
tree | 9286c5d7be1415f42a29eb3371fcd61f00d87de0 /meta-networking/recipes-connectivity/openthread | |
parent | 97045ab0132e7f0c1e4f262945552d028b0af52a (diff) | |
download | meta-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>
Diffstat (limited to 'meta-networking/recipes-connectivity/openthread')
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 @@ | |||
1 | From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001 | ||
2 | From: Peter Korsgaard <peter@korsgaard.com> | ||
3 | Date: Mon, 27 Aug 2018 22:50:57 +0200 | ||
4 | Subject: [PATCH] bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5 | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=UTF-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | Fixes #1910 | ||
10 | |||
11 | With ebx added to the MULADDC_STOP clobber list to fix #1550, the inline | ||
12 | assembly fails to build with GCC < 5 in PIC mode with the following error: | ||
13 | |||
14 | include/mbedtls/bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’ | ||
15 | |||
16 | This is because older GCC versions treated the x86 ebx register (which is | ||
17 | used for the GOT) as a fixed reserved register when building as PIC. | ||
18 | |||
19 | This is fixed by an improved register allocator in GCC 5+. From the release | ||
20 | notes: | ||
21 | |||
22 | Register allocation improvements: Reuse of the PIC hard register, instead of | ||
23 | using a fixed register, was implemented on x86/x86-64 targets. This | ||
24 | improves generated PIC code performance as more hard registers can be used. | ||
25 | |||
26 | https://www.gnu.org/software/gcc/gcc-5/changes.html | ||
27 | |||
28 | As a workaround, detect this situation and disable the inline assembly, | ||
29 | similar to the MULADDC_CANNOT_USE_R7 logic. | ||
30 | |||
31 | Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/c0546e351f6d7ab50eb1de8cef1d0d167760fccc] | ||
32 | Signed-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 @@ | |||
1 | mbedtls: Disable documentation warning as error with clang | ||
2 | |||
3 | There are shortcomings with doxygen info which clang-15+ flags, dont | ||
4 | treat them as errors | ||
5 | |||
6 | Remove unused variable | ||
7 | |||
8 | Fixes | ||
9 | library/bignum.c:1395:29: error: variable 't' set but not used [-Werror,-Wunused-but-set-variable] | ||
10 | |||
11 | Upstream-Status: Pending | ||
12 | Signed-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}" | |||
17 | SRC_URI = "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main \ | 17 | SRC_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 | ||
22 | S = "${WORKDIR}/git" | 24 | S = "${WORKDIR}/git" |
23 | SYSTEMD_SERVICE:${PN} = "otbr-agent.service" | 25 | SYSTEMD_SERVICE:${PN} = "otbr-agent.service" |
24 | 26 | ||
25 | inherit pkgconfig cmake systemd | 27 | inherit 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] | |
27 | CXXFLAGS:append:libc-musl:toolchain-clang = " -Wno-error=sign-compare" | 29 | # for (uint8_t i = 0;; i++) |
30 | CXXFLAGS:append:libc-musl:toolchain-clang = " -Wno-error=sign-compare -Wno-error=unused-but-set-variable" | ||
28 | 31 | ||
29 | EXTRA_OECMAKE = "-DBUILD_TESTING=OFF \ | 32 | EXTRA_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 @@ | |||
1 | From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001 | ||
2 | From: Peter Korsgaard <peter@korsgaard.com> | ||
3 | Date: Mon, 27 Aug 2018 22:50:57 +0200 | ||
4 | Subject: [PATCH] bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5 | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=UTF-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | Fixes #1910 | ||
10 | |||
11 | With ebx added to the MULADDC_STOP clobber list to fix #1550, the inline | ||
12 | assembly fails to build with GCC < 5 in PIC mode with the following error: | ||
13 | |||
14 | include/mbedtls/bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’ | ||
15 | |||
16 | This is because older GCC versions treated the x86 ebx register (which is | ||
17 | used for the GOT) as a fixed reserved register when building as PIC. | ||
18 | |||
19 | This is fixed by an improved register allocator in GCC 5+. From the release | ||
20 | notes: | ||
21 | |||
22 | Register allocation improvements: Reuse of the PIC hard register, instead of | ||
23 | using a fixed register, was implemented on x86/x86-64 targets. This | ||
24 | improves generated PIC code performance as more hard registers can be used. | ||
25 | |||
26 | https://www.gnu.org/software/gcc/gcc-5/changes.html | ||
27 | |||
28 | As a workaround, detect this situation and disable the inline assembly, | ||
29 | similar to the MULADDC_CANNOT_USE_R7 logic. | ||
30 | |||
31 | Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/c0546e351f6d7ab50eb1de8cef1d0d167760fccc] | ||
32 | Signed-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 @@ | |||
1 | mbedtls: Disable documentation warning as error with clang | ||
2 | |||
3 | There are shortcomings with doxygen info which clang-15+ flags, dont | ||
4 | treat them as errors | ||
5 | |||
6 | Remove unused variable | ||
7 | |||
8 | Fixes | ||
9 | library/bignum.c:1395:29: error: variable 't' set but not used [-Werror,-Wunused-but-set-variable] | ||
10 | |||
11 | Upstream-Status: Pending | ||
12 | Signed-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" | |||
12 | PV = "0.1+git${SRCPV}" | 12 | PV = "0.1+git${SRCPV}" |
13 | 13 | ||
14 | SRC_URI = "git://github.com/openthread/openthread.git;protocol=https;branch=main \ | 14 | SRC_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 | ||
17 | S = "${WORKDIR}/git" | 19 | S = "${WORKDIR}/git" |