MacPorts GCCをOS Xで使用し、-Wa,-q
経由でClang統合アセンブラを登録すると、アセンブラは各ファイルの警告ストリームを生成します。下に警告のサンプルが表示されています(そのため、Stack Overflowエディタでストリーム全体を貼り付けることはできません)。アセンブラ警告を無効にする ".section __TEXT、__ textcoal_nt、coalesced、pure_instructions"
LLVM Commit r250349, Stop generating coal sectionsが見つかりました。責任コードはありますが、その警告を無効にする方法がわかりません。
+ // Issue a warning if the target is not powerpc and Section is a *coal* section.
+ Triple TT = getParser().getContext().getObjectFileInfo()->getTargetTriple();
+ Triple::ArchType ArchTy = TT.getArch();
+
+ if (ArchTy != Triple::ppc && ArchTy != Triple::ppc64) {
+ StringRef NonCoalSection = StringSwitch<StringRef>(Section)
+ .Case("__textcoal_nt", "__text")
+ .Case("__const_coal", "__const")
+ .Case("__datacoal_nt", "__data")
+ .Default(Section);
+
+ if (!Section.equals(NonCoalSection)) {
+ StringRef SectionVal(Loc.getPointer());
+ size_t B = SectionVal.find(',') + 1, E = SectionVal.find(',', B);
+ SMLoc BLoc = SMLoc::getFromPointer(SectionVal.data() + B);
+ SMLoc ELoc = SMLoc::getFromPointer(SectionVal.data() + E);
+ getParser().Warning(Loc, "section \"" + Section + "\" is deprecated",
+ SMRange(BLoc, ELoc));
+ getParser().Note(Loc, "change section name to \"" + NonCoalSection +
+ "\"", SMRange(BLoc, ELoc));
+ }
+ }
+
構成は、現時点では少し脆弱であり、それは他の警告やエラーを廃棄するので、私は2 > /dev/null
をリダイレクトすることができません。
石炭セクションのでClangアセンブラの警告を無効にするにはどうすればよいですか?
GCCコンパイラは-Wa,-q
に遭遇すると、それはアセンブラではなく/opt/local/bin/as
として/opt/local/bin/clang
使用しています。関連するバージョンがあります。
$ /opt/local/bin/g++-mp-6 --version
g++-mp-6 (MacPorts gcc6 6.1.0_0) 6.1.0
Copyright (C) 2016 Free Software Foundation, Inc.
$ /opt/local/bin/clang --version
clang version 3.8.0 (branches/release_38 262722)
Target: x86_64-apple-darwin12.6.0
$ /opt/local/bin/as -version
Apple Inc version cctools-877.8, GNU assembler version 1.38
CXXFLAGS
に-Wno-deprecated
を追加すると、警告を抑制しません。私も喜んで(パフォーマンスを傷つけるかもしれない)-fno-tree-coalesce-vars
を試しました。
そして次sed
はsed
またはgsed
を使用してOS X上で一致していません。ここで
$ CXXFLAGS="-DNDEBUG -g2 -O2" make CXX=/opt/local/bin/g++-mp-6 2>&1 | \
gsed -e '/(__TEXT|__DATA)/,+2d'
/opt/local/bin/g++-mp-6 -DNDEBUG -g2 -O2 -fPIC -march=native -Wa,-q -pipe -c rijndael.cpp
<stdin>:3:11: warning: section "__textcoal_nt" is deprecated
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:3:11: note: change section name to "__text"
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
...
/opt/local/bin/g++-mp-6 -DNDEBUG -g2 -O2 -fPIC -march=native -Wa,-q -DMACPORTS_GCC_COMPILER=1 -c cryptlib.cpp
<stdin>:3:11: warning: section "__textcoal_nt" is deprecated
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:3:11: note: change section name to "__text"
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:2665:11: warning: section "__textcoal_nt" is deprecated
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:2665:11: note: change section name to "__text"
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:3925:11: warning: section "__textcoal_nt" is deprecated
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:3925:11: note: change section name to "__text"
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:3963:11: warning: section "__textcoal_nt" is deprecated
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
<stdin>:3963:11: note: change section name to "__text"
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
^ ~~~~~~~~~~~~~
[Hundred of these ommitted for each source file]
は、関連するGCCやLLVMバグレポートは以下のとおりです。
現在- GCC Issue 71767 - Endless stream of warnings when using GCC with -Wa,-q and Clang Integrated Assembler
- LLVM Issue 28427 - Endless stream of warnings when using GCC with -Wa,-q and Clang Integrated Assembler
答えは私が聞きたかったが、とにかくありがとう。 – jww
ありがとうジェレミー。バグレポートが質問に追加されました。また、 '-g2 -O2'を省略すると、問題はなくなります。しかし、記号なしで最適化されていないプログラムを持つことはあまり役に立ちません。 – jww