diff options
Diffstat (limited to 'lldb/source/Host/android/HostInfoAndroid.cpp')
-rw-r--r-- | lldb/source/Host/android/HostInfoAndroid.cpp | 145 |
1 files changed, 67 insertions, 78 deletions
diff --git a/lldb/source/Host/android/HostInfoAndroid.cpp b/lldb/source/Host/android/HostInfoAndroid.cpp index 3fa50ec..27ce17a 100644 --- a/lldb/source/Host/android/HostInfoAndroid.cpp +++ b/lldb/source/Host/android/HostInfoAndroid.cpp @@ -15,90 +15,79 @@ using namespace lldb_private; using namespace llvm; -void -HostInfoAndroid::ComputeHostArchitectureSupport(ArchSpec &arch_32, ArchSpec &arch_64) -{ - HostInfoLinux::ComputeHostArchitectureSupport(arch_32, arch_64); - - if (arch_32.IsValid()) - { - arch_32.GetTriple().setEnvironment(llvm::Triple::Android); - } - if (arch_64.IsValid()) - { - arch_64.GetTriple().setEnvironment(llvm::Triple::Android); - } +void HostInfoAndroid::ComputeHostArchitectureSupport(ArchSpec &arch_32, + ArchSpec &arch_64) { + HostInfoLinux::ComputeHostArchitectureSupport(arch_32, arch_64); + + if (arch_32.IsValid()) { + arch_32.GetTriple().setEnvironment(llvm::Triple::Android); + } + if (arch_64.IsValid()) { + arch_64.GetTriple().setEnvironment(llvm::Triple::Android); + } } -FileSpec -HostInfoAndroid::GetDefaultShell() -{ - return FileSpec("/system/bin/sh", false); +FileSpec HostInfoAndroid::GetDefaultShell() { + return FileSpec("/system/bin/sh", false); } -FileSpec -HostInfoAndroid::ResolveLibraryPath(const std::string& module_path, const ArchSpec& arch) -{ - static const char* const ld_library_path_separator = ":"; - static const char* const default_lib32_path[] = { - "/vendor/lib", - "/system/lib", - nullptr - }; - static const char* const default_lib64_path[] = { - "/vendor/lib64", - "/system/lib64", - nullptr - }; - - if (module_path.empty() || module_path[0] == '/') - return FileSpec(module_path.c_str(), true); - - SmallVector<StringRef, 4> ld_paths; - - if (const char* ld_library_path = ::getenv("LD_LIBRARY_PATH")) - StringRef(ld_library_path).split(ld_paths, StringRef(ld_library_path_separator), -1, false); - - const char* const* default_lib_path = nullptr; - switch (arch.GetAddressByteSize()) - { - case 4: - default_lib_path = default_lib32_path; - break; - case 8: - default_lib_path = default_lib64_path; - break; - default: - assert(false && "Unknown address byte size"); - return FileSpec(); - } - - for(const char* const* it = default_lib_path; *it; ++it) - ld_paths.push_back(StringRef(*it)); - - for (const StringRef& path : ld_paths) - { - FileSpec file_candidate(path.str().c_str(), true); - file_candidate.AppendPathComponent(module_path.c_str()); - - if (file_candidate.Exists()) - return file_candidate; - } - +FileSpec HostInfoAndroid::ResolveLibraryPath(const std::string &module_path, + const ArchSpec &arch) { + static const char *const ld_library_path_separator = ":"; + static const char *const default_lib32_path[] = {"/vendor/lib", "/system/lib", + nullptr}; + static const char *const default_lib64_path[] = {"/vendor/lib64", + "/system/lib64", nullptr}; + + if (module_path.empty() || module_path[0] == '/') + return FileSpec(module_path.c_str(), true); + + SmallVector<StringRef, 4> ld_paths; + + if (const char *ld_library_path = ::getenv("LD_LIBRARY_PATH")) + StringRef(ld_library_path) + .split(ld_paths, StringRef(ld_library_path_separator), -1, false); + + const char *const *default_lib_path = nullptr; + switch (arch.GetAddressByteSize()) { + case 4: + default_lib_path = default_lib32_path; + break; + case 8: + default_lib_path = default_lib64_path; + break; + default: + assert(false && "Unknown address byte size"); return FileSpec(); -} + } + + for (const char *const *it = default_lib_path; *it; ++it) + ld_paths.push_back(StringRef(*it)); -bool -HostInfoAndroid::ComputeTempFileBaseDirectory(FileSpec &file_spec) -{ - bool success = HostInfoLinux::ComputeTempFileBaseDirectory(file_spec); + for (const StringRef &path : ld_paths) { + FileSpec file_candidate(path.str().c_str(), true); + file_candidate.AppendPathComponent(module_path.c_str()); - // On Android, there is no path which is guaranteed to be writable. If the user has not - // provided a path via an environment variable, the generic algorithm will deduce /tmp, which - // is plain wrong. In that case we have an invalid directory, we substitute the path with - // /data/local/tmp, which is correct at least in some cases (i.e., when running as shell user). - if (!success || !file_spec.Exists()) - file_spec = FileSpec("/data/local/tmp", false); + if (file_candidate.Exists()) + return file_candidate; + } + + return FileSpec(); +} - return file_spec.Exists(); +bool HostInfoAndroid::ComputeTempFileBaseDirectory(FileSpec &file_spec) { + bool success = HostInfoLinux::ComputeTempFileBaseDirectory(file_spec); + + // On Android, there is no path which is guaranteed to be writable. If the + // user has not + // provided a path via an environment variable, the generic algorithm will + // deduce /tmp, which + // is plain wrong. In that case we have an invalid directory, we substitute + // the path with + // /data/local/tmp, which is correct at least in some cases (i.e., when + // running as shell user). + if (!success || !file_spec.Exists()) + file_spec = FileSpec("/data/local/tmp", false); + + return file_spec.Exists(); } |