Index: llvm/trunk/test/tools/llvm-dwp/X86/merge.test =================================================================== --- llvm/trunk/test/tools/llvm-dwp/X86/merge.test +++ llvm/trunk/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 Index: llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp =================================================================== --- llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp +++ llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp @@ -697,13 +697,21 @@ // Create the output file. std::error_code EC; raw_fd_ostream OutFile(OutputFilename, EC, sys::fs::F_None); + Optional 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 MS(TheTarget->createMCObjectStreamer( TheTriple, MC, std::unique_ptr(MAB), - MAB->createObjectWriter(OutFile), std::unique_ptr(MCE), + MAB->createObjectWriter(*OS), std::unique_ptr(MCE), *MSTI, MCOptions.MCRelaxAll, MCOptions.MCIncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ false)); if (!MS)