Skip to content

Commit 1a89d68

Browse files
committed
8255285: Move JVMFlag origins into a new enum JVMFlagOrigin
Reviewed-by: dholmes, redestad
1 parent 56eb5f5 commit 1a89d68

File tree

23 files changed

+215
-190
lines changed

23 files changed

+215
-190
lines changed

src/hotspot/share/jfr/periodic/jfrPeriodic.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ TRACE_REQUEST_FUNC(ThreadContextSwitchRate) {
285285
Event ## eventType event; \
286286
event.set_name(flag->name()); \
287287
event.set_value(flag->get_ ## flagType()); \
288-
event.set_origin(flag->get_origin()); \
288+
event.set_origin(static_cast<u8>(flag->get_origin())); \
289289
event.commit(); \
290290
} \
291291
} \

src/hotspot/share/jfr/recorder/checkpoint/types/jfrType.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -122,27 +122,29 @@ void JfrThreadGroupConstant::serialize(JfrCheckpointWriter& writer) {
122122
JfrThreadGroup::serialize(writer);
123123
}
124124

125-
static const char* flag_value_origin_to_string(JVMFlag::Flags origin) {
125+
static const char* flag_value_origin_to_string(JVMFlagOrigin origin) {
126126
switch (origin) {
127-
case JVMFlag::DEFAULT: return "Default";
128-
case JVMFlag::COMMAND_LINE: return "Command line";
129-
case JVMFlag::ENVIRON_VAR: return "Environment variable";
130-
case JVMFlag::CONFIG_FILE: return "Config file";
131-
case JVMFlag::MANAGEMENT: return "Management";
132-
case JVMFlag::ERGONOMIC: return "Ergonomic";
133-
case JVMFlag::ATTACH_ON_DEMAND: return "Attach on demand";
134-
case JVMFlag::INTERNAL: return "Internal";
135-
case JVMFlag::JIMAGE_RESOURCE: return "JImage resource";
127+
case JVMFlagOrigin::DEFAULT: return "Default";
128+
case JVMFlagOrigin::COMMAND_LINE: return "Command line";
129+
case JVMFlagOrigin::ENVIRON_VAR: return "Environment variable";
130+
case JVMFlagOrigin::CONFIG_FILE: return "Config file";
131+
case JVMFlagOrigin::MANAGEMENT: return "Management";
132+
case JVMFlagOrigin::ERGONOMIC: return "Ergonomic";
133+
case JVMFlagOrigin::ATTACH_ON_DEMAND: return "Attach on demand";
134+
case JVMFlagOrigin::INTERNAL: return "Internal";
135+
case JVMFlagOrigin::JIMAGE_RESOURCE: return "JImage resource";
136136
default: ShouldNotReachHere(); return "";
137137
}
138138
}
139139

140140
void FlagValueOriginConstant::serialize(JfrCheckpointWriter& writer) {
141-
static const u4 nof_entries = JVMFlag::LAST_VALUE_ORIGIN + 1;
142-
writer.write_count(nof_entries);
143-
for (u4 i = 0; i < nof_entries; ++i) {
144-
writer.write_key(i);
145-
writer.write(flag_value_origin_to_string((JVMFlag::Flags)i));
141+
constexpr EnumRange<JVMFlagOrigin> range;
142+
writer.write_count(static_cast<u4>(range.size()));
143+
144+
for (EnumIterator<JVMFlagOrigin> it = range.begin(); it != range.end(); ++it) {
145+
JVMFlagOrigin origin = *it;
146+
writer.write_key(static_cast<u4>(origin));
147+
writer.write(flag_value_origin_to_string(origin));
146148
}
147149
}
148150

src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "memory/universe.hpp"
3333
#include "oops/compressedOops.hpp"
3434
#include "oops/klass.inline.hpp"
35+
#include "runtime/flags/jvmFlag.hpp"
3536
#include "runtime/sharedRuntime.hpp"
3637
#include "utilities/resourceHash.hpp"
3738

src/hotspot/share/jvmci/jvmci_globals.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ bool JVMCIGlobals::check_jvmci_flags_are_consistent() {
158158
}
159159

160160
// Convert JVMCI flags from experimental to product
161-
bool JVMCIGlobals::enable_jvmci_product_mode(JVMFlag::Flags origin) {
161+
bool JVMCIGlobals::enable_jvmci_product_mode(JVMFlagOrigin origin) {
162162
const char *JVMCIFlags[] = {
163163
"EnableJVMCI",
164164
"EnableJVMCIProduct",

src/hotspot/share/jvmci/jvmci_globals.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#ifndef SHARE_JVMCI_JVMCI_GLOBALS_HPP
2626
#define SHARE_JVMCI_JVMCI_GLOBALS_HPP
2727

28-
#include "runtime/flags/jvmFlag.hpp"
28+
#include "utilities/vmEnums.hpp"
2929

3030
class fileStream;
3131

@@ -153,7 +153,7 @@ class JVMCIGlobals {
153153
static bool check_jvmci_flags_are_consistent();
154154

155155
// Convert JVMCI experimental flags to product
156-
static bool enable_jvmci_product_mode(JVMFlag::Flags);
156+
static bool enable_jvmci_product_mode(JVMFlagOrigin);
157157

158158
// Check and exit VM with error if selected GC is not supported by JVMCI.
159159
static void check_jvmci_supported_gc();

src/hotspot/share/jvmci/vmStructs_jvmci.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "jvmci/vmStructs_jvmci.hpp"
3434
#include "oops/objArrayKlass.hpp"
3535
#include "runtime/deoptimization.hpp"
36+
#include "runtime/flags/jvmFlag.hpp"
3637
#include "runtime/sharedRuntime.hpp"
3738
#if INCLUDE_G1GC
3839
#include "gc/g1/g1CardTable.hpp"

src/hotspot/share/prims/whitebox.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1245,7 +1245,7 @@ static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value) {
12451245
const char* flag_name = env->GetStringUTFChars(name, NULL);
12461246
CHECK_JNI_EXCEPTION_(env, false);
12471247
JVMFlag* flag = JVMFlag::find_flag(flag_name);
1248-
JVMFlag::Error result = JVMFlagAccess::set<T, type_enum>(flag, value, JVMFlag::INTERNAL);
1248+
JVMFlag::Error result = JVMFlagAccess::set<T, type_enum>(flag, value, JVMFlagOrigin::INTERNAL);
12491249
env->ReleaseStringUTFChars(name, flag_name);
12501250
return (result == JVMFlag::SUCCESS);
12511251
}

src/hotspot/share/runtime/arguments.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -877,15 +877,15 @@ void Arguments::describe_range_error(ArgsRange errcode) {
877877
}
878878
}
879879

880-
static bool set_bool_flag(JVMFlag* flag, bool value, JVMFlag::Flags origin) {
880+
static bool set_bool_flag(JVMFlag* flag, bool value, JVMFlagOrigin origin) {
881881
if (JVMFlagAccess::boolAtPut(flag, &value, origin) == JVMFlag::SUCCESS) {
882882
return true;
883883
} else {
884884
return false;
885885
}
886886
}
887887

888-
static bool set_fp_numeric_flag(JVMFlag* flag, char* value, JVMFlag::Flags origin) {
888+
static bool set_fp_numeric_flag(JVMFlag* flag, char* value, JVMFlagOrigin origin) {
889889
char* end;
890890
errno = 0;
891891
double v = strtod(value, &end);
@@ -899,7 +899,7 @@ static bool set_fp_numeric_flag(JVMFlag* flag, char* value, JVMFlag::Flags origi
899899
return false;
900900
}
901901

902-
static bool set_numeric_flag(JVMFlag* flag, char* value, JVMFlag::Flags origin) {
902+
static bool set_numeric_flag(JVMFlag* flag, char* value, JVMFlagOrigin origin) {
903903
julong v;
904904
int int_v;
905905
intx intx_v;
@@ -952,14 +952,14 @@ static bool set_numeric_flag(JVMFlag* flag, char* value, JVMFlag::Flags origin)
952952
}
953953
}
954954

955-
static bool set_string_flag(JVMFlag* flag, const char* value, JVMFlag::Flags origin) {
955+
static bool set_string_flag(JVMFlag* flag, const char* value, JVMFlagOrigin origin) {
956956
if (JVMFlagAccess::ccstrAtPut(flag, &value, origin) != JVMFlag::SUCCESS) return false;
957957
// Contract: JVMFlag always returns a pointer that needs freeing.
958958
FREE_C_HEAP_ARRAY(char, value);
959959
return true;
960960
}
961961

962-
static bool append_to_string_flag(JVMFlag* flag, const char* new_value, JVMFlag::Flags origin) {
962+
static bool append_to_string_flag(JVMFlag* flag, const char* new_value, JVMFlagOrigin origin) {
963963
const char* old_value = "";
964964
if (JVMFlagAccess::ccstrAt(flag, &old_value) != JVMFlag::SUCCESS) return false;
965965
size_t old_len = old_value != NULL ? strlen(old_value) : 0;
@@ -1060,7 +1060,7 @@ AliasedLoggingFlag Arguments::catch_logging_aliases(const char* name, bool on){
10601060
return a;
10611061
}
10621062

1063-
bool Arguments::parse_argument(const char* arg, JVMFlag::Flags origin) {
1063+
bool Arguments::parse_argument(const char* arg, JVMFlagOrigin origin) {
10641064

10651065
// range of acceptable characters spelled out for portability reasons
10661066
#define NAME_RANGE "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
@@ -1275,7 +1275,7 @@ void Arguments::print_jvm_args_on(outputStream* st) {
12751275

12761276
bool Arguments::process_argument(const char* arg,
12771277
jboolean ignore_unrecognized,
1278-
JVMFlag::Flags origin) {
1278+
JVMFlagOrigin origin) {
12791279
JDK_Version since = JDK_Version();
12801280

12811281
if (parse_argument(arg, origin)) {
@@ -1404,7 +1404,7 @@ bool Arguments::process_settings_file(const char* file_name, bool should_exist,
14041404
// this allows a way to include spaces in string-valued options
14051405
token[pos] = '\0';
14061406
logOption(token);
1407-
result &= process_argument(token, ignore_unrecognized, JVMFlag::CONFIG_FILE);
1407+
result &= process_argument(token, ignore_unrecognized, JVMFlagOrigin::CONFIG_FILE);
14081408
build_jvm_flags(token);
14091409
pos = 0;
14101410
in_white_space = true;
@@ -1422,7 +1422,7 @@ bool Arguments::process_settings_file(const char* file_name, bool should_exist,
14221422
}
14231423
if (pos > 0) {
14241424
token[pos] = '\0';
1425-
result &= process_argument(token, ignore_unrecognized, JVMFlag::CONFIG_FILE);
1425+
result &= process_argument(token, ignore_unrecognized, JVMFlagOrigin::CONFIG_FILE);
14261426
build_jvm_flags(token);
14271427
}
14281428
fclose(stream);
@@ -2288,27 +2288,27 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs *vm_options_args,
22882288
set_mode_flags(_mixed);
22892289

22902290
// Parse args structure generated from java.base vm options resource
2291-
jint result = parse_each_vm_init_arg(vm_options_args, &patch_mod_javabase, JVMFlag::JIMAGE_RESOURCE);
2291+
jint result = parse_each_vm_init_arg(vm_options_args, &patch_mod_javabase, JVMFlagOrigin::JIMAGE_RESOURCE);
22922292
if (result != JNI_OK) {
22932293
return result;
22942294
}
22952295

22962296
// Parse args structure generated from JAVA_TOOL_OPTIONS environment
22972297
// variable (if present).
2298-
result = parse_each_vm_init_arg(java_tool_options_args, &patch_mod_javabase, JVMFlag::ENVIRON_VAR);
2298+
result = parse_each_vm_init_arg(java_tool_options_args, &patch_mod_javabase, JVMFlagOrigin::ENVIRON_VAR);
22992299
if (result != JNI_OK) {
23002300
return result;
23012301
}
23022302

23032303
// Parse args structure generated from the command line flags.
2304-
result = parse_each_vm_init_arg(cmd_line_args, &patch_mod_javabase, JVMFlag::COMMAND_LINE);
2304+
result = parse_each_vm_init_arg(cmd_line_args, &patch_mod_javabase, JVMFlagOrigin::COMMAND_LINE);
23052305
if (result != JNI_OK) {
23062306
return result;
23072307
}
23082308

23092309
// Parse args structure generated from the _JAVA_OPTIONS environment
23102310
// variable (if present) (mimics classic VM)
2311-
result = parse_each_vm_init_arg(java_options_args, &patch_mod_javabase, JVMFlag::ENVIRON_VAR);
2311+
result = parse_each_vm_init_arg(java_options_args, &patch_mod_javabase, JVMFlagOrigin::ENVIRON_VAR);
23122312
if (result != JNI_OK) {
23132313
return result;
23142314
}
@@ -2452,7 +2452,7 @@ jint Arguments::parse_xss(const JavaVMOption* option, const char* tail, intx* ou
24522452
return JNI_OK;
24532453
}
24542454

2455-
jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, bool* patch_mod_javabase, JVMFlag::Flags origin) {
2455+
jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, bool* patch_mod_javabase, JVMFlagOrigin origin) {
24562456
// For match_option to return remaining or value part of option string
24572457
const char* tail;
24582458

src/hotspot/share/runtime/arguments.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
#include "logging/logLevel.hpp"
2929
#include "logging/logTag.hpp"
3030
#include "memory/allocation.hpp"
31-
#include "runtime/flags/jvmFlag.hpp"
3231
#include "runtime/java.hpp"
3332
#include "runtime/os.hpp"
3433
#include "runtime/perfData.hpp"
3534
#include "utilities/debug.hpp"
35+
#include "utilities/vmEnums.hpp"
3636

3737
// Arguments parses the command line and recognizes options
3838

@@ -408,8 +408,8 @@ class Arguments : AllStatic {
408408
static jint set_aggressive_heap_flags();
409409

410410
// Argument parsing
411-
static bool parse_argument(const char* arg, JVMFlag::Flags origin);
412-
static bool process_argument(const char* arg, jboolean ignore_unrecognized, JVMFlag::Flags origin);
411+
static bool parse_argument(const char* arg, JVMFlagOrigin origin);
412+
static bool process_argument(const char* arg, jboolean ignore_unrecognized, JVMFlagOrigin origin);
413413
static void process_java_launcher_argument(const char*, void*);
414414
static void process_java_compiler_argument(const char* arg);
415415
static jint parse_options_environment_variable(const char* name, ScopedVMInitArgs* vm_args);
@@ -436,7 +436,7 @@ class Arguments : AllStatic {
436436
const JavaVMInitArgs *java_tool_options_args,
437437
const JavaVMInitArgs *java_options_args,
438438
const JavaVMInitArgs *cmd_line_args);
439-
static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, bool* patch_mod_javabase, JVMFlag::Flags origin);
439+
static jint parse_each_vm_init_arg(const JavaVMInitArgs* args, bool* patch_mod_javabase, JVMFlagOrigin origin);
440440
static jint finalize_vm_init_args(bool patch_mod_javabase);
441441
static bool is_bad_option(const JavaVMOption* option, jboolean ignore, const char* option_type);
442442

src/hotspot/share/runtime/flags/jvmFlag.cpp

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,15 @@ static bool is_product_build() {
4141
#endif
4242
}
4343

44-
void JVMFlag::set_origin(Flags origin) {
44+
void JVMFlag::set_origin(JVMFlagOrigin new_origin) {
45+
int old_flags = _flags;
46+
int origin = static_cast<int>(new_origin);
4547
assert((origin & VALUE_ORIGIN_MASK) == origin, "sanity");
46-
Flags new_origin = Flags((origin == COMMAND_LINE) ? Flags(origin | ORIG_COMMAND_LINE) : origin);
47-
_flags = Flags((_flags & ~VALUE_ORIGIN_MASK) | new_origin);
48+
int was_in_cmdline = (new_origin == JVMFlagOrigin::COMMAND_LINE) ? WAS_SET_ON_COMMAND_LINE : 0;
49+
_flags = Flags((_flags & ~VALUE_ORIGIN_MASK) | origin | was_in_cmdline);
50+
if ((old_flags & WAS_SET_ON_COMMAND_LINE) != 0) {
51+
assert((_flags & WAS_SET_ON_COMMAND_LINE) != 0, "once initialized, should never change");
52+
}
4853
}
4954

5055
/**
@@ -376,29 +381,28 @@ void JVMFlag::print_kind(outputStream* st, unsigned int width) const {
376381
}
377382

378383
void JVMFlag::print_origin(outputStream* st, unsigned int width) const {
379-
int origin = _flags & VALUE_ORIGIN_MASK;
380384
st->print("{");
381-
switch(origin) {
382-
case DEFAULT:
385+
switch(get_origin()) {
386+
case JVMFlagOrigin::DEFAULT:
383387
st->print("default"); break;
384-
case COMMAND_LINE:
388+
case JVMFlagOrigin::COMMAND_LINE:
385389
st->print("command line"); break;
386-
case ENVIRON_VAR:
390+
case JVMFlagOrigin::ENVIRON_VAR:
387391
st->print("environment"); break;
388-
case CONFIG_FILE:
392+
case JVMFlagOrigin::CONFIG_FILE:
389393
st->print("config file"); break;
390-
case MANAGEMENT:
394+
case JVMFlagOrigin::MANAGEMENT:
391395
st->print("management"); break;
392-
case ERGONOMIC:
393-
if (_flags & ORIG_COMMAND_LINE) {
396+
case JVMFlagOrigin::ERGONOMIC:
397+
if (_flags & WAS_SET_ON_COMMAND_LINE) {
394398
st->print("command line, ");
395399
}
396400
st->print("ergonomic"); break;
397-
case ATTACH_ON_DEMAND:
401+
case JVMFlagOrigin::ATTACH_ON_DEMAND:
398402
st->print("attach"); break;
399-
case INTERNAL:
403+
case JVMFlagOrigin::INTERNAL:
400404
st->print("internal"); break;
401-
case JIMAGE_RESOURCE:
405+
case JVMFlagOrigin::JIMAGE_RESOURCE:
402406
st->print("jimage"); break;
403407
}
404408
st->print("}");
@@ -495,7 +499,7 @@ static constexpr int flag_group(int flag_enum) {
495499
constexpr JVMFlag::JVMFlag(int flag_enum, FlagType type, const char* name,
496500
void* addr, int flags, int extra_flags, const char* doc) :
497501
_addr(addr), _name(name), _flags(), _type(type) NOT_PRODUCT(COMMA _doc(doc)) {
498-
flags = flags | extra_flags | JVMFlag::DEFAULT | flag_group(flag_enum);
502+
flags = flags | extra_flags | static_cast<int>(JVMFlagOrigin::DEFAULT) | flag_group(flag_enum);
499503
if ((flags & JVMFlag::KIND_PRODUCT) != 0) {
500504
if (flags & (JVMFlag::KIND_DIAGNOSTIC | JVMFlag::KIND_MANAGEABLE | JVMFlag::KIND_EXPERIMENTAL)) {
501505
// Backwards compatibility. This will be relaxed in JDK-7123237.
@@ -653,7 +657,7 @@ void JVMFlag::printSetFlags(outputStream* out) {
653657

654658
// Print
655659
for (size_t i = 0; i < length; i++) {
656-
if (array[i]->get_origin() /* naked field! */) {
660+
if (array[i]->get_origin() != JVMFlagOrigin::DEFAULT) {
657661
array[i]->print_as_flag(out);
658662
out->print(" ");
659663
}

0 commit comments

Comments
 (0)