2014-02-28 29 views
1

使用LLVM 3.4或更新的i386構建Thunderbird/Firefox會導致安裝階段崩潰;這個問題不會發生在amd64上。這個問題已經在VMware下運行的虛擬機和裸機上顯示出來,但是我也能夠在其他裸機i386系統上運行而沒有問題。我的猜測是這可能是LLVM的代碼生成問題,並且從我在別處聽到的其他地方提到的這個問題開始介於LLVM 3.3和3.4之間,但我不知道這是LLVM問題還是與LLVM中的相關代碼有關的問題Thunderbird/Firefox的安裝程序。確定非法指令錯誤的來源

gmake[1]: Entering directory '/usr/ports/pobj/thunderbird-24.2.0/build-i386/mail/installer' 
OMNIJAR_NAME=omni.ja \ 
/usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/_virtualenv/bin/python /usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/toolkit/mozapps/installer/packager.py -DMOZ_GLUE_IN_PROGRAM -DMOZ_THUNDERBIRD=1 -DOSTYPE=\"OpenBSD5\" -DOSARCH=OpenBSD -DNO_NSPR_10_SUPPORT -DAB_CD=en-US -DMOZ_APP_NAME=thunderbird -DPREF_DIR=defaults/pref -DMOZ_ENABLE_GNOME_COMPONENT=1 -DMOZ_GTK2=1 -DJAREXT= -DMOZ_NATIVE_NSPR=1 -DMOZ_NATIVE_NSS=1 -DMOZ_CHILD_PROCESS_NAME=plugin-container -DDLL_PREFIX=lib -DDLL_SUFFIX=.so.28.0 -DBIN_SUFFIX= -DBINPATH=bin \ 
     --format omni \ 
     --removals /usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mail/installer/removed-files.in \ 
    \ 
    \ 
    \ 
    --optimizejars \ 
    \ 
    package-manifest ../../mozilla/dist ../../mozilla/dist/thunderbird \ 
    --non-resource defaults/messenger/mailViews.dat 
Executing /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/xpcshell -g /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/ -a /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/ -f /usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/toolkit/mozapps/installer/precompile_cache.js -e precompile_startupcache("resource://gre/"); 
Traceback (most recent call last): 
    File "/usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/toolkit/mozapps/installer/packager.py", line 375, in <module> 
main() 
    File "/usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/toolkit/mozapps/installer/packager.py", line 367, in main 
args.source, gre_path, base) 
    File "/usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/toolkit/mozapps/installer/packager.py", line 148, in precompile_cache 
    errors.fatal('Error while running startup cache precompilation') 
    File "/usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/python/mozbuild/mozpack/errors.py", line 101, in fatal 
self._handle(self.FATAL, msg) 
    File "/usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/python/mozbuild/mozpack/errors.py", line 96, in _handle 
raise ErrorMessage(msg) 
mozpack.errors.ErrorMessage: Error: Error while running startup cache precompilation 

我正在尋找一些相關工具的幫助來試圖確定這個非法指令錯誤的來源。

Core was generated by `xpcshell'. 
Program terminated with signal 4, Illegal instruction. 

我來代替你指定運行GDB的核心文件..

# egdb build-i386/mozilla/dist/bin/xpcshell build-i386/mail/installer/xpcshell.core 
Python Exception <type 'exceptions.ImportError'> No module named gdb: 

warning: 
Could not load the Python gdb module from `/usr/local/share/gdb/python'. 
Limited Python support is available from the _gdb module. 
Suggest passing --data-directory=/path/to/gdb/data-directory. 

GNU gdb (GDB) 7.6.1 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i386-unknown-openbsd5.5". 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>... 
Reading symbols from /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/xpcshell...(no debugging symbols found)...done. 
[New process 13685] 
Core was generated by `xpcshell'. 
Program terminated with signal 4, Illegal instruction. 
#0 0x002ead4d in mozilla::BinaryPath::GetFile(char const*, nsIFile**)() from /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/libxul.so.28.0 
(gdb) x/i $pc 
=> 0x2ead4d <_ZN7mozilla10BinaryPath7GetFileEPKcPP7nsIFile+157>:  ud2  
(gdb) quit 
# echo _ZN7mozilla10BinaryPath7GetFileEPKcPP7nsIFile+157 | c++filt 
mozilla::BinaryPath::GetFile(char const*, nsIFile**)+157 

回答

0

尋求與相關工具的一些援助,試圖確定這種非法指令錯誤

你的第一個任務是瞭解什麼你試圖執行的非法指令。

運行xpcshell GDB下,像這樣:

gdb --args /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/xpcshell \ 
    -g /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/ -a \ 
    /usr/ports/pobj/thunderbird-24.2.0/build-i386/mozilla/dist/bin/ -f \ 
    /usr/ports/pobj/thunderbird-24.2.0/comm-esr24/mozilla/toolkit/mozapps/installer/precompile_cache.js -e \ 
    precompile_startupcache("resource://gre/"); 

(gdb) run 
... GDB will stop on SIGILL 
(gdb) x/i $pc 

一旦你知道非法指令是什麼,你需要弄清楚爲什麼鏘生產出來。

一個可能的可能性是ud2指令,當程序檢測到undefined behavior時,Clang發出指令。

+0

謝謝你的迴應。這將幫助我朝着正確的方向前進。 – user3363302