@@ -72,6 +72,7 @@ int VMStructs::_vs_low_offset = -1;
7272int VMStructs::_vs_high_offset = -1 ;
7373int VMStructs::_flag_name_offset = -1 ;
7474int VMStructs::_flag_addr_offset = -1 ;
75+ int VMStructs::_flag_origin_offset = -1 ;
7576const char * VMStructs::_flags_addr = NULL ;
7677int VMStructs::_flag_count = 0 ;
7778int VMStructs::_flag_size = 0 ;
@@ -335,6 +336,8 @@ void VMStructs::initOffsets() {
335336 _flag_name_offset = *(int *)(entry + offset_offset);
336337 } else if (strcmp (field, " _addr" ) == 0 || strcmp (field, " addr" ) == 0 ) {
337338 _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);
338341 } else if (strcmp (field, " flags" ) == 0 ) {
339342 _flags_addr = **(char ***)(entry + address_offset);
340343 } else if (strcmp (field, " numFlags" ) == 0 ) {
@@ -396,14 +399,14 @@ void VMStructs::resolveOffsets() {
396399 _klass = (jfieldID)(uintptr_t )(*_klass_offset_addr << 2 | 2 );
397400 }
398401
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 ) {
401404 _narrow_klass_base = *_narrow_klass_base_addr;
402405 _narrow_klass_shift = *_narrow_klass_shift_addr;
403406 }
404407
405- char * coh = ( char *) JVMFlag::find (" UseCompactObjectHeaders" );
406- if (coh != NULL && * coh) {
408+ JVMFlag * coh = JVMFlag::find (" UseCompactObjectHeaders" );
409+ if (coh != NULL && coh-> get () ) {
407410 _compact_object_headers = true ;
408411 }
409412
@@ -644,12 +647,12 @@ NMethod* CodeHeap::findNMethod(char* heap, const void* pc) {
644647 return block[sizeof (size_t )] ? (NMethod*)(block + 2 * sizeof (size_t )) : NULL ;
645648}
646649
647- void * JVMFlag::find (const char * name) {
650+ JVMFlag * JVMFlag::find (const char * name) {
648651 if (_flags_addr != NULL && _flag_size > 0 ) {
649652 for (int i = 0 ; i < _flag_count; i++) {
650653 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;
653656 }
654657 }
655658 }
0 commit comments