diff options
author | Renato Golin <renato.golin@linaro.org> | 2016-09-08 17:10:39 +0000 |
---|---|---|
committer | Renato Golin <renato.golin@linaro.org> | 2016-09-08 17:10:39 +0000 |
commit | 049f38711200910652493fe350468b7dde5ad4f1 (patch) | |
tree | bd6b6aee3f00b344f7f43ec4729f706134b7038b /llvm/lib/Target/ARM/ARMMCInstLower.cpp | |
parent | c6cebf727cab2ac5cc3808719ff9766996802d75 (diff) | |
download | llvm-049f38711200910652493fe350468b7dde5ad4f1.zip llvm-049f38711200910652493fe350468b7dde5ad4f1.tar.gz llvm-049f38711200910652493fe350468b7dde5ad4f1.tar.bz2 |
Revert "[XRay] ARM 32-bit no-Thumb support in LLVM"
And associated commits, as they broke the Thumb bots.
This reverts commit r280935.
This reverts commit r280891.
This reverts commit r280888.
llvm-svn: 280967
Diffstat (limited to 'llvm/lib/Target/ARM/ARMMCInstLower.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMMCInstLower.cpp | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/llvm/lib/Target/ARM/ARMMCInstLower.cpp b/llvm/lib/Target/ARM/ARMMCInstLower.cpp index afdde4e..7429acd 100644 --- a/llvm/lib/Target/ARM/ARMMCInstLower.cpp +++ b/llvm/lib/Target/ARM/ARMMCInstLower.cpp @@ -21,11 +21,6 @@ #include "llvm/IR/Mangler.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInst.h" -#include "llvm/MC/MCContext.h" -#include "llvm/MC/MCSymbolELF.h" -#include "llvm/MC/MCSectionELF.h" -#include "llvm/MC/MCInstBuilder.h" -#include "llvm/MC/MCStreamer.h" using namespace llvm; @@ -155,85 +150,3 @@ void llvm::LowerARMMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI, } } } - -void ARMAsmPrinter::EmitSled(const MachineInstr &MI, SledKind Kind) -{ - static const int8_t NoopsInSledCount = 6; - // We want to emit the following pattern: - // - // .Lxray_sled_N: - // ALIGN - // B #20 - // ; 6 NOP instructions (24 bytes) - // .tmpN - // - // We need the 24 bytes (6 instructions) because at runtime, we'd be patching - // over the full 28 bytes (7 instructions) with the following pattern: - // - // PUSH{ r0, lr } - // MOVW r0, #<lower 16 bits of function ID> - // MOVT r0, #<higher 16 bits of function ID> - // MOVW ip, #<lower 16 bits of address of __xray_FunctionEntry/Exit> - // MOVT ip, #<higher 16 bits of address of __xray_FunctionEntry/Exit> - // BLX ip - // POP{ r0, lr } - // - OutStreamer->EmitCodeAlignment(4); - auto CurSled = OutContext.createTempSymbol("xray_sled_", true); - OutStreamer->EmitLabel(CurSled); - auto Target = OutContext.createTempSymbol(); - - // Emit "B #20" instruction, which jumps over the next 24 bytes (because - // register pc is 8 bytes ahead of the jump instruction by the moment CPU - // is executing it). - // By analogy to ARMAsmPrinter::emitPseudoExpansionLowering() |case ARM::B|. - // It is not clear why |addReg(0)| is needed (the last operand). - EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::Bcc).addImm(20) - .addImm(ARMCC::AL).addReg(0)); - - MCInst Noop; - Subtarget->getInstrInfo()->getNoopForElfTarget(Noop); - for (int8_t I = 0; I < NoopsInSledCount; I++) - { - OutStreamer->EmitInstruction(Noop, getSubtargetInfo()); - } - - OutStreamer->EmitLabel(Target); - recordSled(CurSled, MI, Kind); -} - -void ARMAsmPrinter::LowerPATCHABLE_FUNCTION_ENTER(const MachineInstr &MI) -{ - EmitSled(MI, SledKind::FUNCTION_ENTER); -} - -void ARMAsmPrinter::LowerPATCHABLE_FUNCTION_EXIT(const MachineInstr &MI) -{ - EmitSled(MI, SledKind::FUNCTION_EXIT); -} - -void ARMAsmPrinter::EmitXRayTable() -{ - if (Sleds.empty()) - return; - if (Subtarget->isTargetELF()) { - auto *Section = OutContext.getELFSection( - "xray_instr_map", ELF::SHT_PROGBITS, - ELF::SHF_ALLOC | ELF::SHF_GROUP | ELF::SHF_MERGE, 0, - CurrentFnSym->getName()); - auto PrevSection = OutStreamer->getCurrentSectionOnly(); - OutStreamer->SwitchSection(Section); - for (const auto &Sled : Sleds) { - OutStreamer->EmitSymbolValue(Sled.Sled, 4); - OutStreamer->EmitSymbolValue(CurrentFnSym, 4); - auto Kind = static_cast<uint8_t>(Sled.Kind); - OutStreamer->EmitBytes( - StringRef(reinterpret_cast<const char *>(&Kind), 1)); - OutStreamer->EmitBytes( - StringRef(reinterpret_cast<const char *>(&Sled.AlwaysInstrument), 1)); - OutStreamer->EmitZeros(6); - } - OutStreamer->SwitchSection(PrevSection); - } - Sleds.clear(); -} |