1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
#include "standardpch.h"
#include "runtimedetails.h"
#include "spmiutil.h"
#include "jithost.h"
JitHost* g_ourJitHost;
JitHost::JitHost(ICorJitHost* wrappedHost, MethodContext* methodContext) : wrappedHost(wrappedHost), mc(methodContext)
{
}
void JitHost::setMethodContext(MethodContext* methodContext)
{
this->mc = methodContext;
}
void* JitHost::allocateMemory(size_t size, bool usePageAllocator)
{
return wrappedHost->allocateMemory(size, usePageAllocator);
}
void JitHost::freeMemory(void* block, bool usePageAllocator)
{
return wrappedHost->freeMemory(block, usePageAllocator);
}
int JitHost::getIntConfigValue(const wchar_t* key, int defaultValue)
{
mc->cr->AddCall("getIntConfigValue");
int result = wrappedHost->getIntConfigValue(key, defaultValue);
// The JIT eagerly asks about every config value. If we store all these
// queries, it takes almost half the MC file space. So only store the
// non-default answers.
if (result != defaultValue)
{
mc->recGetIntConfigValue(key, defaultValue, result);
}
return result;
}
const wchar_t* JitHost::getStringConfigValue(const wchar_t* key)
{
mc->cr->AddCall("getStringConfigValue");
const wchar_t* result = wrappedHost->getStringConfigValue(key);
// Don't store null returns, which is the default
if (result != nullptr)
{
mc->recGetStringConfigValue(key, result);
}
return result;
}
void JitHost::freeStringConfigValue(const wchar_t* value)
{
mc->cr->AddCall("freeStringConfigValue");
wrappedHost->freeStringConfigValue(value);
}
|