1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

[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
This commit is contained in:
Jordan Rupprecht 2019-02-01 21:04:16 +00:00
parent 39a6a182dd
commit 14f79a8eae
2 changed files with 18 additions and 10 deletions

View File

@ -16,7 +16,6 @@
#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLExtras.h"
#include "llvm/BinaryFormat/COFF.h" #include "llvm/BinaryFormat/COFF.h"
#include "llvm/Config/config.h"
#include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/DebugInfo/PDB/PDB.h" #include "llvm/DebugInfo/PDB/PDB.h"
#include "llvm/DebugInfo/PDB/PDBContext.h" #include "llvm/DebugInfo/PDB/PDBContext.h"
@ -33,7 +32,6 @@
#include "llvm/Support/Path.h" #include "llvm/Support/Path.h"
#include <algorithm> #include <algorithm>
#include <cassert> #include <cassert>
#include <cstdlib>
#include <cstring> #include <cstring>
#if defined(_MSC_VER) #if defined(_MSC_VER)
@ -168,14 +166,7 @@ bool checkFileCRC(StringRef Path, uint32_t CRCHash) {
bool findDebugBinary(const std::string &OrigPath, bool findDebugBinary(const std::string &OrigPath,
const std::string &DebuglinkName, uint32_t CRCHash, const std::string &DebuglinkName, uint32_t CRCHash,
std::string &Result) { std::string &Result) {
std::string OrigRealPath = OrigPath; SmallString<16> OrigDir(OrigPath);
#if defined(HAVE_REALPATH)
if (char *RP = realpath(OrigPath.c_str(), nullptr)) {
OrigRealPath = RP;
free(RP);
}
#endif
SmallString<16> OrigDir(OrigRealPath);
llvm::sys::path::remove_filename(OrigDir); llvm::sys::path::remove_filename(OrigDir);
SmallString<16> DebugPath = OrigDir; SmallString<16> DebugPath = OrigDir;
// Try /path/to/original_binary/debuglink_name // Try /path/to/original_binary/debuglink_name

View File

@ -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