diff options
Diffstat (limited to 'source/Commands/CommandObjectPlatform.cpp')
| -rw-r--r-- | source/Commands/CommandObjectPlatform.cpp | 124 | 
1 files changed, 60 insertions, 64 deletions
diff --git a/source/Commands/CommandObjectPlatform.cpp b/source/Commands/CommandObjectPlatform.cpp index 22a9a169c7c8a..fc442f5f4d5db 100644 --- a/source/Commands/CommandObjectPlatform.cpp +++ b/source/Commands/CommandObjectPlatform.cpp @@ -7,11 +7,7 @@  //  //===----------------------------------------------------------------------===// -// C Includes -// C++ Includes  #include <mutex> -// Other libraries and framework includes -// Project includes  #include "CommandObjectPlatform.h"  #include "lldb/Core/Debugger.h"  #include "lldb/Core/Module.h" @@ -63,19 +59,19 @@ static mode_t ParsePermissionString(llvm::StringRef permissions) {    return user | group | world;  } -static OptionDefinition g_permissions_options[] = { +static constexpr OptionDefinition g_permissions_options[] = {      // clang-format off -  {LLDB_OPT_SET_ALL, false, "permissions-value",   'v', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypePermissionsNumber, "Give out the numeric value for permissions (e.g. 757)"}, -  {LLDB_OPT_SET_ALL, false, "permissions-string",  's', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypePermissionsString, "Give out the string value for permissions (e.g. rwxr-xr--)."}, -  {LLDB_OPT_SET_ALL, false, "user-read",           'r', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow user to read."}, -  {LLDB_OPT_SET_ALL, false, "user-write",          'w', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow user to write."}, -  {LLDB_OPT_SET_ALL, false, "user-exec",           'x', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow user to execute."}, -  {LLDB_OPT_SET_ALL, false, "group-read",          'R', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow group to read."}, -  {LLDB_OPT_SET_ALL, false, "group-write",         'W', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow group to write."}, -  {LLDB_OPT_SET_ALL, false, "group-exec",          'X', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow group to execute."}, -  {LLDB_OPT_SET_ALL, false, "world-read",          'd', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow world to read."}, -  {LLDB_OPT_SET_ALL, false, "world-write",         't', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow world to write."}, -  {LLDB_OPT_SET_ALL, false, "world-exec",          'e', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Allow world to execute."}, +  {LLDB_OPT_SET_ALL, false, "permissions-value",   'v', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypePermissionsNumber, "Give out the numeric value for permissions (e.g. 757)"}, +  {LLDB_OPT_SET_ALL, false, "permissions-string",  's', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypePermissionsString, "Give out the string value for permissions (e.g. rwxr-xr--)."}, +  {LLDB_OPT_SET_ALL, false, "user-read",           'r', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow user to read."}, +  {LLDB_OPT_SET_ALL, false, "user-write",          'w', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow user to write."}, +  {LLDB_OPT_SET_ALL, false, "user-exec",           'x', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow user to execute."}, +  {LLDB_OPT_SET_ALL, false, "group-read",          'R', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow group to read."}, +  {LLDB_OPT_SET_ALL, false, "group-write",         'W', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow group to write."}, +  {LLDB_OPT_SET_ALL, false, "group-exec",          'X', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow group to execute."}, +  {LLDB_OPT_SET_ALL, false, "world-read",          'd', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow world to read."}, +  {LLDB_OPT_SET_ALL, false, "world-write",         't', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow world to write."}, +  {LLDB_OPT_SET_ALL, false, "world-exec",          'e', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Allow world to execute."},      // clang-format on  }; @@ -491,8 +487,7 @@ public:        else          mode = lldb::eFilePermissionsUserRWX | lldb::eFilePermissionsGroupRWX |                 lldb::eFilePermissionsWorldRX; -      Status error = -          platform_sp->MakeDirectory(FileSpec{cmd_line, false}, mode); +      Status error = platform_sp->MakeDirectory(FileSpec(cmd_line), mode);        if (error.Success()) {          result.SetStatus(eReturnStatusSuccessFinishResult);        } else { @@ -545,7 +540,7 @@ public:          perms = lldb::eFilePermissionsUserRW | lldb::eFilePermissionsGroupRW |                  lldb::eFilePermissionsWorldRead;        lldb::user_id_t fd = platform_sp->OpenFile( -          FileSpec(cmd_line, false), +          FileSpec(cmd_line),            File::eOpenOptionRead | File::eOpenOptionWrite |                File::eOpenOptionAppend | File::eOpenOptionCanCreate,            perms, error); @@ -614,10 +609,10 @@ public:  // "platform fread"  //---------------------------------------------------------------------- -static OptionDefinition g_platform_fread_options[] = { +static constexpr OptionDefinition g_platform_fread_options[] = {      // clang-format off -  { LLDB_OPT_SET_1, false, "offset", 'o', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeIndex, "Offset into the file at which to start reading." }, -  { LLDB_OPT_SET_1, false, "count",  'c', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeCount, "Number of bytes to read from the file." }, +  { LLDB_OPT_SET_1, false, "offset", 'o', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeIndex, "Offset into the file at which to start reading." }, +  { LLDB_OPT_SET_1, false, "count",  'c', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeCount, "Number of bytes to read from the file." },      // clang-format on  }; @@ -709,10 +704,10 @@ protected:  // "platform fwrite"  //---------------------------------------------------------------------- -static OptionDefinition g_platform_fwrite_options[] = { +static constexpr OptionDefinition g_platform_fwrite_options[] = {      // clang-format off -  { LLDB_OPT_SET_1, false, "offset", 'o', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeIndex, "Offset into the file at which to start reading." }, -  { LLDB_OPT_SET_1, false, "data",   'd', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeValue, "Text to write to the file." }, +  { LLDB_OPT_SET_1, false, "offset", 'o', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeIndex, "Offset into the file at which to start reading." }, +  { LLDB_OPT_SET_1, false, "data",   'd', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeValue, "Text to write to the file." },      // clang-format on  }; @@ -883,8 +878,8 @@ public:      if (platform_sp) {        const char *remote_file_path = args.GetArgumentAtIndex(0);        const char *local_file_path = args.GetArgumentAtIndex(1); -      Status error = platform_sp->GetFile(FileSpec(remote_file_path, false), -                                          FileSpec(local_file_path, false)); +      Status error = platform_sp->GetFile(FileSpec(remote_file_path), +                                          FileSpec(local_file_path));        if (error.Success()) {          result.AppendMessageWithFormat(              "successfully get-file from %s (remote) to %s (host)\n", @@ -949,8 +944,7 @@ public:          m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform());      if (platform_sp) {        std::string remote_file_path(args.GetArgumentAtIndex(0)); -      user_id_t size = -          platform_sp->GetFileSize(FileSpec(remote_file_path, false)); +      user_id_t size = platform_sp->GetFileSize(FileSpec(remote_file_path));        if (size != UINT64_MAX) {          result.AppendMessageWithFormat("File size of %s (remote): %" PRIu64                                         "\n", @@ -987,8 +981,9 @@ public:      const char *src = args.GetArgumentAtIndex(0);      const char *dst = args.GetArgumentAtIndex(1); -    FileSpec src_fs(src, true); -    FileSpec dst_fs(dst ? dst : src_fs.GetFilename().GetCString(), false); +    FileSpec src_fs(src); +    FileSystem::Instance().Resolve(src_fs); +    FileSpec dst_fs(dst ? dst : src_fs.GetFilename().GetCString());      PlatformSP platform_sp(          m_interpreter.GetDebugger().GetPlatformList().GetSelectedPlatform()); @@ -1043,7 +1038,7 @@ protected:        Module *exe_module = target->GetExecutableModulePointer();        if (exe_module) {          m_options.launch_info.GetExecutableFile() = exe_module->GetFileSpec(); -        llvm::SmallString<PATH_MAX> exe_path; +        llvm::SmallString<128> exe_path;          m_options.launch_info.GetExecutableFile().GetPath(exe_path);          if (!exe_path.empty())            m_options.launch_info.GetArguments().AppendArgument(exe_path); @@ -1102,22 +1097,22 @@ protected:  // "platform process list"  //---------------------------------------------------------------------- -OptionDefinition g_platform_process_list_options[] = { +static OptionDefinition g_platform_process_list_options[] = {      // clang-format off -  { LLDB_OPT_SET_1,             false, "pid",         'p', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypePid,               "List the process info for a specific process ID." }, -  { LLDB_OPT_SET_2,             true,  "name",        'n', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeProcessName,       "Find processes with executable basenames that match a string." }, -  { LLDB_OPT_SET_3,             true,  "ends-with",   'e', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeProcessName,       "Find processes with executable basenames that end with a string." }, -  { LLDB_OPT_SET_4,             true,  "starts-with", 's', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeProcessName,       "Find processes with executable basenames that start with a string." }, -  { LLDB_OPT_SET_5,             true,  "contains",    'c', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeProcessName,       "Find processes with executable basenames that contain a string." }, -  { LLDB_OPT_SET_6,             true,  "regex",       'r', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeRegularExpression, "Find processes with executable basenames that match a regular expression." }, -  { LLDB_OPT_SET_FROM_TO(2, 6), false, "parent",      'P', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypePid,               "Find processes that have a matching parent process ID." }, -  { LLDB_OPT_SET_FROM_TO(2, 6), false, "uid",         'u', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching user ID." }, -  { LLDB_OPT_SET_FROM_TO(2, 6), false, "euid",        'U', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching effective user ID." }, -  { LLDB_OPT_SET_FROM_TO(2, 6), false, "gid",         'g', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching group ID." }, -  { LLDB_OPT_SET_FROM_TO(2, 6), false, "egid",        'G', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching effective group ID." }, -  { LLDB_OPT_SET_FROM_TO(2, 6), false, "arch",        'a', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeArchitecture,      "Find processes that have a matching architecture." }, -  { LLDB_OPT_SET_FROM_TO(1, 6), false, "show-args",   'A', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Show process arguments instead of the process executable basename." }, -  { LLDB_OPT_SET_FROM_TO(1, 6), false, "verbose",     'v', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,              "Enable verbose output." }, +  { LLDB_OPT_SET_1,             false, "pid",         'p', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypePid,               "List the process info for a specific process ID." }, +  { LLDB_OPT_SET_2,             true,  "name",        'n', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeProcessName,       "Find processes with executable basenames that match a string." }, +  { LLDB_OPT_SET_3,             true,  "ends-with",   'e', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeProcessName,       "Find processes with executable basenames that end with a string." }, +  { LLDB_OPT_SET_4,             true,  "starts-with", 's', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeProcessName,       "Find processes with executable basenames that start with a string." }, +  { LLDB_OPT_SET_5,             true,  "contains",    'c', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeProcessName,       "Find processes with executable basenames that contain a string." }, +  { LLDB_OPT_SET_6,             true,  "regex",       'r', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeRegularExpression, "Find processes with executable basenames that match a regular expression." }, +  { LLDB_OPT_SET_FROM_TO(2, 6), false, "parent",      'P', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypePid,               "Find processes that have a matching parent process ID." }, +  { LLDB_OPT_SET_FROM_TO(2, 6), false, "uid",         'u', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching user ID." }, +  { LLDB_OPT_SET_FROM_TO(2, 6), false, "euid",        'U', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching effective user ID." }, +  { LLDB_OPT_SET_FROM_TO(2, 6), false, "gid",         'g', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching group ID." }, +  { LLDB_OPT_SET_FROM_TO(2, 6), false, "egid",        'G', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeUnsignedInteger,   "Find processes that have a matching effective group ID." }, +  { LLDB_OPT_SET_FROM_TO(2, 6), false, "arch",        'a', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeArchitecture,      "Find processes that have a matching architecture." }, +  { LLDB_OPT_SET_FROM_TO(1, 6), false, "show-args",   'A', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Show process arguments instead of the process executable basename." }, +  { LLDB_OPT_SET_FROM_TO(1, 6), false, "verbose",     'v', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,              "Enable verbose output." },      // clang-format on  }; @@ -1336,31 +1331,31 @@ protected:        case 'n':          match_info.GetProcessInfo().GetExecutableFile().SetFile( -            option_arg, false, FileSpec::Style::native); +            option_arg, FileSpec::Style::native);          match_info.SetNameMatchType(NameMatch::Equals);          break;        case 'e':          match_info.GetProcessInfo().GetExecutableFile().SetFile( -            option_arg, false, FileSpec::Style::native); +            option_arg, FileSpec::Style::native);          match_info.SetNameMatchType(NameMatch::EndsWith);          break;        case 's':          match_info.GetProcessInfo().GetExecutableFile().SetFile( -            option_arg, false, FileSpec::Style::native); +            option_arg, FileSpec::Style::native);          match_info.SetNameMatchType(NameMatch::StartsWith);          break;        case 'c':          match_info.GetProcessInfo().GetExecutableFile().SetFile( -            option_arg, false, FileSpec::Style::native); +            option_arg, FileSpec::Style::native);          match_info.SetNameMatchType(NameMatch::Contains);          break;        case 'r':          match_info.GetProcessInfo().GetExecutableFile().SetFile( -            option_arg, false, FileSpec::Style::native); +            option_arg, FileSpec::Style::native);          match_info.SetNameMatchType(NameMatch::RegularExpression);          break; @@ -1488,12 +1483,12 @@ protected:    }  }; -static OptionDefinition g_platform_process_attach_options[] = { +static constexpr OptionDefinition g_platform_process_attach_options[] = {      // clang-format off -  { LLDB_OPT_SET_ALL, false, "plugin",  'P', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypePlugin,      "Name of the process plugin you want to use." }, -  { LLDB_OPT_SET_1,   false, "pid",     'p', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypePid,         "The process ID of an existing process to attach to." }, -  { LLDB_OPT_SET_2,   false, "name",    'n', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeProcessName, "The name of the process to attach to." }, -  { LLDB_OPT_SET_2,   false, "waitfor", 'w', OptionParser::eNoArgument,       nullptr, nullptr, 0, eArgTypeNone,        "Wait for the process with <process-name> to launch." }, +  { LLDB_OPT_SET_ALL, false, "plugin",  'P', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypePlugin,      "Name of the process plugin you want to use." }, +  { LLDB_OPT_SET_1,   false, "pid",     'p', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypePid,         "The process ID of an existing process to attach to." }, +  { LLDB_OPT_SET_2,   false, "name",    'n', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeProcessName, "The name of the process to attach to." }, +  { LLDB_OPT_SET_2,   false, "waitfor", 'w', OptionParser::eNoArgument,       nullptr, {}, 0, eArgTypeNone,        "Wait for the process with <process-name> to launch." },      // clang-format on  }; @@ -1529,7 +1524,7 @@ public:          break;        case 'n': -        attach_info.GetExecutableFile().SetFile(option_arg, false, +        attach_info.GetExecutableFile().SetFile(option_arg,                                                  FileSpec::Style::native);          break; @@ -1576,7 +1571,7 @@ public:            ProcessInstanceInfoMatch match_info;            if (partial_name) {              match_info.GetProcessInfo().GetExecutableFile().SetFile( -                partial_name, false, FileSpec::Style::native); +                partial_name, FileSpec::Style::native);              match_info.SetNameMatchType(NameMatch::StartsWith);            }            platform_sp->FindProcesses(match_info, process_infos); @@ -1673,9 +1668,9 @@ private:  //----------------------------------------------------------------------  // "platform shell"  //---------------------------------------------------------------------- -static OptionDefinition g_platform_shell_options[] = { +static constexpr OptionDefinition g_platform_shell_options[] = {      // clang-format off -  { LLDB_OPT_SET_ALL, false, "timeout", 't', OptionParser::eRequiredArgument, nullptr, nullptr, 0, eArgTypeValue, "Seconds to wait for the remote host to finish running the command." }, +  { LLDB_OPT_SET_ALL, false, "timeout", 't', OptionParser::eRequiredArgument, nullptr, {}, 0, eArgTypeValue, "Seconds to wait for the remote host to finish running the command." },      // clang-format on  }; @@ -1816,9 +1811,10 @@ public:        return false;      }      // TODO: move the bulk of this code over to the platform itself -    FileSpec src(args.GetArgumentAtIndex(0), true); -    FileSpec dst(args.GetArgumentAtIndex(1), false); -    if (!src.Exists()) { +    FileSpec src(args.GetArgumentAtIndex(0)); +    FileSystem::Instance().Resolve(src); +    FileSpec dst(args.GetArgumentAtIndex(1)); +    if (!FileSystem::Instance().Exists(src)) {        result.AppendError("source location does not exist or is not accessible");        result.SetStatus(eReturnStatusFailed);        return false;  | 
