105 long cloned_vtable_narrowPtr = get_CIntegerField(FileMapHeader_type, header, "_cloned_vtables");
106 // narrowPtr stores scaled offset units (byte_offset >> MetadataOffsetShift).
107 // Apply the left shift to convert back to byte offset.
108 metadataOffsetShift = db.lookupIntConstant("AOTCompressedPointers::MetadataOffsetShift").longValue();
109 long cloned_vtable_offset = cloned_vtable_narrowPtr << metadataOffsetShift;
110 vtablesIndex = mapped_base_address.addOffsetTo(cloned_vtable_offset);
111
112 // CDSFileMapRegion* rw_region = &header->_region[rw];
113 // char* rwRegionBaseAddress = rw_region->_mapped_base;
114 // size_t used = rw_region->_used;
115 // char* rwRegionEndAddress = rwRegionBaseAddress + used;
116 Address rw_region = get_CDSFileMapRegion(FileMapHeader_type, header, 0);
117 rwRegionBaseAddress = get_AddressField(CDSFileMapRegion_type, rw_region, "_mapped_base");
118 long used = get_CIntegerField(CDSFileMapRegion_type, rw_region, "_used");
119 rwRegionEndAddress = rwRegionBaseAddress.addOffsetTo(used);
120
121 populateMetadataTypeArray(db);
122 }
123
124 private static void populateMetadataTypeArray(TypeDataBase db) {
125 metadataTypeArray = new Type[11];
126 // The order needs to match up with CPP_VTABLE_TYPES_DO in src/hotspot/share/cds/cppVtables.cpp
127
128 metadataTypeArray[0] = db.lookupType("ConstantPool");
129 metadataTypeArray[1] = db.lookupType("InstanceKlass");
130 metadataTypeArray[2] = db.lookupType("InstanceClassLoaderKlass");
131 metadataTypeArray[3] = db.lookupType("InstanceMirrorKlass");
132 metadataTypeArray[4] = db.lookupType("InstanceRefKlass");
133 metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
134 metadataTypeArray[6] = db.lookupType("Method");
135 metadataTypeArray[7] = db.lookupType("MethodData");
136 metadataTypeArray[8] = db.lookupType("MethodCounters");
137 metadataTypeArray[9] = db.lookupType("ObjArrayKlass");
138 metadataTypeArray[10] = db.lookupType("TypeArrayKlass");
139 }
140
141 public FileMapHeader getHeader() {
142 return headerObj;
143 }
144
145 public boolean inCopiedVtableSpace(Address vptrAddress) {
146 FileMapHeader fmHeader = getHeader();
147 return fmHeader.inCopiedVtableSpace(vptrAddress);
148 }
149
150 public Type getTypeForVptrAddress(Address vptrAddress) {
151 if (vTableTypeMap == null) {
152 getHeader().createVtableTypeMapping();
153 }
154 return vTableTypeMap.get(vptrAddress);
155 }
156
157
158 //------------------------------------------------------------------------------------------
|
105 long cloned_vtable_narrowPtr = get_CIntegerField(FileMapHeader_type, header, "_cloned_vtables");
106 // narrowPtr stores scaled offset units (byte_offset >> MetadataOffsetShift).
107 // Apply the left shift to convert back to byte offset.
108 metadataOffsetShift = db.lookupIntConstant("AOTCompressedPointers::MetadataOffsetShift").longValue();
109 long cloned_vtable_offset = cloned_vtable_narrowPtr << metadataOffsetShift;
110 vtablesIndex = mapped_base_address.addOffsetTo(cloned_vtable_offset);
111
112 // CDSFileMapRegion* rw_region = &header->_region[rw];
113 // char* rwRegionBaseAddress = rw_region->_mapped_base;
114 // size_t used = rw_region->_used;
115 // char* rwRegionEndAddress = rwRegionBaseAddress + used;
116 Address rw_region = get_CDSFileMapRegion(FileMapHeader_type, header, 0);
117 rwRegionBaseAddress = get_AddressField(CDSFileMapRegion_type, rw_region, "_mapped_base");
118 long used = get_CIntegerField(CDSFileMapRegion_type, rw_region, "_used");
119 rwRegionEndAddress = rwRegionBaseAddress.addOffsetTo(used);
120
121 populateMetadataTypeArray(db);
122 }
123
124 private static void populateMetadataTypeArray(TypeDataBase db) {
125 metadataTypeArray = new Type[14];
126 // The order needs to match up with CPP_VTABLE_TYPES_DO in src/hotspot/share/cds/cppVtables.cpp
127
128 metadataTypeArray[0] = db.lookupType("ConstantPool");
129 metadataTypeArray[1] = db.lookupType("InstanceKlass");
130 metadataTypeArray[2] = db.lookupType("InstanceClassLoaderKlass");
131 metadataTypeArray[3] = db.lookupType("InstanceMirrorKlass");
132 metadataTypeArray[4] = db.lookupType("InstanceRefKlass");
133 metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
134 metadataTypeArray[6] = db.lookupType("Method");
135 metadataTypeArray[7] = db.lookupType("MethodData");
136 metadataTypeArray[8] = db.lookupType("MethodCounters");
137 metadataTypeArray[9] = db.lookupType("TypeArrayKlass");
138 metadataTypeArray[10] = db.lookupType("ObjArrayKlass");
139 metadataTypeArray[11] = db.lookupType("RefArrayKlass");
140 metadataTypeArray[12] = db.lookupType("FlatArrayKlass");
141 metadataTypeArray[13] = db.lookupType("InlineKlass");
142 }
143
144 public FileMapHeader getHeader() {
145 return headerObj;
146 }
147
148 public boolean inCopiedVtableSpace(Address vptrAddress) {
149 FileMapHeader fmHeader = getHeader();
150 return fmHeader.inCopiedVtableSpace(vptrAddress);
151 }
152
153 public Type getTypeForVptrAddress(Address vptrAddress) {
154 if (vTableTypeMap == null) {
155 getHeader().createVtableTypeMapping();
156 }
157 return vTableTypeMap.get(vptrAddress);
158 }
159
160
161 //------------------------------------------------------------------------------------------
|