From 055c57b7ceccbad89029c606a3a1fdd5dc29fbf2 Mon Sep 17 00:00:00 2001 From: Jason Molenda Date: Tue, 30 Oct 2012 21:26:30 +0000 Subject: [PATCH] Change the MacOSX Symbols::DownloadObjectAndSymbolFile to look up "~rc" via getpwnam() instead of doing tilde expansion and doing soft-link dereferencing via realpath() - if we're pointing to a softlink, leave it as-is. llvm-svn: 167052 --- lldb/source/Host/macosx/Symbols.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lldb/source/Host/macosx/Symbols.cpp b/lldb/source/Host/macosx/Symbols.cpp index a8fa1c0dbc3c..a358336b4ee7 100644 --- a/lldb/source/Host/macosx/Symbols.cpp +++ b/lldb/source/Host/macosx/Symbols.cpp @@ -11,6 +11,7 @@ // C Includes #include +#include #include "llvm/Support/MachO.h" // C++ Includes @@ -696,12 +697,27 @@ Symbols::DownloadObjectAndSymbolFile (ModuleSpec &module_spec, bool force_lookup if (!g_dsym_for_uuid_exe_exists) { - dsym_for_uuid_exe_spec.SetFile("~rc/bin/dsymForUUID", true); + dsym_for_uuid_exe_spec.SetFile("/usr/local/bin/dsymForUUID", false); g_dsym_for_uuid_exe_exists = dsym_for_uuid_exe_spec.Exists(); if (!g_dsym_for_uuid_exe_exists) { - dsym_for_uuid_exe_spec.SetFile("/usr/local/bin/dsymForUUID", false); - g_dsym_for_uuid_exe_exists = dsym_for_uuid_exe_spec.Exists(); + int bufsize; + if ((bufsize = sysconf(_SC_GETPW_R_SIZE_MAX)) != -1) + { + char buffer[bufsize]; + struct passwd pwd; + struct passwd *tilde_rc = NULL; + // we are a library so we need to use the reentrant version of getpwnam() + if (getpwnam_r ("rc", &pwd, buffer, bufsize, &tilde_rc) == 0 + && tilde_rc + && tilde_rc->pw_dir) + { + std::string dsymforuuid_path(tilde_rc->pw_dir); + dsymforuuid_path += "/bin/dsymForUUID"; + dsym_for_uuid_exe_spec.SetFile(dsymforuuid_path.c_str(), false); + g_dsym_for_uuid_exe_exists = dsym_for_uuid_exe_spec.Exists(); + } + } } } if (!g_dsym_for_uuid_exe_exists && g_dbgshell_command != NULL)