161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky//===- JITEventListenerTestCommon.h - Helper for JITEventListener tests ------------===// 261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky// 361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky// The LLVM Compiler Infrastructure 461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky// 561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky// This file is distributed under the University of Illinois Open Source 661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky// License. See LICENSE.TXT for details. 761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky// 861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky//===-------------------------------------------------------------------------------===// 961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 1061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#ifndef JIT_EVENT_LISTENER_TEST_COMMON_H 1161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#define JIT_EVENT_LISTENER_TEST_COMMON_H 1261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 1316eeb6f5ebc978b03745177b9ac82684ab1c6932Bill Wendling#include "llvm/DIBuilder.h" 1406cb8ed00696eb14d1b831921452e50ec0568ea2Chandler Carruth#include "llvm/DebugInfo.h" 1506cb8ed00696eb14d1b831921452e50ec0568ea2Chandler Carruth#include "llvm/IRBuilder.h" 160bcbd1df7a204e1e512f1a27066d725309de1b13Bill Wendling#include "llvm/Instructions.h" 170bcbd1df7a204e1e512f1a27066d725309de1b13Bill Wendling#include "llvm/Module.h" 1838f488e46292e38c776dd6ec3e3a0b8c57952fcbChandler Carruth#include "llvm/TypeBuilder.h" 1961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include "llvm/CodeGen/MachineCodeInfo.h" 2061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include "llvm/ExecutionEngine/JIT.h" 2161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include "llvm/ExecutionEngine/JITEventListener.h" 2261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include "llvm/Support/Dwarf.h" 2361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include "llvm/Support/TargetSelect.h" 2406cb8ed00696eb14d1b831921452e50ec0568ea2Chandler Carruth#include "llvm/Config/config.h" 2561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 2661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include "gtest/gtest.h" 2761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 2861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include <vector> 2961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include <string> 3061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#include <utility> 3161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 3261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskytypedef std::vector<std::pair<std::string, unsigned int> > SourceLocations; 3361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskytypedef std::map<uint64_t, SourceLocations> NativeCodeMap; 3461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 3561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskyclass JITEnvironment : public testing::Environment { 3661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky virtual void SetUp() { 3761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky // Required to create a JIT. 3861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::InitializeNativeTarget(); 3961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 4061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky}; 4161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 4261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskyinline unsigned int getLine() { 4361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky return 12; 4461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky} 4561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 4661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskyinline unsigned int getCol() { 4761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky return 0; 4861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky} 4961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 5061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskyinline const char* getFilename() { 5161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky return "mock_source_file.cpp"; 5261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky} 5361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 5461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky// Test fixture shared by tests for listener implementations 5561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskytemplate<typename WrapperT> 5661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskyclass JITEventListenerTestBase : public testing::Test { 5761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskyprotected: 5861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::OwningPtr<WrapperT> MockWrapper; 5961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::OwningPtr<llvm::JITEventListener> Listener; 6061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 6161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Benderskypublic: 6261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::Module* M; 6361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::MDNode* Scope; 6461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::ExecutionEngine* EE; 6561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::DIBuilder* DebugBuilder; 6661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::IRBuilder<> Builder; 6761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 6861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky JITEventListenerTestBase(WrapperT* w) 6961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky : MockWrapper(w) 7061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky , M(new llvm::Module("module", llvm::getGlobalContext())) 7161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky , EE(llvm::EngineBuilder(M) 7261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky .setEngineKind(llvm::EngineKind::JIT) 7361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky .setOptLevel(llvm::CodeGenOpt::None) 7461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky .create()) 7561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky , DebugBuilder(new llvm::DIBuilder(*M)) 7661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky , Builder(llvm::getGlobalContext()) 7761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky { 7861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugBuilder->createCompileUnit(llvm::dwarf::DW_LANG_C_plus_plus, 7961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky "JIT", 8061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky "JIT", 8161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky "JIT", 8261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky true, 8361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky "", 8461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 1); 8561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 8661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Scope = DebugBuilder->createFile(getFilename(), "."); 8761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 8861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 8961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::Function *buildFunction(const SourceLocations& DebugLocations) { 9061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky using namespace llvm; 9161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 9261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky LLVMContext& GlobalContext = getGlobalContext(); 9361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 9461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky SourceLocations::const_iterator CurrentDebugLocation 9561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky = DebugLocations.begin(); 9661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 9761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky if (CurrentDebugLocation != DebugLocations.end()) { 9861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugLoc DebugLocation = DebugLoc::get(getLine(), getCol(), 9961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugBuilder->createFile(CurrentDebugLocation->first, ".")); 10061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Builder.SetCurrentDebugLocation(DebugLocation); 10161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky CurrentDebugLocation++; 10261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 10361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 10461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Function *Result = Function::Create( 10561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky TypeBuilder<int32_t(int32_t), false>::get(GlobalContext), 10661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky GlobalValue::ExternalLinkage, "id", M); 10761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Value *Arg = Result->arg_begin(); 10861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky BasicBlock *BB = BasicBlock::Create(M->getContext(), "entry", Result); 10961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Builder.SetInsertPoint(BB); 11061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Value* one = ConstantInt::get(GlobalContext, APInt(32, 1)); 11161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky for(; CurrentDebugLocation != DebugLocations.end(); 11261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky ++CurrentDebugLocation) { 11361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Arg = Builder.CreateMul(Arg, Builder.CreateAdd(Arg, one)); 11461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Builder.SetCurrentDebugLocation( 11561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugLoc::get(CurrentDebugLocation->second, 0, 11661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugBuilder->createFile(CurrentDebugLocation->first, "."))); 11761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 11861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky Builder.CreateRet(Arg); 11961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky return Result; 12061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 12161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 12261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky void TestNoDebugInfo(NativeCodeMap& ReportedDebugFuncs) { 12361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky SourceLocations DebugLocations; 12461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::Function* f = buildFunction(DebugLocations); 12561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != f); 12661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 12761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky //Cause JITting and callbacks to our listener 12861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != EE->getPointerToFunction(f)); 12961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(1 == ReportedDebugFuncs.size()); 13061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 13161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EE->freeMachineCodeForFunction(f); 13261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(ReportedDebugFuncs.size() == 0); 13361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 13461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 13561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky void TestSingleLine(NativeCodeMap& ReportedDebugFuncs) { 13661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky SourceLocations DebugLocations; 13761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugLocations.push_back(std::make_pair(std::string(getFilename()), 13861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky getLine())); 13961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::Function* f = buildFunction(DebugLocations); 14061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != f); 14161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 14261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != EE->getPointerToFunction(f)); 14361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(1 == ReportedDebugFuncs.size()); 14461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_STREQ(ReportedDebugFuncs.begin()->second.begin()->first.c_str(), 14561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky getFilename()); 14661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_EQ(ReportedDebugFuncs.begin()->second.begin()->second, getLine()); 14761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 14861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EE->freeMachineCodeForFunction(f); 14961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(ReportedDebugFuncs.size() == 0); 15061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 15161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 15261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky void TestMultipleLines(NativeCodeMap& ReportedDebugFuncs) { 15361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky using namespace std; 15461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 15561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky SourceLocations DebugLocations; 15661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky unsigned int c = 5; 15761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky for(unsigned int i = 0; i < c; ++i) { 15861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugLocations.push_back(make_pair(string(getFilename()), getLine() + i)); 15961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 16061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 16161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::Function* f = buildFunction(DebugLocations); 16261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != f); 16361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 16461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != EE->getPointerToFunction(f)); 16561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(1 == ReportedDebugFuncs.size()); 16661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky SourceLocations& FunctionInfo = ReportedDebugFuncs.begin()->second; 16761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_EQ(c, FunctionInfo.size()); 16861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 16961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky int VerifyCount = 0; 17061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky for(SourceLocations::iterator i = FunctionInfo.begin(); 17161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky i != FunctionInfo.end(); 17261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky ++i) { 17361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_STREQ(i->first.c_str(), getFilename()); 17461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_EQ(i->second, getLine() + VerifyCount); 17561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky VerifyCount++; 17661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 17761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 17861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EE->freeMachineCodeForFunction(f); 17961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(ReportedDebugFuncs.size() == 0); 18061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 18161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 18261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky void TestMultipleFiles(NativeCodeMap& ReportedDebugFuncs) { 18361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 18461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky std::string secondFilename("another_file.cpp"); 18561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 18661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky SourceLocations DebugLocations; 18761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugLocations.push_back(std::make_pair(std::string(getFilename()), 18861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky getLine())); 18961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky DebugLocations.push_back(std::make_pair(secondFilename, getLine())); 19061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky llvm::Function* f = buildFunction(DebugLocations); 19161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != f); 19261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 19361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(0 != EE->getPointerToFunction(f)); 19461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(1 == ReportedDebugFuncs.size()); 19561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky SourceLocations& FunctionInfo = ReportedDebugFuncs.begin()->second; 19661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(2 == FunctionInfo.size()); 19761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 19861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_STREQ(FunctionInfo.at(0).first.c_str(), getFilename()); 19961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_STREQ(FunctionInfo.at(1).first.c_str(), secondFilename.c_str()); 20061b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 20161b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_EQ(FunctionInfo.at(0).second, getLine()); 20261b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_EQ(FunctionInfo.at(1).second, getLine()); 20361b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 20461b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EE->freeMachineCodeForFunction(f); 20561b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky EXPECT_TRUE(ReportedDebugFuncs.size() == 0); 20661b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky } 20761b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky}; 20861b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky 20961b1851a205cb8dd29c1d3d4231efb8f8f7da283Eli Bendersky#endif //JIT_EVENT_LISTENER_TEST_COMMON_H 210