mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-04 14:39:54 +00:00
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>
This commit is contained in:
+68
@@ -0,0 +1,68 @@
|
|||||||
|
From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Korsgaard <peter@korsgaard.com>
|
||||||
|
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 <peter@korsgaard.com>
|
||||||
|
---
|
||||||
|
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( \
|
||||||
@@ -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 <raj.khem@gmail.com>
|
||||||
|
--- 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")
|
||||||
@@ -17,14 +17,17 @@ PV = "0.3.0+git${SRCPV}"
|
|||||||
SRC_URI = "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main \
|
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-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch \
|
||||||
file://0001-cmake-Disable-nonnull-compare-warning-on-gcc.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"
|
S = "${WORKDIR}/git"
|
||||||
SYSTEMD_SERVICE:${PN} = "otbr-agent.service"
|
SYSTEMD_SERVICE:${PN} = "otbr-agent.service"
|
||||||
|
|
||||||
inherit pkgconfig cmake systemd
|
inherit pkgconfig cmake systemd
|
||||||
|
# openthread/repo/src/cli/cli.cpp:1786:18: fatal error: variable 'i' set but not used [-Wunused-but-set-variable]
|
||||||
CXXFLAGS:append:libc-musl:toolchain-clang = " -Wno-error=sign-compare"
|
# 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 \
|
EXTRA_OECMAKE = "-DBUILD_TESTING=OFF \
|
||||||
-DOTBR_DBUS=ON \
|
-DOTBR_DBUS=ON \
|
||||||
|
|||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
From c0546e351f6d7ab50eb1de8cef1d0d167760fccc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Korsgaard <peter@korsgaard.com>
|
||||||
|
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 <peter@korsgaard.com>
|
||||||
|
---
|
||||||
|
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( \
|
||||||
@@ -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 <raj.khem@gmail.com>
|
||||||
|
--- 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")
|
||||||
@@ -12,6 +12,8 @@ SRCREV = "7dfde1f12923f03c9680be4d838b94b7a2320324"
|
|||||||
PV = "0.1+git${SRCPV}"
|
PV = "0.1+git${SRCPV}"
|
||||||
|
|
||||||
SRC_URI = "git://github.com/openthread/openthread.git;protocol=https;branch=main \
|
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"
|
S = "${WORKDIR}/git"
|
||||||
|
|||||||
Reference in New Issue
Block a user