/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* 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.
*
*/
#include "precompiled.hpp"
#include "gc_implementation/shared/markSweep.inline.hpp"
#include "interpreter/interpreter.hpp"
#include "memory/gcLocker.hpp"
#include "memory/resourceArea.hpp"
#include "oops/constMethodKlass.hpp"
#include "oops/constMethodOop.hpp"
#include "oops/oop.inline.hpp"
#include "oops/oop.inline2.hpp"
#include "runtime/handles.inline.hpp"
o.vtbl_value(), CHECK_NULL);
// Make sure size calculation is right
"wrong size for object");
//java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror
return k();
}
}
}
}
bool is_conc_safe,
TRAPS) {
cm->init_fingerprint();
return cm;
}
// Performance tweak: We skip iterating over the klass pointer since we
// know that Universe::constMethodKlassObj never moves.
}
#ifndef SERIALGC
// Performance tweak: We skip iterating over the klass pointer since we
// know that Universe::constMethodKlassObj never moves.
}
#endif // SERIALGC
// Get size before changing pointers.
// Don't call size() or oop_size() since that is a virtual call.
return size;
}
// Get size before changing pointers.
// Don't call size() or oop_size() since that is a virtual call.
// Performance tweak: We skip iterating over the klass pointer since we
// know that Universe::constMethodKlassObj never moves.
return size;
}
// Get size before changing pointers.
// Don't call size() or oop_size() since that is a virtual call.
// Performance tweak: We skip iterating over the klass pointer since we
// know that Universe::constMethodKlassObj never moves.
return size;
}
#ifndef SERIALGC
}
}
return cm_oop->object_size();
}
#endif // SERIALGC
// Printing
if (m->has_stackmap_table()) {
}
}
// Short version of printing constMethodOop - just print the name of the
// method it belongs to.
}
return "{constMethod}";
}
// Verification
// Verification can occur during oop construction before the method or
// other fields have been initialized.
if (!obj->partially_loaded()) {
// Verify line number table
if (m->has_linenumber_table()) {
}
}
// Verify checked exceptions, exception table and local variable tables
if (m->has_checked_exceptions()) {
guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout");
}
if (m->has_exception_handler()) {
guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout");
}
if (m->has_localvariable_table()) {
guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout");
}
// Check compressed_table_end relative to uncompressed_table_start
if (m->has_localvariable_table()) {
} else if (m->has_exception_handler()) {
} else if (m->has_checked_exceptions()) {
} else {
}
}
}
// check whether stackmap_data points to self (flag for partially loaded)
}
// The exception_table is the last field set when loading an object.
// Temporarily set stackmap_data to point to self
}