Hi, I have reverted this as it was causing many failures on our remote android buildbots <http://lab.llvm.org:8011/builders/lldb-x86_64-ubuntu-14.04-android/builds/2834>. I am hoping I will get a chance to investigate and give you a more accurate error description by EOD (your morning). Given that the local tests our working just fine, i suspect this has something to do with paths.
pl On 1 October 2015 at 07:09, Zachary Turner via lldb-commits <lldb-commits@lists.llvm.org> wrote: > Yea. It's definitely hard to write a normal test case for this. It's also > a common problem when dealing with remote debugging scenarios. It's both > hard and resource demanding (needing to have just the right Host -> Target > configuration available) to test that by going through the full debugging > stack. But it's often easy to write a test for a specific bug by finding > the point of failure, and writing a simple unit test that verifies the > inputs and outputs of a single method. > > Many of LLDB's abstractions aren't designed to be able to handle this very > well (for example, dependency injection is a common technique, but requires > the functionality to be abstracted correctly to be able to inject mock > interfaces), but there's no reason they couldn't be changed to be. > > On Wed, Sep 30, 2015 at 11:03 PM Jason Molenda <jmole...@apple.com> wrote: >> >> Thanks for the idea Zachary, I haven't been following that. I'll look at >> this tomorrow. I was trying to imagine how to write a normal test case for >> this and it'd involve running a binary, deleting the binary off disk, then >> lldb attach to the process, letting it find a dSYM via spotlight which >> points to a copy of the binary in another location and there's another copy >> of the dSYM next to that binary. And I'd want to check that lldb stuck with >> the original dSYM that it found, instead of picking up the second dSYM >> sitting next to the binary. It might be possible to replicate the behavior >> entirely self-hosted. But it definitely only works on a mac because of the >> DebugSymbols private framework calls lldb makes while doing all of this. >> >> >> > On Sep 30, 2015, at 10:58 PM, Zachary Turner <ztur...@google.com> wrote: >> > >> > This is a good example of where unit tests are useful. There's already >> > a small suite of unit tests but I'm going to start being proactive about >> > growing it (in part by evangelizing it in response to people's commits ;-). >> > It's not integrated into the Xcode build, but it would certainly be easy to >> > do so. The nice thing about a unit test is that you can set everything up >> > exactly the way you need it and just call the one native code method you >> > want to test, and verify the outputs. You could make up your own >> > ModuleSpec, you could make a mock implementation of `Symbols` that >> > delegates >> > to the real `Symbols` implementation for everything except the part where >> > it >> > checks if the file exists, and have that method simply return false so it >> > goes to the fallback path, etc. >> > >> > Anyway, just throwing this out there as an option. This is MacOSX only >> > code so it's not a huge priority for me to push it strongly, but if you >> > think it would be useful I'm happy to help you figure out how to run them >> > and/or write a new one. >> > >> > On Wed, Sep 30, 2015 at 10:39 PM Jason Molenda via lldb-commits >> > <lldb-commits@lists.llvm.org> wrote: >> > Author: jmolenda >> > Date: Thu Oct 1 00:37:22 2015 >> > New Revision: 248985 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=248985&view=rev >> > Log: >> > Fixing a subtle issue on Mac OS X systems with dSYMs (possibly >> > introduced by r235737 but I didn't look into it too closely). >> > >> > A dSYM can have a per-UUID plist in it which tells lldb where >> > to find an executable binary for the dSYM (DBGSymbolRichExecutable) >> > - other information can be included in this plist, like how to >> > remap the source file paths from their build pathnames to their >> > long-term storage pathnames. >> > >> > This per-UUID plist is a unusual; it is used probably exclusively >> > inside apple with our build system. It is not created by default >> > in normal dSYMs. >> > >> > The problem was like this: >> > >> > 1. lldb wants to find an executable, given only a UUID >> > (this happens when lldb is doing cross-host debugging >> > and doesn't have a copy of the target system's binaries) >> > >> > 2. It eventually calls LocateMacOSXFilesUsingDebugSymbols >> > which does a spotlight search for the dSYM on the local >> > system, and failing that, tries the DBGShellCommands >> > command to find the dSYM. >> > >> > 3. It gets a dSYM. It reads the per-UUID plist in the dSYM. >> > The dSYM has a DBGSymbolRichExecutable kv pair pointing to >> > the binary on a network filesystem. >> > >> > 4. Using the binary on the network filesystem, lldb now goes >> > to find the dSYM. >> > >> > 5. It starts by looking for a dSYM next to the binary it found. >> > >> > 6. lldb is now reading the dSYM over a network filesystem, >> > ignoring the one it found on its local filesystem earlier. >> > >> > Everything still *works* but it's much slower. >> > >> > This would be a tricky one to write up in a testsuite case; >> > you really need the binary to not exist on the local system. >> > And LocateMacOSXFilesUsingDebugSymbols will only compile on >> > Mac OS X - even if I found a way to write up a test case, it >> > would not run anywhere but on a mac. >> > >> > One change Greg wanted while I was touching this code was to >> > have LocateMacOSXFilesUsingDebugSymbols (which could be asked >> > to find a binary OR find a dSYM) to instead return a ModuleSpec >> > with the sum total of everything it could find. This >> > change of passing around a ModuleSpec instead of a FileSpec >> > was percolated up into ModuleList::GetSharedModule. >> > >> > The changes to LocateMacOSXFilesUsingDebugSymbols look larger >> > than they really are - there's a lot of simple whitespace changes >> > in there. >> > >> > I ran the testsuites on mac, no new regressions introduced >> > >> > <rdar://problem/21993813> >> > >> > Modified: >> > lldb/trunk/include/lldb/Host/Symbols.h >> > lldb/trunk/source/Core/ModuleList.cpp >> > lldb/trunk/source/Host/common/Symbols.cpp >> > lldb/trunk/source/Host/macosx/Symbols.cpp >> > lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp >> > >> > Modified: lldb/trunk/include/lldb/Host/Symbols.h >> > URL: >> > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/Symbols.h?rev=248985&r1=248984&r2=248985&view=diff >> > >> > ============================================================================== >> > --- lldb/trunk/include/lldb/Host/Symbols.h (original) >> > +++ lldb/trunk/include/lldb/Host/Symbols.h Thu Oct 1 00:37:22 2015 >> > @@ -29,7 +29,7 @@ public: >> > // Locating the file should happen only on the local computer or >> > using >> > // the current computers global settings. >> > >> > //---------------------------------------------------------------------- >> > - static FileSpec >> > + static ModuleSpec >> > LocateExecutableObjectFile (const ModuleSpec &module_spec); >> > >> > >> > //---------------------------------------------------------------------- >> > >> > Modified: lldb/trunk/source/Core/ModuleList.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ModuleList.cpp?rev=248985&r1=248984&r2=248985&view=diff >> > >> > ============================================================================== >> > --- lldb/trunk/source/Core/ModuleList.cpp (original) >> > +++ lldb/trunk/source/Core/ModuleList.cpp Thu Oct 1 00:37:22 2015 >> > @@ -1045,19 +1045,19 @@ ModuleList::GetSharedModule >> > >> > // Fixup the incoming path in case the path points to a valid file, >> > yet >> > // the arch or UUID (if one was passed in) don't match. >> > - FileSpec file_spec = Symbols::LocateExecutableObjectFile >> > (module_spec); >> > + ModuleSpec located_binary_modulespec = >> > Symbols::LocateExecutableObjectFile (module_spec); >> > >> > // Don't look for the file if it appears to be the same one we >> > already >> > // checked for above... >> > - if (file_spec != module_file_spec) >> > + if (located_binary_modulespec.GetFileSpec() != module_file_spec) >> > { >> > - if (!file_spec.Exists()) >> > + if (!located_binary_modulespec.GetFileSpec().Exists()) >> > { >> > - file_spec.GetPath(path, sizeof(path)); >> > + located_binary_modulespec.GetFileSpec().GetPath(path, >> > sizeof(path)); >> > if (path[0] == '\0') >> > module_file_spec.GetPath(path, sizeof(path)); >> > // How can this check ever be true? This branch it is >> > false, and we haven't modified file_spec. >> > - if (file_spec.Exists()) >> > + if (located_binary_modulespec.GetFileSpec().Exists()) >> > { >> > std::string uuid_str; >> > if (uuid_ptr && uuid_ptr->IsValid()) >> > @@ -1084,9 +1084,8 @@ ModuleList::GetSharedModule >> > // Make sure no one else can try and get or create a module >> > while this >> > // function is actively working on it by doing an extra lock on >> > the >> > // global mutex list. >> > - ModuleSpec platform_module_spec(module_spec); >> > - platform_module_spec.GetFileSpec() = file_spec; >> > - platform_module_spec.GetPlatformFileSpec() = file_spec; >> > + ModuleSpec platform_module_spec(located_binary_modulespec); >> > + platform_module_spec.GetPlatformFileSpec() = >> > located_binary_modulespec.GetFileSpec(); >> > ModuleList matching_module_list; >> > if (shared_module_list.FindModules (platform_module_spec, >> > matching_module_list) > 0) >> > { >> > @@ -1096,7 +1095,7 @@ ModuleList::GetSharedModule >> > // then we should make sure the modification time hasn't >> > changed! >> > if (platform_module_spec.GetUUIDPtr() == NULL) >> > { >> > - TimeValue >> > file_spec_mod_time(file_spec.GetModificationTime()); >> > + TimeValue >> > file_spec_mod_time(located_binary_modulespec.GetFileSpec().GetModificationTime()); >> > if (file_spec_mod_time.IsValid()) >> > { >> > if (file_spec_mod_time != >> > module_sp->GetModificationTime()) >> > @@ -1125,9 +1124,9 @@ ModuleList::GetSharedModule >> > } >> > else >> > { >> > - file_spec.GetPath(path, sizeof(path)); >> > + located_binary_modulespec.GetFileSpec().GetPath(path, >> > sizeof(path)); >> > >> > - if (file_spec) >> > + if (located_binary_modulespec.GetFileSpec()) >> > { >> > if (arch.IsValid()) >> > error.SetErrorStringWithFormat("unable to open >> > %s architecture in '%s'", arch.GetArchitectureName(), path); >> > >> > Modified: lldb/trunk/source/Host/common/Symbols.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/Symbols.cpp?rev=248985&r1=248984&r2=248985&view=diff >> > >> > ============================================================================== >> > --- lldb/trunk/source/Host/common/Symbols.cpp (original) >> > +++ lldb/trunk/source/Host/common/Symbols.cpp Thu Oct 1 00:37:22 2015 >> > @@ -38,8 +38,7 @@ int >> > LocateMacOSXFilesUsingDebugSymbols >> > ( >> > const ModuleSpec &module_spec, >> > - FileSpec *out_exec_fspec, // If non-NULL, try and find the >> > executable >> > - FileSpec *out_dsym_fspec // If non-NULL try and find the debug >> > symbol file >> > + ModuleSpec &return_module_spec >> > ); >> > >> > #else >> > @@ -48,8 +47,7 @@ int >> > LocateMacOSXFilesUsingDebugSymbols >> > ( >> > const ModuleSpec &module_spec, >> > - FileSpec *out_exec_fspec, // If non-NULL, try and find the >> > executable >> > - FileSpec *out_dsym_fspec // If non-NULL try and find the debug >> > symbol file >> > + ModuleSpec &return_module_spec >> > ) { >> > // Cannot find MacOSX files using debug symbols on non MacOSX. >> > return 0; >> > @@ -178,19 +176,25 @@ LocateExecutableSymbolFileDsym (const Mo >> > (const void*)uuid); >> > >> > FileSpec symbol_fspec; >> > + ModuleSpec dsym_module_spec; >> > // First try and find the dSYM in the same directory as the >> > executable or in >> > // an appropriate parent directory >> > if (LocateDSYMInVincinityOfExecutable (module_spec, symbol_fspec) >> > == false) >> > { >> > // We failed to easily find the dSYM above, so use DebugSymbols >> > - LocateMacOSXFilesUsingDebugSymbols (module_spec, NULL, >> > &symbol_fspec); >> > + LocateMacOSXFilesUsingDebugSymbols (module_spec, >> > dsym_module_spec); >> > } >> > - return symbol_fspec; >> > + else >> > + { >> > + dsym_module_spec.GetSymbolFileSpec() = symbol_fspec; >> > + } >> > + return dsym_module_spec.GetSymbolFileSpec(); >> > } >> > >> > -FileSpec >> > +ModuleSpec >> > Symbols::LocateExecutableObjectFile (const ModuleSpec &module_spec) >> > { >> > + ModuleSpec result = module_spec; >> > const FileSpec *exec_fspec = module_spec.GetFileSpecPtr(); >> > const ArchSpec *arch = module_spec.GetArchitecturePtr(); >> > const UUID *uuid = module_spec.GetUUIDPtr(); >> > @@ -200,20 +204,19 @@ Symbols::LocateExecutableObjectFile (con >> > arch ? arch->GetArchitectureName() : "<NULL>", >> > (const void*)uuid); >> > >> > - FileSpec objfile_fspec; >> > ModuleSpecList module_specs; >> > ModuleSpec matched_module_spec; >> > if (exec_fspec && >> > ObjectFile::GetModuleSpecifications(*exec_fspec, 0, 0, >> > module_specs) && >> > module_specs.FindMatchingModuleSpec(module_spec, >> > matched_module_spec)) >> > { >> > - objfile_fspec = exec_fspec; >> > + result.GetFileSpec() = exec_fspec; >> > } >> > else >> > { >> > - LocateMacOSXFilesUsingDebugSymbols (module_spec, >> > &objfile_fspec, NULL); >> > + LocateMacOSXFilesUsingDebugSymbols (module_spec, result); >> > } >> > - return objfile_fspec; >> > + return result; >> > } >> > >> > FileSpec >> > >> > Modified: lldb/trunk/source/Host/macosx/Symbols.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Symbols.cpp?rev=248985&r1=248984&r2=248985&view=diff >> > >> > ============================================================================== >> > --- lldb/trunk/source/Host/macosx/Symbols.cpp (original) >> > +++ lldb/trunk/source/Host/macosx/Symbols.cpp Thu Oct 1 00:37:22 2015 >> > @@ -55,17 +55,14 @@ int >> > LocateMacOSXFilesUsingDebugSymbols >> > ( >> > const ModuleSpec &module_spec, >> > - FileSpec *out_exec_fspec, // If non-NULL, try and find the >> > executable >> > - FileSpec *out_dsym_fspec // If non-NULL try and find the debug >> > symbol file >> > + ModuleSpec &return_module_spec >> > ) >> > { >> > - int items_found = 0; >> > - >> > - if (out_exec_fspec) >> > - out_exec_fspec->Clear(); >> > + return_module_spec = module_spec; >> > + return_module_spec.GetFileSpec().Clear(); >> > + return_module_spec.GetSymbolFileSpec().Clear(); >> > >> > - if (out_dsym_fspec) >> > - out_dsym_fspec->Clear(); >> > + int items_found = 0; >> > >> > #if !defined (__arm__) && !defined (__arm64__) && !defined >> > (__aarch64__) // No DebugSymbols on the iOS devices >> > >> > @@ -110,151 +107,132 @@ LocateMacOSXFilesUsingDebugSymbols >> > >> > strlen(exec_cf_path), >> > >> > FALSE)); >> > } >> > - if (log) >> > - { >> > - std::string searching_for; >> > - if (out_exec_fspec && out_dsym_fspec) >> > - { >> > - searching_for = "executable binary and dSYM"; >> > - } >> > - else if (out_exec_fspec) >> > - { >> > - searching_for = "executable binary"; >> > - } >> > - else >> > - { >> > - searching_for = "dSYM bundle"; >> > - } >> > - log->Printf ("Calling DebugSymbols framework to >> > locate dSYM bundle for UUID %s, searching for %s", >> > uuid->GetAsString().c_str(), searching_for.c_str()); >> > - } >> > >> > CFCReleaser<CFURLRef> dsym_url >> > (::DBGCopyFullDSYMURLForUUID(module_uuid_ref.get(), exec_url.get())); >> > char path[PATH_MAX]; >> > >> > if (dsym_url.get()) >> > { >> > - if (out_dsym_fspec) >> > + if (::CFURLGetFileSystemRepresentation >> > (dsym_url.get(), true, (UInt8*)path, sizeof(path)-1)) >> > + { >> > + if (log) >> > + { >> > + log->Printf ("DebugSymbols framework >> > returned dSYM path of %s for UUID %s -- looking for the dSYM", path, >> > uuid->GetAsString().c_str()); >> > + } >> > + FileSpec dsym_filespec(path, path[0] == '~'); >> > + >> > + if (dsym_filespec.GetFileType () == >> > FileSpec::eFileTypeDirectory) >> > + { >> > + dsym_filespec = >> > Symbols::FindSymbolFileInBundle (dsym_filespec, uuid, arch); >> > + ++items_found; >> > + } >> > + else >> > + { >> > + ++items_found; >> > + } >> > + return_module_spec.GetSymbolFileSpec() = >> > dsym_filespec; >> > + } >> > + >> > + bool success = false; >> > + if (log) >> > { >> > if (::CFURLGetFileSystemRepresentation >> > (dsym_url.get(), true, (UInt8*)path, sizeof(path)-1)) >> > { >> > - if (log) >> > - { >> > - log->Printf ("DebugSymbols framework >> > returned dSYM path of %s for UUID %s -- looking for the dSYM", path, >> > uuid->GetAsString().c_str()); >> > - } >> > - out_dsym_fspec->SetFile(path, path[0] == >> > '~'); >> > + log->Printf ("DebugSymbols framework >> > returned dSYM path of %s for UUID %s -- looking for an exec file", path, >> > uuid->GetAsString().c_str()); >> > + } >> > >> > - if (out_dsym_fspec->GetFileType () == >> > FileSpec::eFileTypeDirectory) >> > + } >> > + >> > + CFCReleaser<CFDictionaryRef> >> > dict(::DBGCopyDSYMPropertyLists (dsym_url.get())); >> > + CFDictionaryRef uuid_dict = NULL; >> > + if (dict.get()) >> > + { >> > + CFCString uuid_cfstr >> > (uuid->GetAsString().c_str()); >> > + uuid_dict = >> > static_cast<CFDictionaryRef>(::CFDictionaryGetValue (dict.get(), >> > uuid_cfstr.get())); >> > + } >> > + if (uuid_dict) >> > + { >> > + CFStringRef exec_cf_path = >> > static_cast<CFStringRef>(::CFDictionaryGetValue (uuid_dict, >> > CFSTR("DBGSymbolRichExecutable"))); >> > + if (exec_cf_path && >> > ::CFStringGetFileSystemRepresentation (exec_cf_path, path, sizeof(path))) >> > + { >> > + if (log) >> > { >> > - *out_dsym_fspec = >> > Symbols::FindSymbolFileInBundle (*out_dsym_fspec, uuid, arch); >> > - if (*out_dsym_fspec) >> > - ++items_found; >> > + log->Printf ("plist bundle has exec >> > path of %s for UUID %s", path, uuid->GetAsString().c_str()); >> > } >> > - else >> > + ++items_found; >> > + FileSpec exec_filespec (path, path[0] == >> > '~'); >> > + if (exec_filespec.Exists()) >> > { >> > - ++items_found; >> > + success = true; >> > + return_module_spec.GetFileSpec() = >> > exec_filespec; >> > } >> > } >> > } >> > >> > - if (out_exec_fspec) >> > + if (!success) >> > { >> > - bool success = false; >> > - if (log) >> > - { >> > - if (::CFURLGetFileSystemRepresentation >> > (dsym_url.get(), true, (UInt8*)path, sizeof(path)-1)) >> > - { >> > - log->Printf ("DebugSymbols framework >> > returned dSYM path of %s for UUID %s -- looking for an exec file", path, >> > uuid->GetAsString().c_str()); >> > - } >> > - >> > - } >> > - CFCReleaser<CFDictionaryRef> >> > dict(::DBGCopyDSYMPropertyLists (dsym_url.get())); >> > - CFDictionaryRef uuid_dict = NULL; >> > - if (dict.get()) >> > - { >> > - CFCString uuid_cfstr >> > (uuid->GetAsString().c_str()); >> > - uuid_dict = >> > static_cast<CFDictionaryRef>(::CFDictionaryGetValue (dict.get(), >> > uuid_cfstr.get())); >> > - } >> > - if (uuid_dict) >> > + // No dictionary, check near the dSYM bundle >> > for an executable that matches... >> > + if (::CFURLGetFileSystemRepresentation >> > (dsym_url.get(), true, (UInt8*)path, sizeof(path)-1)) >> > { >> > - CFStringRef exec_cf_path = >> > static_cast<CFStringRef>(::CFDictionaryGetValue (uuid_dict, >> > CFSTR("DBGSymbolRichExecutable"))); >> > - if (exec_cf_path && >> > ::CFStringGetFileSystemRepresentation (exec_cf_path, path, sizeof(path))) >> > + char *dsym_extension_pos = ::strstr (path, >> > ".dSYM"); >> > + if (dsym_extension_pos) >> > { >> > + *dsym_extension_pos = '\0'; >> > if (log) >> > { >> > - log->Printf ("plist bundle has exec >> > path of %s for UUID %s", path, uuid->GetAsString().c_str()); >> > + log->Printf ("Looking for >> > executable binary next to dSYM bundle with name with name %s", path); >> > } >> > - ++items_found; >> > - out_exec_fspec->SetFile(path, path[0] >> > == '~'); >> > - if (out_exec_fspec->Exists()) >> > - success = true; >> > - } >> > - } >> > - >> > - if (!success) >> > - { >> > - // No dictionary, check near the dSYM >> > bundle for an executable that matches... >> > - if (::CFURLGetFileSystemRepresentation >> > (dsym_url.get(), true, (UInt8*)path, sizeof(path)-1)) >> > - { >> > - char *dsym_extension_pos = ::strstr >> > (path, ".dSYM"); >> > - if (dsym_extension_pos) >> > + FileSpec file_spec (path, true); >> > + ModuleSpecList module_specs; >> > + ModuleSpec matched_module_spec; >> > + switch (file_spec.GetFileType()) >> > { >> > - *dsym_extension_pos = '\0'; >> > - if (log) >> > - { >> > - log->Printf ("Looking for >> > executable binary next to dSYM bundle with name with name %s", path); >> > - } >> > - FileSpec file_spec (path, true); >> > - ModuleSpecList module_specs; >> > - ModuleSpec matched_module_spec; >> > - switch (file_spec.GetFileType()) >> > - { >> > - case >> > FileSpec::eFileTypeDirectory: // Bundle directory? >> > + case FileSpec::eFileTypeDirectory: >> > // Bundle directory? >> > + { >> > + CFCBundle bundle (path); >> > + CFCReleaser<CFURLRef> >> > bundle_exe_url (bundle.CopyExecutableURL ()); >> > + if (bundle_exe_url.get()) >> > { >> > - CFCBundle bundle >> > (path); >> > - CFCReleaser<CFURLRef> >> > bundle_exe_url (bundle.CopyExecutableURL ()); >> > - if >> > (bundle_exe_url.get()) >> > + if >> > (::CFURLGetFileSystemRepresentation (bundle_exe_url.get(), true, >> > (UInt8*)path, sizeof(path)-1)) >> > { >> > - if >> > (::CFURLGetFileSystemRepresentation (bundle_exe_url.get(), true, >> > (UInt8*)path, sizeof(path)-1)) >> > - { >> > - FileSpec >> > bundle_exe_file_spec (path, true); >> > - if >> > (ObjectFile::GetModuleSpecifications(bundle_exe_file_spec, 0, 0, >> > module_specs) && >> > - >> > module_specs.FindMatchingModuleSpec(module_spec, matched_module_spec)) >> > + FileSpec >> > bundle_exe_file_spec (path, true); >> > + if >> > (ObjectFile::GetModuleSpecifications(bundle_exe_file_spec, 0, 0, >> > module_specs) && >> > + >> > module_specs.FindMatchingModuleSpec(module_spec, matched_module_spec)) >> > >> > + { >> > + ++items_found; >> > + >> > return_module_spec.GetFileSpec() = bundle_exe_file_spec; >> > + if (log) >> > { >> > - >> > ++items_found; >> > - >> > *out_exec_fspec = bundle_exe_file_spec; >> > - if (log) >> > - { >> > - >> > log->Printf ("Executable binary %s next to dSYM is compatible; using", >> > path); >> > - } >> > + log->Printf >> > ("Executable binary %s next to dSYM is compatible; using", path); >> > } >> > } >> > } >> > } >> > - break; >> > - >> > - case FileSpec::eFileTypePipe: >> > // Forget pipes >> > - case FileSpec::eFileTypeSocket: >> > // We can't process socket files >> > - case >> > FileSpec::eFileTypeInvalid: // File doesn't exist... >> > - break; >> > - >> > - case >> > FileSpec::eFileTypeUnknown: >> > - case >> > FileSpec::eFileTypeRegular: >> > - case >> > FileSpec::eFileTypeSymbolicLink: >> > - case FileSpec::eFileTypeOther: >> > - if >> > (ObjectFile::GetModuleSpecifications(file_spec, 0, 0, module_specs) && >> > - >> > module_specs.FindMatchingModuleSpec(module_spec, matched_module_spec)) >> > + } >> > + break; >> > >> > + case FileSpec::eFileTypePipe: >> > // Forget pipes >> > + case FileSpec::eFileTypeSocket: >> > // We can't process socket files >> > + case FileSpec::eFileTypeInvalid: >> > // File doesn't exist... >> > + break; >> > + >> > + case FileSpec::eFileTypeUnknown: >> > + case FileSpec::eFileTypeRegular: >> > + case >> > FileSpec::eFileTypeSymbolicLink: >> > + case FileSpec::eFileTypeOther: >> > + if >> > (ObjectFile::GetModuleSpecifications(file_spec, 0, 0, module_specs) && >> > + >> > module_specs.FindMatchingModuleSpec(module_spec, matched_module_spec)) >> > + >> > + { >> > + ++items_found; >> > + >> > return_module_spec.GetFileSpec() = file_spec; >> > + if (log) >> > { >> > - ++items_found; >> > - *out_exec_fspec = >> > file_spec; >> > - if (log) >> > - { >> > - log->Printf >> > ("Executable binary %s next to dSYM is compatible; using", path); >> > - } >> > + log->Printf >> > ("Executable binary %s next to dSYM is compatible; using", path); >> > } >> > - break; >> > - } >> > + } >> > + break; >> > } >> > } >> > } >> > >> > Modified: lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp?rev=248985&r1=248984&r2=248985&view=diff >> > >> > ============================================================================== >> > --- lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp >> > (original) >> > +++ lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp Thu >> > Oct 1 00:37:22 2015 >> > @@ -321,7 +321,13 @@ ProcessKDP::DoConnectRemote (Stream *str >> > // Lookup UUID locally, before attempting >> > dsymForUUID like action >> > module_spec.GetSymbolFileSpec() = >> > Symbols::LocateExecutableSymbolFile(module_spec); >> > if (module_spec.GetSymbolFileSpec()) >> > - module_spec.GetFileSpec() = >> > Symbols::LocateExecutableObjectFile (module_spec); >> > + { >> > + ModuleSpec executable_module_spec = >> > Symbols::LocateExecutableObjectFile (module_spec); >> > + if >> > (executable_module_spec.GetFileSpec().Exists()) >> > + { >> > + module_spec.GetFileSpec() = >> > executable_module_spec.GetFileSpec(); >> > + } >> > + } >> > if (!module_spec.GetSymbolFileSpec() || >> > !module_spec.GetSymbolFileSpec()) >> > Symbols::DownloadObjectAndSymbolFile >> > (module_spec, true); >> > >> > >> > >> > _______________________________________________ >> > lldb-commits mailing list >> > lldb-commits@lists.llvm.org >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits >> > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits > _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits