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 "simpletimer.h"
8#include "methodcontext.h"
9#include "methodcontextiterator.h"
10#include "verbdumpmap.h"
11#include "verbildump.h"
12
13// Dump the CSV format header for all the columns we're going to dump.
14void DumpMapHeader()
15{
16 printf("index,");
17 // printf("process name,");
18 printf("method name,");
19 printf("full signature\n");
20}
21
22void DumpMap(int index, MethodContext* mc)
23{
24 CORINFO_METHOD_INFO cmi;
25 unsigned int flags = 0;
26
27 mc->repCompileMethod(&cmi, &flags);
28
29 const char* moduleName = nullptr;
30 const char* methodName = mc->repGetMethodName(cmi.ftn, &moduleName);
31 const char* className = mc->repGetClassName(mc->repGetMethodClass(cmi.ftn));
32
33 printf("%d,", index);
34 // printf("\"%s\",", mc->cr->repProcessName());
35 printf("%s:%s,", className, methodName);
36
37 // Also, dump the full method signature
38 printf("\"");
39 DumpAttributeToConsoleBare(mc->repGetMethodAttribs(cmi.ftn));
40 DumpPrimToConsoleBare(mc, cmi.args.retType, (DWORDLONG)cmi.args.retTypeClass);
41 printf(" %s(", methodName);
42 DumpSigToConsoleBare(mc, &cmi.args);
43 printf(")\"\n");
44}
45
46int verbDumpMap::DoWork(const char* nameOfInput)
47{
48 MethodContextIterator mci;
49 if (!mci.Initialize(nameOfInput))
50 return -1;
51
52 DumpMapHeader();
53
54 while (mci.MoveNext())
55 {
56 MethodContext* mc = mci.Current();
57 DumpMap(mci.MethodContextNumber(), mc);
58 }
59
60 if (!mci.Destroy())
61 return -1;
62
63 return 0;
64}
65