1//===-- X86.h -------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "ABIX86.h"
10#ifdef LLDB_ENABLE_ALL
11#include "ABIMacOSX_i386.h"
12#endif // LLDB_ENABLE_ALL
13#include "ABISysV_i386.h"
14#include "ABISysV_x86_64.h"
15#ifdef LLDB_ENABLE_ALL
16#include "ABIWindows_x86_64.h"
17#endif // LLDB_ENABLE_ALL
18#include "lldb/Core/PluginManager.h"
19
20LLDB_PLUGIN_DEFINE(ABIX86)
21
22void ABIX86::Initialize() {
23#ifdef LLDB_ENABLE_ALL
24  ABIMacOSX_i386::Initialize();
25#endif // LLDB_ENABLE_ALL
26  ABISysV_i386::Initialize();
27  ABISysV_x86_64::Initialize();
28#ifdef LLDB_ENABLE_ALL
29  ABIWindows_x86_64::Initialize();
30#endif // LLDB_ENABLE_ALL
31}
32
33void ABIX86::Terminate() {
34#ifdef LLDB_ENABLE_ALL
35  ABIMacOSX_i386::Terminate();
36#endif // LLDB_ENABLE_ALL
37  ABISysV_i386::Terminate();
38  ABISysV_x86_64::Terminate();
39#ifdef LLDB_ENABLE_ALL
40  ABIWindows_x86_64::Terminate();
41#endif // LLDB_ENABLE_ALL
42}
43
44uint32_t ABIX86::GetGenericNum(llvm::StringRef name) {
45  return llvm::StringSwitch<uint32_t>(name)
46      .Case("eip", LLDB_REGNUM_GENERIC_PC)
47      .Case("esp", LLDB_REGNUM_GENERIC_SP)
48      .Case("ebp", LLDB_REGNUM_GENERIC_FP)
49      .Case("eflags", LLDB_REGNUM_GENERIC_FLAGS)
50      .Case("edi", LLDB_REGNUM_GENERIC_ARG1)
51      .Case("esi", LLDB_REGNUM_GENERIC_ARG2)
52      .Case("edx", LLDB_REGNUM_GENERIC_ARG3)
53      .Case("ecx", LLDB_REGNUM_GENERIC_ARG4)
54      .Default(LLDB_INVALID_REGNUM);
55}
56