Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/runtime/bcverify/vrfyconvert.c
5986 views
1
/*******************************************************************************
2
* Copyright (c) 1991, 2018 IBM Corp. and others
3
*
4
* This program and the accompanying materials are made available under
5
* the terms of the Eclipse Public License 2.0 which accompanies this
6
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
7
* or the Apache License, Version 2.0 which accompanies this distribution and
8
* is available at https://www.apache.org/licenses/LICENSE-2.0.
9
*
10
* This Source Code may also be made available under the following
11
* Secondary Licenses when the conditions for such availability set
12
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
13
* General Public License, version 2 with the GNU Classpath
14
* Exception [1] and GNU General Public License, version 2 with the
15
* OpenJDK Assembly Exception [2].
16
*
17
* [1] https://www.gnu.org/software/classpath/license.html
18
* [2] http://openjdk.java.net/legal/assembly-exception.html
19
*
20
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
21
*******************************************************************************/
22
23
#include "j9.h"
24
#include "bcverify.h"
25
#include "cfreader.h"
26
27
/* Mapping the verification encoding in J9JavaBytecodeVerificationTable */
28
const U_32 decodeTable[] = {
29
0x0, /* return index */
30
BCV_BASE_TYPE_INT, /* CFR_STACKMAP_TYPE_INT */
31
BCV_BASE_TYPE_FLOAT, /* CFR_STACKMAP_TYPE_FLOAT */
32
BCV_BASE_TYPE_DOUBLE, /* CFR_STACKMAP_TYPE_DOUBLE */
33
BCV_BASE_TYPE_LONG, /* CFR_STACKMAP_TYPE_LONG */
34
BCV_BASE_TYPE_NULL, /* CFR_STACKMAP_TYPE_NULL */
35
0x6, /* return index */
36
BCV_GENERIC_OBJECT, /* CFR_STACKMAP_TYPE_OBJECT */
37
0x8, /* return index */
38
0x9, /* return index */
39
0xA, /* return index */
40
0xB, /* return index */
41
0xC, /* return index */
42
0xD, /* return index */
43
0xE, /* return index */
44
0xF /* return index */
45
};
46
47
/* mapping JBnewarray parameter 0 to 11 */
48
const U_32 newArrayParamConversion[] = {
49
0,
50
0,
51
0,
52
0,
53
(BCV_BASE_TYPE_BOOL_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 4 */
54
(BCV_BASE_TYPE_CHAR_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 5 */
55
(BCV_BASE_TYPE_FLOAT_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 6 */
56
(BCV_BASE_TYPE_DOUBLE_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 7 */
57
(BCV_BASE_TYPE_BYTE_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 8 */
58
(BCV_BASE_TYPE_SHORT_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 9 */
59
(BCV_BASE_TYPE_INT_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 10 */
60
(BCV_BASE_TYPE_LONG_BIT | BCV_TAG_BASE_ARRAY_OR_NULL)}; /* 11 */
61
62
/* mapping characters A..Z,[ */
63
const U_32 baseTypeCharConversion[] = {
64
0, BCV_BASE_TYPE_BYTE_BIT, BCV_BASE_TYPE_CHAR_BIT, BCV_BASE_TYPE_DOUBLE_BIT,
65
0, BCV_BASE_TYPE_FLOAT_BIT, 0, 0,
66
BCV_BASE_TYPE_INT_BIT, BCV_BASE_TYPE_LONG_BIT, 0, 0,
67
0, 0, 0, 0,
68
0, 0, BCV_BASE_TYPE_SHORT_BIT, 0,
69
0, 0, 0, 0,
70
0, BCV_BASE_TYPE_BOOL_BIT, 0};
71
72
/* mapping characters A..Z,[ */
73
const U_32 argTypeCharConversion[] = {
74
0, BCV_BASE_TYPE_INT, BCV_BASE_TYPE_INT, BCV_BASE_TYPE_DOUBLE,
75
0, BCV_BASE_TYPE_FLOAT, 0, 0,
76
BCV_BASE_TYPE_INT, BCV_BASE_TYPE_LONG, 0, 0,
77
0, 0, 0, 0,
78
0, 0, BCV_BASE_TYPE_INT, 0,
79
0, 0, 0, 0,
80
0, BCV_BASE_TYPE_INT, 0};
81
82
/* mapping characters A..Z,[ */
83
const U_32 oneArgTypeCharConversion[] = {
84
0, BCV_BASE_TYPE_INT, BCV_BASE_TYPE_INT, 0,
85
0, BCV_BASE_TYPE_FLOAT, 0, 0,
86
BCV_BASE_TYPE_INT, 0, 0, 0,
87
0, 0, 0, 0,
88
0, 0, BCV_BASE_TYPE_INT, 0,
89
0, 0, 0, 0,
90
0, BCV_BASE_TYPE_INT, 0};
91
92
/* mapping verification base types */
93
const U_8 verificationBaseTokenEncode[] = {
94
CFR_STACKMAP_TYPE_TOP, CFR_STACKMAP_TYPE_INT, CFR_STACKMAP_TYPE_FLOAT, 0,
95
CFR_STACKMAP_TYPE_LONG, 0, 0, 0,
96
CFR_STACKMAP_TYPE_DOUBLE, 0, 0, 0
97
};
98
99
/* mapping verification base types */
100
const U_8 verificationBaseArrayTokenEncode[] = {
101
CFR_STACKMAP_TYPE_NULL, CFR_STACKMAP_TYPE_INT_ARRAY, CFR_STACKMAP_TYPE_FLOAT_ARRAY, 0,
102
CFR_STACKMAP_TYPE_LONG_ARRAY, 0, 0, 0,
103
CFR_STACKMAP_TYPE_DOUBLE_ARRAY, 0, 0, 0,
104
0, 0, 0, 0,
105
CFR_STACKMAP_TYPE_SHORT_ARRAY, 0, 0, 0,
106
0, 0, 0, 0,
107
0, 0, 0, 0,
108
0, 0, 0, 0,
109
CFR_STACKMAP_TYPE_BYTE_ARRAY, 0, 0, 0,
110
0, 0, 0, 0,
111
0, 0, 0, 0,
112
0, 0, 0, 0,
113
0, 0, 0, 0,
114
0, 0, 0, 0,
115
0, 0, 0, 0,
116
0, 0, 0, 0,
117
CFR_STACKMAP_TYPE_CHAR_ARRAY, 0, 0, 0
118
};
119
120
/* unmapping verification types */
121
const U_32 verificationTokenDecode[] = {
122
BCV_BASE_TYPE_TOP, /* 0 - CFR_STACKMAP_TYPE_TOP */
123
BCV_BASE_TYPE_INT, /* 1 - CFR_STACKMAP_TYPE_INT */
124
BCV_BASE_TYPE_FLOAT, /* 2 - CFR_STACKMAP_TYPE_FLOAT */
125
BCV_BASE_TYPE_DOUBLE, /* 3 - CFR_STACKMAP_TYPE_DOUBLE */
126
BCV_BASE_TYPE_LONG, /* 4 - CFR_STACKMAP_TYPE_LONG */
127
BCV_BASE_TYPE_NULL, /* 5 - CFR_STACKMAP_TYPE_NULL */
128
BCV_SPECIAL_INIT, /* 6 - CFR_STACKMAP_TYPE_INIT_OBJECT */
129
BCV_GENERIC_OBJECT, /* 7 - CFR_STACKMAP_TYPE_OBJECT - special handling */
130
BCV_SPECIAL_NEW, /* 8 - CFR_STACKMAP_TYPE_NEW_OBJECT - special handling */
131
BCV_BASE_ARRAY_TYPE_INT, /* 9 - CFR_STACKMAP_TYPE_INT_ARRAY */
132
BCV_BASE_ARRAY_TYPE_FLOAT, /* A - CFR_STACKMAP_TYPE_FLOAT_ARRAY */
133
BCV_BASE_ARRAY_TYPE_DOUBLE, /* B - CFR_STACKMAP_TYPE_DOUBLE_ARRAY */
134
BCV_BASE_ARRAY_TYPE_LONG, /* C - CFR_STACKMAP_TYPE_LONG_ARRAY */
135
BCV_BASE_ARRAY_TYPE_SHORT, /* D - CFR_STACKMAP_TYPE_SHORT_ARRAY */
136
BCV_BASE_ARRAY_TYPE_BYTE, /* E - CFR_STACKMAP_TYPE_BYTE_ARRAY */
137
BCV_BASE_ARRAY_TYPE_CHAR, /* F - CFR_STACKMAP_TYPE_CHAR_ARRAY */
138
BCV_BASE_ARRAY_TYPE_BOOL /* 10 - CFR_STACKMAP_TYPE_BOOL_ARRAY */
139
};
140
141