xref: /freebsd-src/contrib/llvm-project/lldb/source/Plugins/ABI/X86/ABIX86.cpp (revision 16d6b3b3da62aa5baaf3c66c8d4e6f8c8f70aeb7)
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 
20 LLDB_PLUGIN_DEFINE(ABIX86)
21 
22 void 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 
33 void 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 
44 uint32_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