Skip to content

Commit ac514e5

Browse files
committed
#914: Do not set DebugNonSafepoints, if it is already set in the Command Line
1 parent 059cf13 commit ac514e5

File tree

3 files changed

+31
-15
lines changed

3 files changed

+31
-15
lines changed

src/vmEntry.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,17 @@ bool VM::init(JavaVM* vm, bool attach) {
216216
} else {
217217
// DebugNonSafepoints is automatically enabled with CompiledMethodLoad,
218218
// otherwise we set the flag manually
219-
char* flag_addr = (char*)JVMFlag::find("DebugNonSafepoints");
220-
if (flag_addr != NULL) {
221-
*flag_addr = 1;
219+
JVMFlag* f = JVMFlag::find("DebugNonSafepoints");
220+
if (f != NULL && f->origin() == 0) {
221+
f->set(1);
222222
}
223223
}
224224

225225
if (_can_sample_objects) {
226226
// SetHeapSamplingInterval does not have immediate effect, so apply the configuration
227227
// as early as possible to allow profiling all startup allocations
228-
char* use_tlab = (char*)JVMFlag::find("UseTLAB");
229-
if (use_tlab != NULL && *use_tlab == 0) {
228+
JVMFlag* f = JVMFlag::find("UseTLAB");
229+
if (f != NULL && !f->get()) {
230230
_jvmti->SetHeapSamplingInterval(0);
231231
}
232232
}

src/vmStructs.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ int VMStructs::_vs_low_offset = -1;
7272
int VMStructs::_vs_high_offset = -1;
7373
int VMStructs::_flag_name_offset = -1;
7474
int VMStructs::_flag_addr_offset = -1;
75+
int VMStructs::_flag_origin_offset = -1;
7576
const char* VMStructs::_flags_addr = NULL;
7677
int VMStructs::_flag_count = 0;
7778
int 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
}

src/vmStructs.h

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class VMStructs {
7777
static int _vs_high_offset;
7878
static int _flag_name_offset;
7979
static int _flag_addr_offset;
80+
static int _flag_origin_offset;
8081
static const char* _flags_addr;
8182
static int _flag_count;
8283
static int _flag_size;
@@ -510,14 +511,26 @@ class CollectedHeap : VMStructs {
510511

511512
class JVMFlag : VMStructs {
512513
public:
513-
static void* find(const char* name);
514+
static JVMFlag* find(const char* name);
514515

515516
const char* name() {
516517
return *(const char**) at(_flag_name_offset);
517518
}
518519

519-
void* addr() {
520-
return *(void**) at(_flag_addr_offset);
520+
char* addr() {
521+
return *(char**) at(_flag_addr_offset);
522+
}
523+
524+
char origin() {
525+
return _flag_origin_offset >= 0 ? (*(char*) at(_flag_origin_offset)) & 15 : 0;
526+
}
527+
528+
char get() {
529+
return *addr();
530+
}
531+
532+
void set(char value) {
533+
*addr() = value;
521534
}
522535
};
523536

0 commit comments

Comments
 (0)