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