summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2019-06-12 20:16:22 +0000
committerJordan Rupprecht <rupprecht@google.com>2019-06-12 20:16:22 +0000
commit565f1e2298ce92882c12fbeff5c53a411ead1a03 (patch)
tree47e0754addc2011266396b502edfd105741531a1 /llvm/tools
parent782fff1bf879e37c6d87c40763e33321238420ea (diff)
downloadbcm5719-llvm-565f1e2298ce92882c12fbeff5c53a411ead1a03.tar.gz
bcm5719-llvm-565f1e2298ce92882c12fbeff5c53a411ead1a03.zip
[llvm-readobj] Fix output interleaving issue caused by using multiple streams at the same time.
Summary: Use llvm::fouts() as the default stream for outputing. No new stream should be constructed to output at the same time. https://bugs.llvm.org/show_bug.cgi?id=42140 Reviewers: jhenderson, grimar, MaskRay, phosek, rupprecht Reviewed By: rupprecht Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D63115 Patch by Yuanfang Chen! llvm-svn: 363198
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp2
-rw-r--r--llvm/tools/llvm-readobj/ELFDumper.cpp7
-rw-r--r--llvm/tools/llvm-readobj/MachODumper.cpp2
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.cpp19
4 files changed, 16 insertions, 14 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index 21ceb002857..fbdc87a3494 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -1565,7 +1565,7 @@ void COFFDumper::printNeededLibraries() {
llvm::stable_sort(Libs);
for (const auto &L : Libs) {
- outs() << " " << L << "\n";
+ W.startLine() << L << "\n";
}
}
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 295763f8791..018cf614963 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -382,13 +382,16 @@ private:
};
template <typename ELFT> class GNUStyle : public DumpStyle<ELFT> {
- formatted_raw_ostream OS;
+ formatted_raw_ostream &OS;
public:
TYPEDEF_ELF_TYPES(ELFT)
GNUStyle(ScopedPrinter &W, ELFDumper<ELFT> *Dumper)
- : DumpStyle<ELFT>(Dumper), OS(W.getOStream()) {}
+ : DumpStyle<ELFT>(Dumper),
+ OS(static_cast<formatted_raw_ostream&>(W.getOStream())) {
+ assert (&W.getOStream() == &llvm::fouts());
+ }
void printFileHeaders(const ELFO *Obj) override;
void printGroupSections(const ELFFile<ELFT> *Obj) override;
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp
index 5149f469aa1..32a3866eb2f 100644
--- a/llvm/tools/llvm-readobj/MachODumper.cpp
+++ b/llvm/tools/llvm-readobj/MachODumper.cpp
@@ -689,7 +689,7 @@ void MachODumper::printNeededLibraries() {
llvm::stable_sort(Libs);
for (const auto &L : Libs) {
- outs() << " " << L << "\n";
+ W.startLine() << L << "\n";
}
}
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp
index 7bcdd1ef38c..e44cbae6f85 100644
--- a/llvm/tools/llvm-readobj/llvm-readobj.cpp
+++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp
@@ -615,8 +615,8 @@ static void dumpMachOUniversalBinary(const MachOUniversalBinary *UBinary,
}
/// Dumps \a WinRes, Windows Resource (.res) file;
-static void dumpWindowsResourceFile(WindowsResource *WinRes) {
- ScopedPrinter Printer{outs()};
+static void dumpWindowsResourceFile(WindowsResource *WinRes,
+ ScopedPrinter &Printer) {
WindowsRes::Dumper Dumper(WinRes, Printer);
if (auto Err = Dumper.printData())
reportError(WinRes->getFileName(), std::move(Err));
@@ -624,9 +624,7 @@ static void dumpWindowsResourceFile(WindowsResource *WinRes) {
/// Opens \a File and dumps it.
-static void dumpInput(StringRef File) {
- ScopedPrinter Writer(outs());
-
+static void dumpInput(StringRef File, ScopedPrinter &Writer) {
// Attempt to open the binary.
Expected<OwningBinary<Binary>> BinaryOrErr = createBinary(File);
if (!BinaryOrErr)
@@ -643,7 +641,7 @@ static void dumpInput(StringRef File) {
else if (COFFImportFile *Import = dyn_cast<COFFImportFile>(&Binary))
dumpCOFFImportFile(Import, Writer);
else if (WindowsResource *WinRes = dyn_cast<WindowsResource>(&Binary))
- dumpWindowsResourceFile(WinRes);
+ dumpWindowsResourceFile(WinRes, Writer);
else
reportError(File, readobj_error::unrecognized_file_format);
@@ -733,15 +731,16 @@ int main(int argc, const char *argv[]) {
if (opts::InputFilenames.empty())
opts::InputFilenames.push_back("-");
- llvm::for_each(opts::InputFilenames, dumpInput);
+ ScopedPrinter Writer(fouts());
+ for (const std::string &I : opts::InputFilenames)
+ dumpInput(I, Writer);
if (opts::CodeViewMergedTypes) {
- ScopedPrinter W(outs());
if (opts::CodeViewEnableGHash)
- dumpCodeViewMergedTypes(W, CVTypes.GlobalIDTable.records(),
+ dumpCodeViewMergedTypes(Writer, CVTypes.GlobalIDTable.records(),
CVTypes.GlobalTypeTable.records());
else
- dumpCodeViewMergedTypes(W, CVTypes.IDTable.records(),
+ dumpCodeViewMergedTypes(Writer, CVTypes.IDTable.records(),
CVTypes.TypeTable.records());
}
OpenPOWER on IntegriCloud