diff options
author | emaste <emaste@FreeBSD.org> | 2013-08-23 18:06:42 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2013-08-23 18:06:42 +0000 |
commit | 424d4dadd208e2a1e9a43c3d55f47f03ba0c4509 (patch) | |
tree | 05d762b98a499804ce690e6ce04033f1ddf4dee6 /contrib/llvm/tools/lldb/source/Interpreter/OptionGroupWatchpoint.cpp | |
parent | cde487f27a84e02a560384f75178fddca68740f6 (diff) | |
parent | dcd15f81789e389c1cb27d264fcdddfd0a6002bd (diff) | |
download | FreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.zip FreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.tar.gz |
Merge lldb r188801 to contrib/llvm/tools/lldb/
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Interpreter/OptionGroupWatchpoint.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Interpreter/OptionGroupWatchpoint.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/Interpreter/OptionGroupWatchpoint.cpp b/contrib/llvm/tools/lldb/source/Interpreter/OptionGroupWatchpoint.cpp new file mode 100644 index 0000000..9eef37a --- /dev/null +++ b/contrib/llvm/tools/lldb/source/Interpreter/OptionGroupWatchpoint.cpp @@ -0,0 +1,121 @@ +//===-- OptionGroupWatchpoint.cpp -------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Interpreter/OptionGroupWatchpoint.h" + +// C Includes +// C++ Includes +// Other libraries and framework includes +// Project includes +#include "lldb/lldb-enumerations.h" +#include "lldb/Interpreter/Args.h" +#include "lldb/Utility/Utils.h" + +using namespace lldb; +using namespace lldb_private; + +static OptionEnumValueElement g_watch_type[] = +{ + { OptionGroupWatchpoint::eWatchRead, "read", "Watch for read"}, + { OptionGroupWatchpoint::eWatchWrite, "write", "Watch for write"}, + { OptionGroupWatchpoint::eWatchReadWrite, "read_write", "Watch for read/write"}, + { 0, NULL, NULL } +}; + +static OptionEnumValueElement g_watch_size[] = +{ + { 1, "1", "Watch for byte size of 1"}, + { 2, "2", "Watch for byte size of 2"}, + { 4, "4", "Watch for byte size of 4"}, + { 8, "8", "Watch for byte size of 8"}, + { 0, NULL, NULL } +}; + +static OptionDefinition +g_option_table[] = +{ + { LLDB_OPT_SET_1, false, "watch", 'w', required_argument, g_watch_type, 0, eArgTypeWatchType, "Specify the type of watching to perform."}, + { LLDB_OPT_SET_1, false, "xsize", 'x', required_argument, g_watch_size, 0, eArgTypeByteSize, "Number of bytes to use to watch a region."} +}; + + +bool +OptionGroupWatchpoint::IsWatchSizeSupported(uint32_t watch_size) +{ + for (uint32_t i = 0; i < llvm::array_lengthof(g_watch_size); ++i) + { + if (g_watch_size[i].value == 0) + break; + if (watch_size == g_watch_size[i].value) + return true; + } + return false; +} + +OptionGroupWatchpoint::OptionGroupWatchpoint () : + OptionGroup() +{ +} + +OptionGroupWatchpoint::~OptionGroupWatchpoint () +{ +} + +Error +OptionGroupWatchpoint::SetOptionValue (CommandInterpreter &interpreter, + uint32_t option_idx, + const char *option_arg) +{ + Error error; + const int short_option = g_option_table[option_idx].short_option; + switch (short_option) + { + case 'w': + { + WatchType tmp_watch_type; + tmp_watch_type = (WatchType) Args::StringToOptionEnum(option_arg, g_option_table[option_idx].enum_values, 0, error); + if (error.Success()) + { + watch_type = tmp_watch_type; + watch_type_specified = true; + } + break; + } + case 'x': + watch_size = (uint32_t) Args::StringToOptionEnum(option_arg, g_option_table[option_idx].enum_values, 0, error); + break; + + default: + error.SetErrorStringWithFormat("unrecognized short option '%c'", short_option); + break; + } + + return error; +} + +void +OptionGroupWatchpoint::OptionParsingStarting (CommandInterpreter &interpreter) +{ + watch_type_specified = false; + watch_type = eWatchInvalid; + watch_size = 0; +} + + +const OptionDefinition* +OptionGroupWatchpoint::GetDefinitions () +{ + return g_option_table; +} + +uint32_t +OptionGroupWatchpoint::GetNumDefinitions () +{ + return llvm::array_lengthof(g_option_table); +} |