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:
parent
39a6a182dd
commit
14f79a8eae
@ -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
|
||||||
|
17
test/DebugInfo/symbolize-gnu-debuglink-no-realpath.test
Normal file
17
test/DebugInfo/symbolize-gnu-debuglink-no-realpath.test
Normal 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
|
Loading…
Reference in New Issue
Block a user