Xcode 野牛3.0.4在非法指令中失败:macOS High Sierra 10.13上的4
随着macOS从10.12更新到10.13,/usr/local/bin/bison停止工作 问题:Xcode 野牛3.0.4在非法指令中失败:macOS High Sierra 10.13上的4,xcode,bison,macos-high-sierra,Xcode,Bison,Macos High Sierra,随着macOS从10.12更新到10.13,/usr/local/bin/bison停止工作 问题: $ /usr/local/bin/bison --version Illegal instruction: 4 重建bison的尝试也失败了,lldb报告EXC_BAD_指令 $ lldb src/bison (lldb) target create "src/bison" Current executable set to 'src/bison' (x86_64). (lldb) run P
$ /usr/local/bin/bison --version
Illegal instruction: 4
重建bison的尝试也失败了,lldb报告EXC_BAD_指令
$ lldb src/bison
(lldb) target create "src/bison"
Current executable set to 'src/bison' (x86_64).
(lldb) run
Process 25732 launched: '/Users/xxxx/src/bison/bison-3.0.4/src/bison' (x86_64)
Process 25732 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
frame #0: 0x00007fff68e39a23 libsystem_c.dylib`__vfprintf + 16437
libsystem_c.dylib`__vfprintf:
-> 0x7fff68e39a23 <+16437>: ud2
0x7fff68e39a25 <+16439>: nopl (%rax)
0x7fff68e39a28 <+16442>: retq
Target 0: (bison) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
* frame #0: 0x00007fff68e39a23 libsystem_c.dylib`__vfprintf + 16437
frame #1: 0x00007fff68e5e0a9 libsystem_c.dylib`__v2printf + 473
frame #2: 0x00007fff68e434c7 libsystem_c.dylib`_vsnprintf + 415
frame #3: 0x00007fff68e43524 libsystem_c.dylib`vsnprintf_l + 41
frame #4: 0x00007fff68e344ec libsystem_c.dylib`snprintf + 180
frame #5: 0x00000001000465a8 bison`vasnprintf(resultbuf=<unavailable>, lengthp=<unavailable>, format=<unavailable>, args=<unavailable>) at vasnprintf.c:0 [opt]
frame #6: 0x0000000100042916 bison`rpl_fprintf(fp=0x00007fffa211d240, format=<unavailable>) at fprintf.c:45 [opt]
frame #7: 0x0000000100042532 bison`error(status=0, errnum=0, message="%s: missing operand") at error.c:315 [opt]
frame #8: 0x0000000100008301 bison`getargs(argc=1, argv=0x00007ffeefbff8c0) at getargs.c:0 [opt]
frame #9: 0x000000010000d70a bison`main(argc=1, argv=0x00007ffeefbff8c0) at main.c:81 [opt]
frame #10: 0x00007fff68da2145 libdyld.dylib`start + 1
参考资料:
查找关键字bison和%n
阅读源代码中关于补丁行的注释
如果您知道更可靠的解决方案,请让我们知道。谢谢 该错误于2017年9月16日被报告,根据当天晚些时候野牛维护人员的回复,野牛源代码库随后被更新以修复该问题。但是,没有创建新的源分布;为了使用该修复程序,需要与中的maint
分支同步,该分支包括gnulib的最新版本。(我相信从maint分支构建并不像下载源tarball那么简单,所以这并不完全令人满意。在发布新的bison源代码之前,您指出的修复可能是最简单的选择。)
gnulib修复在bug gnulib消息中进行了描述
正如您的链接中所指出的,该问题会影响许多其他软件包,而不仅仅是bison。这不是什么安慰
$ diff -u lib/vasnprintf.c.original lib/vasnprintf.c
--- lib/vasnprintf.c.original 2015-01-05 01:46:03.000000000 +0900
+++ lib/vasnprintf.c 2017-10-13 16:38:49.000000000 +0900
@@ -4858,7 +4858,7 @@
#endif
*fbp = dp->conversion;
#if USE_SNPRINTF
-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# if !((defined __APPLE__ && __clang_major__ >= 9) || ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
fbp[1] = '%';
fbp[2] = 'n';
fbp[3] = '\0';