8055008: Clean up code that saves the previous versions of redefined classes

Use scratch_class to find EMCP methods for breakpoints if the old methods are still running.

Reviewed-by: dcubed, sspitsyn
This commit is contained in:
Coleen Phillimore 2014-09-03 19:13:18 -04:00
parent 07001d0332
commit 3c70d99eda
13 changed files with 340 additions and 369 deletions

View file

@ -80,7 +80,8 @@ class Method : public Metadata {
_caller_sensitive = 1 << 1,
_force_inline = 1 << 2,
_dont_inline = 1 << 3,
_hidden = 1 << 4
_hidden = 1 << 4,
_running_emcp = 1 << 5
};
u1 _flags;
@ -688,6 +689,21 @@ class Method : public Metadata {
void set_is_obsolete() { _access_flags.set_is_obsolete(); }
bool is_deleted() const { return access_flags().is_deleted(); }
void set_is_deleted() { _access_flags.set_is_deleted(); }
bool is_running_emcp() const {
// EMCP methods are old but not obsolete or deleted. Equivalent
// Modulo Constant Pool means the method is equivalent except
// the constant pool and instructions that access the constant
// pool might be different.
// If a breakpoint is set in a redefined method, its EMCP methods that are
// still running must have a breakpoint also.
return (_flags & _running_emcp) != 0;
}
void set_running_emcp(bool x) {
_flags = x ? (_flags | _running_emcp) : (_flags & ~_running_emcp);
}
bool on_stack() const { return access_flags().on_stack(); }
void set_on_stack(const bool value);