From: Frederic Riss Date: Fri, 5 Jun 2015 16:35:44 +0000 (+0000) Subject: [dsymutil] Handle the -oso-prepend-path option when the input is a YAML debug map X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;ds=sidebyside;h=8a5883aabe430a0fbc9abdd0b90f119d390fa28f;p=oota-llvm.git [dsymutil] Handle the -oso-prepend-path option when the input is a YAML debug map 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 --- diff --git a/test/tools/dsymutil/X86/basic-linking-x86.test b/test/tools/dsymutil/X86/basic-linking-x86.test index e6d42e464a9..ad84c729819 100644 --- a/test/tools/dsymutil/X86/basic-linking-x86.test +++ b/test/tools/dsymutil/X86/basic-linking-x86.test @@ -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 diff --git a/test/tools/dsymutil/X86/basic-lto-linking-x86.test b/test/tools/dsymutil/X86/basic-lto-linking-x86.test index 44997ee523f..395234e9616 100644 --- a/test/tools/dsymutil/X86/basic-lto-linking-x86.test +++ b/test/tools/dsymutil/X86/basic-lto-linking-x86.test @@ -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 diff --git a/tools/dsymutil/DebugMap.h b/tools/dsymutil/DebugMap.h index 08bba18602c..a5dc56e6549 100644 --- a/tools/dsymutil/DebugMap.h +++ b/tools/dsymutil/DebugMap.h @@ -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 @@ -208,8 +209,12 @@ template <> struct MappingTraits { 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(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, diff --git a/tools/dsymutil/MachODebugMapParser.cpp b/tools/dsymutil/MachODebugMapParser.cpp index c8b48823f98..14dafb4065b 100644 --- a/tools/dsymutil/MachODebugMapParser.cpp +++ b/tools/dsymutil/MachODebugMapParser.cpp @@ -243,13 +243,13 @@ void MachODebugMapParser::loadMainBinarySymbols() { } ErrorOr> -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 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); } } }