From 14f79a8eae1542756ae962d6605a06cf05bcead2 Mon Sep 17 00:00:00 2001 From: Jordan Rupprecht Date: Fri, 1 Feb 2019 21:04:16 +0000 Subject: [PATCH] [DebugInfo] Don't use realpath when looking up debug binary locations. Summary: Using realpath makes assumptions about build systems that do not always hold true. The debug binary referred to from the .gnu_debuglink should exist in the same directory (or in a .debug directory, etc.), but the files may only exist as symlinks to a differently named files elsewhere, and using realpath causes that lookup to fail. This was added in r189250, and this is basically a revert + regression test case. Reviewers: dblaikie, samsonov, jhenderson Reviewed By: dblaikie Subscribers: llvm-commits, hiraditya Tags: #llvm Differential Revision: https://reviews.llvm.org/D57609 llvm-svn: 352916 --- lib/DebugInfo/Symbolize/Symbolize.cpp | 11 +---------- .../symbolize-gnu-debuglink-no-realpath.test | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 test/DebugInfo/symbolize-gnu-debuglink-no-realpath.test diff --git a/lib/DebugInfo/Symbolize/Symbolize.cpp b/lib/DebugInfo/Symbolize/Symbolize.cpp index 1d5852d12fb..5f7370c9ae5 100644 --- a/lib/DebugInfo/Symbolize/Symbolize.cpp +++ b/lib/DebugInfo/Symbolize/Symbolize.cpp @@ -16,7 +16,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/BinaryFormat/COFF.h" -#include "llvm/Config/config.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/PDB/PDB.h" #include "llvm/DebugInfo/PDB/PDBContext.h" @@ -33,7 +32,6 @@ #include "llvm/Support/Path.h" #include #include -#include #include #if defined(_MSC_VER) @@ -168,14 +166,7 @@ bool checkFileCRC(StringRef Path, uint32_t CRCHash) { bool findDebugBinary(const std::string &OrigPath, const std::string &DebuglinkName, uint32_t CRCHash, std::string &Result) { - std::string OrigRealPath = OrigPath; -#if defined(HAVE_REALPATH) - if (char *RP = realpath(OrigPath.c_str(), nullptr)) { - OrigRealPath = RP; - free(RP); - } -#endif - SmallString<16> OrigDir(OrigRealPath); + SmallString<16> OrigDir(OrigPath); llvm::sys::path::remove_filename(OrigDir); SmallString<16> DebugPath = OrigDir; // Try /path/to/original_binary/debuglink_name diff --git a/test/DebugInfo/symbolize-gnu-debuglink-no-realpath.test b/test/DebugInfo/symbolize-gnu-debuglink-no-realpath.test new file mode 100644 index 00000000000..d6be5efc812 --- /dev/null +++ b/test/DebugInfo/symbolize-gnu-debuglink-no-realpath.test @@ -0,0 +1,17 @@ +# REQUIRES: shell +# Ensure that no realpath assumptions are made about .gnu_debuglink paths. + +# Copy inputs to some other location with arbitrary names, with the original +# filenames just being symlinks to the copies. Real files go in the "real" dir, +# symlinks (with original names) go in "syms". +RUN: rm -rf %t/real %t/syms +RUN: mkdir %t/real %t/syms +RUN: cp %p/Inputs/dwarfdump-test.elf-x86-64 %t/real/prog +RUN: cp %p/Inputs/dwarfdump-test.elf-x86-64.debuglink %t/real/link +RUN: ln -s %t/real/prog %t/syms/dwarfdump-test.elf-x86-64 +RUN: ln -s %t/real/link %t/syms/dwarfdump-test.elf-x86-64.debuglink + +RUN: llvm-symbolizer --obj=%t/syms/dwarfdump-test.elf-x86-64.debuglink 0x40113f | FileCheck %s + +CHECK: main +CHECK-NEXT: /tmp/dbginfo{{[/\\]}}dwarfdump-test.cc:16