我有一个在 IOS6 和 IOS7 上运行的 iPhone&ipad 应用程序,带有 Xcode4.6 和 LLVM GCC 4.2。然而,在我升级到 Apple LLVM 5.0 的 Xcode5 后,我尝试在带有 IOS7.0 的 iPhone5 上运行它,应用程序将在进入主函数之前初始化全局和静态数据时收到 EXC_ARM_DA_ALLIGN 异常。
0x693006: vld1.64 {d8, d9, d10, d11}, [r4, :128]!线程 1 EXC_BAD_ACCESS(code=EXC_ARM_DA_ALIGN, address=0x27dd5824) r4 中的值是 0x27dd5824,这是 32 位对齐,但似乎 vld1.64 需要 64 位对齐,并且 EXC_ARM_DA_ALLIGN 来了。
我的目标部署 IOS 是 6.0,架构标准架构(armv7,armv7s),所以我确信 Xcode 应该为我生成 32 位代码。
为什么我会遇到这个问题,因为我的数据已经是 32 位对齐的。
任何帮助,将不胜感激。
编辑 :
我检查了 gcc 版本的汇编代码,并没有发现 VLD1.64 称为 .
编辑添加崩溃日志:
事件标识符:81A2A2B6-1A4C-450E-88A7-DF7F2F8E7619
CrashReporter 密钥:c66d6f7407948d2a6ba1ecc45d6c9348d11a2ed7
硬件型号:iPhone5,2
进程:XXXXXXXX [224]
路径:/var/mobile/Applications/CBDF28BD-4EFA-46B9-8E94-7BFCE265541B/XXXXXXXXX.app/XXXXXXXX
标识符:com.XXXX.XXXX.XXXX
版本:1.1.7 (1.0)
代码类型:ARM(本机)
父进程:launchd [1]
日期/时间:2013-10-24 17:08:39.263 +0800 操作系统版本:iOS 7.0.2 (11A501) 报告版本:104
异常类型:EXC_BAD_ACCESS (SIGBUS) 异常子类型:EXC_ARM_DA_ALIGN at 0x27d12914 由线程触发:0
线程 0 崩溃:0 myApp 0x00756006 MEMORYxxxDEVICE::MEMORYxxxDEVICE() (xxxx.xxxx.cpp:2146)
1 myApp 0x0073db40全球_I_a (xxxx.xxxx.cpp:3042)
2 dyld 0x2bee459e ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) + 174
3 dyld 0x2bee46ac ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) + 16
4 dyld 0x2bee1d34 ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) + 356
5 dyld 0x2bee1b88 ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) + 36
6 dyld 0x2bed8d38 dyld::initializeMainExecutable() + 164
7 dyld 0x2bedbab4 dyld::_main(macho_header const*, unsigned long, int, char const* , char const *, char const* , unsigned long ) + 1748
8 dyld 0x2bed822a dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) + 346
9 dyld 0x2bed8064 _dyld_start + 60
线程 1:
0 libsystem_kernel.dylib 0x3b9c8838 kevent64 + 24
1 libdispatch.dylib 0x3b9170d0 _dispatch_mgr_invoke + 228
2 libdispatch.dylib 0x3b91163e _dispatch_mgr_thread + 34
线程 0 因 ARM 线程状态(32 位)而崩溃:
r0: 0x27d128f8 r1: 0x00000000 r2: 0x00038600 r3: 0x00002860
r4: 0x27d12914 r5: 0x2befb95c r6: 0x0073db2d r7: 0x27d128b0
r8: 0x00000204 r9: 0x00000001 r10: 0x000002b1 r11: 0x2befd754
ip: 0x3d7f70a8 sp: 0x27d128a4 lr: 0x00000000 pc: 0x00756006
cpsr: 0x40000030