1*39fc67b8SPavel Kosov //===-- DisassemblerHelper.cpp ----------------------------------*- C++ -*-===//
2*39fc67b8SPavel Kosov //
3*39fc67b8SPavel Kosov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*39fc67b8SPavel Kosov // See https://llvm.org/LICENSE.txt for license information.
5*39fc67b8SPavel Kosov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*39fc67b8SPavel Kosov //
7*39fc67b8SPavel Kosov //===----------------------------------------------------------------------===//
8*39fc67b8SPavel Kosov
9*39fc67b8SPavel Kosov #include "DisassemblerHelper.h"
10*39fc67b8SPavel Kosov
11*39fc67b8SPavel Kosov #include "llvm/MC/TargetRegistry.h"
12*39fc67b8SPavel Kosov
13*39fc67b8SPavel Kosov namespace llvm {
14*39fc67b8SPavel Kosov namespace exegesis {
15*39fc67b8SPavel Kosov
DisassemblerHelper(const LLVMState & State)16*39fc67b8SPavel Kosov DisassemblerHelper::DisassemblerHelper(const LLVMState &State) : State_(State) {
17*39fc67b8SPavel Kosov MCTargetOptions MCOptions;
18*39fc67b8SPavel Kosov const auto &TM = State.getTargetMachine();
19*39fc67b8SPavel Kosov const auto &Triple = TM.getTargetTriple();
20*39fc67b8SPavel Kosov AsmInfo_.reset(TM.getTarget().createMCAsmInfo(State_.getRegInfo(),
21*39fc67b8SPavel Kosov Triple.str(), MCOptions));
22*39fc67b8SPavel Kosov InstPrinter_.reset(TM.getTarget().createMCInstPrinter(
23*39fc67b8SPavel Kosov Triple, 0 /*default variant*/, *AsmInfo_, State_.getInstrInfo(),
24*39fc67b8SPavel Kosov State_.getRegInfo()));
25*39fc67b8SPavel Kosov
26*39fc67b8SPavel Kosov Context_ = std::make_unique<MCContext>(
27*39fc67b8SPavel Kosov Triple, AsmInfo_.get(), &State_.getRegInfo(), &State_.getSubtargetInfo());
28*39fc67b8SPavel Kosov Disasm_.reset(TM.getTarget().createMCDisassembler(State_.getSubtargetInfo(),
29*39fc67b8SPavel Kosov *Context_));
30*39fc67b8SPavel Kosov assert(Disasm_ && "cannot create MCDisassembler. missing call to "
31*39fc67b8SPavel Kosov "InitializeXXXTargetDisassembler ?");
32*39fc67b8SPavel Kosov }
33*39fc67b8SPavel Kosov
34*39fc67b8SPavel Kosov } // namespace exegesis
35*39fc67b8SPavel Kosov } // namespace llvm
36