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