小编Aud*_*day的帖子

MAC OSX Intel LLVM汇编程序错误(导致Vorbis OGG加载程序崩溃)

我在Mac OSX上加载Vorbis Ogg文件时遇到了神秘的错误.第一个文件正确加载,第二个文件在某些​​代码中崩溃,表明文件已损坏,即使我加载相同的文件两次,也会发生相同的情况.

在Vorbis内部进行了长时间的深度调试后,我发现该错误是由系统函数"pow"(双倍功率)引起的,它返回一个(nan)表示完全有效的输入,并且仅在第二次调用时发生(ov_read ),在第一次调用时,传递给"pow"的相同精确值返回有效结果.

8小时后,很多英特尔x87文档读取我发现了问题.长话短说,在vorbis"vorbis_ftoi"内部有一个函数,它使用这个汇编代码:

__asm__("fistl %0": "=m"(i) : "t"(f));
Run Code Online (Sandbox Code Playgroud)

哪个应该在英特尔FPU堆栈上推送和弹出.但是在LLVM上它会生成以下代码:

fld    QWORD PTR [ebp-0x20]
fist   DWORD PTR [ebp-0x14]
Run Code Online (Sandbox Code Playgroud)

它推送堆栈但从不弹出导致FPU堆栈溢出.这显然是LLVM中的一个错误

GCC生成的正确代码如下所示:

fld    QWORD PTR [ebp-0x20]
fist   DWORD PTR [ebp-0xc]
fstp   st(0)        // pops off the stack
Run Code Online (Sandbox Code Playgroud)

我浪费了一天半的时间和我的brian的一些字节学习了一些垃圾(x87指令集和寄存器),所以我会分享它.

奥代

macos assembly intel llvm vorbis

9
推荐指数
1
解决办法
714
查看次数

iPhone + OSX针对同一个项目

我创建了一个包含两个目标的项目,一个用于iPhone,另一个用于Mac OsX.当我第一次构建它们时,它们都构建并运行良好(我首先构建了OsX目标,然后是iPhone目标).但是,如果我构建iPhone目标并切换回OsX目标,那么OsX目标现在认为它使用iPhone SDK而不是它自己的mac OsX SDK,并且不再编译(无法找到OSX SDK头文件) ).

我正确设置了项目和目标的构建设置,并且在切换目标的过程中未更改".pbxproj"文件.但我将问题追溯到".pbxuser"文件,特别是参数"activeSDKPreference =".

基本上当我切换到iPhone目标时,此参数从macosx10.6更改为iphonesimulator4.0,但当我切换回OsX目标时,它仍保留在iphonesimulator4.0上.让它再次工作的唯一方法是关闭项目,手动将该参数更改为macosx10.6,然后重新打开项目.这将解决它,直到我再次切换到iPhone.

这是XCode中的错误吗?任何人有解决方案或解决方案?

iphone macos xcode project

6
推荐指数
1
解决办法
434
查看次数

标签 统计

macos ×2

assembly ×1

intel ×1

iphone ×1

llvm ×1

project ×1

vorbis ×1

xcode ×1