/* * Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. *
*/
class DumpTimeClassInfo; class Method; class Symbol;
class RunTimeClassInfo { public: struct CrcInfo { int _clsfile_size; int _clsfile_crc32;
};
// This is different than DumpTimeClassInfo::DTVerifierConstraint. We use // u4 instead of Symbol* to save space on 64-bit CPU. struct RTVerifierConstraint {
u4 _name;
u4 _from_name;
Symbol* name() { return (Symbol*)(SharedBaseAddress + _name);}
Symbol* from_name() { return (Symbol*)(SharedBaseAddress + _from_name); }
};
int enum_klass_static_field_root_index_at(int i) const {
assert(0 <= i && i < enum_klass_static_fields_addr()->_num, "must be"); return enum_klass_static_fields_addr()->_root_indices[i];
}
void set_enum_klass_static_field_root_index_at(int i, int root_index) {
assert(0 <= i && i < enum_klass_static_fields_addr()->_num, "must be");
enum_klass_static_fields_addr()->_root_indices[i] = root_index;
} private: // ArchiveBuilder::make_shallow_copy() has reserved a pointer immediately // before archived InstanceKlasses. We can use this slot to do a quick // lookup of InstanceKlass* -> RunTimeClassInfo* without // building a new hashtable. // // info_pointer_addr(klass) --> 0x0100 RunTimeClassInfo* // InstanceKlass* klass --> 0x0108 <C++ vtbl> // 0x0110 fields from Klass ... static RunTimeClassInfo** info_pointer_addr(InstanceKlass* klass) { return &((RunTimeClassInfo**)klass)[-1];
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.