[dsymutil] Handle the -oso-prepend-path option when the input is a YAML debug map
authorFrederic Riss <friss@apple.com>
Fri, 5 Jun 2015 16:35:44 +0000 (16:35 +0000)
committerFrederic Riss <friss@apple.com>
Fri, 5 Jun 2015 16:35:44 +0000 (16:35 +0000)
All the tests using a YAML debug map will need this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239163 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/dsymutil/X86/basic-linking-x86.test
test/tools/dsymutil/X86/basic-lto-linking-x86.test
tools/dsymutil/DebugMap.h
tools/dsymutil/MachODebugMapParser.cpp

index e6d42e464a9ccc9ec83f7bd4b2a3108f2a3a062b..ad84c7298194ffe6887917bcb7df377d15c1f31b 100644 (file)
@@ -7,7 +7,7 @@ RUN: llvm-dwarfdump %t2 | FileCheck %s
 RUN: llvm-dsymutil -o - -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 | llvm-dwarfdump - | FileCheck %s --check-prefix=CHECK --check-prefix=BASIC
 RUN: llvm-dsymutil -o - -oso-prepend-path=%p/.. %p/../Inputs/basic-archive.macho.x86_64 | llvm-dwarfdump - | FileCheck %s --check-prefix=CHECK --check-prefix=ARCHIVE
 RUN: llvm-dsymutil -dump-debug-map -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 | llvm-dsymutil -y -o - - | llvm-dwarfdump - | FileCheck %s --check-prefix=CHECK --check-prefix=BASIC
-RUN: llvm-dsymutil -dump-debug-map -oso-prepend-path=%p/.. %p/../Inputs/basic-archive.macho.x86_64 | llvm-dsymutil -o - -oso-prepend-path=%p/.. -y - | llvm-dwarfdump - | FileCheck %s --check-prefix=CHECK --check-prefix=ARCHIVE
+RUN: llvm-dsymutil -dump-debug-map -oso-prepend-path=%p/.. %p/../Inputs/basic-archive.macho.x86_64 | llvm-dsymutil -o - -y - | llvm-dwarfdump - | FileCheck %s --check-prefix=CHECK --check-prefix=ARCHIVE
 
 CHECK: file format Mach-O 64-bit x86-64
 
index 44997ee523fbe3507fac1f5406483bf35f649da5..395234e96166aaf618eb4a939dc9c2604bec8e2c 100644 (file)
@@ -1,6 +1,6 @@
 REQUIRES: shell
 RUN: llvm-dsymutil -o - -oso-prepend-path=%p/.. %p/../Inputs/basic-lto.macho.x86_64 | llvm-dwarfdump - | FileCheck %s
-RUN: llvm-dsymutil -oso-prepend-path=%p/.. -dump-debug-map %p/../Inputs/basic-lto.macho.x86_64 | llvm-dsymutil -o - -oso-prepend-path=%p/.. -y - | llvm-dwarfdump - | FileCheck %s
+RUN: llvm-dsymutil -oso-prepend-path=%p/.. -dump-debug-map %p/../Inputs/basic-lto.macho.x86_64 | llvm-dsymutil -o - -y - | llvm-dwarfdump - | FileCheck %s
 
 CHECK: file format Mach-O 64-bit x86-64
 
index 08bba18602c714aad182998946974fdd3150e65e..a5dc56e65495f005726c85a5bce882f6355efac9 100644 (file)
@@ -28,6 +28,7 @@
 #include "llvm/Object/ObjectFile.h"
 #include "llvm/Support/ErrorOr.h"
 #include "llvm/Support/Format.h"
+#include "llvm/Support/Path.h"
 #include "llvm/Support/YAMLTraits.h"
 #include <vector>
 
@@ -208,8 +209,12 @@ template <> struct MappingTraits<dsymutil::DebugMapObject> {
         Entries.push_back(std::make_pair(Entry.getKey(), Entry.getValue()));
     }
 
-    dsymutil::DebugMapObject denormalize(IO &) {
-      dsymutil::DebugMapObject Res(Filename);
+    dsymutil::DebugMapObject denormalize(IO &IO) {
+      void *Ctxt = IO.getContext();
+      StringRef PrependPath = *reinterpret_cast<StringRef*>(Ctxt);
+      SmallString<80> Path(PrependPath);
+      sys::path::append(Path, Filename);
+      dsymutil::DebugMapObject Res(Path);
       for (auto &Entry : Entries) {
         auto &Mapping = Entry.second;
         Res.addSymbol(Entry.first, Mapping.ObjectAddress, Mapping.BinaryAddress,
index c8b48823f9896a30b85d018a25b39ca30498208d..14dafb4065b43885f02d939031de97fef65436fe 100644 (file)
@@ -243,13 +243,13 @@ void MachODebugMapParser::loadMainBinarySymbols() {
 }
 
 ErrorOr<std::unique_ptr<DebugMap>>
-parseYAMLDebugMap(StringRef InputFile, bool Verbose) {
+parseYAMLDebugMap(StringRef InputFile, StringRef PrependPath, bool Verbose) {
   auto ErrOrFile = MemoryBuffer::getFileOrSTDIN(InputFile);
   if (auto Err =ErrOrFile.getError())
     return Err;
 
   std::unique_ptr<DebugMap> Res;
-  yaml::Input yin((*ErrOrFile)->getBuffer());
+  yaml::Input yin((*ErrOrFile)->getBuffer(), &PrependPath);
   yin >> Res;
 
   if (auto EC = yin.error())
@@ -266,7 +266,7 @@ parseDebugMap(StringRef InputFile, StringRef PrependPath, bool Verbose, bool Inp
     MachODebugMapParser Parser(InputFile, PrependPath, Verbose);
     return Parser.parse();
   } else {
-    return parseYAMLDebugMap(InputFile, Verbose);
+    return parseYAMLDebugMap(InputFile, PrependPath, Verbose);
   }
 }
 }