2016-07-26 12 views
5

私はclang-3.5を使って幸せにmusl libcのビットコードバージョンを構築しました。そして は良いスタンドアロンの実行可能ファイルを生成するためにその結果を使用しています。clang-3.8とcompiler-rt vs libgcc

clang-3.8での最近の試みはそれほど幸せではありません。 ビットコードclang-3.8私はビットコードを汚染見つける機能の典型的な例は、mulxc3mulsc3、およびmuldc3ある

compiler-rt/lib/builtins 

で定義された関数を使用して生成しているようです。私はlibgcc、またはそれが何であるかの明確なアイデアがあれば、llvmの代替案とリンクすることでこれを解決できます。私はむしろ問題が最初に起こるのを防ぐだろうが。

私はrtlib=compiler-rtなどのようなフラグについては言及しましたが、その件に関する貴重な資料はほとんど見つかりませんでした。

ここにいくつかの簡単な質問があります。

  1. それが放出されるビットコードでcompiler-rt/lib/builtins を使用してからclangを防ぐことは可能ですか?またはそうでない場合

  2. llvmは私が使用できるlibgccのバージョンを生成しますか?実際には私は おそらくそれのビットコード版を構築するだろうが、それはポイントのほかにあります。

これに関するいくつかのガイダンスを聞くのが大好きです。

を追加しました2016年12月8日:だから私は、彼らが望むなら 人々が再現することができ、特定のワークフローに私の問題を説明します、または、より多くの可能性が高い、ちょうど私が愚かであること午前どこ指摘。

ので、チェックアウトすることから始める:あなたは

WLLVM_CONFIGURE_ONLY=1 CC=wllvm ./configure --target=LLVM --build=LLVM 
make 
cd lib 
extract-bc -b libc.a 

(ここでは、私はUbuntuの14.04で打ち鳴らす-3.8を使用しています)します

musllv

とREADME.toの指示をコンパイル従ってください単純な実行可能ファイルのビットコードも必要です。ここでnweb.cを使用します。

clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb 

このワークフローは打ち鳴らす-3.5のためではなく、打ち鳴らす-3のためにスムーズに行く:

wllvm nweb.c -o nweb 
extract-bc nweb 

今、私たちのようなことを行うことができます。@ポール・ブラナンが指摘するように、我々は

clang -static -nostdlib --rtlib=compiler-rt nweb.bc libc.a.bc crt1.o libc.a -o nweb 

を試みることができる

clang -static -nostdlib nweb.bc libc.a.bc crt1.o libc.a -o nweb 
/tmp/libc-f734a3.o: In function `cpowl': 
libc.a.bc:(.text+0xbb9a): undefined reference to `__mulxc3' 
/tmp/libc-f734a3.o: In function `cpowf': 
libc.a.bc:(.text+0x38f7d): undefined reference to `__mulsc3' 
/tmp/libc-f734a3.o: In function `csqrt': 
libc.a.bc:(.text+0x78fc3): undefined reference to `__muldc3' 
/tmp/libc-f734a3.o: In function `cpow': 
libc.a.bc:(.text+0xafafc): undefined reference to `__muldc3' 
clang-3.8: error: linker command failed with exit code 1 (use -v to seeinvocation) 

をしかし、私が得るので、私はおそらく、愚かされています場所です::8我々が得る

clang-3.8: warning: argument unused during compilation: '--rtlib=compiler-rt' 

私がそれをリンクまたはコンパイルフラグとして使用するかどうかは関係ありません。

+0

私は質問に対する答えはわかりませんが、このバグレポートは関連していると思います:https://llvm.org/bugs/show_bug.cgi?id=16404 BTW、リンクは--rtlib = compiler-rtは__muloti4を探している私のリンクの問題を解決しましたが、libgccとリンクしていませんでした。 –

+0

tip @ paul-brannanのおかげで、 'can-o-wormish'に見えます。まだ私はmidasタッチを持っていないようです。私は人々が私の問題を複製し、約束された土地に私を看護することができるようにフォローアップを掲示します。 –

+0

私の質問に答えることはできませんが、関連性があるように見えるので、私はこれをここに追加しています。 [clangでGNUフリーの実行ファイルを作る](https://blogs.gentoo.org/gsoc2016-native-clang/2016/05/31/build-gnu-free-executables-with-clang/) –

答えて

0

OKこれで私はついにこれを進めることに成功しました。私はwllvmwllvm++を使ってcompiler-rtプロジェクトと一緒にllvm-3.8.1を作りました。ビルド製品の

一つはlibclang_rt.builtins-x86_64.a、 であり、このアーカイブから、私はコマンドを使用して、ビットコードモジュール

libclang_rt.builtins-x86_64.bc

を抽出することができました: extract-bc -b libclang_rt.builtins-x86_64.a このビットコードモジュールは、それらの厄介なinstrinsicsの定義がありますが __mulxc3,__mulsc3、および__muldc3のようになります。

ハレルヤ!

関連する問題