1 /**
2  * \file
3  */
4 
5 #ifndef __MONO_METADATA_VERIFY_H__
6 #define __MONO_METADATA_VERIFY_H__
7 
8 #include <mono/metadata/metadata.h>
9 #include <mono/metadata/image.h>
10 #include <mono/metadata/loader.h>
11 #include <glib.h> /* GSList dep */
12 
13 MONO_BEGIN_DECLS
14 
15 typedef enum {
16 	MONO_VERIFY_OK,
17 	MONO_VERIFY_ERROR,
18 	MONO_VERIFY_WARNING,
19 	MONO_VERIFY_CLS = 4,
20 	MONO_VERIFY_ALL = 7,
21 
22 	/* Status signaling code that is not verifiable.*/
23 	MONO_VERIFY_NOT_VERIFIABLE = 8,
24 
25 	/*OR it with other flags*/
26 
27 	/* Abort the verification if the code is not verifiable.
28 	 * The standard behavior is to abort if the code is not valid.
29 	 * */
30 	MONO_VERIFY_FAIL_FAST = 16,
31 
32 
33 	/* Perform less verification of the code. This flag should be used
34 	 * if one wants the verifier to be more compatible to the MS runtime.
35 	 * Mind that this is not to be more compatible with MS peverify, but
36 	 * with the runtime itself, that has a less strict verifier.
37 	 */
38 	MONO_VERIFY_NON_STRICT = 32,
39 
40 	/*Skip all visibility related checks*/
41 	MONO_VERIFY_SKIP_VISIBILITY = 64,
42 
43 	/*Skip all visibility related checks*/
44 	MONO_VERIFY_REPORT_ALL_ERRORS = 128
45 
46 } MonoVerifyStatus;
47 
48 typedef struct {
49 	char            *message;
50 	MonoVerifyStatus status;
51 } MonoVerifyInfo;
52 
53 typedef struct {
54 	MonoVerifyInfo info;
55 	int8_t exception_type; /*should be one of MONO_EXCEPTION_* */
56 } MonoVerifyInfoExtended;
57 
58 
59 MONO_API GSList* mono_method_verify       (MonoMethod *method, int level);
60 MONO_API void    mono_free_verify_list    (GSList *list);
61 MONO_API char*   mono_verify_corlib       (void);
62 
63 MONO_END_DECLS
64 
65 #endif  /* __MONO_METADATA_VERIFY_H__ */
66 
67