| // Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| package com.android.tools.r8.dex; | |
| import com.android.tools.r8.cf.CfVersion; | |
| public class Constants { | |
| @SuppressWarnings("MutablePublicArray") | |
| public static final byte[] DEX_FILE_MAGIC_PREFIX = {'d', 'e', 'x', '\n'}; | |
| public static final byte DEX_FILE_MAGIC_SUFFIX = '\0'; | |
| @SuppressWarnings("MutablePublicArray") | |
| public static final byte[] VDEX_FILE_MAGIC_PREFIX = {'v', 'd', 'e', 'x'}; | |
| public static final int VDEX_FILE_VERSION_LENGTH = 4; | |
| /** Supported vdex file versions */ | |
| public static final int MIN_VDEX_VERSION = 10; | |
| public static final int MAX_VDEX_VERSION = 11; | |
| // We apply Java 6 class file constraints on DEX files. | |
| public static final CfVersion CORRESPONDING_CLASS_FILE_VERSION = CfVersion.V1_6; | |
| public static final int DEX_MAGIC_SIZE = 8; | |
| public static final int MAGIC_OFFSET = 0; | |
| public static final int CHECKSUM_OFFSET = MAGIC_OFFSET + DEX_MAGIC_SIZE; | |
| public static final int SIGNATURE_OFFSET = CHECKSUM_OFFSET + 4; | |
| public static final int FILE_SIZE_OFFSET = SIGNATURE_OFFSET + 20; | |
| public static final int HEADER_SIZE_OFFSET = FILE_SIZE_OFFSET + 4; | |
| public static final int ENDIAN_TAG_OFFSET = HEADER_SIZE_OFFSET + 4; | |
| public static final int LINK_SIZE_OFFSET = ENDIAN_TAG_OFFSET + 4; | |
| public static final int LINK_OFF_OFFSET = LINK_SIZE_OFFSET + 4; | |
| public static final int MAP_OFF_OFFSET = LINK_OFF_OFFSET + 4; | |
| public static final int STRING_IDS_SIZE_OFFSET = MAP_OFF_OFFSET + 4; | |
| public static final int STRING_IDS_OFF_OFFSET = STRING_IDS_SIZE_OFFSET + 4; | |
| public static final int TYPE_IDS_SIZE_OFFSET = STRING_IDS_OFF_OFFSET + 4; | |
| public static final int TYPE_IDS_OFF_OFFSET = TYPE_IDS_SIZE_OFFSET + 4; | |
| public static final int PROTO_IDS_SIZE_OFFSET = TYPE_IDS_OFF_OFFSET + 4; | |
| public static final int PROTO_IDS_OFF_OFFSET = PROTO_IDS_SIZE_OFFSET + 4; | |
| public static final int FIELD_IDS_SIZE_OFFSET = PROTO_IDS_OFF_OFFSET + 4; | |
| public static final int FIELD_IDS_OFF_OFFSET = FIELD_IDS_SIZE_OFFSET + 4; | |
| public static final int METHOD_IDS_SIZE_OFFSET = FIELD_IDS_OFF_OFFSET + 4; | |
| public static final int METHOD_IDS_OFF_OFFSET = METHOD_IDS_SIZE_OFFSET + 4; | |
| public static final int CLASS_DEFS_SIZE_OFFSET = METHOD_IDS_OFF_OFFSET + 4; | |
| public static final int CLASS_DEFS_OFF_OFFSET = CLASS_DEFS_SIZE_OFFSET + 4; | |
| public static final int DATA_SIZE_OFFSET = CLASS_DEFS_OFF_OFFSET + 4; | |
| public static final int DATA_OFF_OFFSET = DATA_SIZE_OFFSET + 4; | |
| public static final int CONTAINER_SIZE_OFFSET = DATA_OFF_OFFSET + 4; | |
| public static final int CONTAINER_OFF_OFFSET = CONTAINER_SIZE_OFFSET + 4; | |
| public static final int ENDIAN_CONSTANT = 0x12345678; | |
| public static final int REVERSE_ENDIAN_CONSTANT = 0x78563412; | |
| public static final int TYPE_HEADER_ITEM = 0x0; | |
| public static final int TYPE_HEADER_ITEM_SIZE = 0x70; | |
| public static final int TYPE_HEADER_ITEM_SIZE_V41 = 0x78; | |
| public static final int TYPE_STRING_ID_ITEM = 0x0001; | |
| public static final int TYPE_STRING_ID_ITEM_SIZE = 0x04; | |
| public static final int TYPE_TYPE_ID_ITEM = 0x0002; | |
| public static final int TYPE_TYPE_ID_ITEM_SIZE = 0x04; | |
| public static final int TYPE_PROTO_ID_ITEM = 0x0003; | |
| public static final int TYPE_PROTO_ID_ITEM_SIZE = 0x0c; | |
| public static final int TYPE_FIELD_ID_ITEM = 0x0004; | |
| public static final int TYPE_FIELD_ID_ITEM_SIZE = 0x08; | |
| public static final int TYPE_METHOD_ID_ITEM = 0x0005; | |
| public static final int TYPE_METHOD_ID_ITEM_SIZE = 0x08; | |
| public static final int TYPE_CLASS_DEF_ITEM = 0x0006; | |
| public static final int TYPE_CLASS_DEF_ITEM_SIZE = 0x20; | |
| public static final int TYPE_CALL_SITE_ID_ITEM = 0x0007; | |
| public static final int TYPE_CALL_SITE_ID_ITEM_SIZE = 0x04; | |
| public static final int TYPE_METHOD_HANDLE_ITEM = 0x0008; | |
| public static final int TYPE_METHOD_HANDLE_ITEM_SIZE = 0x0008; | |
| public static final int TYPE_MAP_LIST = 0x1000; | |
| public static final int TYPE_MAP_LIST_ITEM_SIZE = 0x0c; | |
| public static final int TYPE_TYPE_LIST = 0x1001; | |
| public static final int TYPE_ANNOTATION_SET_REF_LIST = 0x1002; | |
| public static final int TYPE_ANNOTATION_SET_ITEM = 0x1003; | |
| public static final int TYPE_CLASS_DATA_ITEM = 0x2000; | |
| public static final int TYPE_CODE_ITEM = 0x2001; | |
| public static final int TYPE_STRING_DATA_ITEM = 0x2002; | |
| public static final int TYPE_DEBUG_INFO_ITEM = 0x2003; | |
| public static final int TYPE_ANNOTATION_ITEM = 0x2004; | |
| public static final int TYPE_ENCODED_ARRAY_ITEM = 0x2005; | |
| public static final int TYPE_ANNOTATIONS_DIRECTORY_ITEM = 0x2006; | |
| public static final int DBG_START_LOCAL = 0x03; | |
| public static final int DBG_START_LOCAL_EXTENDED = 0x04; | |
| public static final int DBG_END_LOCAL = 0x05; | |
| public static final int DBG_RESTART_LOCAL = 0x06; | |
| public static final int DBG_SET_FILE = 0x09; | |
| public static final int DBG_END_SEQUENCE = 0x00; | |
| public static final int DBG_ADVANCE_PC = 0x01; | |
| public static final int DBG_ADVANCE_LINE = 0x02; | |
| public static final int DBG_SET_PROLOGUE_END = 0x07; | |
| public static final int DBG_SET_EPILOGUE_BEGIN = 0x08; | |
| public static final int DBG_FIRST_SPECIAL = 0x0a; | |
| public static final int DBG_LAST_SPECIAL = 0xff; | |
| public static final int DBG_LINE_BASE = -4; | |
| public static final int DBG_LINE_RANGE = 15; | |
| public static final int DBG_ADDRESS_RANGE = 16; | |
| public static final int VDEX_MAGIC_SIZE = 8; | |
| public static final int VDEX_MAGIC_OFFSET = 0; | |
| public static final int VDEX_HEADER_SIZE = 24; | |
| public static final int VDEX_NUMBER_OF_DEX_FILES_OFFSET = VDEX_MAGIC_SIZE; | |
| public static final int VDEX_CHECKSUM_SECTION_OFFSET = VDEX_HEADER_SIZE; | |
| public static final int VDEX_DEX_CHECKSUM_SIZE = 4; | |
| public static final int NO_OFFSET = 0; | |
| public static final int NO_INDEX = -1; | |
| public static final int S4BIT_SIGN_MASK = 1 << 3; | |
| public static final int S4BIT_MIN = -(1 << 3); | |
| public static final int S4BIT_MAX = (1 << 3) - 1; | |
| public static final int S8BIT_MIN = -(1 << 7); | |
| public static final int S8BIT_MAX = (1 << 7) - 1; | |
| public static final int U4BIT_MAX = (1 << 4) - 1; | |
| public static final int U8BIT_MAX = (1 << 8) - 1; | |
| public static final int U16BIT_MAX = (1 << 16) - 1; | |
| public static final long U32BIT_MAX = (1L << 32) - 1; | |
| public static final int ACC_PUBLIC = 0x1; | |
| public static final int ACC_PRIVATE = 0x2; | |
| public static final int ACC_PROTECTED = 0x4; | |
| public static final int ACC_STATIC = 0x8; | |
| public static final int ACC_FINAL = 0x10; | |
| public static final int ACC_SUPER = 0x20; | |
| public static final int ACC_SYNCHRONIZED = 0x20; | |
| public static final int ACC_VOLATILE = 0x40; | |
| public static final int ACC_BRIDGE = 0x40; | |
| public static final int ACC_TRANSIENT = 0x80; | |
| public static final int ACC_VARARGS = 0x80; | |
| public static final int ACC_NATIVE = 0x100; | |
| public static final int ACC_INTERFACE = 0x200; | |
| public static final int ACC_ABSTRACT = 0x400; | |
| public static final int ACC_STRICT = 0x800; | |
| public static final int ACC_SYNTHETIC = 0x1000; | |
| public static final int ACC_ANNOTATION = 0x2000; | |
| public static final int ACC_ENUM = 0x4000; | |
| public static final int ACC_CONSTRUCTOR = 0x10000; | |
| public static final int ACC_RECORD = 0x10000; | |
| public static final int ACC_DECLARED_SYNCHRONIZED = 0x20000; | |
| public static final String JAVA_LANG_OBJECT_NAME = "java/lang/Object"; | |
| public static final String INSTANCE_INITIALIZER_NAME = "<init>"; | |
| public static final String CLASS_INITIALIZER_NAME = "<clinit>"; | |
| public static final String SYNTHETIC_INSTANCE_INITIALIZER_PREFIX = "$r8$init$synthetic"; | |
| public static final int MAX_NON_JUMBO_INDEX = U16BIT_MAX; | |
| } |