mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Refactor instprinter and mcdisassembler to take a SubtargetInfo. Add -mattr= handling to llvm-mc. Reviewed by Owen Anderson.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139237 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -57,19 +57,23 @@ LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
|
||||
std::string FeaturesStr;
|
||||
std::string CPU;
|
||||
|
||||
const MCSubtargetInfo *STI = TheTarget->createMCSubtargetInfo(TripleName, CPU,
|
||||
FeaturesStr);
|
||||
assert(STI && "Unable to create subtarget info!");
|
||||
|
||||
// Set up the MCContext for creating symbols and MCExpr's.
|
||||
MCContext *Ctx = new MCContext(*MAI, *MRI, 0);
|
||||
assert(Ctx && "Unable to create MCContext!");
|
||||
|
||||
// Set up disassembler.
|
||||
MCDisassembler *DisAsm = TheTarget->createMCDisassembler();
|
||||
MCDisassembler *DisAsm = TheTarget->createMCDisassembler(*STI);
|
||||
assert(DisAsm && "Unable to create disassembler!");
|
||||
DisAsm->setupForSymbolicDisassembly(GetOpInfo, DisInfo, Ctx);
|
||||
|
||||
// Set up the instruction printer.
|
||||
int AsmPrinterVariant = MAI->getAssemblerDialect();
|
||||
MCInstPrinter *IP = TheTarget->createMCInstPrinter(AsmPrinterVariant,
|
||||
*MAI);
|
||||
*MAI, *STI);
|
||||
assert(IP && "Unable to create instruction printer!");
|
||||
|
||||
LLVMDisasmContext *DC = new LLVMDisasmContext(TripleName, DisInfo, TagType,
|
||||
|
@@ -178,7 +178,12 @@ EDDisassembler::EDDisassembler(CPUKey &key) :
|
||||
if (!AsmInfo)
|
||||
return;
|
||||
|
||||
Disassembler.reset(Tgt->createMCDisassembler());
|
||||
STI.reset(Tgt->createMCSubtargetInfo(tripleString, "", ""));
|
||||
|
||||
if (!STI)
|
||||
return;
|
||||
|
||||
Disassembler.reset(Tgt->createMCDisassembler(*STI));
|
||||
|
||||
if (!Disassembler)
|
||||
return;
|
||||
@@ -187,7 +192,7 @@ EDDisassembler::EDDisassembler(CPUKey &key) :
|
||||
|
||||
InstString.reset(new std::string);
|
||||
InstStream.reset(new raw_string_ostream(*InstString));
|
||||
InstPrinter.reset(Tgt->createMCInstPrinter(LLVMSyntaxVariant, *AsmInfo));
|
||||
InstPrinter.reset(Tgt->createMCInstPrinter(LLVMSyntaxVariant, *AsmInfo, *STI));
|
||||
|
||||
if (!InstPrinter)
|
||||
return;
|
||||
|
@@ -137,6 +137,8 @@ struct EDDisassembler {
|
||||
const llvm::Target *Tgt;
|
||||
/// The assembly information for the target architecture
|
||||
llvm::OwningPtr<const llvm::MCAsmInfo> AsmInfo;
|
||||
/// The subtarget information for the target architecture
|
||||
llvm::OwningPtr<const llvm::MCSubtargetInfo> STI;
|
||||
// The register information for the target architecture.
|
||||
llvm::OwningPtr<const llvm::MCRegisterInfo> MRI;
|
||||
/// The disassembler for the target architecture
|
||||
|
Reference in New Issue
Block a user