summaryrefslogtreecommitdiffstats
path: root/lldb/source/Host/linux/HostInfoLinux.cpp
diff options
context:
space:
mode:
authorKate Stone <katherine.stone@apple.com>2016-09-06 20:57:50 +0000
committerKate Stone <katherine.stone@apple.com>2016-09-06 20:57:50 +0000
commitb9c1b51e45b845debb76d8658edabca70ca56079 (patch)
treedfcb5a13ef2b014202340f47036da383eaee74aa /lldb/source/Host/linux/HostInfoLinux.cpp
parentd5aa73376966339caad04013510626ec2e42c760 (diff)
downloadbcm5719-llvm-b9c1b51e45b845debb76d8658edabca70ca56079.tar.gz
bcm5719-llvm-b9c1b51e45b845debb76d8658edabca70ca56079.zip
*** This commit represents a complete reformatting of the LLDB source code
*** to conform to clang-format’s LLVM style. This kind of mass change has *** two obvious implications: Firstly, merging this particular commit into a downstream fork may be a huge effort. Alternatively, it may be worth merging all changes up to this commit, performing the same reformatting operation locally, and then discarding the merge for this particular commit. The commands used to accomplish this reformatting were as follows (with current working directory as the root of the repository): find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} + find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ; The version of clang-format used was 3.9.0, and autopep8 was 1.2.4. Secondly, “blame” style tools will generally point to this commit instead of a meaningful prior commit. There are alternatives available that will attempt to look through this change and find the appropriate prior commit. YMMV. llvm-svn: 280751
Diffstat (limited to 'lldb/source/Host/linux/HostInfoLinux.cpp')
-rw-r--r--lldb/source/Host/linux/HostInfoLinux.cpp403
1 files changed, 182 insertions, 221 deletions
diff --git a/lldb/source/Host/linux/HostInfoLinux.cpp b/lldb/source/Host/linux/HostInfoLinux.cpp
index 0d0ba3323d6..0f2ab79224c 100644
--- a/lldb/source/Host/linux/HostInfoLinux.cpp
+++ b/lldb/source/Host/linux/HostInfoLinux.cpp
@@ -7,8 +7,8 @@
//
//===----------------------------------------------------------------------===//
-#include "lldb/Core/Log.h"
#include "lldb/Host/linux/HostInfoLinux.h"
+#include "lldb/Core/Log.h"
#include <limits.h>
#include <stdio.h>
@@ -20,263 +20,224 @@
using namespace lldb_private;
-namespace
-{
-struct HostInfoLinuxFields
-{
- HostInfoLinuxFields()
- : m_os_major(0)
- , m_os_minor(0)
- , m_os_update(0)
- {
- }
+namespace {
+struct HostInfoLinuxFields {
+ HostInfoLinuxFields() : m_os_major(0), m_os_minor(0), m_os_update(0) {}
- std::string m_distribution_id;
- uint32_t m_os_major;
- uint32_t m_os_minor;
- uint32_t m_os_update;
+ std::string m_distribution_id;
+ uint32_t m_os_major;
+ uint32_t m_os_minor;
+ uint32_t m_os_update;
};
HostInfoLinuxFields *g_fields = nullptr;
}
-void
-HostInfoLinux::Initialize()
-{
- HostInfoPosix::Initialize();
+void HostInfoLinux::Initialize() {
+ HostInfoPosix::Initialize();
- g_fields = new HostInfoLinuxFields();
+ g_fields = new HostInfoLinuxFields();
}
-uint32_t
-HostInfoLinux::GetMaxThreadNameLength()
-{
- return 16;
-}
+uint32_t HostInfoLinux::GetMaxThreadNameLength() { return 16; }
-bool
-HostInfoLinux::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update)
-{
- static bool success = false;
- static std::once_flag g_once_flag;
- std::call_once(g_once_flag, []() {
-
- struct utsname un;
- if (uname(&un) == 0)
- {
- int status = sscanf(un.release, "%u.%u.%u", &g_fields->m_os_major, &g_fields->m_os_minor, &g_fields->m_os_update);
- if (status == 3)
- success = true;
- else
- {
- // Some kernels omit the update version, so try looking for just "X.Y" and
- // set update to 0.
- g_fields->m_os_update = 0;
- status = sscanf(un.release, "%u.%u", &g_fields->m_os_major, &g_fields->m_os_minor);
- if (status == 2)
- success = true;
- }
- }
- });
+bool HostInfoLinux::GetOSVersion(uint32_t &major, uint32_t &minor,
+ uint32_t &update) {
+ static bool success = false;
+ static std::once_flag g_once_flag;
+ std::call_once(g_once_flag, []() {
+ struct utsname un;
+ if (uname(&un) == 0) {
+ int status = sscanf(un.release, "%u.%u.%u", &g_fields->m_os_major,
+ &g_fields->m_os_minor, &g_fields->m_os_update);
+ if (status == 3)
+ success = true;
+ else {
+ // Some kernels omit the update version, so try looking for just "X.Y"
+ // and
+ // set update to 0.
+ g_fields->m_os_update = 0;
+ status = sscanf(un.release, "%u.%u", &g_fields->m_os_major,
+ &g_fields->m_os_minor);
+ if (status == 2)
+ success = true;
+ }
+ }
+ });
- major = g_fields->m_os_major;
- minor = g_fields->m_os_minor;
- update = g_fields->m_os_update;
- return success;
+ major = g_fields->m_os_major;
+ minor = g_fields->m_os_minor;
+ update = g_fields->m_os_update;
+ return success;
}
-bool
-HostInfoLinux::GetOSBuildString(std::string &s)
-{
- struct utsname un;
- ::memset(&un, 0, sizeof(utsname));
- s.clear();
+bool HostInfoLinux::GetOSBuildString(std::string &s) {
+ struct utsname un;
+ ::memset(&un, 0, sizeof(utsname));
+ s.clear();
- if (uname(&un) < 0)
- return false;
+ if (uname(&un) < 0)
+ return false;
- s.assign(un.release);
- return true;
+ s.assign(un.release);
+ return true;
}
-bool
-HostInfoLinux::GetOSKernelDescription(std::string &s)
-{
- struct utsname un;
+bool HostInfoLinux::GetOSKernelDescription(std::string &s) {
+ struct utsname un;
- ::memset(&un, 0, sizeof(utsname));
- s.clear();
+ ::memset(&un, 0, sizeof(utsname));
+ s.clear();
- if (uname(&un) < 0)
- return false;
+ if (uname(&un) < 0)
+ return false;
- s.assign(un.version);
- return true;
+ s.assign(un.version);
+ return true;
}
-llvm::StringRef
-HostInfoLinux::GetDistributionId()
-{
- // Try to run 'lbs_release -i', and use that response
- // for the distribution id.
- static std::once_flag g_once_flag;
- std::call_once(g_once_flag, []() {
-
- Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST));
+llvm::StringRef HostInfoLinux::GetDistributionId() {
+ // Try to run 'lbs_release -i', and use that response
+ // for the distribution id.
+ static std::once_flag g_once_flag;
+ std::call_once(g_once_flag, []() {
+
+ Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST));
+ if (log)
+ log->Printf("attempting to determine Linux distribution...");
+
+ // check if the lsb_release command exists at one of the
+ // following paths
+ const char *const exe_paths[] = {"/bin/lsb_release",
+ "/usr/bin/lsb_release"};
+
+ for (size_t exe_index = 0;
+ exe_index < sizeof(exe_paths) / sizeof(exe_paths[0]); ++exe_index) {
+ const char *const get_distribution_info_exe = exe_paths[exe_index];
+ if (access(get_distribution_info_exe, F_OK)) {
+ // this exe doesn't exist, move on to next exe
if (log)
- log->Printf("attempting to determine Linux distribution...");
-
- // check if the lsb_release command exists at one of the
- // following paths
- const char *const exe_paths[] = {"/bin/lsb_release", "/usr/bin/lsb_release"};
-
- for (size_t exe_index = 0; exe_index < sizeof(exe_paths) / sizeof(exe_paths[0]); ++exe_index)
- {
- const char *const get_distribution_info_exe = exe_paths[exe_index];
- if (access(get_distribution_info_exe, F_OK))
- {
- // this exe doesn't exist, move on to next exe
- if (log)
- log->Printf("executable doesn't exist: %s", get_distribution_info_exe);
- continue;
- }
-
- // execute the distribution-retrieval command, read output
- std::string get_distribution_id_command(get_distribution_info_exe);
- get_distribution_id_command += " -i";
-
- FILE *file = popen(get_distribution_id_command.c_str(), "r");
- if (!file)
- {
- if (log)
- log->Printf("failed to run command: \"%s\", cannot retrieve "
- "platform information",
- get_distribution_id_command.c_str());
- break;
- }
-
- // retrieve the distribution id string.
- char distribution_id[256] = {'\0'};
- if (fgets(distribution_id, sizeof(distribution_id) - 1, file) != NULL)
- {
- if (log)
- log->Printf("distribution id command returned \"%s\"", distribution_id);
-
- const char *const distributor_id_key = "Distributor ID:\t";
- if (strstr(distribution_id, distributor_id_key))
- {
- // strip newlines
- std::string id_string(distribution_id + strlen(distributor_id_key));
- id_string.erase(std::remove(id_string.begin(), id_string.end(), '\n'), id_string.end());
-
- // lower case it and convert whitespace to underscores
- std::transform(id_string.begin(), id_string.end(), id_string.begin(), [](char ch)
- {
- return tolower(isspace(ch) ? '_' : ch);
- });
-
- g_fields->m_distribution_id = id_string;
- if (log)
- log->Printf("distribution id set to \"%s\"", g_fields->m_distribution_id.c_str());
- }
- else
- {
- if (log)
- log->Printf("failed to find \"%s\" field in \"%s\"", distributor_id_key, distribution_id);
- }
- }
- else
- {
- if (log)
- log->Printf("failed to retrieve distribution id, \"%s\" returned no"
- " lines",
- get_distribution_id_command.c_str());
- }
-
- // clean up the file
- pclose(file);
- }
- });
+ log->Printf("executable doesn't exist: %s",
+ get_distribution_info_exe);
+ continue;
+ }
- return g_fields->m_distribution_id.c_str();
-}
+ // execute the distribution-retrieval command, read output
+ std::string get_distribution_id_command(get_distribution_info_exe);
+ get_distribution_id_command += " -i";
-FileSpec
-HostInfoLinux::GetProgramFileSpec()
-{
- static FileSpec g_program_filespec;
-
- if (!g_program_filespec)
- {
- char exe_path[PATH_MAX];
- ssize_t len = readlink("/proc/self/exe", exe_path, sizeof(exe_path) - 1);
- if (len > 0)
- {
- exe_path[len] = 0;
- g_program_filespec.SetFile(exe_path, false);
+ FILE *file = popen(get_distribution_id_command.c_str(), "r");
+ if (!file) {
+ if (log)
+ log->Printf("failed to run command: \"%s\", cannot retrieve "
+ "platform information",
+ get_distribution_id_command.c_str());
+ break;
+ }
+
+ // retrieve the distribution id string.
+ char distribution_id[256] = {'\0'};
+ if (fgets(distribution_id, sizeof(distribution_id) - 1, file) != NULL) {
+ if (log)
+ log->Printf("distribution id command returned \"%s\"",
+ distribution_id);
+
+ const char *const distributor_id_key = "Distributor ID:\t";
+ if (strstr(distribution_id, distributor_id_key)) {
+ // strip newlines
+ std::string id_string(distribution_id + strlen(distributor_id_key));
+ id_string.erase(std::remove(id_string.begin(), id_string.end(), '\n'),
+ id_string.end());
+
+ // lower case it and convert whitespace to underscores
+ std::transform(
+ id_string.begin(), id_string.end(), id_string.begin(),
+ [](char ch) { return tolower(isspace(ch) ? '_' : ch); });
+
+ g_fields->m_distribution_id = id_string;
+ if (log)
+ log->Printf("distribution id set to \"%s\"",
+ g_fields->m_distribution_id.c_str());
+ } else {
+ if (log)
+ log->Printf("failed to find \"%s\" field in \"%s\"",
+ distributor_id_key, distribution_id);
}
+ } else {
+ if (log)
+ log->Printf("failed to retrieve distribution id, \"%s\" returned no"
+ " lines",
+ get_distribution_id_command.c_str());
+ }
+
+ // clean up the file
+ pclose(file);
}
+ });
- return g_program_filespec;
+ return g_fields->m_distribution_id.c_str();
}
-bool
-HostInfoLinux::ComputeSupportExeDirectory(FileSpec &file_spec)
-{
- if (HostInfoPosix::ComputeSupportExeDirectory(file_spec) &&
- file_spec.IsAbsolute() &&
- file_spec.Exists())
- return true;
- file_spec.GetDirectory() = GetProgramFileSpec().GetDirectory();
- return !file_spec.GetDirectory().IsEmpty();
-}
+FileSpec HostInfoLinux::GetProgramFileSpec() {
+ static FileSpec g_program_filespec;
-bool
-HostInfoLinux::ComputeSystemPluginsDirectory(FileSpec &file_spec)
-{
- FileSpec temp_file("/usr/lib/lldb/plugins", true);
- file_spec.GetDirectory().SetCString(temp_file.GetPath().c_str());
- return true;
+ if (!g_program_filespec) {
+ char exe_path[PATH_MAX];
+ ssize_t len = readlink("/proc/self/exe", exe_path, sizeof(exe_path) - 1);
+ if (len > 0) {
+ exe_path[len] = 0;
+ g_program_filespec.SetFile(exe_path, false);
+ }
+ }
+
+ return g_program_filespec;
}
-bool
-HostInfoLinux::ComputeUserPluginsDirectory(FileSpec &file_spec)
-{
- // XDG Base Directory Specification
- // http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
- // If XDG_DATA_HOME exists, use that, otherwise use ~/.local/share/lldb.
- const char *xdg_data_home = getenv("XDG_DATA_HOME");
- if (xdg_data_home && xdg_data_home[0])
- {
- std::string user_plugin_dir(xdg_data_home);
- user_plugin_dir += "/lldb";
- file_spec.GetDirectory().SetCString(user_plugin_dir.c_str());
- }
- else
- file_spec.GetDirectory().SetCString("~/.local/share/lldb");
+bool HostInfoLinux::ComputeSupportExeDirectory(FileSpec &file_spec) {
+ if (HostInfoPosix::ComputeSupportExeDirectory(file_spec) &&
+ file_spec.IsAbsolute() && file_spec.Exists())
return true;
+ file_spec.GetDirectory() = GetProgramFileSpec().GetDirectory();
+ return !file_spec.GetDirectory().IsEmpty();
}
-void
-HostInfoLinux::ComputeHostArchitectureSupport(ArchSpec &arch_32, ArchSpec &arch_64)
-{
- HostInfoPosix::ComputeHostArchitectureSupport(arch_32, arch_64);
+bool HostInfoLinux::ComputeSystemPluginsDirectory(FileSpec &file_spec) {
+ FileSpec temp_file("/usr/lib/lldb/plugins", true);
+ file_spec.GetDirectory().SetCString(temp_file.GetPath().c_str());
+ return true;
+}
- const char *distribution_id = GetDistributionId().data();
+bool HostInfoLinux::ComputeUserPluginsDirectory(FileSpec &file_spec) {
+ // XDG Base Directory Specification
+ // http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+ // If XDG_DATA_HOME exists, use that, otherwise use ~/.local/share/lldb.
+ const char *xdg_data_home = getenv("XDG_DATA_HOME");
+ if (xdg_data_home && xdg_data_home[0]) {
+ std::string user_plugin_dir(xdg_data_home);
+ user_plugin_dir += "/lldb";
+ file_spec.GetDirectory().SetCString(user_plugin_dir.c_str());
+ } else
+ file_spec.GetDirectory().SetCString("~/.local/share/lldb");
+ return true;
+}
- // On Linux, "unknown" in the vendor slot isn't what we want for the default
- // triple. It's probably an artifact of config.guess.
- if (arch_32.IsValid())
- {
- arch_32.SetDistributionId(distribution_id);
- if (arch_32.GetTriple().getVendor() == llvm::Triple::UnknownVendor)
- arch_32.GetTriple().setVendorName(llvm::StringRef());
- }
- if (arch_64.IsValid())
- {
- arch_64.SetDistributionId(distribution_id);
- if (arch_64.GetTriple().getVendor() == llvm::Triple::UnknownVendor)
- arch_64.GetTriple().setVendorName(llvm::StringRef());
- }
+void HostInfoLinux::ComputeHostArchitectureSupport(ArchSpec &arch_32,
+ ArchSpec &arch_64) {
+ HostInfoPosix::ComputeHostArchitectureSupport(arch_32, arch_64);
+
+ const char *distribution_id = GetDistributionId().data();
+
+ // On Linux, "unknown" in the vendor slot isn't what we want for the default
+ // triple. It's probably an artifact of config.guess.
+ if (arch_32.IsValid()) {
+ arch_32.SetDistributionId(distribution_id);
+ if (arch_32.GetTriple().getVendor() == llvm::Triple::UnknownVendor)
+ arch_32.GetTriple().setVendorName(llvm::StringRef());
+ }
+ if (arch_64.IsValid()) {
+ arch_64.SetDistributionId(distribution_id);
+ if (arch_64.GetTriple().getVendor() == llvm::Triple::UnknownVendor)
+ arch_64.GetTriple().setVendorName(llvm::StringRef());
+ }
}
OpenPOWER on IntegriCloud