96 // char* mapped_base_address = header->_mapped_base_address
97 // size_t cloned_vtable_offset = header->_cloned_vtable_offset
98 // CppVtableInfo** vtablesIndex = mapped_base_address + cloned_vtable_offset;
99 Address mapped_base_address = get_AddressField(FileMapHeader_type, header, "_mapped_base_address");
100 long cloned_vtable_offset = get_CIntegerField(FileMapHeader_type, header, "_cloned_vtables_offset");
101 vtablesIndex = mapped_base_address.addOffsetTo(cloned_vtable_offset);
102
103 // CDSFileMapRegion* rw_region = &header->_region[rw];
104 // char* rwRegionBaseAddress = rw_region->_mapped_base;
105 // size_t used = rw_region->_used;
106 // char* rwRegionEndAddress = rwRegionBaseAddress + used;
107 Address rw_region = get_CDSFileMapRegion(FileMapHeader_type, header, 0);
108 rwRegionBaseAddress = get_AddressField(CDSFileMapRegion_type, rw_region, "_mapped_base");
109 long used = get_CIntegerField(CDSFileMapRegion_type, rw_region, "_used");
110 rwRegionEndAddress = rwRegionBaseAddress.addOffsetTo(used);
111
112 populateMetadataTypeArray(db);
113 }
114
115 private static void populateMetadataTypeArray(TypeDataBase db) {
116 metadataTypeArray = new Type[9];
117
118 metadataTypeArray[0] = db.lookupType("ConstantPool");
119 metadataTypeArray[1] = db.lookupType("InstanceKlass");
120 metadataTypeArray[2] = db.lookupType("InstanceClassLoaderKlass");
121 metadataTypeArray[3] = db.lookupType("InstanceMirrorKlass");
122 metadataTypeArray[4] = db.lookupType("InstanceRefKlass");
123 metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
124 metadataTypeArray[6] = db.lookupType("Method");
125 metadataTypeArray[7] = db.lookupType("ObjArrayKlass");
126 metadataTypeArray[8] = db.lookupType("TypeArrayKlass");
127 }
128
129 public FileMapHeader getHeader() {
130 return headerObj;
131 }
132
133 public boolean inCopiedVtableSpace(Address vptrAddress) {
134 FileMapHeader fmHeader = getHeader();
135 return fmHeader.inCopiedVtableSpace(vptrAddress);
136 }
137
138 public Type getTypeForVptrAddress(Address vptrAddress) {
139 if (vTableTypeMap == null) {
140 getHeader().createVtableTypeMapping();
141 }
142 return vTableTypeMap.get(vptrAddress);
143 }
144
145
146 //------------------------------------------------------------------------------------------
|
96 // char* mapped_base_address = header->_mapped_base_address
97 // size_t cloned_vtable_offset = header->_cloned_vtable_offset
98 // CppVtableInfo** vtablesIndex = mapped_base_address + cloned_vtable_offset;
99 Address mapped_base_address = get_AddressField(FileMapHeader_type, header, "_mapped_base_address");
100 long cloned_vtable_offset = get_CIntegerField(FileMapHeader_type, header, "_cloned_vtables_offset");
101 vtablesIndex = mapped_base_address.addOffsetTo(cloned_vtable_offset);
102
103 // CDSFileMapRegion* rw_region = &header->_region[rw];
104 // char* rwRegionBaseAddress = rw_region->_mapped_base;
105 // size_t used = rw_region->_used;
106 // char* rwRegionEndAddress = rwRegionBaseAddress + used;
107 Address rw_region = get_CDSFileMapRegion(FileMapHeader_type, header, 0);
108 rwRegionBaseAddress = get_AddressField(CDSFileMapRegion_type, rw_region, "_mapped_base");
109 long used = get_CIntegerField(CDSFileMapRegion_type, rw_region, "_used");
110 rwRegionEndAddress = rwRegionBaseAddress.addOffsetTo(used);
111
112 populateMetadataTypeArray(db);
113 }
114
115 private static void populateMetadataTypeArray(TypeDataBase db) {
116 metadataTypeArray = new Type[11];
117
118 metadataTypeArray[0] = db.lookupType("ConstantPool");
119 metadataTypeArray[1] = db.lookupType("InstanceKlass");
120 metadataTypeArray[2] = db.lookupType("InstanceClassLoaderKlass");
121 metadataTypeArray[3] = db.lookupType("InstanceMirrorKlass");
122 metadataTypeArray[4] = db.lookupType("InstanceRefKlass");
123 metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
124 metadataTypeArray[6] = db.lookupType("Method");
125 metadataTypeArray[7] = db.lookupType("ObjArrayKlass");
126 metadataTypeArray[8] = db.lookupType("TypeArrayKlass");
127 metadataTypeArray[9] = db.lookupType("FlatArrayKlass");
128 metadataTypeArray[10] = db.lookupType("InlineKlass");
129 }
130
131 public FileMapHeader getHeader() {
132 return headerObj;
133 }
134
135 public boolean inCopiedVtableSpace(Address vptrAddress) {
136 FileMapHeader fmHeader = getHeader();
137 return fmHeader.inCopiedVtableSpace(vptrAddress);
138 }
139
140 public Type getTypeForVptrAddress(Address vptrAddress) {
141 if (vTableTypeMap == null) {
142 getHeader().createVtableTypeMapping();
143 }
144 return vTableTypeMap.get(vptrAddress);
145 }
146
147
148 //------------------------------------------------------------------------------------------
|