Path: blob/master/runtime/bcverify/vrfyconvert.c
5986 views
/*******************************************************************************1* Copyright (c) 1991, 2018 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* 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-exception20*******************************************************************************/2122#include "j9.h"23#include "bcverify.h"24#include "cfreader.h"2526/* Mapping the verification encoding in J9JavaBytecodeVerificationTable */27const U_32 decodeTable[] = {280x0, /* return index */29BCV_BASE_TYPE_INT, /* CFR_STACKMAP_TYPE_INT */30BCV_BASE_TYPE_FLOAT, /* CFR_STACKMAP_TYPE_FLOAT */31BCV_BASE_TYPE_DOUBLE, /* CFR_STACKMAP_TYPE_DOUBLE */32BCV_BASE_TYPE_LONG, /* CFR_STACKMAP_TYPE_LONG */33BCV_BASE_TYPE_NULL, /* CFR_STACKMAP_TYPE_NULL */340x6, /* return index */35BCV_GENERIC_OBJECT, /* CFR_STACKMAP_TYPE_OBJECT */360x8, /* return index */370x9, /* return index */380xA, /* return index */390xB, /* return index */400xC, /* return index */410xD, /* return index */420xE, /* return index */430xF /* return index */44};4546/* mapping JBnewarray parameter 0 to 11 */47const U_32 newArrayParamConversion[] = {480,490,500,510,52(BCV_BASE_TYPE_BOOL_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 4 */53(BCV_BASE_TYPE_CHAR_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 5 */54(BCV_BASE_TYPE_FLOAT_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 6 */55(BCV_BASE_TYPE_DOUBLE_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 7 */56(BCV_BASE_TYPE_BYTE_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 8 */57(BCV_BASE_TYPE_SHORT_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 9 */58(BCV_BASE_TYPE_INT_BIT | BCV_TAG_BASE_ARRAY_OR_NULL), /* 10 */59(BCV_BASE_TYPE_LONG_BIT | BCV_TAG_BASE_ARRAY_OR_NULL)}; /* 11 */6061/* mapping characters A..Z,[ */62const U_32 baseTypeCharConversion[] = {630, BCV_BASE_TYPE_BYTE_BIT, BCV_BASE_TYPE_CHAR_BIT, BCV_BASE_TYPE_DOUBLE_BIT,640, BCV_BASE_TYPE_FLOAT_BIT, 0, 0,65BCV_BASE_TYPE_INT_BIT, BCV_BASE_TYPE_LONG_BIT, 0, 0,660, 0, 0, 0,670, 0, BCV_BASE_TYPE_SHORT_BIT, 0,680, 0, 0, 0,690, BCV_BASE_TYPE_BOOL_BIT, 0};7071/* mapping characters A..Z,[ */72const U_32 argTypeCharConversion[] = {730, BCV_BASE_TYPE_INT, BCV_BASE_TYPE_INT, BCV_BASE_TYPE_DOUBLE,740, BCV_BASE_TYPE_FLOAT, 0, 0,75BCV_BASE_TYPE_INT, BCV_BASE_TYPE_LONG, 0, 0,760, 0, 0, 0,770, 0, BCV_BASE_TYPE_INT, 0,780, 0, 0, 0,790, BCV_BASE_TYPE_INT, 0};8081/* mapping characters A..Z,[ */82const U_32 oneArgTypeCharConversion[] = {830, BCV_BASE_TYPE_INT, BCV_BASE_TYPE_INT, 0,840, BCV_BASE_TYPE_FLOAT, 0, 0,85BCV_BASE_TYPE_INT, 0, 0, 0,860, 0, 0, 0,870, 0, BCV_BASE_TYPE_INT, 0,880, 0, 0, 0,890, BCV_BASE_TYPE_INT, 0};9091/* mapping verification base types */92const U_8 verificationBaseTokenEncode[] = {93CFR_STACKMAP_TYPE_TOP, CFR_STACKMAP_TYPE_INT, CFR_STACKMAP_TYPE_FLOAT, 0,94CFR_STACKMAP_TYPE_LONG, 0, 0, 0,95CFR_STACKMAP_TYPE_DOUBLE, 0, 0, 096};9798/* mapping verification base types */99const U_8 verificationBaseArrayTokenEncode[] = {100CFR_STACKMAP_TYPE_NULL, CFR_STACKMAP_TYPE_INT_ARRAY, CFR_STACKMAP_TYPE_FLOAT_ARRAY, 0,101CFR_STACKMAP_TYPE_LONG_ARRAY, 0, 0, 0,102CFR_STACKMAP_TYPE_DOUBLE_ARRAY, 0, 0, 0,1030, 0, 0, 0,104CFR_STACKMAP_TYPE_SHORT_ARRAY, 0, 0, 0,1050, 0, 0, 0,1060, 0, 0, 0,1070, 0, 0, 0,108CFR_STACKMAP_TYPE_BYTE_ARRAY, 0, 0, 0,1090, 0, 0, 0,1100, 0, 0, 0,1110, 0, 0, 0,1120, 0, 0, 0,1130, 0, 0, 0,1140, 0, 0, 0,1150, 0, 0, 0,116CFR_STACKMAP_TYPE_CHAR_ARRAY, 0, 0, 0117};118119/* unmapping verification types */120const U_32 verificationTokenDecode[] = {121BCV_BASE_TYPE_TOP, /* 0 - CFR_STACKMAP_TYPE_TOP */122BCV_BASE_TYPE_INT, /* 1 - CFR_STACKMAP_TYPE_INT */123BCV_BASE_TYPE_FLOAT, /* 2 - CFR_STACKMAP_TYPE_FLOAT */124BCV_BASE_TYPE_DOUBLE, /* 3 - CFR_STACKMAP_TYPE_DOUBLE */125BCV_BASE_TYPE_LONG, /* 4 - CFR_STACKMAP_TYPE_LONG */126BCV_BASE_TYPE_NULL, /* 5 - CFR_STACKMAP_TYPE_NULL */127BCV_SPECIAL_INIT, /* 6 - CFR_STACKMAP_TYPE_INIT_OBJECT */128BCV_GENERIC_OBJECT, /* 7 - CFR_STACKMAP_TYPE_OBJECT - special handling */129BCV_SPECIAL_NEW, /* 8 - CFR_STACKMAP_TYPE_NEW_OBJECT - special handling */130BCV_BASE_ARRAY_TYPE_INT, /* 9 - CFR_STACKMAP_TYPE_INT_ARRAY */131BCV_BASE_ARRAY_TYPE_FLOAT, /* A - CFR_STACKMAP_TYPE_FLOAT_ARRAY */132BCV_BASE_ARRAY_TYPE_DOUBLE, /* B - CFR_STACKMAP_TYPE_DOUBLE_ARRAY */133BCV_BASE_ARRAY_TYPE_LONG, /* C - CFR_STACKMAP_TYPE_LONG_ARRAY */134BCV_BASE_ARRAY_TYPE_SHORT, /* D - CFR_STACKMAP_TYPE_SHORT_ARRAY */135BCV_BASE_ARRAY_TYPE_BYTE, /* E - CFR_STACKMAP_TYPE_BYTE_ARRAY */136BCV_BASE_ARRAY_TYPE_CHAR, /* F - CFR_STACKMAP_TYPE_CHAR_ARRAY */137BCV_BASE_ARRAY_TYPE_BOOL /* 10 - CFR_STACKMAP_TYPE_BOOL_ARRAY */138};139140141