From 704014e5a9106edb90ba21e4671bdfd5010720b1 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Tue, 30 Aug 2022 00:12:13 -0700 Subject: ot-daemon,ot-br-posix: Fix mbedtls module builds Add a backport to fix build of mbedTLS on x86 Signed-off-by: Khem Raj --- ...x-x86-PIC-inline-ASM-compilation-with-GCC.patch | 68 ++++++++++++++++++++++ .../openthread/ot-br-posix/mbedtls.patch | 43 ++++++++++++++ .../openthread/ot-br-posix_git.bb | 7 ++- ...x-x86-PIC-inline-ASM-compilation-with-GCC.patch | 68 ++++++++++++++++++++++ .../openthread/ot-daemon/mbedtls.patch | 43 ++++++++++++++ .../openthread/ot-daemon_git.bb | 2 + 6 files changed, 229 insertions(+), 2 deletions(-) create mode 100644 meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch create mode 100644 meta-networking/recipes-connectivity/openthread/ot-br-posix/mbedtls.patch create mode 100644 meta-networking/recipes-connectivity/openthread/ot-daemon/0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch create mode 100644 meta-networking/recipes-connectivity/openthread/ot-daemon/mbedtls.patch 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 0000000000..8122e725e7 --- /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 @@ +From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Mon, 27 Aug 2018 22:50:57 +0200 +Subject: [PATCH] bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes #1910 + +With ebx added to the MULADDC_STOP clobber list to fix #1550, the inline +assembly fails to build with GCC < 5 in PIC mode with the following error: + +include/mbedtls/bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’ + +This is because older GCC versions treated the x86 ebx register (which is +used for the GOT) as a fixed reserved register when building as PIC. + +This is fixed by an improved register allocator in GCC 5+. From the release +notes: + +Register allocation improvements: Reuse of the PIC hard register, instead of +using a fixed register, was implemented on x86/x86-64 targets. This +improves generated PIC code performance as more hard registers can be used. + +https://www.gnu.org/software/gcc/gcc-5/changes.html + +As a workaround, detect this situation and disable the inline assembly, +similar to the MULADDC_CANNOT_USE_R7 logic. + +Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/c0546e351f6d7ab50eb1de8cef1d0d167760fccc] +Signed-off-by: Peter Korsgaard +--- + library/bn_mul.h | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +--- a/third_party/openthread/repo/third_party/mbedtls/repo/include/mbedtls/bn_mul.h ++++ b/third_party/openthread/repo/third_party/mbedtls/repo/include/mbedtls/bn_mul.h +@@ -55,12 +55,28 @@ + ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) + + /* ++ * GCC < 5.0 treated the x86 ebx (which is used for the GOT) as a ++ * fixed reserved register when building as PIC, leading to errors ++ * like: bn_mul.h:46:13: error: PIC register clobbered by 'ebx' in 'asm' ++ * ++ * This is fixed by an improved register allocator in GCC 5+. From the ++ * release notes: ++ * Register allocation improvements: Reuse of the PIC hard register, ++ * instead of using a fixed register, was implemented on x86/x86-64 ++ * targets. This improves generated PIC code performance as more hard ++ * registers can be used. ++ */ ++#if defined(__GNUC__) && __GNUC__ < 5 && defined(__PIC__) ++#define MULADDC_CANNOT_USE_EBX ++#endif ++ ++/* + * Disable use of the i386 assembly code below if option -O0, to disable all + * compiler optimisations, is passed, detected with __OPTIMIZE__ + * This is done as the number of registers used in the assembly code doesn't + * work with the -O0 option. + */ +-#if defined(__i386__) && defined(__OPTIMIZE__) ++#if defined(__i386__) && defined(__OPTIMIZE__) && !defined(MULADDC_CANNOT_USE_EBX) + + #define MULADDC_INIT \ + 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 0000000000..91b3046484 --- /dev/null +++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix/mbedtls.patch @@ -0,0 +1,43 @@ +mbedtls: Disable documentation warning as error with clang + +There are shortcomings with doxygen info which clang-15+ flags, dont +treat them as errors + +Remove unused variable + +Fixes +library/bignum.c:1395:29: error: variable 't' set but not used [-Werror,-Wunused-but-set-variable] + +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- a/third_party/openthread/repo/third_party/mbedtls/repo/library/bignum.c ++++ b/third_party/openthread/repo/third_party/mbedtls/repo/library/bignum.c +@@ -1544,7 +1544,7 @@ __attribute__ ((noinline)) + #endif + void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mpi_uint b ) + { +- mbedtls_mpi_uint c = 0, t = 0; ++ mbedtls_mpi_uint c = 0; + + #if defined(MULADDC_HUIT) + for( ; i >= 8; i -= 8 ) +@@ -1595,8 +1595,6 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_ + } + #endif /* MULADDC_HUIT */ + +- t++; +- + do { + *d += c; c = ( *d < c ); d++; + } +--- a/third_party/openthread/repo/third_party/mbedtls/repo/CMakeLists.txt ++++ b/third_party/openthread/repo/third_party/mbedtls/repo/CMakeLists.txt +@@ -192,7 +192,7 @@ if(CMAKE_COMPILER_IS_GNU) + endif(CMAKE_COMPILER_IS_GNU) + + if(CMAKE_COMPILER_IS_CLANG) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wno-error=documentation") + set(CMAKE_C_FLAGS_RELEASE "-O2") + set(CMAKE_C_FLAGS_DEBUG "-O0 -g3") + 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 a16b77849e..bbec81c27e 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}" SRC_URI = "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main \ file://0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch \ file://0001-cmake-Disable-nonnull-compare-warning-on-gcc.patch \ + file://0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch \ + file://mbedtls.patch \ " S = "${WORKDIR}/git" SYSTEMD_SERVICE:${PN} = "otbr-agent.service" inherit pkgconfig cmake systemd - -CXXFLAGS:append:libc-musl:toolchain-clang = " -Wno-error=sign-compare" +# openthread/repo/src/cli/cli.cpp:1786:18: fatal error: variable 'i' set but not used [-Wunused-but-set-variable] +# for (uint8_t i = 0;; i++) +CXXFLAGS:append:libc-musl:toolchain-clang = " -Wno-error=sign-compare -Wno-error=unused-but-set-variable" EXTRA_OECMAKE = "-DBUILD_TESTING=OFF \ -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 0000000000..c9edb0098b --- /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 @@ +From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Mon, 27 Aug 2018 22:50:57 +0200 +Subject: [PATCH] bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes #1910 + +With ebx added to the MULADDC_STOP clobber list to fix #1550, the inline +assembly fails to build with GCC < 5 in PIC mode with the following error: + +include/mbedtls/bn_mul.h:46:13: error: PIC register clobbered by ‘ebx’ in ‘asm’ + +This is because older GCC versions treated the x86 ebx register (which is +used for the GOT) as a fixed reserved register when building as PIC. + +This is fixed by an improved register allocator in GCC 5+. From the release +notes: + +Register allocation improvements: Reuse of the PIC hard register, instead of +using a fixed register, was implemented on x86/x86-64 targets. This +improves generated PIC code performance as more hard registers can be used. + +https://www.gnu.org/software/gcc/gcc-5/changes.html + +As a workaround, detect this situation and disable the inline assembly, +similar to the MULADDC_CANNOT_USE_R7 logic. + +Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/c0546e351f6d7ab50eb1de8cef1d0d167760fccc] +Signed-off-by: Peter Korsgaard +--- + library/bn_mul.h | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +--- a/third_party/mbedtls/repo/include/mbedtls/bn_mul.h ++++ b/third_party/mbedtls/repo/include/mbedtls/bn_mul.h +@@ -55,12 +55,28 @@ + ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) + + /* ++ * GCC < 5.0 treated the x86 ebx (which is used for the GOT) as a ++ * fixed reserved register when building as PIC, leading to errors ++ * like: bn_mul.h:46:13: error: PIC register clobbered by 'ebx' in 'asm' ++ * ++ * This is fixed by an improved register allocator in GCC 5+. From the ++ * release notes: ++ * Register allocation improvements: Reuse of the PIC hard register, ++ * instead of using a fixed register, was implemented on x86/x86-64 ++ * targets. This improves generated PIC code performance as more hard ++ * registers can be used. ++ */ ++#if defined(__GNUC__) && __GNUC__ < 5 && defined(__PIC__) ++#define MULADDC_CANNOT_USE_EBX ++#endif ++ ++/* + * Disable use of the i386 assembly code below if option -O0, to disable all + * compiler optimisations, is passed, detected with __OPTIMIZE__ + * This is done as the number of registers used in the assembly code doesn't + * work with the -O0 option. + */ +-#if defined(__i386__) && defined(__OPTIMIZE__) ++#if defined(__i386__) && defined(__OPTIMIZE__) && !defined(MULADDC_CANNOT_USE_EBX) + + #define MULADDC_INIT \ + 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 0000000000..be26a20dad --- /dev/null +++ b/meta-networking/recipes-connectivity/openthread/ot-daemon/mbedtls.patch @@ -0,0 +1,43 @@ +mbedtls: Disable documentation warning as error with clang + +There are shortcomings with doxygen info which clang-15+ flags, dont +treat them as errors + +Remove unused variable + +Fixes +library/bignum.c:1395:29: error: variable 't' set but not used [-Werror,-Wunused-but-set-variable] + +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- a/third_party/mbedtls/repo/library/bignum.c ++++ b/third_party/mbedtls/repo/library/bignum.c +@@ -1544,7 +1544,7 @@ __attribute__ ((noinline)) + #endif + void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mpi_uint b ) + { +- mbedtls_mpi_uint c = 0, t = 0; ++ mbedtls_mpi_uint c = 0; + + #if defined(MULADDC_HUIT) + for( ; i >= 8; i -= 8 ) +@@ -1595,8 +1595,6 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_ + } + #endif /* MULADDC_HUIT */ + +- t++; +- + do { + *d += c; c = ( *d < c ); d++; + } +--- a/third_party/mbedtls/repo/CMakeLists.txt ++++ b/third_party/mbedtls/repo/CMakeLists.txt +@@ -192,7 +192,7 @@ if(CMAKE_COMPILER_IS_GNU) + endif(CMAKE_COMPILER_IS_GNU) + + if(CMAKE_COMPILER_IS_CLANG) +- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla") ++ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wno-error=documentation") + set(CMAKE_C_FLAGS_RELEASE "-O2") + set(CMAKE_C_FLAGS_DEBUG "-O0 -g3") + 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 f3f4c70fa2..18703d6c4d 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" PV = "0.1+git${SRCPV}" SRC_URI = "git://github.com/openthread/openthread.git;protocol=https;branch=main \ + file://0001-bn_mul.h-fix-x86-PIC-inline-ASM-compilation-with-GCC.patch \ + file://mbedtls.patch \ " S = "${WORKDIR}/git" -- cgit v1.2.3-54-g00ecf