move to LLVM 3.9
This change removes support for earlier LLVM versions; making them work as well is simply too tedious. Change-Id: I372a151279ceb2bfd6de101c9e0c15f0a4b18c03
This commit is contained in:
@ -104,14 +104,20 @@ bool AdvancedMemoryImporter::handle_ip_event(fail::simtime_t curtime, instructio
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
|
||||
if (llvm::error_code ec = createBinary(m_elf->getFilename(), binary)) {
|
||||
LOG << m_elf->getFilename() << "': " << ec.message() << ".\n";
|
||||
Expected<OwningBinary<Binary>> BinaryOrErr = createBinary(m_elf->getFilename());
|
||||
if (!BinaryOrErr) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
logAllUnhandledErrors(std::move(BinaryOrErr.takeError()), OS, "");
|
||||
OS.flush();
|
||||
LOG << m_elf->getFilename() << "': " << Buf << ".\n";
|
||||
return false;
|
||||
}
|
||||
binary = &(*BinaryOrErr.get().getBinary());
|
||||
|
||||
// necessary due to an AspectC++ bug triggered by LLVM 3.3's dyn_cast()
|
||||
#ifndef __puma
|
||||
ObjectFile *obj = dyn_cast<ObjectFile>(binary.get());
|
||||
ObjectFile *obj = dyn_cast<ObjectFile>(binary);
|
||||
disas.reset(new LLVMDisassembler(obj));
|
||||
#endif
|
||||
disas->disassemble();
|
||||
|
||||
@ -24,8 +24,8 @@
|
||||
* operations with a set of new virtual functions that are called downwards.
|
||||
*/
|
||||
class AdvancedMemoryImporter : public MemoryImporter {
|
||||
llvm::OwningPtr<llvm::object::Binary> binary;
|
||||
llvm::OwningPtr<fail::LLVMDisassembler> disas;
|
||||
llvm::object::Binary *binary = 0;
|
||||
std::unique_ptr<fail::LLVMDisassembler> disas;
|
||||
bool m_last_was_conditional_branch;
|
||||
fail::guest_address_t m_ip_jump_not_taken;
|
||||
std::vector<bool> branches_taken;
|
||||
|
||||
@ -27,8 +27,8 @@
|
||||
into the database.
|
||||
*/
|
||||
class ElfImporter : public Importer {
|
||||
llvm::OwningPtr<llvm::object::Binary> binary;
|
||||
llvm::OwningPtr<fail::LLVMDisassembler> disas;
|
||||
std::unique_ptr<llvm::object::Binary> binary;
|
||||
std::unique_ptr<fail::LLVMDisassembler> disas;
|
||||
|
||||
fail::CommandLine::option_handle OBJDUMP;
|
||||
fail::CommandLine::option_handle SOURCECODE;
|
||||
|
||||
@ -18,14 +18,20 @@ bool InstructionImporter::handle_ip_event(fail::simtime_t curtime, instruction_c
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
|
||||
if (llvm::error_code ec = createBinary(m_elf->getFilename(), binary)) {
|
||||
LOG << m_elf->getFilename() << "': " << ec.message() << ".\n";
|
||||
Expected<OwningBinary<Binary>> BinaryOrErr = createBinary(m_elf->getFilename());
|
||||
if (!BinaryOrErr) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
logAllUnhandledErrors(std::move(BinaryOrErr.takeError()), OS, "");
|
||||
OS.flush();
|
||||
LOG << m_elf->getFilename() << "': " << Buf << ".\n";
|
||||
return false;
|
||||
}
|
||||
binary = &(*BinaryOrErr.get().getBinary());
|
||||
|
||||
// necessary due to an AspectC++ bug triggered by LLVM 3.3's dyn_cast()
|
||||
#ifndef __puma
|
||||
ObjectFile *obj = llvm::dyn_cast<ObjectFile>(binary.get());
|
||||
ObjectFile *obj = llvm::dyn_cast<ObjectFile>(binary);
|
||||
disas.reset(new LLVMDisassembler(obj));
|
||||
#endif
|
||||
disas->disassemble();
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
#include "util/llvmdisassembler/LLVMDisassembler.hpp"
|
||||
|
||||
class InstructionImporter : public Importer {
|
||||
llvm::OwningPtr<llvm::object::Binary> binary;
|
||||
llvm::OwningPtr<fail::LLVMDisassembler> disas;
|
||||
llvm::object::Binary *binary = 0;
|
||||
std::unique_ptr<fail::LLVMDisassembler> disas;
|
||||
|
||||
protected:
|
||||
virtual bool handle_ip_event(fail::simtime_t curtime, instruction_count_t instr,
|
||||
|
||||
@ -65,14 +65,20 @@ bool RandomJumpImporter::handle_ip_event(fail::simtime_t curtime, instruction_co
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
|
||||
if (llvm::error_code ec = createBinary(m_elf->getFilename(), binary)) {
|
||||
LOG << m_elf->getFilename() << "': " << ec.message() << ".\n";
|
||||
Expected<OwningBinary<Binary>> BinaryOrErr = createBinary(m_elf->getFilename());
|
||||
if (!BinaryOrErr) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
logAllUnhandledErrors(std::move(BinaryOrErr.takeError()), OS, "");
|
||||
OS.flush();
|
||||
LOG << m_elf->getFilename() << "': " << Buf << ".\n";
|
||||
return false;
|
||||
}
|
||||
binary = &(*BinaryOrErr.get().getBinary());
|
||||
|
||||
// necessary due to an AspectC++ bug triggered by LLVM 3.3's dyn_cast()
|
||||
#ifndef __puma
|
||||
ObjectFile *obj = dyn_cast<ObjectFile>(binary.get());
|
||||
ObjectFile *obj = dyn_cast<ObjectFile>(binary);
|
||||
disas.reset(new LLVMDisassembler(obj));
|
||||
#endif
|
||||
disas->disassemble();
|
||||
|
||||
@ -8,8 +8,8 @@
|
||||
#include "util/llvmdisassembler/LLVMDisassembler.hpp"
|
||||
|
||||
class RandomJumpImporter : public Importer {
|
||||
llvm::OwningPtr<llvm::object::Binary> binary;
|
||||
llvm::OwningPtr<fail::LLVMDisassembler> disas;
|
||||
llvm::object::Binary *binary = 0;
|
||||
std::unique_ptr<fail::LLVMDisassembler> disas;
|
||||
|
||||
fail::CommandLine::option_handle FROM, TO;
|
||||
|
||||
|
||||
@ -133,19 +133,27 @@ bool RegisterImporter::handle_ip_event(fail::simtime_t curtime, instruction_coun
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
|
||||
if (llvm::error_code ec = createBinary(m_elf->getFilename(), binary)) {
|
||||
LOG << m_elf->getFilename() << "': " << ec.message() << ".\n";
|
||||
Expected<OwningBinary<Binary>> BinaryOrErr = createBinary(m_elf->getFilename());
|
||||
if (!BinaryOrErr) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
logAllUnhandledErrors(std::move(BinaryOrErr.takeError()), OS, "");
|
||||
OS.flush();
|
||||
LOG << m_elf->getFilename() << "': " << Buf << ".\n";
|
||||
return false;
|
||||
}
|
||||
binary = BinaryOrErr.get().getBinary();
|
||||
|
||||
// necessary due to an AspectC++ bug triggered by LLVM 3.3's dyn_cast()
|
||||
#ifndef __puma
|
||||
ObjectFile *obj = dyn_cast<ObjectFile>(binary.get());
|
||||
ObjectFile *obj = dyn_cast<ObjectFile>(binary);
|
||||
disas.reset(new LLVMDisassembler(obj));
|
||||
#endif
|
||||
disas->disassemble();
|
||||
LLVMDisassembler::InstrMap &instr_map = disas->getInstrMap();
|
||||
LOG << "instructions disassembled: " << instr_map.size() << " Triple: " << disas->GetTriple() << std::endl;
|
||||
|
||||
m_ltof = disas->getTranslator() ;
|
||||
}
|
||||
|
||||
// instruction pointer is read + written at each instruction
|
||||
@ -165,12 +173,10 @@ bool RegisterImporter::handle_ip_event(fail::simtime_t curtime, instruction_coun
|
||||
const LLVMDisassembler::Instr &opcode = instr_map.at(ev.ip());
|
||||
//const MCRegisterInfo ®_info = disas->getRegisterInfo();
|
||||
|
||||
fail::LLVMtoFailTranslator & ltof = disas->getTranslator() ;
|
||||
|
||||
for (std::vector<LLVMDisassembler::register_t>::const_iterator it = opcode.reg_uses.begin();
|
||||
it != opcode.reg_uses.end(); ++it) {
|
||||
const LLVMtoFailTranslator::reginfo_t &info = ltof.getFailRegisterID(*it);
|
||||
if (&info == <of.notfound) {
|
||||
const LLVMtoFailTranslator::reginfo_t &info = m_ltof->getFailRegisterID(*it);
|
||||
if (&info == &m_ltof->notfound) {
|
||||
LOG << "Could not find a mapping for LLVM input register #" << std::dec << *it
|
||||
<< " at IP " << std::hex << ev.ip()
|
||||
<< ", skipping" << std::endl;
|
||||
@ -189,8 +195,8 @@ bool RegisterImporter::handle_ip_event(fail::simtime_t curtime, instruction_coun
|
||||
|
||||
for (std::vector<LLVMDisassembler::register_t>::const_iterator it = opcode.reg_defs.begin();
|
||||
it != opcode.reg_defs.end(); ++it) {
|
||||
const LLVMtoFailTranslator::reginfo_t &info = ltof.getFailRegisterID(*it);
|
||||
if (&info == <of.notfound) {
|
||||
const LLVMtoFailTranslator::reginfo_t &info = m_ltof->getFailRegisterID(*it);
|
||||
if (&info == &m_ltof->notfound) {
|
||||
LOG << "Could not find a mapping for LLVM output register #" << std::dec << *it
|
||||
<< " at IP " << std::hex << ev.ip()
|
||||
<< ", skipping" << std::endl;
|
||||
|
||||
@ -9,8 +9,9 @@
|
||||
|
||||
|
||||
class RegisterImporter : public Importer {
|
||||
llvm::OwningPtr<llvm::object::Binary> binary;
|
||||
llvm::OwningPtr<fail::LLVMDisassembler> disas;
|
||||
llvm::object::Binary *binary = 0;
|
||||
std::unique_ptr<fail::LLVMDisassembler> disas;
|
||||
fail::LLVMtoFailTranslator *m_ltof = 0;
|
||||
|
||||
bool addRegisterTrace(fail::simtime_t curtime, instruction_count_t instr,
|
||||
Trace_Event &ev,
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
#include "util/AliasedRegistry.hpp"
|
||||
|
||||
#ifdef BUILD_LLVM_DISASSEMBLER
|
||||
#include "llvm/Support/ManagedStatic.h"
|
||||
#include "InstructionImporter.hpp"
|
||||
#include "RegisterImporter.hpp"
|
||||
#include "RandomJumpImporter.hpp"
|
||||
@ -67,6 +68,7 @@ int main(int argc, char *argv[]) {
|
||||
registry.add(&fti);
|
||||
|
||||
#ifdef BUILD_LLVM_DISASSEMBLER
|
||||
llvm::llvm_shutdown_obj Y;
|
||||
RegisterImporter reg;
|
||||
registry.add(®);
|
||||
RandomJumpImporter rjump;
|
||||
|
||||
Reference in New Issue
Block a user