Subject: [Boost-bugs] [Boost C++ Libraries] #12114: boost context does not preserve fpu context on ios arm64 devices
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2016-04-05 15:39:40
#12114: boost context does not preserve fpu context on ios arm64 devices
------------------------------+---------------------
Reporter: ykirpichev@⦠| Owner: olli
Type: Bugs | Status: new
Milestone: To Be Determined | Component: context
Version: Boost 1.60.0 | Severity: Problem
Keywords: |
------------------------------+---------------------
The problem with floating point calculations was observed when trying to
use boost context on arm64 ios devices.
It looks like, in certain conditions floating point arithmetic stops
working properly.
It is hard to provide exact way how to reproduce the issue, but after
investigation it has been found out that __VFP_FP__ is not defined by
clang++ when the following command is executed:
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"
-x assembler-with-cpp -O3 -finline-functions -Wno-inline -Wall -gdwarf-2
-fexceptions -DBUNDLE_VERSION=1.60.0.yandex.4 -DYANDEX_BOOST
-DMOBILE_BUILD -O2 -Wno-unused-variable -Wno-unknown-pragmas -Wno-reorder
-Wno-unused-local-typedefs -stdlib=libc++ -fobjc-arc -fvisibility=hidden
-Qunused-arguments -lc++ -miphoneos-version-min=6.1 -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk
-isystem
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/usr/include
-arch arm64 -fembed-bitcode -O2 -arch arm64 -DBOOST_ALL_NO_LIB=1
-DBOOST_ATOMIC_STATIC_LINK=1 -DBOOST_CHRONO_STATIC_LINK=1
-DBOOST_CONTEXT_SOURCE -DBOOST_DISABLE_ASSERTS
-DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_SYSTEM_STATIC_LINK=1
-DBOOST_THREAD_BUILD_LIB=1 -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_LIB=1
-DNDEBUG -I"." -c -o
"bin.v2/libs/context/build/6a8dcaa993b5623b8882ae19f514636b/asm/jump_arm64_aapcs_macho_gas.o"
"libs/context/src/asm/jump_arm64_aapcs_macho_gas.S"
As a result floating point context is not stored/restored and eventually
leads to some mysterious issues.
The problem can be solved by defining __VFP_FP__ directly, however, better
way to fix it is to remove
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
from jump_arm64_aapcs_macho_gas.S.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/12114> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:20 UTC