mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 23:29:22 +00:00
770b97b995
Patch committed on behalf of Kirill Uhanov git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164831 91177308-0d34-0410-b5e6-96231b3b80d8
114 lines
3.3 KiB
C++
114 lines
3.3 KiB
C++
//===- JITEventListenerTest.cpp - Tests for Intel JITEventListener --------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "JITEventListenerTestCommon.h"
|
|
|
|
using namespace llvm;
|
|
|
|
// Because we want to keep the implementation details of the Intel API used to
|
|
// communicate with Amplifier out of the public header files, the header below
|
|
// is included from the source tree instead.
|
|
#include "../../../lib/ExecutionEngine/IntelJITEvents/IntelJITEventsWrapper.h"
|
|
|
|
#include <map>
|
|
#include <list>
|
|
|
|
namespace {
|
|
|
|
// map of function ("method") IDs to source locations
|
|
NativeCodeMap ReportedDebugFuncs;
|
|
|
|
} // namespace
|
|
|
|
/// Mock implementaion of Intel JIT API jitprofiling library
|
|
namespace test_jitprofiling {
|
|
|
|
int NotifyEvent(iJIT_JVM_EVENT EventType, void *EventSpecificData) {
|
|
switch (EventType) {
|
|
case iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED: {
|
|
EXPECT_TRUE(0 != EventSpecificData);
|
|
iJIT_Method_Load* msg = static_cast<iJIT_Method_Load*>(EventSpecificData);
|
|
|
|
ReportedDebugFuncs[msg->method_id];
|
|
|
|
for(unsigned int i = 0; i < msg->line_number_size; ++i) {
|
|
EXPECT_TRUE(0 != msg->line_number_table);
|
|
std::pair<std::string, unsigned int> loc(
|
|
std::string(msg->source_file_name),
|
|
msg->line_number_table[i].LineNumber);
|
|
ReportedDebugFuncs[msg->method_id].push_back(loc);
|
|
}
|
|
}
|
|
break;
|
|
case iJVM_EVENT_TYPE_METHOD_UNLOAD_START: {
|
|
EXPECT_TRUE(0 != EventSpecificData);
|
|
unsigned int UnloadId
|
|
= *reinterpret_cast<unsigned int*>(EventSpecificData);
|
|
EXPECT_TRUE(1 == ReportedDebugFuncs.erase(UnloadId));
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
iJIT_IsProfilingActiveFlags IsProfilingActive(void) {
|
|
// for testing, pretend we have an Intel Parallel Amplifier XE 2011
|
|
// instance attached
|
|
return iJIT_SAMPLING_ON;
|
|
}
|
|
|
|
unsigned int GetNewMethodID(void) {
|
|
static unsigned int id = 0;
|
|
return ++id;
|
|
}
|
|
|
|
} //namespace test_jitprofiling
|
|
|
|
class IntelJITEventListenerTest
|
|
: public JITEventListenerTestBase<IntelJITEventsWrapper> {
|
|
public:
|
|
IntelJITEventListenerTest()
|
|
: JITEventListenerTestBase<IntelJITEventsWrapper>(
|
|
new IntelJITEventsWrapper(test_jitprofiling::NotifyEvent, 0,
|
|
test_jitprofiling::IsProfilingActive, 0, 0,
|
|
test_jitprofiling::GetNewMethodID))
|
|
{
|
|
EXPECT_TRUE(0 != MockWrapper);
|
|
|
|
Listener.reset(JITEventListener::createIntelJITEventListener(
|
|
MockWrapper.take()));
|
|
EXPECT_TRUE(0 != Listener);
|
|
EE->RegisterJITEventListener(Listener.get());
|
|
}
|
|
};
|
|
|
|
TEST_F(IntelJITEventListenerTest, NoDebugInfo) {
|
|
TestNoDebugInfo(ReportedDebugFuncs);
|
|
}
|
|
|
|
TEST_F(IntelJITEventListenerTest, SingleLine) {
|
|
TestSingleLine(ReportedDebugFuncs);
|
|
}
|
|
|
|
TEST_F(IntelJITEventListenerTest, MultipleLines) {
|
|
TestMultipleLines(ReportedDebugFuncs);
|
|
}
|
|
|
|
// This testcase is disabled because the Intel JIT API does not support a single
|
|
// JITted function with source lines associated with multiple files
|
|
/*
|
|
TEST_F(IntelJITEventListenerTest, MultipleFiles) {
|
|
TestMultipleFiles(ReportedDebugFuncs);
|
|
}
|
|
*/
|
|
|
|
testing::Environment* const jit_env =
|
|
testing::AddGlobalTestEnvironment(new JITEnvironment);
|