summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/llvm-dwp/X86/merge.test6
-rw-r--r--llvm/tools/llvm-dwp/llvm-dwp.cpp10
2 files changed, 11 insertions, 5 deletions
diff --git a/llvm/test/tools/llvm-dwp/X86/merge.test b/llvm/test/tools/llvm-dwp/X86/merge.test
index c9ba6d17742..ea0adcc9521 100644
--- a/llvm/test/tools/llvm-dwp/X86/merge.test
+++ b/llvm/test/tools/llvm-dwp/X86/merge.test
@@ -1,7 +1,5 @@
-RUN: llvm-dwp %p/../Inputs/merge/notypes/c.dwo %p/../Inputs/merge/notypes/ab.dwp -o %t
-RUN: llvm-dwarfdump -v %t | FileCheck --check-prefix=CHECK --check-prefix=NOTYP %s
-
-FIXME: For some reason, piping straight from llvm-dwp to llvm-dwarfdump -v doesn't behave well - looks like dwarfdump is reading/closes before dwp has finished.
+RUN: llvm-dwp %p/../Inputs/merge/notypes/c.dwo %p/../Inputs/merge/notypes/ab.dwp -o - | \
+RUN: llvm-dwarfdump -v - | FileCheck --check-prefix=CHECK --check-prefix=NOTYP %s
DWP from a DWO (c.dwo) and a DWP (ab.dwp, created from a.dwo and b.dwo)
Make sure the entries for A and B are updated correctly when read/processed from ab.dwp
diff --git a/llvm/tools/llvm-dwp/llvm-dwp.cpp b/llvm/tools/llvm-dwp/llvm-dwp.cpp
index 176c470dd02..8a0744cf1e0 100644
--- a/llvm/tools/llvm-dwp/llvm-dwp.cpp
+++ b/llvm/tools/llvm-dwp/llvm-dwp.cpp
@@ -697,13 +697,21 @@ int main(int argc, char **argv) {
// Create the output file.
std::error_code EC;
raw_fd_ostream OutFile(OutputFilename, EC, sys::fs::F_None);
+ Optional<buffer_ostream> BOS;
+ raw_pwrite_stream *OS;
if (EC)
return error(Twine(OutputFilename) + ": " + EC.message(), Context);
+ if (OutFile.supportsSeeking()) {
+ OS = &OutFile;
+ } else {
+ BOS.emplace(OutFile);
+ OS = BOS.getPointer();
+ }
MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags();
std::unique_ptr<MCStreamer> MS(TheTarget->createMCObjectStreamer(
TheTriple, MC, std::unique_ptr<MCAsmBackend>(MAB),
- MAB->createObjectWriter(OutFile), std::unique_ptr<MCCodeEmitter>(MCE),
+ MAB->createObjectWriter(*OS), std::unique_ptr<MCCodeEmitter>(MCE),
*MSTI, MCOptions.MCRelaxAll, MCOptions.MCIncrementalLinkerCompatible,
/*DWARFMustBeAtTheEnd*/ false));
if (!MS)
OpenPOWER on IntegriCloud