[lld] Write the absolute PDB path to the debug directory.
authorZachary Turner <zturner@google.com>
Fri, 4 Aug 2017 20:02:55 +0000 (20:02 +0000)
committerZachary Turner <zturner@google.com>
Fri, 4 Aug 2017 20:02:55 +0000 (20:02 +0000)
This matches the behavior of MSVC's linker.

Differential Revision: https://reviews.llvm.org/D36334

llvm-svn: 310108

lld/COFF/Writer.cpp

index d8c99ec..56c23ff 100644 (file)
@@ -78,8 +78,15 @@ private:
 };
 
 class CVDebugRecordChunk : public Chunk {
+public:
+  CVDebugRecordChunk() {
+    PDBAbsPath = Config->PDBPath;
+    if (!PDBAbsPath.empty())
+      llvm::sys::fs::make_absolute(PDBAbsPath);
+  }
+
   size_t getSize() const override {
-    return sizeof(codeview::DebugInfo) + Config->PDBPath.size() + 1;
+    return sizeof(codeview::DebugInfo) + PDBAbsPath.size() + 1;
   }
 
   void writeTo(uint8_t *B) const override {
@@ -91,12 +98,13 @@ class CVDebugRecordChunk : public Chunk {
 
     // variable sized field (PDB Path)
     auto *P = reinterpret_cast<char *>(B + OutputSectionOff + sizeof(*DI));
-    if (!Config->PDBPath.empty())
-      memcpy(P, Config->PDBPath.data(), Config->PDBPath.size());
-    P[Config->PDBPath.size()] = '\0';
+    if (!PDBAbsPath.empty())
+      memcpy(P, PDBAbsPath.data(), PDBAbsPath.size());
+    P[PDBAbsPath.size()] = '\0';
   }
 
-public:
+private:
+  SmallString<128> PDBAbsPath;
   mutable codeview::DebugInfo *DI = nullptr;
 };