1336823Sdim//===-- SystemInitializerLLGS.cpp -------------------------------*- C++ -*-===//
2336823Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6336823Sdim//
7336823Sdim//===----------------------------------------------------------------------===//
8336823Sdim
9336823Sdim#include "SystemInitializerLLGS.h"
10336823Sdim
11336823Sdim#if defined(__APPLE__)
12336823Sdim#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
13336823Sdimusing HostObjectFile = ObjectFileMachO;
14336823Sdim#elif defined(_WIN32)
15336823Sdim#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
16336823Sdimusing HostObjectFile = ObjectFilePECOFF;
17336823Sdim#else
18336823Sdim#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
19336823Sdimusing HostObjectFile = ObjectFileELF;
20336823Sdim#endif
21336823Sdim
22353358Sdim#if defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64)
23353358Sdim#define LLDB_TARGET_ARM64
24353358Sdim#endif
25353358Sdim
26353358Sdim#if defined(__arm__) || defined(__arm) || defined(_ARM) || defined(_M_ARM) ||  \
27353358Sdim    defined(LLDB_TARGET_ARM64)
28353358Sdim#define LLDB_TARGET_ARM
29353358Sdim#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
30353358Sdim#endif
31353358Sdim
32353358Sdim#if defined(__mips64__) || defined(mips64) || defined(__mips64) ||             \
33353358Sdim    defined(__MIPS64__) || defined(_M_MIPS64)
34353358Sdim#define LLDB_TARGET_MIPS64
35353358Sdim#include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h"
36353358Sdim#endif
37353358Sdim
38353358Sdim#if defined(__mips__) || defined(mips) || defined(__mips) ||                   \
39353358Sdim    defined(__MIPS__) || defined(_M_MIPS) || defined(LLDB_TARGET_MIPS64)
40353358Sdim#define LLDB_TARGET_MIPS
41353358Sdim#include "Plugins/Instruction/MIPS/EmulateInstructionMIPS.h"
42353358Sdim#endif
43353358Sdim
44336823Sdimusing namespace lldb_private;
45336823Sdim
46353358Sdimllvm::Error SystemInitializerLLGS::Initialize() {
47353358Sdim  if (auto e = SystemInitializerCommon::Initialize())
48344779Sdim    return e;
49344779Sdim
50336823Sdim  HostObjectFile::Initialize();
51344779Sdim
52353358Sdim#if defined(LLDB_TARGET_ARM) || defined(LLDB_TARGET_ARM64)
53353358Sdim  EmulateInstructionARM::Initialize();
54353358Sdim#endif
55353358Sdim#if defined(LLDB_TARGET_MIPS) || defined(LLDB_TARGET_MIPS64)
56353358Sdim  EmulateInstructionMIPS::Initialize();
57353358Sdim#endif
58353358Sdim#if defined(LLDB_TARGET_MIPS64)
59353358Sdim  EmulateInstructionMIPS64::Initialize();
60353358Sdim#endif
61353358Sdim
62344779Sdim  return llvm::Error::success();
63336823Sdim}
64336823Sdim
65336823Sdimvoid SystemInitializerLLGS::Terminate() {
66336823Sdim  HostObjectFile::Terminate();
67353358Sdim
68353358Sdim#if defined(LLDB_TARGET_ARM) || defined(LLDB_TARGET_ARM64)
69353358Sdim  EmulateInstructionARM::Terminate();
70353358Sdim#endif
71353358Sdim#if defined(LLDB_TARGET_MIPS) || defined(LLDB_TARGET_MIPS64)
72353358Sdim  EmulateInstructionMIPS::Terminate();
73353358Sdim#endif
74353358Sdim#if defined(LLDB_TARGET_MIPS64)
75353358Sdim  EmulateInstructionMIPS64::Terminate();
76353358Sdim#endif
77353358Sdim
78336823Sdim  SystemInitializerCommon::Terminate();
79336823Sdim}
80