mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8232083: Minimal VM is broken after JDK-8231586
Reviewed-by: dlong
This commit is contained in:
parent
c87a6fc0b3
commit
be6a893e1f
1 changed files with 20 additions and 22 deletions
|
@ -308,10 +308,13 @@ void OopMapSet::all_do(const frame *fr, const RegisterMap *reg_map,
|
||||||
|
|
||||||
// handle derived pointers first (otherwise base pointer may be
|
// handle derived pointers first (otherwise base pointer may be
|
||||||
// changed before derived pointer offset has been collected)
|
// changed before derived pointer offset has been collected)
|
||||||
OopMapValue omv;
|
|
||||||
{
|
{
|
||||||
OopMapStream oms(map);
|
for (OopMapStream oms(map); !oms.is_done(); oms.next()) {
|
||||||
if (!oms.is_done()) {
|
OopMapValue omv = oms.current();
|
||||||
|
if (omv.type() != OopMapValue::derived_oop_value) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef TIERED
|
#ifndef TIERED
|
||||||
COMPILER1_PRESENT(ShouldNotReachHere();)
|
COMPILER1_PRESENT(ShouldNotReachHere();)
|
||||||
#if INCLUDE_JVMCI
|
#if INCLUDE_JVMCI
|
||||||
|
@ -320,31 +323,26 @@ void OopMapSet::all_do(const frame *fr, const RegisterMap *reg_map,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // !TIERED
|
#endif // !TIERED
|
||||||
do {
|
oop* loc = fr->oopmapreg_to_location(omv.reg(),reg_map);
|
||||||
omv = oms.current();
|
guarantee(loc != NULL, "missing saved register");
|
||||||
if (omv.type() == OopMapValue::derived_oop_value) {
|
oop *derived_loc = loc;
|
||||||
oop* loc = fr->oopmapreg_to_location(omv.reg(),reg_map);
|
oop *base_loc = fr->oopmapreg_to_location(omv.content_reg(), reg_map);
|
||||||
guarantee(loc != NULL, "missing saved register");
|
// Ignore NULL oops and decoded NULL narrow oops which
|
||||||
oop *derived_loc = loc;
|
// equal to CompressedOops::base() when a narrow oop
|
||||||
oop *base_loc = fr->oopmapreg_to_location(omv.content_reg(), reg_map);
|
// implicit null check is used in compiled code.
|
||||||
// Ignore NULL oops and decoded NULL narrow oops which
|
// The narrow_oop_base could be NULL or be the address
|
||||||
// equal to CompressedOops::base() when a narrow oop
|
// of the page below heap depending on compressed oops mode.
|
||||||
// implicit null check is used in compiled code.
|
if (base_loc != NULL && *base_loc != NULL && !CompressedOops::is_base(*base_loc)) {
|
||||||
// The narrow_oop_base could be NULL or be the address
|
derived_oop_fn(base_loc, derived_loc);
|
||||||
// of the page below heap depending on compressed oops mode.
|
}
|
||||||
if (base_loc != NULL && *base_loc != NULL && !CompressedOops::is_base(*base_loc)) {
|
oms.next();
|
||||||
derived_oop_fn(base_loc, derived_loc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
oms.next();
|
|
||||||
} while (!oms.is_done());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// We want coop and oop oop_types
|
// We want coop and oop oop_types
|
||||||
for (OopMapStream oms(map); !oms.is_done(); oms.next()) {
|
for (OopMapStream oms(map); !oms.is_done(); oms.next()) {
|
||||||
omv = oms.current();
|
OopMapValue omv = oms.current();
|
||||||
oop* loc = fr->oopmapreg_to_location(omv.reg(),reg_map);
|
oop* loc = fr->oopmapreg_to_location(omv.reg(),reg_map);
|
||||||
// It should be an error if no location can be found for a
|
// It should be an error if no location can be found for a
|
||||||
// register mentioned as contained an oop of some kind. Maybe
|
// register mentioned as contained an oop of some kind. Maybe
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue