<div dir="ltr">Should the remove_dots happen when we assign to PDBAltPath in Driver.cpp? That would save needing to have another copy of the path in CVDebugRecordChunk.<div><br></div><div>Peter<br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 11, 2018 at 5:44 PM, Zachary Turner via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: zturner<br>
Date: Wed Jul 11 17:44:15 2018<br>
New Revision: 336873<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=336873&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=336873&view=rev</a><br>
Log:<br>
[coff] Remove dots in path pointing to PDB file.<br>
<br>
Some Microsoft tools (e.g. new versions of WPA) fail when the<br>
COFF Debug Directory contains a path to the PDB that contains<br>
dots, such as D:\foo\./bar.pdb.  Remove dots before writing this<br>
path.<br>
<br>
This fixes pr38126.<br>
<br>
Added:<br>
    lld/trunk/test/COFF/pdb-exe-<wbr>path-dots.test<br>
Modified:<br>
    lld/trunk/COFF/Writer.cpp<br>
<br>
Modified: lld/trunk/COFF/Writer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=336873&r1=336872&r2=336873&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/COFF/Writer.<wbr>cpp?rev=336873&r1=336872&r2=<wbr>336873&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/COFF/Writer.cpp (original)<br>
+++ lld/trunk/COFF/Writer.cpp Wed Jul 11 17:44:15 2018<br>
@@ -122,7 +122,7 @@ private:<br>
 class CVDebugRecordChunk : public Chunk {<br>
 public:<br>
   size_t getSize() const override {<br>
-    return sizeof(codeview::DebugInfo) + Config->PDBAltPath.size() + 1;<br>
+    return sizeof(codeview::DebugInfo) + Path.size() + 1;<br>
   }<br>
<br>
   void writeTo(uint8_t *B) const override {<br>
@@ -132,11 +132,12 @@ public:<br>
<br>
     // variable sized field (PDB Path)<br>
     char *P = reinterpret_cast<char *>(B + OutputSectionOff + sizeof(*BuildId));<br>
-    if (!Config->PDBAltPath.empty())<br>
-      memcpy(P, Config->PDBAltPath.data(), Config->PDBAltPath.size());<br>
-    P[Config->PDBAltPath.size()] = '\0';<br>
+    if (!Path.empty())<br>
+      memcpy(P, Path.data(), Path.size());<br>
+    P[Path.size()] = '\0';<br>
   }<br>
<br>
+  SmallString<128> Path;<br>
   mutable codeview::DebugInfo *BuildId = nullptr;<br>
 };<br>
<br>
@@ -509,6 +510,8 @@ void Writer::createMiscChunks() {<br>
     // if we're ultimately not going to write CodeView data to the PDB.<br>
     auto *CVChunk = make<CVDebugRecordChunk>();<br>
     BuildId = CVChunk;<br>
+    CVChunk->Path = Config->PDBAltPath;<br>
+    llvm::sys::path::remove_dots(<wbr>CVChunk->Path);<br>
     DebugRecords.push_back(<wbr>CVChunk);<br>
<br>
     RdataSec->addChunk(<wbr>DebugDirectory);<br>
<br>
Added: lld/trunk/test/COFF/pdb-exe-<wbr>path-dots.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/pdb-exe-path-dots.test?rev=336873&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/test/COFF/<wbr>pdb-exe-path-dots.test?rev=<wbr>336873&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/test/COFF/pdb-exe-<wbr>path-dots.test (added)<br>
+++ lld/trunk/test/COFF/pdb-exe-<wbr>path-dots.test Wed Jul 11 17:44:15 2018<br>
@@ -0,0 +1,10 @@<br>
+RUN: yaml2obj < %p/Inputs/pdb1.yaml > %t1.obj<br>
+RUN: yaml2obj < %p/Inputs/pdb2.yaml > %t2.obj<br>
+RUN: rm -rf %t<br>
+RUN: mkdir %t<br>
+RUN: mkdir %t/foo<br>
+RUN: lld-link /debug /pdb:%t/foo/./out.pdb /out:%t/out.exe /entry:main /nodefaultlib \<br>
+RUN:   %t1.obj %t2.obj<br>
+RUN: llvm-readobj -coff-debug-directory %t/out.exe | FileCheck %s<br>
+<br>
+CHECK: PDBFileName: {{.*}}tmp{{/|\\}}foo{{/|\\}}<wbr>out.pdb<br>
\ No newline at end of file<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div></div></div>