diff mbox series

[OpenWrt-Devel] wolfssl: use -fomit-frame-pointer to fix asm error

Message ID 20200526134522.8486-1-cotequeiroz@gmail.com
State Accepted
Delegated to: Petr Štetiar
Headers show
Series [OpenWrt-Devel] wolfssl: use -fomit-frame-pointer to fix asm error | expand

Commit Message

Eneas U de Queiroz May 26, 2020, 1:45 p.m. UTC
32-bit x86 fail to compile fast-math feature when compiled with frame
pointer, which uses a register used in a couple of inline asm functions.

Previous versions of wolfssl had this by default.  Keeping an extra
register available may increase performance, so it's being restored for
all architectures.

Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>

---
i386 builds currently fail with:
./wolfcrypt/src/asm.c:700:1: error: 'asm' operand has impossible constraints

This is because wolfssl uses all of the available register for [at
least] a couple of its fast-math inline asm functions.  The
frame-pointer uses up one of them causing the above failure.

gcc documentation indicates that -fomit-frame-pointer is used in -O1, so
it should be enabled without the flag, but this compile error indicates
otherwise.  I'm not experienced enough to know why this is happening.

There are other alternatives:
 - use -fomit-frame-pointer only for i386
 - disable asm for i386
 - disable fast-math for i386
 - patch asm.c to loosen the constraint of one of the arguments from r=
   to g= in the affected functions

The last 3 are there for completeness, I'm not really considering them.

Eneas
diff mbox series

Patch

diff --git a/package/libs/wolfssl/Makefile b/package/libs/wolfssl/Makefile
index b186a087e7..159cfbc53f 100644
--- a/package/libs/wolfssl/Makefile
+++ b/package/libs/wolfssl/Makefile
@@ -9,7 +9,7 @@  include $(TOPDIR)/rules.mk
 
 PKG_NAME:=wolfssl
 PKG_VERSION:=4.4.0-stable
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/wolfSSL/wolfssl/archive/v$(PKG_VERSION)
@@ -56,7 +56,7 @@  define Package/libwolfssl/config
 	source "$(SOURCE)/Config.in"
 endef
 
-TARGET_CFLAGS += $(FPIC) -DFP_MAX_BITS=8192
+TARGET_CFLAGS += $(FPIC) -DFP_MAX_BITS=8192 -fomit-frame-pointer
 
 # --enable-stunnel needed for OpenSSL API compatibility bits
 CONFIGURE_ARGS += \