summaryrefslogtreecommitdiff
path: root/src/ToolBox/superpmi/superpmi-shim-collector/jithost.cpp
blob: fd5c46aeee402761d184e9783cd5fc72035beb93 (plain)
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);
}