Disable the assembler warning ".section __TEXT, __ textcoal_nt, coalesced, pure_instructions"

When using MacPorts GCC on OS X and terminating the Clang Integrated Assembler using -Wa,-q assembler generates a warning stream for each file. Below is a selection of warnings (therefore, many of them, the editor did not allow me to insert the entire stream).

I found LLVM Commit r250349, Stop creating coal mines . Here is the responsible code, but it is not clear to me how to disable the warning.

 + // 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)); + } + } + 

I cannot redirect 2 > /dev/null because the configuration is currently a bit fragile and it throws other warnings and errors.

How to disable Clang assembler warning on coal sites?


When the GCC compiler encounters -Wa,-q , it uses /opt/local/bin/clang as assembler, not /opt/local/bin/as . Here are the relevant versions.

 $ /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 

Adding -Wno-deprecated to CXXFLAGS does not suppress the warning. I also tried -fno-tree-coalesce-vars without joy (which can hurt the work).

And the following sed not suitable for OS X using sed or gsed :

 $ 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] 

Here are the relevant GCC and LLVM error reports:

+7
gcc warnings clang macports macos
source share
2 answers

You cannot disable these warnings at this time. You should probably file a bug report regarding the FSF GCC so that they update their code to be more compatible.

You might also want to write a bug report using llvm.org to request that you can turn off these warnings or limit the number of alerts so as not to sink the user.

+8
source share

There seems to be no way to disable these warnings, but I like your idea of ​​just filtering them out of the build output.

I find it too difficult for sed to ponder over complex (e.g. multi-line) match / replace patterns. Here's a simple Python program to filter such warning noise from stderr without completely hiding stderr.

 #!/usr/bin/python # # filter-noisy-assembler-warnings.py # Author: Stuart Berg import sys for line in sys.stdin: # If line is a 'noisy' warning, don't print it or the following two lines. if ('warning: section' in line and 'is deprecated' in line or 'note: change section name to' in line): next(sys.stdin) next(sys.stdin) else: sys.stderr.write(line) sys.stderr.flush() 

A convenient way to use this program through bash is to replace a process that applies only to stderr:

 $ make 2> >(python filter-noisy-assembler-warnings.py) 

Or with your build team, this should do the trick, I think:

 $ CXXFLAGS="-DNDEBUG -g2 -O2" make CXX=/opt/local/bin/g++-mp-6 2> >(python filter-noisy-assembler-warnings.py) 

Thus, stdout not redirected at all, and most stderr written verbatim, with the exception of those specific annoying warnings.

+2
source share

All Articles