[Boost-bugs] [Boost C++ Libraries] #12114: boost context does not preserve fpu context on ios arm64 devices

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