@@ -72,6 +72,7 @@ int VMStructs::_vs_low_offset = -1;
72
72
int VMStructs::_vs_high_offset = -1 ;
73
73
int VMStructs::_flag_name_offset = -1 ;
74
74
int VMStructs::_flag_addr_offset = -1 ;
75
+ int VMStructs::_flag_origin_offset = -1 ;
75
76
const char * VMStructs::_flags_addr = NULL ;
76
77
int VMStructs::_flag_count = 0 ;
77
78
int VMStructs::_flag_size = 0 ;
@@ -335,6 +336,8 @@ void VMStructs::initOffsets() {
335
336
_flag_name_offset = *(int *)(entry + offset_offset);
336
337
} else if (strcmp (field, " _addr" ) == 0 || strcmp (field, " addr" ) == 0 ) {
337
338
_flag_addr_offset = *(int *)(entry + offset_offset);
339
+ } else if (strcmp (field, " _flags" ) == 0 || strcmp (field, " origin" ) == 0 ) {
340
+ _flag_origin_offset = *(int *)(entry + offset_offset);
338
341
} else if (strcmp (field, " flags" ) == 0 ) {
339
342
_flags_addr = **(char ***)(entry + address_offset);
340
343
} else if (strcmp (field, " numFlags" ) == 0 ) {
@@ -396,14 +399,14 @@ void VMStructs::resolveOffsets() {
396
399
_klass = (jfieldID)(uintptr_t )(*_klass_offset_addr << 2 | 2 );
397
400
}
398
401
399
- char * ccp = ( char *) JVMFlag::find (" UseCompressedClassPointers" );
400
- if (ccp != NULL && * ccp && _narrow_klass_base_addr != NULL && _narrow_klass_shift_addr != NULL ) {
402
+ JVMFlag * ccp = JVMFlag::find (" UseCompressedClassPointers" );
403
+ if (ccp != NULL && ccp-> get () && _narrow_klass_base_addr != NULL && _narrow_klass_shift_addr != NULL ) {
401
404
_narrow_klass_base = *_narrow_klass_base_addr;
402
405
_narrow_klass_shift = *_narrow_klass_shift_addr;
403
406
}
404
407
405
- char * coh = ( char *) JVMFlag::find (" UseCompactObjectHeaders" );
406
- if (coh != NULL && * coh) {
408
+ JVMFlag * coh = JVMFlag::find (" UseCompactObjectHeaders" );
409
+ if (coh != NULL && coh-> get () ) {
407
410
_compact_object_headers = true ;
408
411
}
409
412
@@ -644,12 +647,12 @@ NMethod* CodeHeap::findNMethod(char* heap, const void* pc) {
644
647
return block[sizeof (size_t )] ? (NMethod*)(block + 2 * sizeof (size_t )) : NULL ;
645
648
}
646
649
647
- void * JVMFlag::find (const char * name) {
650
+ JVMFlag * JVMFlag::find (const char * name) {
648
651
if (_flags_addr != NULL && _flag_size > 0 ) {
649
652
for (int i = 0 ; i < _flag_count; i++) {
650
653
JVMFlag* f = (JVMFlag*)(_flags_addr + i * _flag_size);
651
- if (f->name () != NULL && strcmp (f->name (), name) == 0 ) {
652
- return f-> addr () ;
654
+ if (f->name () != NULL && strcmp (f->name (), name) == 0 && f-> addr () != NULL ) {
655
+ return f;
653
656
}
654
657
}
655
658
}
0 commit comments