blob: 2299b8e0878544f1bba3853c34ab0e459529fdd9 (
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
/**************************************************************************************
** **
** Vererror.h - definitions of data structures, needed to report verifier errors. **
** **
**************************************************************************************/
#ifndef __VERERROR_h__
#define __VERERROR_h__
#ifndef _VER_RAW_STRUCT_FOR_IDL_
#ifndef _JIT64_PEV_
#include "corhdr.h"
#include "openum.h"
#include "corerror.h"
#endif // !_JIT64_PEV_
// Set these flags if the error info fields are valid.
#define VER_ERR_FATAL 0x80000000L // Cannot Continue
#define VER_ERR_OFFSET 0x00000001L
#define VER_ERR_OPCODE 0x00000002L
#define VER_ERR_OPERAND 0x00000004L
#define VER_ERR_TOKEN 0x00000008L
#define VER_ERR_EXCEP_NUM_1 0x00000010L
#define VER_ERR_EXCEP_NUM_2 0x00000020L
#define VER_ERR_STACK_SLOT 0x00000040L
#define VER_ERR_ITEM_1 0x00000080L
#define VER_ERR_ITEM_2 0x00000100L
#define VER_ERR_ITEM_F 0x00000200L
#define VER_ERR_ITEM_E 0x00000400L
#define VER_ERR_TYPE_1 0x00000800L
#define VER_ERR_TYPE_2 0x00001000L
#define VER_ERR_TYPE_F 0x00002000L
#define VER_ERR_TYPE_E 0x00004000L
#define VER_ERR_ADDL_MSG 0x00008000L
#define VER_ERR_SIG_MASK 0x07000000L // Enum
#define VER_ERR_METHOD_SIG 0x01000000L
#define VER_ERR_LOCAL_SIG 0x02000000L
#define VER_ERR_FIELD_SIG 0x03000000L
#define VER_ERR_CALL_SIG 0x04000000L
#define VER_ERR_OPCODE_OFFSET (VER_ERR_OPCODE|VER_ERR_OFFSET)
#define VER_ERR_LOCAL_VAR VER_ERR_LOCAL_SIG
#define VER_ERR_ARGUMENT VER_ERR_METHOD_SIG
#define VER_ERR_ARG_RET 0xFFFFFFFEL // The Argument # is return
#define VER_ERR_NO_ARG 0xFFFFFFFFL // Argument # is not valid
#define VER_ERR_NO_LOC VER_ERR_NO_ARG // Local # is not valid
typedef struct
{
DWORD dwFlags; // BYREF / BOXED etc.. see veritem.hpp
void* pv; // TypeHandle / MethodDesc * etc.
} _VerItem;
// This structure is used to fully define a verification error.
// Verification error codes are found in CorError.h
// The error resource strings are found in src/dlls/mscorrc/mscor.rc
typedef struct VerErrorStruct
{
DWORD dwFlags; // VER_ERR_XXX
union {
#ifndef _JIT64_PEV_
OPCODE opcode;
#endif // !_JIT64_PEV_
unsigned long padding1; // to match with idl generated struct size
};
union {
DWORD dwOffset; // #of bytes from start of method
long uOffset; // for backward compat with Metadata validator
};
union {
mdToken token;
mdToken Token; // for backward compat with metadata validator
BYTE bCallConv;
CorElementType elem;
DWORD dwStackSlot; // positon in the Stack
unsigned long padding2; // to match with idl generated struct size
};
union {
_VerItem sItem1;
_VerItem sItemFound;
WCHAR* wszType1;
WCHAR* wszTypeFound;
DWORD dwException1; // Exception Record #
DWORD dwVarNumber; // Variable #
DWORD dwArgNumber; // Argument #
DWORD dwOperand; // Operand for the opcode
WCHAR* wszAdditionalMessage; // message from getlasterror
};
union {
_VerItem sItem2;
_VerItem sItemExpected;
WCHAR* wszType2;
WCHAR* wszTypeExpected;
DWORD dwException2; // Exception Record #
};
} VerError;
#else
// Assert that sizeof(_VerError) == sizeof(VerError) in Verifier.cpp
typedef struct tag_VerError
{
unsigned long flags; // DWORD
unsigned long opcode; // OPCODE, padded to ulong
unsigned long uOffset; // DWORD
unsigned long Token; // mdToken
unsigned long item1_flags; // _VerItem.DWORD
int *item1_data; // _VerItem.PVOID
unsigned long item2_flags; // _VerItem.DWORD
int *item2_data; // _VerItem.PVOID
} _VerError;
#endif
#endif // __VERERROR_h__
|