Fix JVMCI by answering proper things

This commit is contained in:
Aleksey Shipilev 2025-12-10 09:59:29 +01:00
parent 2aef3a9866
commit b293378157
3 changed files with 21 additions and 9 deletions

View File

@ -607,10 +607,21 @@ void decode_env::print_address(address adr) {
return;
}
address card_table_base = nullptr;
BarrierSet* bs = BarrierSet::barrier_set();
if (bs->is_a(BarrierSet::CardTableBarrierSet) &&
adr == ci_card_table_address_as<address>()) {
st->print("word_map_base");
if (bs->is_a(BarrierSet::G1BarrierSet)) {
G1BarrierSet* g1bs = barrier_set_cast<G1BarrierSet>(bs);
card_table_base = g1bs->card_table()->byte_map_base();
#if INCLUDE_SHENANDOAHGC
} else if (bs->is_a(BarrierSet::ShenandoahBarrierSet)) {
ShenandoahBarrierSet* sbs = barrier_set_cast<ShenandoahBarrierSet>(bs);
card_table_base = sbs->card_table()->byte_map_base();
#endif
} else if (bs->is_a(BarrierSet::CardTableBarrierSet)) {
card_table_base = ci_card_table_address_as<address>();
}
if (card_table_base != nullptr && adr == card_table_base) {
st->print("card_table_base");
if (WizardMode) st->print(" " INTPTR_FORMAT, p2i(adr));
return;
}

View File

@ -99,11 +99,9 @@ public:
data(thread)->_byte_map_base = new_byte_map_base;
}
#ifndef PRODUCT
static G1CardTable::CardValue* get_byte_map_base(Thread* thread) {
return data(thread)->_byte_map_base;
}
#endif
static G1RegionPinCache& pin_count_cache(Thread* thread) {
return data(thread)->_pin_cache;

View File

@ -236,16 +236,19 @@ void CompilerToVM::Data::initialize(JVMCI_TRAPS) {
JVMTI_ONLY( _should_notify_object_alloc = &JvmtiExport::_should_notify_object_alloc; )
BarrierSet* bs = BarrierSet::barrier_set();
if (bs->is_a(BarrierSet::CardTableBarrierSet)) {
CardTable::CardValue* base = ci_card_table_address();
assert(base != nullptr, "unexpected byte_map_base");
cardtable_start_address = base;
if (bs->is_a(BarrierSet::G1BarrierSet)) {
cardtable_start_address = nullptr;
cardtable_shift = CardTable::card_shift();
#if INCLUDE_SHENANDOAHGC
} else if (bs->is_a(BarrierSet::ShenandoahBarrierSet)) {
cardtable_start_address = nullptr;
cardtable_shift = CardTable::card_shift();
#endif
} else if (bs->is_a(BarrierSet::CardTableBarrierSet)) {
CardTable::CardValue* base = ci_card_table_address();
assert(base != nullptr, "unexpected byte_map_base");
cardtable_start_address = base;
cardtable_shift = CardTable::card_shift();
} else {
// No card mark barriers
cardtable_start_address = nullptr;