1abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//===-- OptionGroupArchitecture.cpp -----------------------------*- C++ -*-===//
2abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//
3abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//                     The LLVM Compiler Infrastructure
4abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//
5abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// This file is distributed under the University of Illinois Open Source
6abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// License. See LICENSE.TXT for details.
7abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//
8abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton//===----------------------------------------------------------------------===//
9abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
10a0f34698c457091c0d15b8fdfbf638421b1283d4Johnny Chen#include "lldb/Interpreter/OptionGroupArchitecture.h"
11abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
12abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// C Includes
13abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// C++ Includes
14abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// Other libraries and framework includes
15abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton// Project includes
164003f57f86a92411f0563f355a32e8f86ae29d5aJohnny Chen#include "lldb/Utility/Utils.h"
17abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
18abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonusing namespace lldb;
19abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonusing namespace lldb_private;
20abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
21abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonOptionGroupArchitecture::OptionGroupArchitecture() :
22abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    m_arch_str ()
23abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
24abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton}
25abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
26abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonOptionGroupArchitecture::~OptionGroupArchitecture ()
27abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
28abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton}
29abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
3057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Claytonstatic OptionDefinition
3157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Claytong_option_table[] =
32abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
334003f57f86a92411f0563f355a32e8f86ae29d5aJohnny Chen    { LLDB_OPT_SET_1 , false, "arch"    , 'a', required_argument, NULL, 0, eArgTypeArchitecture , "Specify the architecture for the target."},
34abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton};
3557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton
36abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonuint32_t
37abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonOptionGroupArchitecture::GetNumDefinitions ()
38abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
3908af5983cb349e7167f3832d00d36ca611bfa2f1Johnny Chen    return llvm::array_lengthof(g_option_table);
40abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton}
41abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
42abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonconst OptionDefinition *
43abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonOptionGroupArchitecture::GetDefinitions ()
44abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
4557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton    return g_option_table;
46abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton}
47abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
48abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonbool
49abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonOptionGroupArchitecture::GetArchitecture (Platform *platform, ArchSpec &arch)
50abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
51abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    if (m_arch_str.empty())
52abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        arch.Clear();
53abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    else
54abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        arch.SetTriple(m_arch_str.c_str(), platform);
55abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    return arch.IsValid();
56abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton}
57abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
58abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
59abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonError
60abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonOptionGroupArchitecture::SetOptionValue (CommandInterpreter &interpreter,
61abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton                                 uint32_t option_idx,
62abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton                                 const char *option_arg)
63abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
64abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    Error error;
656475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton    const int short_option = g_option_table[option_idx].short_option;
66abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
67abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    switch (short_option)
68abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    {
69abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        case 'a':
70abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton            m_arch_str.assign (option_arg);
71abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton            break;
72abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
73abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton        default:
749c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton            error.SetErrorStringWithFormat ("unrecognized option '%c'", short_option);
75abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton            break;
76abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    }
77abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
78abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    return error;
79abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton}
80abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
81abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Claytonvoid
82abe0fed36d83e1c37af9dae90c2d25db742b4515Greg ClaytonOptionGroupArchitecture::OptionParsingStarting (CommandInterpreter &interpreter)
83abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton{
84abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton    m_arch_str.clear();
85abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton}
86abe0fed36d83e1c37af9dae90c2d25db742b4515Greg Clayton
87