<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta content="text/html;charset=UTF-8" http-equiv="Content-Type"></head><body ><div style='font-size:10pt;font-family:Verdana,Arial,Helvetica,sans-serif;'><div>Thanks for the heads up, Douglas. I was not aware. I will take a look.<br><br>Any idea why rm is complaining? Looking at other tests, it seems that -f is fine and so are slashes in path names. Could it be the star that is the problem?<br><br>Bob</div><div><br></div><div class="zmail_extra"><div id="1"><div><br></div><div>---- On Wed, 08 Feb 2017 18:18:22 -0800 <b>Yung, Douglas <douglas.yung@sony.com></b> wrote ----<br></div></div><div><br></div><blockquote style="border-left: 1px solid #cccccc; padding-left: 6px; margin:0 0 0 5px"><div><div>Hi Bob, <br></div><div> <br></div><div>I don't know if you are aware, but your change is causing the PS4 Windows bot to fail (<a href="http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/5144" target="_blank">http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/5144</a>) on the test you added. The error given is: <br></div><div> <br></div><div>$ "rm" "-f" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\lld\test\COFF\Output/savetemps.*" <br></div><div># command stderr: <br></div><div>rm: cannot remove `C:\\Buildbot\\Slave\\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\\llvm.obj\\tools\\lld\\test\\COFF\\Output/savetemps.*': Invalid argument <br></div><div> <br></div><div> <br></div><div>error: command failed with exit status: 1 <br></div><div> <br></div><div> <br></div><div>Can you investigate? <br></div><div> <br></div><div>Douglas Yung <br></div><div> <br></div><div>> -----Original Message----- <br></div><div>> From: llvm-commits [mailto:<a href="mailto:llvm-commits-bounces@lists.llvm.org" target="_blank">llvm-commits-bounces@lists.llvm.org</a>] On Behalf Of <br></div><div>> Bob Haarman via llvm-commits <br></div><div>> Sent: Wednesday, February 08, 2017 10:37 <br></div><div>> To: <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a> <br></div><div>> Subject: [lld] r294498 - [COFF] added support for /lldsavetemps <br></div><div>> <br></div><div>> Author: inglorion <br></div><div>> Date: Wed Feb  8 12:36:41 2017 <br></div><div>> New Revision: 294498 <br></div><div>> <br></div><div>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=294498&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=294498&view=rev</a> <br></div><div>> Log: <br></div><div>> [COFF] added support for /lldsavetemps <br></div><div>> <br></div><div>> Summary: This adds an option to save temporary files generated during link- <br></div><div>> time optimization. This can be useful for debugging. <br></div><div>> <br></div><div>> Reviewers: ruiu, pcc <br></div><div>> <br></div><div>> Reviewed By: ruiu, pcc <br></div><div>> <br></div><div>> Subscribers: mehdi_amini <br></div><div>> <br></div><div>> Differential Revision: <a href="https://reviews.llvm.org/D29518" target="_blank">https://reviews.llvm.org/D29518</a> <br></div><div>> <br></div><div>> Added: <br></div><div>>     lld/trunk/test/COFF/savetemps.ll <br></div><div>> Modified: <br></div><div>>     lld/trunk/COFF/Config.h <br></div><div>>     lld/trunk/COFF/Driver.cpp <br></div><div>>     lld/trunk/COFF/LTO.cpp <br></div><div>>     lld/trunk/COFF/Options.td <br></div><div>> <br></div><div>> Modified: lld/trunk/COFF/Config.h <br></div><div>> URL: <a href="http://llvm.org/viewvc/llvm" target="_blank">http://llvm.org/viewvc/llvm</a>- <br></div><div>> project/lld/trunk/COFF/Config.h?rev=294498&r1=294497&r2=294498&view=diff <br></div><div>> ============================================================================== <br></div><div>> --- lld/trunk/COFF/Config.h (original) <br></div><div>> +++ lld/trunk/COFF/Config.h Wed Feb  8 12:36:41 2017 <br></div><div>> @@ -105,6 +105,8 @@ struct Configuration { <br></div><div>>    std::map<std::string, int> DLLOrder; <br></div><div>>    SymbolBody *DelayLoadHelper = nullptr; <br></div><div>> <br></div><div>> +  bool SaveTemps = false; <br></div><div>> + <br></div><div>>    // Used for SafeSEH. <br></div><div>>    Symbol *SEHTable = nullptr; <br></div><div>>    Symbol *SEHCount = nullptr; <br></div><div>> <br></div><div>> Modified: lld/trunk/COFF/Driver.cpp <br></div><div>> URL: <a href="http://llvm.org/viewvc/llvm" target="_blank">http://llvm.org/viewvc/llvm</a>- <br></div><div>> project/lld/trunk/COFF/Driver.cpp?rev=294498&r1=294497&r2=294498&view=diff <br></div><div>> ============================================================================== <br></div><div>> --- lld/trunk/COFF/Driver.cpp (original) <br></div><div>> +++ lld/trunk/COFF/Driver.cpp Wed Feb  8 12:36:41 2017 <br></div><div>> @@ -622,6 +622,10 @@ void LinkerDriver::link(ArrayRef<const c <br></div><div>>      } <br></div><div>>    } <br></div><div>> <br></div><div>> +  // Handle /lldsavetemps <br></div><div>> +  if (Args.hasArg(OPT_lldsavetemps)) <br></div><div>> +    Config->SaveTemps = true; <br></div><div>> + <br></div><div>>    // Handle /failifmismatch <br></div><div>>    for (auto *Arg : Args.filtered(OPT_failifmismatch)) <br></div><div>>      checkFailIfMismatch(Arg->getValue()); <br></div><div>> <br></div><div>> Modified: lld/trunk/COFF/LTO.cpp <br></div><div>> URL: <a href="http://llvm.org/viewvc/llvm" target="_blank">http://llvm.org/viewvc/llvm</a>- <br></div><div>> project/lld/trunk/COFF/LTO.cpp?rev=294498&r1=294497&r2=294498&view=diff <br></div><div>> ============================================================================== <br></div><div>> --- lld/trunk/COFF/LTO.cpp (original) <br></div><div>> +++ lld/trunk/COFF/LTO.cpp Wed Feb  8 12:36:41 2017 <br></div><div>> @@ -54,6 +54,14 @@ static void checkError(Error E) { <br></div><div>>    }); <br></div><div>>  } <br></div><div>> <br></div><div>> +static void saveBuffer(StringRef Buffer, const Twine &Path) { <br></div><div>> +  std::error_code EC; <br></div><div>> +  raw_fd_ostream OS(Path.str(), EC, sys::fs::OpenFlags::F_None); <br></div><div>> +  if (EC) <br></div><div>> +    error("cannot create " + Path + ": " + EC.message()); <br></div><div>> +  OS << Buffer; <br></div><div>> +} <br></div><div>> + <br></div><div>>  static std::unique_ptr<lto::LTO> createLTO() { <br></div><div>>    lto::Config Conf; <br></div><div>>    Conf.Options = InitTargetOptionsFromCodeGenFlags(); <br></div><div>> @@ -61,6 +69,9 @@ static std::unique_ptr<lto::LTO> createL <br></div><div>>    Conf.DisableVerify = true; <br></div><div>>    Conf.DiagHandler = diagnosticHandler; <br></div><div>>    Conf.OptLevel = Config->LTOOptLevel; <br></div><div>> +  if (Config->SaveTemps) <br></div><div>> +    checkError(Conf.addSaveTemps(std::string(Config->OutputFile) + ".", <br></div><div>> +                                 /*UseInputModulePath*/ true)); <br></div><div>>    lto::ThinBackend Backend; <br></div><div>>    if (Config->LTOJobs != -1u) <br></div><div>>      Backend = lto::createInProcessThinBackend(Config->LTOJobs); <br></div><div>> @@ -116,8 +127,16 @@ std::vector<StringRef> BitcodeCompiler:: <br></div><div>>    })); <br></div><div>> <br></div><div>>    std::vector<StringRef> Ret; <br></div><div>> -  for (unsigned I = 0; I != MaxTasks; ++I) <br></div><div>> -    if (!Buff[I].empty()) <br></div><div>> -      Ret.emplace_back(Buff[I].data(), Buff[I].size()); <br></div><div>> +  for (unsigned I = 0; I != MaxTasks; ++I) { <br></div><div>> +    if (Buff[I].empty()) <br></div><div>> +      continue; <br></div><div>> +    if (Config->SaveTemps) { <br></div><div>> +      if (I == 0) <br></div><div>> +        saveBuffer(Buff[I], Config->OutputFile + ".lto.obj"); <br></div><div>> +      else <br></div><div>> +        saveBuffer(Buff[I], Config->OutputFile + Twine(I) + ".lto.obj"); <br></div><div>> +    } <br></div><div>> +    Ret.emplace_back(Buff[I].data(), Buff[I].size());  } <br></div><div>>    return Ret; <br></div><div>>  } <br></div><div>> <br></div><div>> Modified: lld/trunk/COFF/Options.td <br></div><div>> URL: <a href="http://llvm.org/viewvc/llvm" target="_blank">http://llvm.org/viewvc/llvm</a>- <br></div><div>> project/lld/trunk/COFF/Options.td?rev=294498&r1=294497&r2=294498&view=diff <br></div><div>> ============================================================================== <br></div><div>> --- lld/trunk/COFF/Options.td (original) <br></div><div>> +++ lld/trunk/COFF/Options.td Wed Feb  8 12:36:41 2017 <br></div><div>> @@ -28,6 +28,8 @@ def heap    : P<"heap", "Size of the hea <br></div><div>>  def implib  : P<"implib", "Import library name">;  def libpath : P<"libpath", <br></div><div>> "Additional library search path">;  def linkrepro : P<"linkrepro", "Dump <br></div><div>> linker invocation and input files for debugging">; <br></div><div>> +def lldsavetemps : F<"lldsavetemps">, <br></div><div>> +    HelpText<"Save temporary files instead of deleting them">; <br></div><div>>  def machine : P<"machine", "Specify target platform">; <br></div><div>>  def merge   : P<"merge", "Combine sections">; <br></div><div>>  def mllvm   : P<"mllvm", "Options to pass to LLVM">; <br></div><div>> <br></div><div>> Added: lld/trunk/test/COFF/savetemps.ll <br></div><div>> URL: <a href="http://llvm.org/viewvc/llvm" target="_blank">http://llvm.org/viewvc/llvm</a>- <br></div><div>> project/lld/trunk/test/COFF/savetemps.ll?rev=294498&view=auto <br></div><div>> ============================================================================== <br></div><div>> --- lld/trunk/test/COFF/savetemps.ll (added) <br></div><div>> +++ lld/trunk/test/COFF/savetemps.ll Wed Feb  8 12:36:41 2017 <br></div><div>> @@ -0,0 +1,24 @@ <br></div><div>> +; RUN: rm -f %T/savetemps.* <br></div><div>> +; RUN: llvm-as -o %T/savetemps.obj %s <br></div><div>> +; RUN: lld-link /out:%T/savetemps.exe /entry:main /subsystem:console <br></div><div>> +%T/savetemps.obj ; RUN: not llvm-dis -o - <br></div><div>> +%T/savetemps.exe.0.0.preopt.bc ; RUN: not llvm-dis -o - <br></div><div>> +%T/savetemps.exe.0.2.internalize.bc <br></div><div>> +; RUN: not llvm-dis -o - %T/savetemps.exe.0.4.opt.bc ; RUN: not <br></div><div>> +llvm-dis -o - %T/savetemps.exe.0.5.precodegen.bc <br></div><div>> +; RUN: not llvm-objdump -s %T/savetemps.exe.lto.obj ; RUN: lld-link <br></div><div>> +/lldsavetemps /out:%T/savetemps.exe /entry:main /subsystem:console <br></div><div>> +%T/savetemps.obj ; RUN: llvm-dis -o - %T/savetemps.exe.0.0.preopt.bc | <br></div><div>> +FileCheck %s ; RUN: llvm-dis -o - %T/savetemps.exe.0.2.internalize.bc | <br></div><div>> +FileCheck %s ; RUN: llvm-dis -o - %T/savetemps.exe.0.4.opt.bc | <br></div><div>> +FileCheck %s ; RUN: llvm-dis -o - %T/savetemps.exe.0.5.precodegen.bc | <br></div><div>> +FileCheck %s ; RUN: llvm-objdump -s %T/savetemps.exe.lto.obj | <br></div><div>> +FileCheck --check-prefix=CHECK-OBJDUMP %s <br></div><div>> + <br></div><div>> +; CHECK: define i32 @main() <br></div><div>> +; CHECK-OBJDUMP: file format COFF <br></div><div>> + <br></div><div>> +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" <br></div><div>> +target triple = "x86_64-pc-windows-msvc" <br></div><div>> + <br></div><div>> +define i32 @main() { <br></div><div>> +  ret i32 0 <br></div><div>> +} <br></div><div>> <br></div><div>> <br></div><div>> _______________________________________________ <br></div><div>> llvm-commits mailing list <br></div><div>> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a> <br></div><div>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a> <br></div></div></blockquote></div><div><br></div></div></body></html>