2016-07-04 4 views
7

Wenn Sie MacPorts GCC unter OS X verwenden und den Clang Integrated Assembler über -Wa,-q aufrufen, erzeugt der Assembler einen Strom von Warnungen für jede Datei. Eine Auswahl der Warnungen wird unten gezeigt (so viele von ihnen, der Stack Overflow Editor würde es mir nicht erlauben, den gesamten Stream einzufügen).Assembler-Warnung deaktivieren ".section __TEXT, __ textcoal_nt, coalesced, pure_instructions"

Ich fand LLVM Commit r250349, Stop generating coal sections. Hier ist der Code verantwortlich, aber es ist mir nicht klar, wie ich die Warnung deaktivieren soll.

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

ich 2 > /dev/null nicht umleiten kann, weil die Konfiguration ein wenig zerbrechlich ist im Moment, und es verwirft andere Warnungen und Fehler.

Wie deaktiviere ich die Clang Assembler Warnung auf Kohle Abschnitte?


Wenn der GCC-Compiler -Wa,-q trifft, verwendet es /opt/local/bin/clang als Assembler statt /opt/local/bin/as. Hier sind die relevanten Versionen.

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

-Wno-deprecated zu CXXFLAGS Hinzufügen der Warnung nicht unterdrücken. Ich habe auch versucht -fno-tree-coalesce-vars ohne Freude (was die Leistung beeinträchtigen kann).

und die folgenden sed nicht auf OS X überein mit sed oder 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] 

Hier sind die relevanten GCC und LLVM Fehlerberichte:

Antwort

8

Derzeit können Sie nicht diese Warnungen deaktivieren. Sie sollten wahrscheinlich einen Fehlerbericht gegen FSF GCC einreichen, damit sie ihren Codegen aktualisieren, damit er den Anforderungen entspricht.

Sie könnten auch einen Fehlerbericht mit llvm.org einreichen, um zu fordern, dass es eine Möglichkeit gibt, diese Warnungen zum Schweigen zu bringen oder die ausgegebene Nummer einzuschränken, um den Benutzer nicht zu überschwemmen.

+1

Nicht die Antwort, die ich hören wollte, aber danke trotzdem. – jww

+1

Danke nochmal Jeremy. Die Fehlerberichte wurden der Frage hinzugefügt. Wenn ich "-g2 -O2" weglasse, verschwindet das Problem. Aber es ist nicht sehr hilfreich, ein unoptimiertes Programm ohne Symbole zu haben. – jww

2

Offenbar gibt es keine Möglichkeit, diese Warnungen zu deaktivieren, aber ich mag Ihre Idee, sie nur aus der Build-Ausgabe zu filtern.

Ich finde sed zu kompliziert für komplizierte (z. B. mehrzeilige) Übereinstimmung/ersetzen Muster. Hier ist ein einfaches Python-Programm, um solche Warngeräusche von stderr zu filtern, ohne stderr vollständig zu verstecken.

#!/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() 

Ein bequemer Weg, um dieses Programm zu verwenden ist durch Substitution bash Prozesses, galt nur für stderr:

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

Oder mit Ihrem Build-Befehl, dies sollte den Trick tun, denke ich:

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

auf diese Weise stdout ist überhaupt nicht umgeleitet, und die meisten stderr ist wörtlich geschrieben, mit Ausnahme der besonders lästigen Warnungen.

Verwandte Themen