From: Rafael Espindola Date: Wed, 23 Jul 2014 22:26:07 +0000 (+0000) Subject: Finish inverting the MC -> Object dependency. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=34c5b5b95258f1c0924d31ddcacb334049dc4830;p=oota-llvm.git Finish inverting the MC -> Object dependency. There were still some disassembler bits in lib/MC, but their use of Object was only visible in the includes they used, not in the symbols. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213808 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/CMakeLists.txt b/lib/MC/CMakeLists.txt index 330519ece00..9e78d45d776 100644 --- a/lib/MC/CMakeLists.txt +++ b/lib/MC/CMakeLists.txt @@ -11,13 +11,11 @@ add_llvm_library(LLVMMC MCCodeEmitter.cpp MCCodeGenInfo.cpp MCContext.cpp - MCDisassembler.cpp MCDwarf.cpp MCELF.cpp MCELFObjectTargetWriter.cpp MCELFStreamer.cpp MCExpr.cpp - MCExternalSymbolizer.cpp MCInst.cpp MCInstPrinter.cpp MCInstrAnalysis.cpp @@ -30,7 +28,6 @@ add_llvm_library(LLVMMC MCObjectStreamer.cpp MCObjectWriter.cpp MCRegisterInfo.cpp - MCRelocationInfo.cpp MCSection.cpp MCSectionCOFF.cpp MCSectionELF.cpp diff --git a/lib/MC/MCDisassembler.cpp b/lib/MC/MCDisassembler.cpp deleted file mode 100644 index 77d9ce16754..00000000000 --- a/lib/MC/MCDisassembler.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//===-- lib/MC/MCDisassembler.cpp - Disassembler interface ------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/MC/MCDisassembler.h" -#include "llvm/MC/MCExternalSymbolizer.h" -#include "llvm/Support/raw_ostream.h" - -using namespace llvm; - -MCDisassembler::~MCDisassembler() { -} - -bool MCDisassembler::tryAddingSymbolicOperand(MCInst &Inst, int64_t Value, - uint64_t Address, bool IsBranch, - uint64_t Offset, - uint64_t InstSize) const { - raw_ostream &cStream = CommentStream ? *CommentStream : nulls(); - if (Symbolizer) - return Symbolizer->tryAddingSymbolicOperand(Inst, cStream, Value, Address, - IsBranch, Offset, InstSize); - return false; -} - -void MCDisassembler::tryAddingPcLoadReferenceComment(int64_t Value, - uint64_t Address) const { - raw_ostream &cStream = CommentStream ? *CommentStream : nulls(); - if (Symbolizer) - Symbolizer->tryAddingPcLoadReferenceComment(cStream, Value, Address); -} - -void MCDisassembler::setSymbolizer(std::unique_ptr Symzer) { - Symbolizer = std::move(Symzer); -} diff --git a/lib/MC/MCDisassembler/CMakeLists.txt b/lib/MC/MCDisassembler/CMakeLists.txt index 5195b9e23d6..f266f8fcd30 100644 --- a/lib/MC/MCDisassembler/CMakeLists.txt +++ b/lib/MC/MCDisassembler/CMakeLists.txt @@ -1,3 +1,6 @@ add_llvm_library(LLVMMCDisassembler Disassembler.cpp + MCRelocationInfo.cpp + MCExternalSymbolizer.cpp + MCDisassembler.cpp ) diff --git a/lib/MC/MCDisassembler/MCDisassembler.cpp b/lib/MC/MCDisassembler/MCDisassembler.cpp new file mode 100644 index 00000000000..1084e5ea766 --- /dev/null +++ b/lib/MC/MCDisassembler/MCDisassembler.cpp @@ -0,0 +1,39 @@ +//===-- MCDisassembler.cpp - Disassembler interface -----------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/MCDisassembler.h" +#include "llvm/MC/MCExternalSymbolizer.h" +#include "llvm/Support/raw_ostream.h" + +using namespace llvm; + +MCDisassembler::~MCDisassembler() { +} + +bool MCDisassembler::tryAddingSymbolicOperand(MCInst &Inst, int64_t Value, + uint64_t Address, bool IsBranch, + uint64_t Offset, + uint64_t InstSize) const { + raw_ostream &cStream = CommentStream ? *CommentStream : nulls(); + if (Symbolizer) + return Symbolizer->tryAddingSymbolicOperand(Inst, cStream, Value, Address, + IsBranch, Offset, InstSize); + return false; +} + +void MCDisassembler::tryAddingPcLoadReferenceComment(int64_t Value, + uint64_t Address) const { + raw_ostream &cStream = CommentStream ? *CommentStream : nulls(); + if (Symbolizer) + Symbolizer->tryAddingPcLoadReferenceComment(cStream, Value, Address); +} + +void MCDisassembler::setSymbolizer(std::unique_ptr Symzer) { + Symbolizer = std::move(Symzer); +} diff --git a/lib/MC/MCDisassembler/MCExternalSymbolizer.cpp b/lib/MC/MCDisassembler/MCExternalSymbolizer.cpp new file mode 100644 index 00000000000..01456238165 --- /dev/null +++ b/lib/MC/MCDisassembler/MCExternalSymbolizer.cpp @@ -0,0 +1,198 @@ +//===-- MCExternalSymbolizer.cpp - External symbolizer --------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/MCExternalSymbolizer.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/MCExpr.h" +#include "llvm/MC/MCInst.h" +#include "llvm/Support/raw_ostream.h" +#include + +using namespace llvm; + +// This function tries to add a symbolic operand in place of the immediate +// Value in the MCInst. The immediate Value has had any PC adjustment made by +// the caller. If the instruction is a branch instruction then IsBranch is true, +// else false. If the getOpInfo() function was set as part of the +// setupForSymbolicDisassembly() call then that function is called to get any +// symbolic information at the Address for this instruction. If that returns +// non-zero then the symbolic information it returns is used to create an MCExpr +// and that is added as an operand to the MCInst. If getOpInfo() returns zero +// and IsBranch is true then a symbol look up for Value is done and if a symbol +// is found an MCExpr is created with that, else an MCExpr with Value is +// created. This function returns true if it adds an operand to the MCInst and +// false otherwise. +bool MCExternalSymbolizer::tryAddingSymbolicOperand(MCInst &MI, + raw_ostream &cStream, + int64_t Value, + uint64_t Address, + bool IsBranch, + uint64_t Offset, + uint64_t InstSize) { + struct LLVMOpInfo1 SymbolicOp; + std::memset(&SymbolicOp, '\0', sizeof(struct LLVMOpInfo1)); + SymbolicOp.Value = Value; + + if (!GetOpInfo || + !GetOpInfo(DisInfo, Address, Offset, InstSize, 1, &SymbolicOp)) { + // Clear SymbolicOp.Value from above and also all other fields. + std::memset(&SymbolicOp, '\0', sizeof(struct LLVMOpInfo1)); + + // At this point, GetOpInfo() did not find any relocation information about + // this operand and we are left to use the SymbolLookUp() call back to guess + // if the Value is the address of a symbol. In the case this is a branch + // that always makes sense to guess. But in the case of an immediate it is + // a bit more questionable if it is an address of a symbol or some other + // reference. So if the immediate Value comes from a width of 1 byte, + // InstSize, we will not guess it is an address of a symbol. Because in + // object files assembled starting at address 0 this usually leads to + // incorrect symbolication. + if (!SymbolLookUp || (InstSize == 1 && !IsBranch)) + return false; + + uint64_t ReferenceType; + if (IsBranch) + ReferenceType = LLVMDisassembler_ReferenceType_In_Branch; + else + ReferenceType = LLVMDisassembler_ReferenceType_InOut_None; + const char *ReferenceName; + const char *Name = SymbolLookUp(DisInfo, Value, &ReferenceType, Address, + &ReferenceName); + if (Name) { + SymbolicOp.AddSymbol.Name = Name; + SymbolicOp.AddSymbol.Present = true; + // If Name is a C++ symbol name put the human readable name in a comment. + if(ReferenceType == LLVMDisassembler_ReferenceType_DeMangled_Name) + cStream << ReferenceName; + } + // For branches always create an MCExpr so it gets printed as hex address. + else if (IsBranch) { + SymbolicOp.Value = Value; + } + if(ReferenceType == LLVMDisassembler_ReferenceType_Out_SymbolStub) + cStream << "symbol stub for: " << ReferenceName; + else if(ReferenceType == LLVMDisassembler_ReferenceType_Out_Objc_Message) + cStream << "Objc message: " << ReferenceName; + if (!Name && !IsBranch) + return false; + } + + const MCExpr *Add = nullptr; + if (SymbolicOp.AddSymbol.Present) { + if (SymbolicOp.AddSymbol.Name) { + StringRef Name(SymbolicOp.AddSymbol.Name); + MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name); + Add = MCSymbolRefExpr::Create(Sym, Ctx); + } else { + Add = MCConstantExpr::Create((int)SymbolicOp.AddSymbol.Value, Ctx); + } + } + + const MCExpr *Sub = nullptr; + if (SymbolicOp.SubtractSymbol.Present) { + if (SymbolicOp.SubtractSymbol.Name) { + StringRef Name(SymbolicOp.SubtractSymbol.Name); + MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name); + Sub = MCSymbolRefExpr::Create(Sym, Ctx); + } else { + Sub = MCConstantExpr::Create((int)SymbolicOp.SubtractSymbol.Value, Ctx); + } + } + + const MCExpr *Off = nullptr; + if (SymbolicOp.Value != 0) + Off = MCConstantExpr::Create(SymbolicOp.Value, Ctx); + + const MCExpr *Expr; + if (Sub) { + const MCExpr *LHS; + if (Add) + LHS = MCBinaryExpr::CreateSub(Add, Sub, Ctx); + else + LHS = MCUnaryExpr::CreateMinus(Sub, Ctx); + if (Off) + Expr = MCBinaryExpr::CreateAdd(LHS, Off, Ctx); + else + Expr = LHS; + } else if (Add) { + if (Off) + Expr = MCBinaryExpr::CreateAdd(Add, Off, Ctx); + else + Expr = Add; + } else { + if (Off) + Expr = Off; + else + Expr = MCConstantExpr::Create(0, Ctx); + } + + Expr = RelInfo->createExprForCAPIVariantKind(Expr, SymbolicOp.VariantKind); + if (!Expr) + return false; + + MI.addOperand(MCOperand::CreateExpr(Expr)); + return true; +} + +// This function tries to add a comment as to what is being referenced by a load +// instruction with the base register that is the Pc. These can often be values +// in a literal pool near the Address of the instruction. The Address of the +// instruction and its immediate Value are used as a possible literal pool entry. +// The SymbolLookUp call back will return the name of a symbol referenced by the +// literal pool's entry if the referenced address is that of a symbol. Or it +// will return a pointer to a literal 'C' string if the referenced address of +// the literal pool's entry is an address into a section with C string literals. +// Or if the reference is to an Objective-C data structure it will return a +// specific reference type for it and a string. +void MCExternalSymbolizer::tryAddingPcLoadReferenceComment(raw_ostream &cStream, + int64_t Value, + uint64_t Address) { + if (SymbolLookUp) { + uint64_t ReferenceType = LLVMDisassembler_ReferenceType_In_PCrel_Load; + const char *ReferenceName; + (void)SymbolLookUp(DisInfo, Value, &ReferenceType, Address, &ReferenceName); + if(ReferenceType == LLVMDisassembler_ReferenceType_Out_LitPool_SymAddr) + cStream << "literal pool symbol address: " << ReferenceName; + else if(ReferenceType == + LLVMDisassembler_ReferenceType_Out_LitPool_CstrAddr) { + cStream << "literal pool for: \""; + cStream.write_escaped(ReferenceName); + cStream << "\""; + } + else if(ReferenceType == + LLVMDisassembler_ReferenceType_Out_Objc_CFString_Ref) + cStream << "Objc cfstring ref: @\"" << ReferenceName << "\""; + else if(ReferenceType == + LLVMDisassembler_ReferenceType_Out_Objc_Message) + cStream << "Objc message: " << ReferenceName; + else if(ReferenceType == + LLVMDisassembler_ReferenceType_Out_Objc_Message_Ref) + cStream << "Objc message ref: " << ReferenceName; + else if(ReferenceType == + LLVMDisassembler_ReferenceType_Out_Objc_Selector_Ref) + cStream << "Objc selector ref: " << ReferenceName; + else if(ReferenceType == + LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref) + cStream << "Objc class ref: " << ReferenceName; + } +} + +namespace llvm { +MCSymbolizer *createMCSymbolizer(StringRef TT, LLVMOpInfoCallback GetOpInfo, + LLVMSymbolLookupCallback SymbolLookUp, + void *DisInfo, + MCContext *Ctx, + MCRelocationInfo *RelInfo) { + assert(Ctx && "No MCContext given for symbolic disassembly"); + + return new MCExternalSymbolizer(*Ctx, + std::unique_ptr(RelInfo), + GetOpInfo, SymbolLookUp, DisInfo); +} +} diff --git a/lib/MC/MCDisassembler/MCRelocationInfo.cpp b/lib/MC/MCDisassembler/MCRelocationInfo.cpp new file mode 100644 index 00000000000..ff0c27f5faf --- /dev/null +++ b/lib/MC/MCDisassembler/MCRelocationInfo.cpp @@ -0,0 +1,39 @@ +//==-- MCRelocationInfo.cpp ------------------------------------------------==// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/MCRelocationInfo.h" +#include "llvm-c/Disassembler.h" +#include "llvm/Object/ObjectFile.h" +#include "llvm/Support/TargetRegistry.h" + +using namespace llvm; + +MCRelocationInfo::MCRelocationInfo(MCContext &Ctx) + : Ctx(Ctx) { +} + +MCRelocationInfo::~MCRelocationInfo() { +} + +const MCExpr * +MCRelocationInfo::createExprForRelocation(object::RelocationRef Rel) { + return nullptr; +} + +const MCExpr * +MCRelocationInfo::createExprForCAPIVariantKind(const MCExpr *SubExpr, + unsigned VariantKind) { + if (VariantKind != LLVMDisassembler_VariantKind_None) + return nullptr; + return SubExpr; +} + +MCRelocationInfo *llvm::createMCRelocationInfo(StringRef TT, MCContext &Ctx) { + return new MCRelocationInfo(Ctx); +} diff --git a/lib/MC/MCExternalSymbolizer.cpp b/lib/MC/MCExternalSymbolizer.cpp deleted file mode 100644 index 7c3073a9d72..00000000000 --- a/lib/MC/MCExternalSymbolizer.cpp +++ /dev/null @@ -1,198 +0,0 @@ -//===-- lib/MC/MCExternalSymbolizer.cpp - External symbolizer ---*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/MC/MCExternalSymbolizer.h" -#include "llvm/MC/MCContext.h" -#include "llvm/MC/MCExpr.h" -#include "llvm/MC/MCInst.h" -#include "llvm/Support/raw_ostream.h" -#include - -using namespace llvm; - -// This function tries to add a symbolic operand in place of the immediate -// Value in the MCInst. The immediate Value has had any PC adjustment made by -// the caller. If the instruction is a branch instruction then IsBranch is true, -// else false. If the getOpInfo() function was set as part of the -// setupForSymbolicDisassembly() call then that function is called to get any -// symbolic information at the Address for this instruction. If that returns -// non-zero then the symbolic information it returns is used to create an MCExpr -// and that is added as an operand to the MCInst. If getOpInfo() returns zero -// and IsBranch is true then a symbol look up for Value is done and if a symbol -// is found an MCExpr is created with that, else an MCExpr with Value is -// created. This function returns true if it adds an operand to the MCInst and -// false otherwise. -bool MCExternalSymbolizer::tryAddingSymbolicOperand(MCInst &MI, - raw_ostream &cStream, - int64_t Value, - uint64_t Address, - bool IsBranch, - uint64_t Offset, - uint64_t InstSize) { - struct LLVMOpInfo1 SymbolicOp; - std::memset(&SymbolicOp, '\0', sizeof(struct LLVMOpInfo1)); - SymbolicOp.Value = Value; - - if (!GetOpInfo || - !GetOpInfo(DisInfo, Address, Offset, InstSize, 1, &SymbolicOp)) { - // Clear SymbolicOp.Value from above and also all other fields. - std::memset(&SymbolicOp, '\0', sizeof(struct LLVMOpInfo1)); - - // At this point, GetOpInfo() did not find any relocation information about - // this operand and we are left to use the SymbolLookUp() call back to guess - // if the Value is the address of a symbol. In the case this is a branch - // that always makes sense to guess. But in the case of an immediate it is - // a bit more questionable if it is an address of a symbol or some other - // reference. So if the immediate Value comes from a width of 1 byte, - // InstSize, we will not guess it is an address of a symbol. Because in - // object files assembled starting at address 0 this usually leads to - // incorrect symbolication. - if (!SymbolLookUp || (InstSize == 1 && !IsBranch)) - return false; - - uint64_t ReferenceType; - if (IsBranch) - ReferenceType = LLVMDisassembler_ReferenceType_In_Branch; - else - ReferenceType = LLVMDisassembler_ReferenceType_InOut_None; - const char *ReferenceName; - const char *Name = SymbolLookUp(DisInfo, Value, &ReferenceType, Address, - &ReferenceName); - if (Name) { - SymbolicOp.AddSymbol.Name = Name; - SymbolicOp.AddSymbol.Present = true; - // If Name is a C++ symbol name put the human readable name in a comment. - if(ReferenceType == LLVMDisassembler_ReferenceType_DeMangled_Name) - cStream << ReferenceName; - } - // For branches always create an MCExpr so it gets printed as hex address. - else if (IsBranch) { - SymbolicOp.Value = Value; - } - if(ReferenceType == LLVMDisassembler_ReferenceType_Out_SymbolStub) - cStream << "symbol stub for: " << ReferenceName; - else if(ReferenceType == LLVMDisassembler_ReferenceType_Out_Objc_Message) - cStream << "Objc message: " << ReferenceName; - if (!Name && !IsBranch) - return false; - } - - const MCExpr *Add = nullptr; - if (SymbolicOp.AddSymbol.Present) { - if (SymbolicOp.AddSymbol.Name) { - StringRef Name(SymbolicOp.AddSymbol.Name); - MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name); - Add = MCSymbolRefExpr::Create(Sym, Ctx); - } else { - Add = MCConstantExpr::Create((int)SymbolicOp.AddSymbol.Value, Ctx); - } - } - - const MCExpr *Sub = nullptr; - if (SymbolicOp.SubtractSymbol.Present) { - if (SymbolicOp.SubtractSymbol.Name) { - StringRef Name(SymbolicOp.SubtractSymbol.Name); - MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name); - Sub = MCSymbolRefExpr::Create(Sym, Ctx); - } else { - Sub = MCConstantExpr::Create((int)SymbolicOp.SubtractSymbol.Value, Ctx); - } - } - - const MCExpr *Off = nullptr; - if (SymbolicOp.Value != 0) - Off = MCConstantExpr::Create(SymbolicOp.Value, Ctx); - - const MCExpr *Expr; - if (Sub) { - const MCExpr *LHS; - if (Add) - LHS = MCBinaryExpr::CreateSub(Add, Sub, Ctx); - else - LHS = MCUnaryExpr::CreateMinus(Sub, Ctx); - if (Off) - Expr = MCBinaryExpr::CreateAdd(LHS, Off, Ctx); - else - Expr = LHS; - } else if (Add) { - if (Off) - Expr = MCBinaryExpr::CreateAdd(Add, Off, Ctx); - else - Expr = Add; - } else { - if (Off) - Expr = Off; - else - Expr = MCConstantExpr::Create(0, Ctx); - } - - Expr = RelInfo->createExprForCAPIVariantKind(Expr, SymbolicOp.VariantKind); - if (!Expr) - return false; - - MI.addOperand(MCOperand::CreateExpr(Expr)); - return true; -} - -// This function tries to add a comment as to what is being referenced by a load -// instruction with the base register that is the Pc. These can often be values -// in a literal pool near the Address of the instruction. The Address of the -// instruction and its immediate Value are used as a possible literal pool entry. -// The SymbolLookUp call back will return the name of a symbol referenced by the -// literal pool's entry if the referenced address is that of a symbol. Or it -// will return a pointer to a literal 'C' string if the referenced address of -// the literal pool's entry is an address into a section with C string literals. -// Or if the reference is to an Objective-C data structure it will return a -// specific reference type for it and a string. -void MCExternalSymbolizer::tryAddingPcLoadReferenceComment(raw_ostream &cStream, - int64_t Value, - uint64_t Address) { - if (SymbolLookUp) { - uint64_t ReferenceType = LLVMDisassembler_ReferenceType_In_PCrel_Load; - const char *ReferenceName; - (void)SymbolLookUp(DisInfo, Value, &ReferenceType, Address, &ReferenceName); - if(ReferenceType == LLVMDisassembler_ReferenceType_Out_LitPool_SymAddr) - cStream << "literal pool symbol address: " << ReferenceName; - else if(ReferenceType == - LLVMDisassembler_ReferenceType_Out_LitPool_CstrAddr) { - cStream << "literal pool for: \""; - cStream.write_escaped(ReferenceName); - cStream << "\""; - } - else if(ReferenceType == - LLVMDisassembler_ReferenceType_Out_Objc_CFString_Ref) - cStream << "Objc cfstring ref: @\"" << ReferenceName << "\""; - else if(ReferenceType == - LLVMDisassembler_ReferenceType_Out_Objc_Message) - cStream << "Objc message: " << ReferenceName; - else if(ReferenceType == - LLVMDisassembler_ReferenceType_Out_Objc_Message_Ref) - cStream << "Objc message ref: " << ReferenceName; - else if(ReferenceType == - LLVMDisassembler_ReferenceType_Out_Objc_Selector_Ref) - cStream << "Objc selector ref: " << ReferenceName; - else if(ReferenceType == - LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref) - cStream << "Objc class ref: " << ReferenceName; - } -} - -namespace llvm { -MCSymbolizer *createMCSymbolizer(StringRef TT, LLVMOpInfoCallback GetOpInfo, - LLVMSymbolLookupCallback SymbolLookUp, - void *DisInfo, - MCContext *Ctx, - MCRelocationInfo *RelInfo) { - assert(Ctx && "No MCContext given for symbolic disassembly"); - - return new MCExternalSymbolizer(*Ctx, - std::unique_ptr(RelInfo), - GetOpInfo, SymbolLookUp, DisInfo); -} -} diff --git a/lib/MC/MCRelocationInfo.cpp b/lib/MC/MCRelocationInfo.cpp deleted file mode 100644 index a00c0096c22..00000000000 --- a/lib/MC/MCRelocationInfo.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//==-- lib/MC/MCRelocationInfo.cpp -------------------------------*- C++ -*-==// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/MC/MCRelocationInfo.h" -#include "llvm-c/Disassembler.h" -#include "llvm/Object/ObjectFile.h" -#include "llvm/Support/TargetRegistry.h" - -using namespace llvm; - -MCRelocationInfo::MCRelocationInfo(MCContext &Ctx) - : Ctx(Ctx) { -} - -MCRelocationInfo::~MCRelocationInfo() { -} - -const MCExpr * -MCRelocationInfo::createExprForRelocation(object::RelocationRef Rel) { - return nullptr; -} - -const MCExpr * -MCRelocationInfo::createExprForCAPIVariantKind(const MCExpr *SubExpr, - unsigned VariantKind) { - if (VariantKind != LLVMDisassembler_VariantKind_None) - return nullptr; - return SubExpr; -} - -MCRelocationInfo *llvm::createMCRelocationInfo(StringRef TT, MCContext &Ctx) { - return new MCRelocationInfo(Ctx); -} diff --git a/lib/Target/AArch64/Disassembler/LLVMBuild.txt b/lib/Target/AArch64/Disassembler/LLVMBuild.txt index a4224f4a2f5..4bfa5fcec57 100644 --- a/lib/Target/AArch64/Disassembler/LLVMBuild.txt +++ b/lib/Target/AArch64/Disassembler/LLVMBuild.txt @@ -19,5 +19,5 @@ type = Library name = AArch64Disassembler parent = AArch64 -required_libraries = AArch64Info AArch64Utils MC Support +required_libraries = AArch64Info AArch64Utils MCDisassembler Support add_to_library_groups = AArch64 diff --git a/lib/Target/X86/Disassembler/LLVMBuild.txt b/lib/Target/X86/Disassembler/LLVMBuild.txt index cac7adff492..e003fc9f996 100644 --- a/lib/Target/X86/Disassembler/LLVMBuild.txt +++ b/lib/Target/X86/Disassembler/LLVMBuild.txt @@ -19,5 +19,5 @@ type = Library name = X86Disassembler parent = X86 -required_libraries = MC Support X86Info +required_libraries = MCDisassembler Support X86Info add_to_library_groups = X86 diff --git a/lib/Target/X86/MCTargetDesc/LLVMBuild.txt b/lib/Target/X86/MCTargetDesc/LLVMBuild.txt index 146d1112014..92019d480a1 100644 --- a/lib/Target/X86/MCTargetDesc/LLVMBuild.txt +++ b/lib/Target/X86/MCTargetDesc/LLVMBuild.txt @@ -19,5 +19,5 @@ type = Library name = X86Desc parent = X86 -required_libraries = MC Object Support X86AsmPrinter X86Info +required_libraries = MCDisassembler Object Support X86AsmPrinter X86Info add_to_library_groups = X86