diff --git a/llvm/test/tools/llvm-readobj/fix-interleaved-output.test b/llvm/test/tools/llvm-readobj/fix-interleaved-output.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/fix-interleaved-output.test @@ -0,0 +1,25 @@ +# RUN: yaml2obj %s -o %t +# RUN: llvm-readelf --needed-libs --dynamic-table %t | FileCheck %s + +# CHECK: Dynamic section at offset 0x1b8 contains 1 entries: +# CHECK-NEXT: Tag Type Name/Value +# CHECK-NEXT: 0x0000000000000000 (NULL) 0x0 +# CHECK-NEXT: NeededLibraries [ +# CHECK-NEXT: ] + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .dynamic + Type: SHT_DYNAMIC + Entries: + - Tag: DT_NULL + Value: 0 +ProgramHeaders: + - Type: PT_DYNAMIC + Sections: + - Section: .dynamic diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/tools/llvm-readobj/COFFDumper.cpp @@ -1565,7 +1565,7 @@ 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 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -382,13 +382,14 @@ }; template class GNUStyle : public DumpStyle { - formatted_raw_ostream OS; + formatted_raw_ostream &OS; public: TYPEDEF_ELF_TYPES(ELFT) GNUStyle(ScopedPrinter &W, ELFDumper *Dumper) - : DumpStyle(Dumper), OS(W.getOStream()) {} + : DumpStyle(Dumper), + OS(static_cast(W.getOStream())) {} void printFileHeaders(const ELFO *Obj) override; void printGroupSections(const ELFFile *Obj) override; diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp --- a/llvm/tools/llvm-readobj/MachODumper.cpp +++ b/llvm/tools/llvm-readobj/MachODumper.cpp @@ -689,7 +689,7 @@ 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 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -466,6 +466,7 @@ Writer.printString("AddressSize", formatv("{0}bit", 8 * Obj->getBytesInAddress())); Dumper->printLoadName(); + Writer.flush(); } if (opts::FileHeaders) @@ -619,7 +620,7 @@ /// Opens \a File and dumps it. static void dumpInput(StringRef File) { - ScopedPrinter Writer(outs()); + ScopedPrinter Writer(fouts()); // Attempt to open the binary. Expected> BinaryOrErr = createBinary(File);