2017-10-13 11 views
2

macOSが10.12から10.13に更新されると、/ usr/local/bin/bisonは動作を停止します。bison 3.0.4が不正な命令で失敗しました:4 on macOS High Sierra 10.13

問題:

$ /usr/local/bin/bison --version 
Illegal instruction: 4 

バイソンの再構築の試みも失敗したとlldbはEXC_BAD_INSTRUCTIONを報告します。

$ 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 

回避策: あなたは、そのgccのバージョンのApple LLVMのバージョン9.0.0であるかもしれないXcodeの9を、使用している場合。 bisonのソースファイルの#ifマクロに(defined __APPLE__ && __clang_major__ >= 9)を追加してパッチを適用してください。次に、再構築して再インストールします。

$ 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'; 

参照:キーワードのバイソンと%nの https://github.com/Homebrew/homebrew-core/issues/14418

ルック。

パッチされた行のソースコード内のコメントを読んでください。

もっと信頼できる解決方法が分かっている場合は、お知らせください。ありがとう!

答えて

2

このバグは、9月16日(2017)9月16日にbug-bisonに報告され、その日の後に返されるbisonのメンテナによって、bisonソースリポジトリが問題を修正する直前に更新されました。ただし、新しいソース配布は作成されませんでした。修正プログラムを使用するには、Bison Git repositoryのブランチmaintと同期する必要があります。これにはより新しいバージョンのgnulibが含まれています。 (私は、maintブランチからのビルドはソースtarballをダウンロードするだけでは簡単ではないので、これは完全に満足できるものではないと考えています)。

gnulib修正はbug-gnulibメッセージlinked from the bison bug reportに記述されています。

あなたのリンクに示されているように、この問題はbisonだけでなく、他の多くのソフトウェアパッケージにも影響します。それはあまり慰めではありません。

関連する問題