Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
f526d9e6
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
f526d9e6
编写于
9月 26, 2013
作者:
T
twisti
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8024545: make develop and notproduct flag values available in product builds
Reviewed-by: dholmes, kvn
上级
c4adfe4c
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
584 addition
and
409 deletion
+584
-409
agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java
agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java
+11
-20
src/share/vm/prims/jvm.cpp
src/share/vm/prims/jvm.cpp
+2
-2
src/share/vm/runtime/arguments.cpp
src/share/vm/runtime/arguments.cpp
+13
-13
src/share/vm/runtime/arguments.hpp
src/share/vm/runtime/arguments.hpp
+3
-3
src/share/vm/runtime/globals.cpp
src/share/vm/runtime/globals.cpp
+344
-163
src/share/vm/runtime/globals.hpp
src/share/vm/runtime/globals.hpp
+113
-72
src/share/vm/runtime/globals_extension.hpp
src/share/vm/runtime/globals_extension.hpp
+61
-105
src/share/vm/runtime/vmStructs.cpp
src/share/vm/runtime/vmStructs.cpp
+6
-7
src/share/vm/services/attachListener.cpp
src/share/vm/services/attachListener.cpp
+5
-5
src/share/vm/services/classLoadingService.cpp
src/share/vm/services/classLoadingService.cpp
+2
-2
src/share/vm/services/dtraceAttacher.cpp
src/share/vm/services/dtraceAttacher.cpp
+1
-1
src/share/vm/services/management.cpp
src/share/vm/services/management.cpp
+22
-14
src/share/vm/services/memoryService.cpp
src/share/vm/services/memoryService.cpp
+1
-2
未找到文件。
agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java
浏览文件 @
f526d9e6
...
@@ -134,15 +134,13 @@ public class VM {
...
@@ -134,15 +134,13 @@ public class VM {
private
String
type
;
private
String
type
;
private
String
name
;
private
String
name
;
private
Address
addr
;
private
Address
addr
;
private
String
kind
;
private
int
flags
;
private
int
origin
;
private
Flag
(
String
type
,
String
name
,
Address
addr
,
String
kind
,
int
origin
)
{
private
Flag
(
String
type
,
String
name
,
Address
addr
,
int
flags
)
{
this
.
type
=
type
;
this
.
type
=
type
;
this
.
name
=
name
;
this
.
name
=
name
;
this
.
addr
=
addr
;
this
.
addr
=
addr
;
this
.
kind
=
kind
;
this
.
flags
=
flags
;
this
.
origin
=
origin
;
}
}
public
String
getType
()
{
public
String
getType
()
{
...
@@ -157,12 +155,8 @@ public class VM {
...
@@ -157,12 +155,8 @@ public class VM {
return
addr
;
return
addr
;
}
}
public
String
getKind
()
{
return
kind
;
}
public
int
getOrigin
()
{
public
int
getOrigin
()
{
return
origin
;
return
flags
&
0xF
;
// XXX can we get the mask bits from somewhere?
}
}
public
boolean
isBool
()
{
public
boolean
isBool
()
{
...
@@ -173,8 +167,7 @@ public class VM {
...
@@ -173,8 +167,7 @@ public class VM {
if
(
Assert
.
ASSERTS_ENABLED
)
{
if
(
Assert
.
ASSERTS_ENABLED
)
{
Assert
.
that
(
isBool
(),
"not a bool flag!"
);
Assert
.
that
(
isBool
(),
"not a bool flag!"
);
}
}
return
addr
.
getCIntegerAt
(
0
,
boolType
.
getSize
(),
boolType
.
isUnsigned
())
return
addr
.
getCIntegerAt
(
0
,
boolType
.
getSize
(),
boolType
.
isUnsigned
())
!=
0
;
!=
0
;
}
}
public
boolean
isIntx
()
{
public
boolean
isIntx
()
{
...
@@ -843,11 +836,10 @@ public class VM {
...
@@ -843,11 +836,10 @@ public class VM {
Address
flagAddr
=
flagType
.
getAddressField
(
"flags"
).
getValue
();
Address
flagAddr
=
flagType
.
getAddressField
(
"flags"
).
getValue
();
AddressField
typeFld
=
flagType
.
getAddressField
(
"type"
);
AddressField
typeFld
=
flagType
.
getAddressField
(
"_type"
);
AddressField
nameFld
=
flagType
.
getAddressField
(
"name"
);
AddressField
nameFld
=
flagType
.
getAddressField
(
"_name"
);
AddressField
addrFld
=
flagType
.
getAddressField
(
"addr"
);
AddressField
addrFld
=
flagType
.
getAddressField
(
"_addr"
);
AddressField
kindFld
=
flagType
.
getAddressField
(
"kind"
);
CIntField
flagsFld
=
new
CIntField
(
flagType
.
getCIntegerField
(
"_flags"
),
0
);
CIntField
originFld
=
new
CIntField
(
flagType
.
getCIntegerField
(
"origin"
),
0
);
long
flagSize
=
flagType
.
getSize
();
// sizeof(Flag)
long
flagSize
=
flagType
.
getSize
();
// sizeof(Flag)
...
@@ -856,9 +848,8 @@ public class VM {
...
@@ -856,9 +848,8 @@ public class VM {
String
type
=
CStringUtilities
.
getString
(
typeFld
.
getValue
(
flagAddr
));
String
type
=
CStringUtilities
.
getString
(
typeFld
.
getValue
(
flagAddr
));
String
name
=
CStringUtilities
.
getString
(
nameFld
.
getValue
(
flagAddr
));
String
name
=
CStringUtilities
.
getString
(
nameFld
.
getValue
(
flagAddr
));
Address
addr
=
addrFld
.
getValue
(
flagAddr
);
Address
addr
=
addrFld
.
getValue
(
flagAddr
);
String
kind
=
CStringUtilities
.
getString
(
kindFld
.
getValue
(
flagAddr
));
int
flags
=
(
int
)
flagsFld
.
getValue
(
flagAddr
);
int
origin
=
(
int
)
originFld
.
getValue
(
flagAddr
);
commandLineFlags
[
f
]
=
new
Flag
(
type
,
name
,
addr
,
flags
);
commandLineFlags
[
f
]
=
new
Flag
(
type
,
name
,
addr
,
kind
,
origin
);
flagAddr
=
flagAddr
.
addOffsetTo
(
flagSize
);
flagAddr
=
flagAddr
.
addOffsetTo
(
flagSize
);
}
}
...
...
src/share/vm/prims/jvm.cpp
浏览文件 @
f526d9e6
...
@@ -4235,13 +4235,13 @@ extern "C" {
...
@@ -4235,13 +4235,13 @@ extern "C" {
JVM_LEAF
(
jboolean
,
JVM_AccessVMBooleanFlag
(
const
char
*
name
,
jboolean
*
value
,
jboolean
is_get
))
JVM_LEAF
(
jboolean
,
JVM_AccessVMBooleanFlag
(
const
char
*
name
,
jboolean
*
value
,
jboolean
is_get
))
JVMWrapper
(
"JVM_AccessBoolVMFlag"
);
JVMWrapper
(
"JVM_AccessBoolVMFlag"
);
return
is_get
?
CommandLineFlags
::
boolAt
((
char
*
)
name
,
(
bool
*
)
value
)
:
CommandLineFlags
::
boolAtPut
((
char
*
)
name
,
(
bool
*
)
value
,
INTERNAL
);
return
is_get
?
CommandLineFlags
::
boolAt
((
char
*
)
name
,
(
bool
*
)
value
)
:
CommandLineFlags
::
boolAtPut
((
char
*
)
name
,
(
bool
*
)
value
,
Flag
::
INTERNAL
);
JVM_END
JVM_END
JVM_LEAF
(
jboolean
,
JVM_AccessVMIntFlag
(
const
char
*
name
,
jint
*
value
,
jboolean
is_get
))
JVM_LEAF
(
jboolean
,
JVM_AccessVMIntFlag
(
const
char
*
name
,
jint
*
value
,
jboolean
is_get
))
JVMWrapper
(
"JVM_AccessVMIntFlag"
);
JVMWrapper
(
"JVM_AccessVMIntFlag"
);
intx
v
;
intx
v
;
jboolean
result
=
is_get
?
CommandLineFlags
::
intxAt
((
char
*
)
name
,
&
v
)
:
CommandLineFlags
::
intxAtPut
((
char
*
)
name
,
&
v
,
INTERNAL
);
jboolean
result
=
is_get
?
CommandLineFlags
::
intxAt
((
char
*
)
name
,
&
v
)
:
CommandLineFlags
::
intxAtPut
((
char
*
)
name
,
&
v
,
Flag
::
INTERNAL
);
*
value
=
(
jint
)
v
;
*
value
=
(
jint
)
v
;
return
result
;
return
result
;
JVM_END
JVM_END
...
...
src/share/vm/runtime/arguments.cpp
浏览文件 @
f526d9e6
...
@@ -625,11 +625,11 @@ void Arguments::describe_range_error(ArgsRange errcode) {
...
@@ -625,11 +625,11 @@ void Arguments::describe_range_error(ArgsRange errcode) {
}
}
}
}
static
bool
set_bool_flag
(
char
*
name
,
bool
value
,
Flag
ValueOrigin
origin
)
{
static
bool
set_bool_flag
(
char
*
name
,
bool
value
,
Flag
::
Flags
origin
)
{
return
CommandLineFlags
::
boolAtPut
(
name
,
&
value
,
origin
);
return
CommandLineFlags
::
boolAtPut
(
name
,
&
value
,
origin
);
}
}
static
bool
set_fp_numeric_flag
(
char
*
name
,
char
*
value
,
Flag
ValueOrigin
origin
)
{
static
bool
set_fp_numeric_flag
(
char
*
name
,
char
*
value
,
Flag
::
Flags
origin
)
{
double
v
;
double
v
;
if
(
sscanf
(
value
,
"%lf"
,
&
v
)
!=
1
)
{
if
(
sscanf
(
value
,
"%lf"
,
&
v
)
!=
1
)
{
return
false
;
return
false
;
...
@@ -641,7 +641,7 @@ static bool set_fp_numeric_flag(char* name, char* value, FlagValueOrigin origin)
...
@@ -641,7 +641,7 @@ static bool set_fp_numeric_flag(char* name, char* value, FlagValueOrigin origin)
return
false
;
return
false
;
}
}
static
bool
set_numeric_flag
(
char
*
name
,
char
*
value
,
Flag
ValueOrigin
origin
)
{
static
bool
set_numeric_flag
(
char
*
name
,
char
*
value
,
Flag
::
Flags
origin
)
{
julong
v
;
julong
v
;
intx
intx_v
;
intx
intx_v
;
bool
is_neg
=
false
;
bool
is_neg
=
false
;
...
@@ -674,14 +674,14 @@ static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
...
@@ -674,14 +674,14 @@ static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) {
return
false
;
return
false
;
}
}
static
bool
set_string_flag
(
char
*
name
,
const
char
*
value
,
Flag
ValueOrigin
origin
)
{
static
bool
set_string_flag
(
char
*
name
,
const
char
*
value
,
Flag
::
Flags
origin
)
{
if
(
!
CommandLineFlags
::
ccstrAtPut
(
name
,
&
value
,
origin
))
return
false
;
if
(
!
CommandLineFlags
::
ccstrAtPut
(
name
,
&
value
,
origin
))
return
false
;
// Contract: CommandLineFlags always returns a pointer that needs freeing.
// Contract: CommandLineFlags always returns a pointer that needs freeing.
FREE_C_HEAP_ARRAY
(
char
,
value
,
mtInternal
);
FREE_C_HEAP_ARRAY
(
char
,
value
,
mtInternal
);
return
true
;
return
true
;
}
}
static
bool
append_to_string_flag
(
char
*
name
,
const
char
*
new_value
,
Flag
ValueOrigin
origin
)
{
static
bool
append_to_string_flag
(
char
*
name
,
const
char
*
new_value
,
Flag
::
Flags
origin
)
{
const
char
*
old_value
=
""
;
const
char
*
old_value
=
""
;
if
(
!
CommandLineFlags
::
ccstrAt
(
name
,
&
old_value
))
return
false
;
if
(
!
CommandLineFlags
::
ccstrAt
(
name
,
&
old_value
))
return
false
;
size_t
old_len
=
old_value
!=
NULL
?
strlen
(
old_value
)
:
0
;
size_t
old_len
=
old_value
!=
NULL
?
strlen
(
old_value
)
:
0
;
...
@@ -709,7 +709,7 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr
...
@@ -709,7 +709,7 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr
return
true
;
return
true
;
}
}
bool
Arguments
::
parse_argument
(
const
char
*
arg
,
Flag
ValueOrigin
origin
)
{
bool
Arguments
::
parse_argument
(
const
char
*
arg
,
Flag
::
Flags
origin
)
{
// range of acceptable characters spelled out for portability reasons
// range of acceptable characters spelled out for portability reasons
#define NAME_RANGE "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
#define NAME_RANGE "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
...
@@ -850,7 +850,7 @@ void Arguments::print_jvm_args_on(outputStream* st) {
...
@@ -850,7 +850,7 @@ void Arguments::print_jvm_args_on(outputStream* st) {
}
}
bool
Arguments
::
process_argument
(
const
char
*
arg
,
bool
Arguments
::
process_argument
(
const
char
*
arg
,
jboolean
ignore_unrecognized
,
Flag
ValueOrigin
origin
)
{
jboolean
ignore_unrecognized
,
Flag
::
Flags
origin
)
{
JDK_Version
since
=
JDK_Version
();
JDK_Version
since
=
JDK_Version
();
...
@@ -904,7 +904,7 @@ bool Arguments::process_argument(const char* arg,
...
@@ -904,7 +904,7 @@ bool Arguments::process_argument(const char* arg,
jio_fprintf
(
defaultStream
::
error_stream
(),
jio_fprintf
(
defaultStream
::
error_stream
(),
"Did you mean '%s%s%s'?
\n
"
,
"Did you mean '%s%s%s'?
\n
"
,
(
fuzzy_matched
->
is_bool
())
?
"(+/-)"
:
""
,
(
fuzzy_matched
->
is_bool
())
?
"(+/-)"
:
""
,
fuzzy_matched
->
name
,
fuzzy_matched
->
_
name
,
(
fuzzy_matched
->
is_bool
())
?
""
:
"=<value>"
);
(
fuzzy_matched
->
is_bool
())
?
""
:
"=<value>"
);
}
}
}
}
...
@@ -952,7 +952,7 @@ bool Arguments::process_settings_file(const char* file_name, bool should_exist,
...
@@ -952,7 +952,7 @@ bool Arguments::process_settings_file(const char* file_name, bool should_exist,
// this allows a way to include spaces in string-valued options
// this allows a way to include spaces in string-valued options
token
[
pos
]
=
'\0'
;
token
[
pos
]
=
'\0'
;
logOption
(
token
);
logOption
(
token
);
result
&=
process_argument
(
token
,
ignore_unrecognized
,
CONFIG_FILE
);
result
&=
process_argument
(
token
,
ignore_unrecognized
,
Flag
::
CONFIG_FILE
);
build_jvm_flags
(
token
);
build_jvm_flags
(
token
);
pos
=
0
;
pos
=
0
;
in_white_space
=
true
;
in_white_space
=
true
;
...
@@ -970,7 +970,7 @@ bool Arguments::process_settings_file(const char* file_name, bool should_exist,
...
@@ -970,7 +970,7 @@ bool Arguments::process_settings_file(const char* file_name, bool should_exist,
}
}
if
(
pos
>
0
)
{
if
(
pos
>
0
)
{
token
[
pos
]
=
'\0'
;
token
[
pos
]
=
'\0'
;
result
&=
process_argument
(
token
,
ignore_unrecognized
,
CONFIG_FILE
);
result
&=
process_argument
(
token
,
ignore_unrecognized
,
Flag
::
CONFIG_FILE
);
build_jvm_flags
(
token
);
build_jvm_flags
(
token
);
}
}
fclose
(
stream
);
fclose
(
stream
);
...
@@ -2434,7 +2434,7 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) {
...
@@ -2434,7 +2434,7 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) {
}
}
// Parse JavaVMInitArgs structure passed in
// Parse JavaVMInitArgs structure passed in
result
=
parse_each_vm_init_arg
(
args
,
&
scp
,
&
scp_assembly_required
,
COMMAND_LINE
);
result
=
parse_each_vm_init_arg
(
args
,
&
scp
,
&
scp_assembly_required
,
Flag
::
COMMAND_LINE
);
if
(
result
!=
JNI_OK
)
{
if
(
result
!=
JNI_OK
)
{
return
result
;
return
result
;
}
}
...
@@ -2521,7 +2521,7 @@ bool valid_hprof_or_jdwp_agent(char *name, bool is_path) {
...
@@ -2521,7 +2521,7 @@ bool valid_hprof_or_jdwp_agent(char *name, bool is_path) {
jint
Arguments
::
parse_each_vm_init_arg
(
const
JavaVMInitArgs
*
args
,
jint
Arguments
::
parse_each_vm_init_arg
(
const
JavaVMInitArgs
*
args
,
SysClassPath
*
scp_p
,
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
,
bool
*
scp_assembly_required_p
,
Flag
ValueOrigin
origin
)
{
Flag
::
Flags
origin
)
{
// Remaining part of option string
// Remaining part of option string
const
char
*
tail
;
const
char
*
tail
;
...
@@ -3344,7 +3344,7 @@ jint Arguments::parse_options_environment_variable(const char* name, SysClassPat
...
@@ -3344,7 +3344,7 @@ jint Arguments::parse_options_environment_variable(const char* name, SysClassPat
}
}
}
}
return
(
parse_each_vm_init_arg
(
&
vm_args
,
scp_p
,
scp_assembly_required_p
,
ENVIRON_VAR
));
return
(
parse_each_vm_init_arg
(
&
vm_args
,
scp_p
,
scp_assembly_required_p
,
Flag
::
ENVIRON_VAR
));
}
}
return
JNI_OK
;
return
JNI_OK
;
}
}
...
...
src/share/vm/runtime/arguments.hpp
浏览文件 @
f526d9e6
...
@@ -360,15 +360,15 @@ class Arguments : AllStatic {
...
@@ -360,15 +360,15 @@ class Arguments : AllStatic {
// Argument parsing
// Argument parsing
static
void
do_pd_flag_adjustments
();
static
void
do_pd_flag_adjustments
();
static
bool
parse_argument
(
const
char
*
arg
,
Flag
ValueOrigin
origin
);
static
bool
parse_argument
(
const
char
*
arg
,
Flag
::
Flags
origin
);
static
bool
process_argument
(
const
char
*
arg
,
jboolean
ignore_unrecognized
,
Flag
ValueOrigin
origin
);
static
bool
process_argument
(
const
char
*
arg
,
jboolean
ignore_unrecognized
,
Flag
::
Flags
origin
);
static
void
process_java_launcher_argument
(
const
char
*
,
void
*
);
static
void
process_java_launcher_argument
(
const
char
*
,
void
*
);
static
void
process_java_compiler_argument
(
char
*
arg
);
static
void
process_java_compiler_argument
(
char
*
arg
);
static
jint
parse_options_environment_variable
(
const
char
*
name
,
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
);
static
jint
parse_options_environment_variable
(
const
char
*
name
,
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
);
static
jint
parse_java_tool_options_environment_variable
(
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
);
static
jint
parse_java_tool_options_environment_variable
(
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
);
static
jint
parse_java_options_environment_variable
(
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
);
static
jint
parse_java_options_environment_variable
(
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
);
static
jint
parse_vm_init_args
(
const
JavaVMInitArgs
*
args
);
static
jint
parse_vm_init_args
(
const
JavaVMInitArgs
*
args
);
static
jint
parse_each_vm_init_arg
(
const
JavaVMInitArgs
*
args
,
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
,
Flag
ValueOrigin
origin
);
static
jint
parse_each_vm_init_arg
(
const
JavaVMInitArgs
*
args
,
SysClassPath
*
scp_p
,
bool
*
scp_assembly_required_p
,
Flag
::
Flags
origin
);
static
jint
finalize_vm_init_args
(
SysClassPath
*
scp_p
,
bool
scp_assembly_required
);
static
jint
finalize_vm_init_args
(
SysClassPath
*
scp_p
,
bool
scp_assembly_required
);
static
bool
is_bad_option
(
const
JavaVMOption
*
option
,
jboolean
ignore
,
static
bool
is_bad_option
(
const
JavaVMOption
*
option
,
jboolean
ignore
,
const
char
*
option_type
);
const
char
*
option_type
);
...
...
src/share/vm/runtime/globals.cpp
浏览文件 @
f526d9e6
...
@@ -62,26 +62,174 @@ ARCH_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PRODUCT_FLAG, \
...
@@ -62,26 +62,174 @@ ARCH_FLAGS(MATERIALIZE_DEVELOPER_FLAG, MATERIALIZE_PRODUCT_FLAG, \
MATERIALIZE_FLAGS_EXT
MATERIALIZE_FLAGS_EXT
void
Flag
::
check_writable
()
{
if
(
is_constant_in_binary
())
{
fatal
(
err_msg
(
"flag is constant: %s"
,
_name
));
}
}
bool
Flag
::
is_bool
()
const
{
return
strcmp
(
_type
,
"bool"
)
==
0
;
}
bool
Flag
::
get_bool
()
const
{
return
*
((
bool
*
)
_addr
);
}
void
Flag
::
set_bool
(
bool
value
)
{
check_writable
();
*
((
bool
*
)
_addr
)
=
value
;
}
bool
Flag
::
is_intx
()
const
{
return
strcmp
(
_type
,
"intx"
)
==
0
;
}
intx
Flag
::
get_intx
()
const
{
return
*
((
intx
*
)
_addr
);
}
void
Flag
::
set_intx
(
intx
value
)
{
check_writable
();
*
((
intx
*
)
_addr
)
=
value
;
}
bool
Flag
::
is_uintx
()
const
{
return
strcmp
(
_type
,
"uintx"
)
==
0
;
}
uintx
Flag
::
get_uintx
()
const
{
return
*
((
uintx
*
)
_addr
);
}
void
Flag
::
set_uintx
(
uintx
value
)
{
check_writable
();
*
((
uintx
*
)
_addr
)
=
value
;
}
bool
Flag
::
is_uint64_t
()
const
{
return
strcmp
(
_type
,
"uint64_t"
)
==
0
;
}
uint64_t
Flag
::
get_uint64_t
()
const
{
return
*
((
uint64_t
*
)
_addr
);
}
void
Flag
::
set_uint64_t
(
uint64_t
value
)
{
check_writable
();
*
((
uint64_t
*
)
_addr
)
=
value
;
}
bool
Flag
::
is_double
()
const
{
return
strcmp
(
_type
,
"double"
)
==
0
;
}
double
Flag
::
get_double
()
const
{
return
*
((
double
*
)
_addr
);
}
void
Flag
::
set_double
(
double
value
)
{
check_writable
();
*
((
double
*
)
_addr
)
=
value
;
}
bool
Flag
::
is_ccstr
()
const
{
return
strcmp
(
_type
,
"ccstr"
)
==
0
||
strcmp
(
_type
,
"ccstrlist"
)
==
0
;
}
bool
Flag
::
ccstr_accumulates
()
const
{
return
strcmp
(
_type
,
"ccstrlist"
)
==
0
;
}
ccstr
Flag
::
get_ccstr
()
const
{
return
*
((
ccstr
*
)
_addr
);
}
void
Flag
::
set_ccstr
(
ccstr
value
)
{
check_writable
();
*
((
ccstr
*
)
_addr
)
=
value
;
}
Flag
::
Flags
Flag
::
get_origin
()
{
return
Flags
(
_flags
&
VALUE_ORIGIN_MASK
);
}
void
Flag
::
set_origin
(
Flags
origin
)
{
assert
((
origin
&
VALUE_ORIGIN_MASK
)
==
origin
,
"sanity"
);
_flags
=
Flags
((
_flags
&
~
VALUE_ORIGIN_MASK
)
|
origin
);
}
bool
Flag
::
is_default
()
{
return
(
get_origin
()
==
DEFAULT
);
}
bool
Flag
::
is_ergonomic
()
{
return
(
get_origin
()
==
ERGONOMIC
);
}
bool
Flag
::
is_command_line
()
{
return
(
get_origin
()
==
COMMAND_LINE
);
}
bool
Flag
::
is_product
()
const
{
return
(
_flags
&
KIND_PRODUCT
)
!=
0
;
}
bool
Flag
::
is_manageable
()
const
{
return
(
_flags
&
KIND_MANAGEABLE
)
!=
0
;
}
bool
Flag
::
is_diagnostic
()
const
{
return
(
_flags
&
KIND_DIAGNOSTIC
)
!=
0
;
}
bool
Flag
::
is_experimental
()
const
{
return
(
_flags
&
KIND_EXPERIMENTAL
)
!=
0
;
}
bool
Flag
::
is_notproduct
()
const
{
return
(
_flags
&
KIND_NOT_PRODUCT
)
!=
0
;
}
bool
Flag
::
is_develop
()
const
{
return
(
_flags
&
KIND_DEVELOP
)
!=
0
;
}
bool
Flag
::
is_read_write
()
const
{
return
(
_flags
&
KIND_READ_WRITE
)
!=
0
;
}
bool
Flag
::
is_commercial
()
const
{
return
(
_flags
&
KIND_COMMERCIAL
)
!=
0
;
}
/**
* Returns if this flag is a constant in the binary. Right now this is
* true for notproduct and develop flags in product builds.
*/
bool
Flag
::
is_constant_in_binary
()
const
{
#ifdef PRODUCT
return
is_notproduct
()
||
is_develop
();
#else
return
false
;
#endif
}
bool
Flag
::
is_unlocker
()
const
{
bool
Flag
::
is_unlocker
()
const
{
return
strcmp
(
name
,
"UnlockDiagnosticVMOptions"
)
==
0
||
return
strcmp
(
_
name
,
"UnlockDiagnosticVMOptions"
)
==
0
||
strcmp
(
name
,
"UnlockExperimentalVMOptions"
)
==
0
||
strcmp
(
_
name
,
"UnlockExperimentalVMOptions"
)
==
0
||
is_unlocker_ext
();
is_unlocker_ext
();
}
}
bool
Flag
::
is_unlocked
()
const
{
bool
Flag
::
is_unlocked
()
const
{
if
(
strcmp
(
kind
,
"{diagnostic}"
)
==
0
||
if
(
is_diagnostic
())
{
strcmp
(
kind
,
"{C2 diagnostic}"
)
==
0
||
strcmp
(
kind
,
"{ARCH diagnostic}"
)
==
0
||
strcmp
(
kind
,
"{Shark diagnostic}"
)
==
0
)
{
return
UnlockDiagnosticVMOptions
;
return
UnlockDiagnosticVMOptions
;
}
else
if
(
strcmp
(
kind
,
"{experimental}"
)
==
0
||
}
strcmp
(
kind
,
"{C2 experimental}"
)
==
0
||
if
(
is_experimental
())
{
strcmp
(
kind
,
"{ARCH experimental}"
)
==
0
||
strcmp
(
kind
,
"{Shark experimental}"
)
==
0
)
{
return
UnlockExperimentalVMOptions
;
return
UnlockExperimentalVMOptions
;
}
else
{
return
is_unlocked_ext
();
}
}
return
is_unlocked_ext
();
}
}
// Get custom message for this locked flag, or return NULL if
// Get custom message for this locked flag, or return NULL if
...
@@ -91,16 +239,14 @@ void Flag::get_locked_message(char* buf, int buflen) const {
...
@@ -91,16 +239,14 @@ void Flag::get_locked_message(char* buf, int buflen) const {
}
}
bool
Flag
::
is_writeable
()
const
{
bool
Flag
::
is_writeable
()
const
{
return
strcmp
(
kind
,
"{manageable}"
)
==
0
||
return
is_manageable
()
||
(
is_product
()
&&
is_read_write
())
||
is_writeable_ext
();
strcmp
(
kind
,
"{product rw}"
)
==
0
||
is_writeable_ext
();
}
}
// All flags except "manageable" are assumed to be internal flags.
// All flags except "manageable" are assumed to be internal flags.
// Long term, we need to define a mechanism to specify which flags
// Long term, we need to define a mechanism to specify which flags
// are external/stable and change this function accordingly.
// are external/stable and change this function accordingly.
bool
Flag
::
is_external
()
const
{
bool
Flag
::
is_external
()
const
{
return
strcmp
(
kind
,
"{manageable}"
)
==
0
||
is_external_ext
();
return
is_manageable
()
||
is_external_ext
();
}
}
...
@@ -108,53 +254,113 @@ bool Flag::is_external() const {
...
@@ -108,53 +254,113 @@ bool Flag::is_external() const {
#define FORMAT_BUFFER_LEN 16
#define FORMAT_BUFFER_LEN 16
void
Flag
::
print_on
(
outputStream
*
st
,
bool
withComments
)
{
void
Flag
::
print_on
(
outputStream
*
st
,
bool
withComments
)
{
st
->
print
(
"%9s %-40s %c= "
,
type
,
name
,
(
origin
!=
DEFAULT
?
':'
:
' '
));
// Don't print notproduct and develop flags in a product build.
if
(
is_bool
())
st
->
print
(
"%-16s"
,
get_bool
()
?
"true"
:
"false"
);
if
(
is_constant_in_binary
())
{
if
(
is_intx
())
st
->
print
(
"%-16ld"
,
get_intx
());
return
;
if
(
is_uintx
())
st
->
print
(
"%-16lu"
,
get_uintx
());
}
if
(
is_uint64_t
())
st
->
print
(
"%-16lu"
,
get_uint64_t
());
if
(
is_double
())
st
->
print
(
"%-16f"
,
get_double
());
st
->
print
(
"%9s %-40s %c= "
,
_type
,
_name
,
(
!
is_default
()
?
':'
:
' '
));
if
(
is_bool
())
{
st
->
print
(
"%-16s"
,
get_bool
()
?
"true"
:
"false"
);
}
if
(
is_intx
())
{
st
->
print
(
"%-16ld"
,
get_intx
());
}
if
(
is_uintx
())
{
st
->
print
(
"%-16lu"
,
get_uintx
());
}
if
(
is_uint64_t
())
{
st
->
print
(
"%-16lu"
,
get_uint64_t
());
}
if
(
is_double
())
{
st
->
print
(
"%-16f"
,
get_double
());
}
if
(
is_ccstr
())
{
if
(
is_ccstr
())
{
const
char
*
cp
=
get_ccstr
();
const
char
*
cp
=
get_ccstr
();
if
(
cp
!=
NULL
)
{
if
(
cp
!=
NULL
)
{
const
char
*
eol
;
const
char
*
eol
;
while
((
eol
=
strchr
(
cp
,
'\n'
))
!=
NULL
)
{
while
((
eol
=
strchr
(
cp
,
'\n'
))
!=
NULL
)
{
char
format_buffer
[
FORMAT_BUFFER_LEN
];
char
format_buffer
[
FORMAT_BUFFER_LEN
];
size_t
llen
=
pointer_delta
(
eol
,
cp
,
sizeof
(
char
));
size_t
llen
=
pointer_delta
(
eol
,
cp
,
sizeof
(
char
));
jio_snprintf
(
format_buffer
,
FORMAT_BUFFER_LEN
,
jio_snprintf
(
format_buffer
,
FORMAT_BUFFER_LEN
,
"%%."
SIZE_FORMAT
"s"
,
llen
);
"%%."
SIZE_FORMAT
"s"
,
llen
);
st
->
print
(
format_buffer
,
cp
);
st
->
print
(
format_buffer
,
cp
);
st
->
cr
();
st
->
cr
();
cp
=
eol
+
1
;
cp
=
eol
+
1
;
st
->
print
(
"%5s %-35s += "
,
""
,
name
);
st
->
print
(
"%5s %-35s += "
,
""
,
_
name
);
}
}
st
->
print
(
"%-16s"
,
cp
);
st
->
print
(
"%-16s"
,
cp
);
}
}
else
st
->
print
(
"%-16s"
,
""
);
else
st
->
print
(
"%-16s"
,
""
);
}
}
st
->
print
(
"%-20s"
,
kind
);
st
->
print
(
"%-20"
);
print_kind
(
st
);
if
(
withComments
)
{
if
(
withComments
)
{
#ifndef PRODUCT
#ifndef PRODUCT
st
->
print
(
"%s"
,
doc
);
st
->
print
(
"%s"
,
_doc
);
#endif
#endif
}
}
st
->
cr
();
st
->
cr
();
}
}
void
Flag
::
print_kind
(
outputStream
*
st
)
{
struct
Data
{
int
flag
;
const
char
*
name
;
};
Data
data
[]
=
{
{
KIND_C1
,
"C1"
},
{
KIND_C2
,
"C2"
},
{
KIND_ARCH
,
"ARCH"
},
{
KIND_SHARK
,
"SHARK"
},
{
KIND_PLATFORM_DEPENDENT
,
"pd"
},
{
KIND_PRODUCT
,
"product"
},
{
KIND_MANAGEABLE
,
"manageable"
},
{
KIND_DIAGNOSTIC
,
"diagnostic"
},
{
KIND_NOT_PRODUCT
,
"notproduct"
},
{
KIND_DEVELOP
,
"develop"
},
{
KIND_LP64_PRODUCT
,
"lp64_product"
},
{
KIND_READ_WRITE
,
"rw"
},
{
-
1
,
""
}
};
if
((
_flags
&
KIND_MASK
)
!=
0
)
{
st
->
print
(
"{"
);
bool
is_first
=
true
;
for
(
int
i
=
0
;
data
[
i
].
flag
!=
-
1
;
i
++
)
{
Data
d
=
data
[
i
];
if
((
_flags
&
d
.
flag
)
!=
0
)
{
if
(
is_first
)
{
is_first
=
false
;
}
else
{
st
->
print
(
" "
);
}
st
->
print
(
d
.
name
);
}
}
st
->
print
(
"}"
);
}
}
void
Flag
::
print_as_flag
(
outputStream
*
st
)
{
void
Flag
::
print_as_flag
(
outputStream
*
st
)
{
if
(
is_bool
())
{
if
(
is_bool
())
{
st
->
print
(
"-XX:%s%s"
,
get_bool
()
?
"+"
:
"-"
,
name
);
st
->
print
(
"-XX:%s%s"
,
get_bool
()
?
"+"
:
"-"
,
_
name
);
}
else
if
(
is_intx
())
{
}
else
if
(
is_intx
())
{
st
->
print
(
"-XX:%s="
INTX_FORMAT
,
name
,
get_intx
());
st
->
print
(
"-XX:%s="
INTX_FORMAT
,
_
name
,
get_intx
());
}
else
if
(
is_uintx
())
{
}
else
if
(
is_uintx
())
{
st
->
print
(
"-XX:%s="
UINTX_FORMAT
,
name
,
get_uintx
());
st
->
print
(
"-XX:%s="
UINTX_FORMAT
,
_
name
,
get_uintx
());
}
else
if
(
is_uint64_t
())
{
}
else
if
(
is_uint64_t
())
{
st
->
print
(
"-XX:%s="
UINT64_FORMAT
,
name
,
get_uint64_t
());
st
->
print
(
"-XX:%s="
UINT64_FORMAT
,
_
name
,
get_uint64_t
());
}
else
if
(
is_double
())
{
}
else
if
(
is_double
())
{
st
->
print
(
"-XX:%s=%f"
,
name
,
get_double
());
st
->
print
(
"-XX:%s=%f"
,
_
name
,
get_double
());
}
else
if
(
is_ccstr
())
{
}
else
if
(
is_ccstr
())
{
st
->
print
(
"-XX:%s="
,
name
);
st
->
print
(
"-XX:%s="
,
_
name
);
const
char
*
cp
=
get_ccstr
();
const
char
*
cp
=
get_ccstr
();
if
(
cp
!=
NULL
)
{
if
(
cp
!=
NULL
)
{
// Need to turn embedded '\n's back into separate arguments
// Need to turn embedded '\n's back into separate arguments
...
@@ -167,7 +373,7 @@ void Flag::print_as_flag(outputStream* st) {
...
@@ -167,7 +373,7 @@ void Flag::print_as_flag(outputStream* st) {
st
->
print
(
"%c"
,
*
cp
);
st
->
print
(
"%c"
,
*
cp
);
break
;
break
;
case
'\n'
:
case
'\n'
:
st
->
print
(
" -XX:%s="
,
name
);
st
->
print
(
" -XX:%s="
,
_
name
);
break
;
break
;
}
}
}
}
...
@@ -180,79 +386,51 @@ void Flag::print_as_flag(outputStream* st) {
...
@@ -180,79 +386,51 @@ void Flag::print_as_flag(outputStream* st) {
// 4991491 do not "optimize out" the was_set false values: omitting them
// 4991491 do not "optimize out" the was_set false values: omitting them
// tickles a Microsoft compiler bug causing flagTable to be malformed
// tickles a Microsoft compiler bug causing flagTable to be malformed
#define RUNTIME_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{product}", DEFAULT },
#define NAME(name) NOT_PRODUCT(&name) PRODUCT_ONLY(&CONST_##name)
#define RUNTIME_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{pd product}", DEFAULT },
#define RUNTIME_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{diagnostic}", DEFAULT },
#define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{experimental}", DEFAULT },
#define RUNTIME_MANAGEABLE_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{manageable}", DEFAULT },
#define RUNTIME_PRODUCT_RW_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{product rw}", DEFAULT },
#
ifdef PRODUCT
#
define RUNTIME_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT) },
#define RUNTIME_DEVELOP_FLAG_STRUCT(type, name, value, doc)
/* flag is constant */
#define RUNTIME_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define RUNTIME_PD_DEVELOP_FLAG_STRUCT(type, name, doc)
/* flag is constant */
#define RUNTIME_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC) },
#define RUNTIME_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
#define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_EXPERIMENTAL) },
#
else
#
define RUNTIME_MANAGEABLE_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_MANAGEABLE) },
#define RUNTIME_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "", DEFAULT
},
#define RUNTIME_PRODUCT_RW_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_READ_WRITE)
},
#define RUNTIME_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{pd}", DEFAULT
},
#define RUNTIME_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP)
},
#define RUNTIME_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{notproduct}", DEFAULT
},
#define RUNTIME_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT)
},
#
endif
#
define RUNTIME_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_NOT_PRODUCT) },
#ifdef _LP64
#ifdef _LP64
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{lp64_product}", DEFAULT
},
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_LP64_PRODUCT)
},
#else
#else
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc)
/* flag is constant */
#define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc)
/* flag is constant */
#endif // _LP64
#endif // _LP64
#define C1_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C1 product}", DEFAULT },
#define C1_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT) },
#define C1_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C1 pd product}", DEFAULT },
#define C1_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define C1_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C1 diagnostic}", DEFAULT },
#define C1_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC) },
#ifdef PRODUCT
#define C1_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP) },
#define C1_DEVELOP_FLAG_STRUCT(type, name, value, doc)
/* flag is constant */
#define C1_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
#define C1_PD_DEVELOP_FLAG_STRUCT(type, name, doc)
/* flag is constant */
#define C1_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_NOT_PRODUCT) },
#define C1_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
#else
#define C2_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT) },
#define C1_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C1}", DEFAULT },
#define C2_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define C1_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{C1 pd}", DEFAULT },
#define C2_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC) },
#define C1_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C1 notproduct}", DEFAULT },
#define C2_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_EXPERIMENTAL) },
#endif
#define C2_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP) },
#define C2_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
#define C2_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 product}", DEFAULT },
#define C2_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_NOT_PRODUCT) },
#define C2_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 pd product}", DEFAULT },
#define C2_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 diagnostic}", DEFAULT },
#define ARCH_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_PRODUCT) },
#define C2_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{C2 experimental}", DEFAULT },
#define ARCH_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DIAGNOSTIC) },
#ifdef PRODUCT
#define ARCH_EXPERIMENTAL_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_EXPERIMENTAL) },
#define C2_DEVELOP_FLAG_STRUCT(type, name, value, doc)
/* flag is constant */
#define ARCH_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DEVELOP) },
#define C2_PD_DEVELOP_FLAG_STRUCT(type, name, doc)
/* flag is constant */
#define ARCH_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_NOT_PRODUCT) },
#define C2_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
#else
#define SHARK_PRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT) },
#define C2_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C2}", DEFAULT },
#define SHARK_PD_PRODUCT_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
#define C2_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{C2 pd}", DEFAULT },
#define SHARK_DIAGNOSTIC_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC) },
#define C2_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{C2 notproduct}", DEFAULT },
#define SHARK_DEVELOP_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP) },
#endif
#define SHARK_PD_DEVELOP_FLAG_STRUCT( type, name, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
#define SHARK_NOTPRODUCT_FLAG_STRUCT( type, name, value, doc) { #type, XSTR(name), NAME(name), NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_NOT_PRODUCT) },
#define ARCH_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH product}", DEFAULT },
#define ARCH_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH diagnostic}", DEFAULT },
#define ARCH_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{ARCH experimental}", DEFAULT },
#ifdef PRODUCT
#define ARCH_DEVELOP_FLAG_STRUCT(type, name, value, doc)
/* flag is constant */
#define ARCH_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
#else
#define ARCH_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{ARCH}", DEFAULT },
#define ARCH_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{ARCH notproduct}", DEFAULT },
#endif
#define SHARK_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark product}", DEFAULT },
#define SHARK_PD_PRODUCT_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark pd product}", DEFAULT },
#define SHARK_DIAGNOSTIC_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, NOT_PRODUCT_ARG(doc) "{Shark diagnostic}", DEFAULT },
#ifdef PRODUCT
#define SHARK_DEVELOP_FLAG_STRUCT(type, name, value, doc)
/* flag is constant */
#define SHARK_PD_DEVELOP_FLAG_STRUCT(type, name, doc)
/* flag is constant */
#define SHARK_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc)
#else
#define SHARK_DEVELOP_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{Shark}", DEFAULT },
#define SHARK_PD_DEVELOP_FLAG_STRUCT(type, name, doc) { #type, XSTR(name), &name, doc, "{Shark pd}", DEFAULT },
#define SHARK_NOTPRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name, doc, "{Shark notproduct}", DEFAULT },
#endif
static
Flag
flagTable
[]
=
{
static
Flag
flagTable
[]
=
{
RUNTIME_FLAGS
(
RUNTIME_DEVELOP_FLAG_STRUCT
,
RUNTIME_PD_DEVELOP_FLAG_STRUCT
,
RUNTIME_PRODUCT_FLAG_STRUCT
,
RUNTIME_PD_PRODUCT_FLAG_STRUCT
,
RUNTIME_DIAGNOSTIC_FLAG_STRUCT
,
RUNTIME_EXPERIMENTAL_FLAG_STRUCT
,
RUNTIME_NOTPRODUCT_FLAG_STRUCT
,
RUNTIME_MANAGEABLE_FLAG_STRUCT
,
RUNTIME_PRODUCT_RW_FLAG_STRUCT
,
RUNTIME_LP64_PRODUCT_FLAG_STRUCT
)
RUNTIME_FLAGS
(
RUNTIME_DEVELOP_FLAG_STRUCT
,
RUNTIME_PD_DEVELOP_FLAG_STRUCT
,
RUNTIME_PRODUCT_FLAG_STRUCT
,
RUNTIME_PD_PRODUCT_FLAG_STRUCT
,
RUNTIME_DIAGNOSTIC_FLAG_STRUCT
,
RUNTIME_EXPERIMENTAL_FLAG_STRUCT
,
RUNTIME_NOTPRODUCT_FLAG_STRUCT
,
RUNTIME_MANAGEABLE_FLAG_STRUCT
,
RUNTIME_PRODUCT_RW_FLAG_STRUCT
,
RUNTIME_LP64_PRODUCT_FLAG_STRUCT
)
...
@@ -285,9 +463,14 @@ inline bool str_equal(const char* s, const char* q, size_t len) {
...
@@ -285,9 +463,14 @@ inline bool str_equal(const char* s, const char* q, size_t len) {
// Search the flag table for a named flag
// Search the flag table for a named flag
Flag
*
Flag
::
find_flag
(
const
char
*
name
,
size_t
length
,
bool
allow_locked
)
{
Flag
*
Flag
::
find_flag
(
const
char
*
name
,
size_t
length
,
bool
allow_locked
)
{
for
(
Flag
*
current
=
&
flagTable
[
0
];
current
->
name
!=
NULL
;
current
++
)
{
for
(
Flag
*
current
=
&
flagTable
[
0
];
current
->
_name
!=
NULL
;
current
++
)
{
if
(
str_equal
(
current
->
name
,
name
,
length
))
{
if
(
str_equal
(
current
->
_name
,
name
,
length
))
{
// Found a matching entry. Report locked flags only if allowed.
// Found a matching entry.
// Don't report notproduct and develop flags in product builds.
if
(
current
->
is_constant_in_binary
())
{
return
NULL
;
}
// Report locked flags only if allowed.
if
(
!
(
current
->
is_unlocked
()
||
current
->
is_unlocker
()))
{
if
(
!
(
current
->
is_unlocked
()
||
current
->
is_unlocker
()))
{
if
(
!
allow_locked
)
{
if
(
!
allow_locked
)
{
// disable use of locked flags, e.g. diagnostic, experimental,
// disable use of locked flags, e.g. diagnostic, experimental,
...
@@ -327,8 +510,8 @@ Flag* Flag::fuzzy_match(const char* name, size_t length, bool allow_locked) {
...
@@ -327,8 +510,8 @@ Flag* Flag::fuzzy_match(const char* name, size_t length, bool allow_locked) {
float
score
;
float
score
;
float
max_score
=
-
1
;
float
max_score
=
-
1
;
for
(
Flag
*
current
=
&
flagTable
[
0
];
current
->
name
!=
NULL
;
current
++
)
{
for
(
Flag
*
current
=
&
flagTable
[
0
];
current
->
_
name
!=
NULL
;
current
++
)
{
score
=
str_similar
(
current
->
name
,
name
,
length
);
score
=
str_similar
(
current
->
_
name
,
name
,
length
);
if
(
score
>
max_score
)
{
if
(
score
>
max_score
)
{
max_score
=
score
;
max_score
=
score
;
match
=
current
;
match
=
current
;
...
@@ -357,25 +540,25 @@ static Flag* address_of_flag(CommandLineFlagWithType flag) {
...
@@ -357,25 +540,25 @@ static Flag* address_of_flag(CommandLineFlagWithType flag) {
bool
CommandLineFlagsEx
::
is_default
(
CommandLineFlag
flag
)
{
bool
CommandLineFlagsEx
::
is_default
(
CommandLineFlag
flag
)
{
assert
((
size_t
)
flag
<
Flag
::
numFlags
,
"bad command line flag index"
);
assert
((
size_t
)
flag
<
Flag
::
numFlags
,
"bad command line flag index"
);
Flag
*
f
=
&
Flag
::
flags
[
flag
];
Flag
*
f
=
&
Flag
::
flags
[
flag
];
return
(
f
->
origin
==
DEFAULT
);
return
f
->
is_default
(
);
}
}
bool
CommandLineFlagsEx
::
is_ergo
(
CommandLineFlag
flag
)
{
bool
CommandLineFlagsEx
::
is_ergo
(
CommandLineFlag
flag
)
{
assert
((
size_t
)
flag
<
Flag
::
numFlags
,
"bad command line flag index"
);
assert
((
size_t
)
flag
<
Flag
::
numFlags
,
"bad command line flag index"
);
Flag
*
f
=
&
Flag
::
flags
[
flag
];
Flag
*
f
=
&
Flag
::
flags
[
flag
];
return
(
f
->
origin
==
ERGONOMIC
);
return
f
->
is_ergonomic
(
);
}
}
bool
CommandLineFlagsEx
::
is_cmdline
(
CommandLineFlag
flag
)
{
bool
CommandLineFlagsEx
::
is_cmdline
(
CommandLineFlag
flag
)
{
assert
((
size_t
)
flag
<
Flag
::
numFlags
,
"bad command line flag index"
);
assert
((
size_t
)
flag
<
Flag
::
numFlags
,
"bad command line flag index"
);
Flag
*
f
=
&
Flag
::
flags
[
flag
];
Flag
*
f
=
&
Flag
::
flags
[
flag
];
return
(
f
->
origin
==
COMMAND_LINE
);
return
f
->
is_command_line
(
);
}
}
bool
CommandLineFlags
::
wasSetOnCmdline
(
const
char
*
name
,
bool
*
value
)
{
bool
CommandLineFlags
::
wasSetOnCmdline
(
const
char
*
name
,
bool
*
value
)
{
Flag
*
result
=
Flag
::
find_flag
((
char
*
)
name
,
strlen
(
name
));
Flag
*
result
=
Flag
::
find_flag
((
char
*
)
name
,
strlen
(
name
));
if
(
result
==
NULL
)
return
false
;
if
(
result
==
NULL
)
return
false
;
*
value
=
(
result
->
origin
==
COMMAND_LINE
);
*
value
=
result
->
is_command_line
(
);
return
true
;
return
true
;
}
}
...
@@ -387,22 +570,22 @@ bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) {
...
@@ -387,22 +570,22 @@ bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) {
return
true
;
return
true
;
}
}
bool
CommandLineFlags
::
boolAtPut
(
char
*
name
,
size_t
len
,
bool
*
value
,
Flag
ValueOrigin
origin
)
{
bool
CommandLineFlags
::
boolAtPut
(
char
*
name
,
size_t
len
,
bool
*
value
,
Flag
::
Flags
origin
)
{
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
if
(
result
==
NULL
)
return
false
;
if
(
result
==
NULL
)
return
false
;
if
(
!
result
->
is_bool
())
return
false
;
if
(
!
result
->
is_bool
())
return
false
;
bool
old_value
=
result
->
get_bool
();
bool
old_value
=
result
->
get_bool
();
result
->
set_bool
(
*
value
);
result
->
set_bool
(
*
value
);
*
value
=
old_value
;
*
value
=
old_value
;
result
->
origin
=
origin
;
result
->
set_origin
(
origin
)
;
return
true
;
return
true
;
}
}
void
CommandLineFlagsEx
::
boolAtPut
(
CommandLineFlagWithType
flag
,
bool
value
,
Flag
ValueOrigin
origin
)
{
void
CommandLineFlagsEx
::
boolAtPut
(
CommandLineFlagWithType
flag
,
bool
value
,
Flag
::
Flags
origin
)
{
Flag
*
faddr
=
address_of_flag
(
flag
);
Flag
*
faddr
=
address_of_flag
(
flag
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_bool
(),
"wrong flag type"
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_bool
(),
"wrong flag type"
);
faddr
->
set_bool
(
value
);
faddr
->
set_bool
(
value
);
faddr
->
origin
=
origin
;
faddr
->
set_origin
(
origin
)
;
}
}
bool
CommandLineFlags
::
intxAt
(
char
*
name
,
size_t
len
,
intx
*
value
)
{
bool
CommandLineFlags
::
intxAt
(
char
*
name
,
size_t
len
,
intx
*
value
)
{
...
@@ -413,22 +596,22 @@ bool CommandLineFlags::intxAt(char* name, size_t len, intx* value) {
...
@@ -413,22 +596,22 @@ bool CommandLineFlags::intxAt(char* name, size_t len, intx* value) {
return
true
;
return
true
;
}
}
bool
CommandLineFlags
::
intxAtPut
(
char
*
name
,
size_t
len
,
intx
*
value
,
Flag
ValueOrigin
origin
)
{
bool
CommandLineFlags
::
intxAtPut
(
char
*
name
,
size_t
len
,
intx
*
value
,
Flag
::
Flags
origin
)
{
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
if
(
result
==
NULL
)
return
false
;
if
(
result
==
NULL
)
return
false
;
if
(
!
result
->
is_intx
())
return
false
;
if
(
!
result
->
is_intx
())
return
false
;
intx
old_value
=
result
->
get_intx
();
intx
old_value
=
result
->
get_intx
();
result
->
set_intx
(
*
value
);
result
->
set_intx
(
*
value
);
*
value
=
old_value
;
*
value
=
old_value
;
result
->
origin
=
origin
;
result
->
set_origin
(
origin
)
;
return
true
;
return
true
;
}
}
void
CommandLineFlagsEx
::
intxAtPut
(
CommandLineFlagWithType
flag
,
intx
value
,
Flag
ValueOrigin
origin
)
{
void
CommandLineFlagsEx
::
intxAtPut
(
CommandLineFlagWithType
flag
,
intx
value
,
Flag
::
Flags
origin
)
{
Flag
*
faddr
=
address_of_flag
(
flag
);
Flag
*
faddr
=
address_of_flag
(
flag
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_intx
(),
"wrong flag type"
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_intx
(),
"wrong flag type"
);
faddr
->
set_intx
(
value
);
faddr
->
set_intx
(
value
);
faddr
->
origin
=
origin
;
faddr
->
set_origin
(
origin
)
;
}
}
bool
CommandLineFlags
::
uintxAt
(
char
*
name
,
size_t
len
,
uintx
*
value
)
{
bool
CommandLineFlags
::
uintxAt
(
char
*
name
,
size_t
len
,
uintx
*
value
)
{
...
@@ -439,22 +622,22 @@ bool CommandLineFlags::uintxAt(char* name, size_t len, uintx* value) {
...
@@ -439,22 +622,22 @@ bool CommandLineFlags::uintxAt(char* name, size_t len, uintx* value) {
return
true
;
return
true
;
}
}
bool
CommandLineFlags
::
uintxAtPut
(
char
*
name
,
size_t
len
,
uintx
*
value
,
Flag
ValueOrigin
origin
)
{
bool
CommandLineFlags
::
uintxAtPut
(
char
*
name
,
size_t
len
,
uintx
*
value
,
Flag
::
Flags
origin
)
{
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
if
(
result
==
NULL
)
return
false
;
if
(
result
==
NULL
)
return
false
;
if
(
!
result
->
is_uintx
())
return
false
;
if
(
!
result
->
is_uintx
())
return
false
;
uintx
old_value
=
result
->
get_uintx
();
uintx
old_value
=
result
->
get_uintx
();
result
->
set_uintx
(
*
value
);
result
->
set_uintx
(
*
value
);
*
value
=
old_value
;
*
value
=
old_value
;
result
->
origin
=
origin
;
result
->
set_origin
(
origin
)
;
return
true
;
return
true
;
}
}
void
CommandLineFlagsEx
::
uintxAtPut
(
CommandLineFlagWithType
flag
,
uintx
value
,
Flag
ValueOrigin
origin
)
{
void
CommandLineFlagsEx
::
uintxAtPut
(
CommandLineFlagWithType
flag
,
uintx
value
,
Flag
::
Flags
origin
)
{
Flag
*
faddr
=
address_of_flag
(
flag
);
Flag
*
faddr
=
address_of_flag
(
flag
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_uintx
(),
"wrong flag type"
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_uintx
(),
"wrong flag type"
);
faddr
->
set_uintx
(
value
);
faddr
->
set_uintx
(
value
);
faddr
->
origin
=
origin
;
faddr
->
set_origin
(
origin
)
;
}
}
bool
CommandLineFlags
::
uint64_tAt
(
char
*
name
,
size_t
len
,
uint64_t
*
value
)
{
bool
CommandLineFlags
::
uint64_tAt
(
char
*
name
,
size_t
len
,
uint64_t
*
value
)
{
...
@@ -465,22 +648,22 @@ bool CommandLineFlags::uint64_tAt(char* name, size_t len, uint64_t* value) {
...
@@ -465,22 +648,22 @@ bool CommandLineFlags::uint64_tAt(char* name, size_t len, uint64_t* value) {
return
true
;
return
true
;
}
}
bool
CommandLineFlags
::
uint64_tAtPut
(
char
*
name
,
size_t
len
,
uint64_t
*
value
,
Flag
ValueOrigin
origin
)
{
bool
CommandLineFlags
::
uint64_tAtPut
(
char
*
name
,
size_t
len
,
uint64_t
*
value
,
Flag
::
Flags
origin
)
{
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
if
(
result
==
NULL
)
return
false
;
if
(
result
==
NULL
)
return
false
;
if
(
!
result
->
is_uint64_t
())
return
false
;
if
(
!
result
->
is_uint64_t
())
return
false
;
uint64_t
old_value
=
result
->
get_uint64_t
();
uint64_t
old_value
=
result
->
get_uint64_t
();
result
->
set_uint64_t
(
*
value
);
result
->
set_uint64_t
(
*
value
);
*
value
=
old_value
;
*
value
=
old_value
;
result
->
origin
=
origin
;
result
->
set_origin
(
origin
)
;
return
true
;
return
true
;
}
}
void
CommandLineFlagsEx
::
uint64_tAtPut
(
CommandLineFlagWithType
flag
,
uint64_t
value
,
Flag
ValueOrigin
origin
)
{
void
CommandLineFlagsEx
::
uint64_tAtPut
(
CommandLineFlagWithType
flag
,
uint64_t
value
,
Flag
::
Flags
origin
)
{
Flag
*
faddr
=
address_of_flag
(
flag
);
Flag
*
faddr
=
address_of_flag
(
flag
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_uint64_t
(),
"wrong flag type"
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_uint64_t
(),
"wrong flag type"
);
faddr
->
set_uint64_t
(
value
);
faddr
->
set_uint64_t
(
value
);
faddr
->
origin
=
origin
;
faddr
->
set_origin
(
origin
)
;
}
}
bool
CommandLineFlags
::
doubleAt
(
char
*
name
,
size_t
len
,
double
*
value
)
{
bool
CommandLineFlags
::
doubleAt
(
char
*
name
,
size_t
len
,
double
*
value
)
{
...
@@ -491,22 +674,22 @@ bool CommandLineFlags::doubleAt(char* name, size_t len, double* value) {
...
@@ -491,22 +674,22 @@ bool CommandLineFlags::doubleAt(char* name, size_t len, double* value) {
return
true
;
return
true
;
}
}
bool
CommandLineFlags
::
doubleAtPut
(
char
*
name
,
size_t
len
,
double
*
value
,
Flag
ValueOrigin
origin
)
{
bool
CommandLineFlags
::
doubleAtPut
(
char
*
name
,
size_t
len
,
double
*
value
,
Flag
::
Flags
origin
)
{
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
if
(
result
==
NULL
)
return
false
;
if
(
result
==
NULL
)
return
false
;
if
(
!
result
->
is_double
())
return
false
;
if
(
!
result
->
is_double
())
return
false
;
double
old_value
=
result
->
get_double
();
double
old_value
=
result
->
get_double
();
result
->
set_double
(
*
value
);
result
->
set_double
(
*
value
);
*
value
=
old_value
;
*
value
=
old_value
;
result
->
origin
=
origin
;
result
->
set_origin
(
origin
)
;
return
true
;
return
true
;
}
}
void
CommandLineFlagsEx
::
doubleAtPut
(
CommandLineFlagWithType
flag
,
double
value
,
Flag
ValueOrigin
origin
)
{
void
CommandLineFlagsEx
::
doubleAtPut
(
CommandLineFlagWithType
flag
,
double
value
,
Flag
::
Flags
origin
)
{
Flag
*
faddr
=
address_of_flag
(
flag
);
Flag
*
faddr
=
address_of_flag
(
flag
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_double
(),
"wrong flag type"
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_double
(),
"wrong flag type"
);
faddr
->
set_double
(
value
);
faddr
->
set_double
(
value
);
faddr
->
origin
=
origin
;
faddr
->
set_origin
(
origin
)
;
}
}
bool
CommandLineFlags
::
ccstrAt
(
char
*
name
,
size_t
len
,
ccstr
*
value
)
{
bool
CommandLineFlags
::
ccstrAt
(
char
*
name
,
size_t
len
,
ccstr
*
value
)
{
...
@@ -519,7 +702,7 @@ bool CommandLineFlags::ccstrAt(char* name, size_t len, ccstr* value) {
...
@@ -519,7 +702,7 @@ bool CommandLineFlags::ccstrAt(char* name, size_t len, ccstr* value) {
// Contract: Flag will make private copy of the incoming value.
// Contract: Flag will make private copy of the incoming value.
// Outgoing value is always malloc-ed, and caller MUST call free.
// Outgoing value is always malloc-ed, and caller MUST call free.
bool
CommandLineFlags
::
ccstrAtPut
(
char
*
name
,
size_t
len
,
ccstr
*
value
,
Flag
ValueOrigin
origin
)
{
bool
CommandLineFlags
::
ccstrAtPut
(
char
*
name
,
size_t
len
,
ccstr
*
value
,
Flag
::
Flags
origin
)
{
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
Flag
*
result
=
Flag
::
find_flag
(
name
,
len
);
if
(
result
==
NULL
)
return
false
;
if
(
result
==
NULL
)
return
false
;
if
(
!
result
->
is_ccstr
())
return
false
;
if
(
!
result
->
is_ccstr
())
return
false
;
...
@@ -530,35 +713,35 @@ bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValu
...
@@ -530,35 +713,35 @@ bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValu
strcpy
(
new_value
,
*
value
);
strcpy
(
new_value
,
*
value
);
}
}
result
->
set_ccstr
(
new_value
);
result
->
set_ccstr
(
new_value
);
if
(
result
->
origin
==
DEFAULT
&&
old_value
!=
NULL
)
{
if
(
result
->
is_default
()
&&
old_value
!=
NULL
)
{
// Prior value is NOT heap allocated, but was a literal constant.
// Prior value is NOT heap allocated, but was a literal constant.
char
*
old_value_to_free
=
NEW_C_HEAP_ARRAY
(
char
,
strlen
(
old_value
)
+
1
,
mtInternal
);
char
*
old_value_to_free
=
NEW_C_HEAP_ARRAY
(
char
,
strlen
(
old_value
)
+
1
,
mtInternal
);
strcpy
(
old_value_to_free
,
old_value
);
strcpy
(
old_value_to_free
,
old_value
);
old_value
=
old_value_to_free
;
old_value
=
old_value_to_free
;
}
}
*
value
=
old_value
;
*
value
=
old_value
;
result
->
origin
=
origin
;
result
->
set_origin
(
origin
)
;
return
true
;
return
true
;
}
}
// Contract: Flag will make private copy of the incoming value.
// Contract: Flag will make private copy of the incoming value.
void
CommandLineFlagsEx
::
ccstrAtPut
(
CommandLineFlagWithType
flag
,
ccstr
value
,
Flag
ValueOrigin
origin
)
{
void
CommandLineFlagsEx
::
ccstrAtPut
(
CommandLineFlagWithType
flag
,
ccstr
value
,
Flag
::
Flags
origin
)
{
Flag
*
faddr
=
address_of_flag
(
flag
);
Flag
*
faddr
=
address_of_flag
(
flag
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_ccstr
(),
"wrong flag type"
);
guarantee
(
faddr
!=
NULL
&&
faddr
->
is_ccstr
(),
"wrong flag type"
);
ccstr
old_value
=
faddr
->
get_ccstr
();
ccstr
old_value
=
faddr
->
get_ccstr
();
char
*
new_value
=
NEW_C_HEAP_ARRAY
(
char
,
strlen
(
value
)
+
1
,
mtInternal
);
char
*
new_value
=
NEW_C_HEAP_ARRAY
(
char
,
strlen
(
value
)
+
1
,
mtInternal
);
strcpy
(
new_value
,
value
);
strcpy
(
new_value
,
value
);
faddr
->
set_ccstr
(
new_value
);
faddr
->
set_ccstr
(
new_value
);
if
(
faddr
->
origin
!=
DEFAULT
&&
old_value
!=
NULL
)
{
if
(
!
faddr
->
is_default
()
&&
old_value
!=
NULL
)
{
// Prior value is heap allocated so free it.
// Prior value is heap allocated so free it.
FREE_C_HEAP_ARRAY
(
char
,
old_value
,
mtInternal
);
FREE_C_HEAP_ARRAY
(
char
,
old_value
,
mtInternal
);
}
}
faddr
->
origin
=
origin
;
faddr
->
set_origin
(
origin
)
;
}
}
extern
"C"
{
extern
"C"
{
static
int
compare_flags
(
const
void
*
void_a
,
const
void
*
void_b
)
{
static
int
compare_flags
(
const
void
*
void_a
,
const
void
*
void_b
)
{
return
strcmp
((
*
((
Flag
**
)
void_a
))
->
name
,
(
*
((
Flag
**
)
void_b
))
->
name
);
return
strcmp
((
*
((
Flag
**
)
void_a
))
->
_name
,
(
*
((
Flag
**
)
void_b
))
->
_
name
);
}
}
}
}
...
@@ -567,20 +750,19 @@ void CommandLineFlags::printSetFlags(outputStream* out) {
...
@@ -567,20 +750,19 @@ void CommandLineFlags::printSetFlags(outputStream* out) {
// note: this method is called before the thread structure is in place
// note: this method is called before the thread structure is in place
// which means resource allocation cannot be used.
// which means resource allocation cannot be used.
// Compute size
// The last entry is the null entry.
int
length
=
0
;
const
size_t
length
=
Flag
::
numFlags
-
1
;
while
(
flagTable
[
length
].
name
!=
NULL
)
length
++
;
// Sort
// Sort
Flag
**
array
=
NEW_C_HEAP_ARRAY
(
Flag
*
,
length
,
mtInternal
);
Flag
**
array
=
NEW_C_HEAP_ARRAY
(
Flag
*
,
length
,
mtInternal
);
for
(
int
index
=
0
;
index
<
length
;
index
++
)
{
for
(
size_t
i
=
0
;
i
<
length
;
i
++
)
{
array
[
i
ndex
]
=
&
flagTable
[
index
];
array
[
i
]
=
&
flagTable
[
i
];
}
}
qsort
(
array
,
length
,
sizeof
(
Flag
*
),
compare_flags
);
qsort
(
array
,
length
,
sizeof
(
Flag
*
),
compare_flags
);
// Print
// Print
for
(
in
t
i
=
0
;
i
<
length
;
i
++
)
{
for
(
size_
t
i
=
0
;
i
<
length
;
i
++
)
{
if
(
array
[
i
]
->
origin
/* naked field! */
)
{
if
(
array
[
i
]
->
get_origin
()
/* naked field! */
)
{
array
[
i
]
->
print_as_flag
(
out
);
array
[
i
]
->
print_as_flag
(
out
);
out
->
print
(
" "
);
out
->
print
(
" "
);
}
}
...
@@ -603,20 +785,19 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) {
...
@@ -603,20 +785,19 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) {
// note: this method is called before the thread structure is in place
// note: this method is called before the thread structure is in place
// which means resource allocation cannot be used.
// which means resource allocation cannot be used.
// Compute size
// The last entry is the null entry.
int
length
=
0
;
const
size_t
length
=
Flag
::
numFlags
-
1
;
while
(
flagTable
[
length
].
name
!=
NULL
)
length
++
;
// Sort
// Sort
Flag
**
array
=
NEW_C_HEAP_ARRAY
(
Flag
*
,
length
,
mtInternal
);
Flag
**
array
=
NEW_C_HEAP_ARRAY
(
Flag
*
,
length
,
mtInternal
);
for
(
int
index
=
0
;
index
<
length
;
index
++
)
{
for
(
size_t
i
=
0
;
i
<
length
;
i
++
)
{
array
[
i
ndex
]
=
&
flagTable
[
index
];
array
[
i
]
=
&
flagTable
[
i
];
}
}
qsort
(
array
,
length
,
sizeof
(
Flag
*
),
compare_flags
);
qsort
(
array
,
length
,
sizeof
(
Flag
*
),
compare_flags
);
// Print
// Print
out
->
print_cr
(
"[Global flags]"
);
out
->
print_cr
(
"[Global flags]"
);
for
(
in
t
i
=
0
;
i
<
length
;
i
++
)
{
for
(
size_
t
i
=
0
;
i
<
length
;
i
++
)
{
if
(
array
[
i
]
->
is_unlocked
())
{
if
(
array
[
i
]
->
is_unlocked
())
{
array
[
i
]
->
print_on
(
out
,
withComments
);
array
[
i
]
->
print_on
(
out
,
withComments
);
}
}
...
...
src/share/vm/runtime/globals.hpp
浏览文件 @
f526d9e6
...
@@ -194,29 +194,49 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G);
...
@@ -194,29 +194,49 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G);
typedef
const
char
*
ccstr
;
typedef
const
char
*
ccstr
;
typedef
const
char
*
ccstrlist
;
// represents string arguments which accumulate
typedef
const
char
*
ccstrlist
;
// represents string arguments which accumulate
enum
FlagValueOrigin
{
DEFAULT
=
0
,
COMMAND_LINE
=
1
,
ENVIRON_VAR
=
2
,
CONFIG_FILE
=
3
,
MANAGEMENT
=
4
,
ERGONOMIC
=
5
,
ATTACH_ON_DEMAND
=
6
,
INTERNAL
=
99
};
struct
Flag
{
struct
Flag
{
const
char
*
type
;
enum
Flags
{
const
char
*
name
;
// value origin
void
*
addr
;
DEFAULT
=
0
,
COMMAND_LINE
=
1
,
ENVIRON_VAR
=
2
,
CONFIG_FILE
=
3
,
MANAGEMENT
=
4
,
ERGONOMIC
=
5
,
ATTACH_ON_DEMAND
=
6
,
INTERNAL
=
7
,
LAST_VALUE_ORIGIN
=
INTERNAL
,
VALUE_ORIGIN_BITS
=
4
,
VALUE_ORIGIN_MASK
=
right_n_bits
(
VALUE_ORIGIN_BITS
),
NOT_PRODUCT
(
const
char
*
doc
;)
// flag kind
KIND_PRODUCT
=
1
<<
4
,
KIND_MANAGEABLE
=
1
<<
5
,
KIND_DIAGNOSTIC
=
1
<<
6
,
KIND_EXPERIMENTAL
=
1
<<
7
,
KIND_NOT_PRODUCT
=
1
<<
8
,
KIND_DEVELOP
=
1
<<
9
,
KIND_PLATFORM_DEPENDENT
=
1
<<
10
,
KIND_READ_WRITE
=
1
<<
11
,
KIND_C1
=
1
<<
12
,
KIND_C2
=
1
<<
13
,
KIND_ARCH
=
1
<<
14
,
KIND_SHARK
=
1
<<
15
,
KIND_LP64_PRODUCT
=
1
<<
16
,
KIND_COMMERCIAL
=
1
<<
17
,
const
char
*
kind
;
KIND_MASK
=
~
VALUE_ORIGIN_MASK
FlagValueOrigin
origin
;
};
const
char
*
_type
;
const
char
*
_name
;
void
*
_addr
;
NOT_PRODUCT
(
const
char
*
_doc
;)
Flags
_flags
;
// points to all Flags static array
// points to all Flags static array
static
Flag
*
flags
;
static
Flag
*
flags
;
// number of flags
// number of flags
static
size_t
numFlags
;
static
size_t
numFlags
;
...
@@ -224,30 +244,50 @@ struct Flag {
...
@@ -224,30 +244,50 @@ struct Flag {
static
Flag
*
find_flag
(
const
char
*
name
,
size_t
length
,
bool
allow_locked
=
false
);
static
Flag
*
find_flag
(
const
char
*
name
,
size_t
length
,
bool
allow_locked
=
false
);
static
Flag
*
fuzzy_match
(
const
char
*
name
,
size_t
length
,
bool
allow_locked
=
false
);
static
Flag
*
fuzzy_match
(
const
char
*
name
,
size_t
length
,
bool
allow_locked
=
false
);
bool
is_bool
()
const
{
return
strcmp
(
type
,
"bool"
)
==
0
;
}
void
check_writable
();
bool
get_bool
()
const
{
return
*
((
bool
*
)
addr
);
}
void
set_bool
(
bool
value
)
{
*
((
bool
*
)
addr
)
=
value
;
}
bool
is_bool
()
const
;
bool
get_bool
()
const
;
void
set_bool
(
bool
value
);
bool
is_intx
()
const
;
intx
get_intx
()
const
;
void
set_intx
(
intx
value
);
bool
is_uintx
()
const
;
uintx
get_uintx
()
const
;
void
set_uintx
(
uintx
value
);
bool
is_uint64_t
()
const
;
uint64_t
get_uint64_t
()
const
;
void
set_uint64_t
(
uint64_t
value
);
bool
is_double
()
const
;
double
get_double
()
const
;
void
set_double
(
double
value
);
bool
is_intx
()
const
{
return
strcmp
(
type
,
"intx"
)
==
0
;
}
bool
is_ccstr
()
const
;
intx
get_intx
()
const
{
return
*
((
intx
*
)
addr
);
}
bool
ccstr_accumulates
()
const
;
void
set_intx
(
intx
value
)
{
*
((
intx
*
)
addr
)
=
value
;
}
ccstr
get_ccstr
()
const
;
void
set_ccstr
(
ccstr
value
);
bool
is_uintx
()
const
{
return
strcmp
(
type
,
"uintx"
)
==
0
;
}
Flags
get_origin
();
uintx
get_uintx
()
const
{
return
*
((
uintx
*
)
addr
);
}
void
set_origin
(
Flags
origin
);
void
set_uintx
(
uintx
value
)
{
*
((
uintx
*
)
addr
)
=
value
;
}
bool
is_
uint64_t
()
const
{
return
strcmp
(
type
,
"uint64_t"
)
==
0
;
}
bool
is_
default
();
uint64_t
get_uint64_t
()
const
{
return
*
((
uint64_t
*
)
addr
);
}
bool
is_ergonomic
();
void
set_uint64_t
(
uint64_t
value
)
{
*
((
uint64_t
*
)
addr
)
=
value
;
}
bool
is_command_line
();
bool
is_double
()
const
{
return
strcmp
(
type
,
"double"
)
==
0
;
}
bool
is_product
()
const
;
double
get_double
()
const
{
return
*
((
double
*
)
addr
);
}
bool
is_manageable
()
const
;
void
set_double
(
double
value
)
{
*
((
double
*
)
addr
)
=
value
;
}
bool
is_diagnostic
()
const
;
bool
is_experimental
()
const
;
bool
is_notproduct
()
const
;
bool
is_develop
()
const
;
bool
is_read_write
()
const
;
bool
is_commercial
()
const
;
bool
is_ccstr
()
const
{
return
strcmp
(
type
,
"ccstr"
)
==
0
||
strcmp
(
type
,
"ccstrlist"
)
==
0
;
}
bool
is_constant_in_binary
()
const
;
bool
ccstr_accumulates
()
const
{
return
strcmp
(
type
,
"ccstrlist"
)
==
0
;
}
ccstr
get_ccstr
()
const
{
return
*
((
ccstr
*
)
addr
);
}
void
set_ccstr
(
ccstr
value
)
{
*
((
ccstr
*
)
addr
)
=
value
;
}
bool
is_unlocker
()
const
;
bool
is_unlocker
()
const
;
bool
is_unlocked
()
const
;
bool
is_unlocked
()
const
;
...
@@ -263,6 +303,7 @@ struct Flag {
...
@@ -263,6 +303,7 @@ struct Flag {
void
get_locked_message_ext
(
char
*
,
int
)
const
;
void
get_locked_message_ext
(
char
*
,
int
)
const
;
void
print_on
(
outputStream
*
st
,
bool
withComments
=
false
);
void
print_on
(
outputStream
*
st
,
bool
withComments
=
false
);
void
print_kind
(
outputStream
*
st
);
void
print_as_flag
(
outputStream
*
st
);
void
print_as_flag
(
outputStream
*
st
);
};
};
...
@@ -310,33 +351,33 @@ class CommandLineFlags {
...
@@ -310,33 +351,33 @@ class CommandLineFlags {
public:
public:
static
bool
boolAt
(
char
*
name
,
size_t
len
,
bool
*
value
);
static
bool
boolAt
(
char
*
name
,
size_t
len
,
bool
*
value
);
static
bool
boolAt
(
char
*
name
,
bool
*
value
)
{
return
boolAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
boolAt
(
char
*
name
,
bool
*
value
)
{
return
boolAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
boolAtPut
(
char
*
name
,
size_t
len
,
bool
*
value
,
Flag
ValueOrigin
origin
);
static
bool
boolAtPut
(
char
*
name
,
size_t
len
,
bool
*
value
,
Flag
::
Flags
origin
);
static
bool
boolAtPut
(
char
*
name
,
bool
*
value
,
Flag
ValueOrigin
origin
)
{
return
boolAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
boolAtPut
(
char
*
name
,
bool
*
value
,
Flag
::
Flags
origin
)
{
return
boolAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
intxAt
(
char
*
name
,
size_t
len
,
intx
*
value
);
static
bool
intxAt
(
char
*
name
,
size_t
len
,
intx
*
value
);
static
bool
intxAt
(
char
*
name
,
intx
*
value
)
{
return
intxAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
intxAt
(
char
*
name
,
intx
*
value
)
{
return
intxAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
intxAtPut
(
char
*
name
,
size_t
len
,
intx
*
value
,
Flag
ValueOrigin
origin
);
static
bool
intxAtPut
(
char
*
name
,
size_t
len
,
intx
*
value
,
Flag
::
Flags
origin
);
static
bool
intxAtPut
(
char
*
name
,
intx
*
value
,
Flag
ValueOrigin
origin
)
{
return
intxAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
intxAtPut
(
char
*
name
,
intx
*
value
,
Flag
::
Flags
origin
)
{
return
intxAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
uintxAt
(
char
*
name
,
size_t
len
,
uintx
*
value
);
static
bool
uintxAt
(
char
*
name
,
size_t
len
,
uintx
*
value
);
static
bool
uintxAt
(
char
*
name
,
uintx
*
value
)
{
return
uintxAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
uintxAt
(
char
*
name
,
uintx
*
value
)
{
return
uintxAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
uintxAtPut
(
char
*
name
,
size_t
len
,
uintx
*
value
,
Flag
ValueOrigin
origin
);
static
bool
uintxAtPut
(
char
*
name
,
size_t
len
,
uintx
*
value
,
Flag
::
Flags
origin
);
static
bool
uintxAtPut
(
char
*
name
,
uintx
*
value
,
Flag
ValueOrigin
origin
)
{
return
uintxAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
uintxAtPut
(
char
*
name
,
uintx
*
value
,
Flag
::
Flags
origin
)
{
return
uintxAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
uint64_tAt
(
char
*
name
,
size_t
len
,
uint64_t
*
value
);
static
bool
uint64_tAt
(
char
*
name
,
size_t
len
,
uint64_t
*
value
);
static
bool
uint64_tAt
(
char
*
name
,
uint64_t
*
value
)
{
return
uint64_tAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
uint64_tAt
(
char
*
name
,
uint64_t
*
value
)
{
return
uint64_tAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
uint64_tAtPut
(
char
*
name
,
size_t
len
,
uint64_t
*
value
,
Flag
ValueOrigin
origin
);
static
bool
uint64_tAtPut
(
char
*
name
,
size_t
len
,
uint64_t
*
value
,
Flag
::
Flags
origin
);
static
bool
uint64_tAtPut
(
char
*
name
,
uint64_t
*
value
,
Flag
ValueOrigin
origin
)
{
return
uint64_tAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
uint64_tAtPut
(
char
*
name
,
uint64_t
*
value
,
Flag
::
Flags
origin
)
{
return
uint64_tAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
doubleAt
(
char
*
name
,
size_t
len
,
double
*
value
);
static
bool
doubleAt
(
char
*
name
,
size_t
len
,
double
*
value
);
static
bool
doubleAt
(
char
*
name
,
double
*
value
)
{
return
doubleAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
doubleAt
(
char
*
name
,
double
*
value
)
{
return
doubleAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
doubleAtPut
(
char
*
name
,
size_t
len
,
double
*
value
,
Flag
ValueOrigin
origin
);
static
bool
doubleAtPut
(
char
*
name
,
size_t
len
,
double
*
value
,
Flag
::
Flags
origin
);
static
bool
doubleAtPut
(
char
*
name
,
double
*
value
,
Flag
ValueOrigin
origin
)
{
return
doubleAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
doubleAtPut
(
char
*
name
,
double
*
value
,
Flag
::
Flags
origin
)
{
return
doubleAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
ccstrAt
(
char
*
name
,
size_t
len
,
ccstr
*
value
);
static
bool
ccstrAt
(
char
*
name
,
size_t
len
,
ccstr
*
value
);
static
bool
ccstrAt
(
char
*
name
,
ccstr
*
value
)
{
return
ccstrAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
ccstrAt
(
char
*
name
,
ccstr
*
value
)
{
return
ccstrAt
(
name
,
strlen
(
name
),
value
);
}
static
bool
ccstrAtPut
(
char
*
name
,
size_t
len
,
ccstr
*
value
,
Flag
ValueOrigin
origin
);
static
bool
ccstrAtPut
(
char
*
name
,
size_t
len
,
ccstr
*
value
,
Flag
::
Flags
origin
);
static
bool
ccstrAtPut
(
char
*
name
,
ccstr
*
value
,
Flag
ValueOrigin
origin
)
{
return
ccstrAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
static
bool
ccstrAtPut
(
char
*
name
,
ccstr
*
value
,
Flag
::
Flags
origin
)
{
return
ccstrAtPut
(
name
,
strlen
(
name
),
value
,
origin
);
}
// Returns false if name is not a command line flag.
// Returns false if name is not a command line flag.
static
bool
wasSetOnCmdline
(
const
char
*
name
,
bool
*
value
);
static
bool
wasSetOnCmdline
(
const
char
*
name
,
bool
*
value
);
...
@@ -3727,20 +3768,20 @@ class CommandLineFlags {
...
@@ -3727,20 +3768,20 @@ class CommandLineFlags {
*/
*/
// Interface macros
// Interface macros
#define DECLARE_PRODUCT_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_PRODUCT_FLAG(type, name, value, doc)
extern "C" type name;
#define DECLARE_PD_PRODUCT_FLAG(type, name, doc) extern "C" type name;
#define DECLARE_PD_PRODUCT_FLAG(type, name, doc)
extern "C" type name;
#define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_DIAGNOSTIC_FLAG(type, name, value, doc)
extern "C" type name;
#define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_EXPERIMENTAL_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_MANAGEABLE_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_MANAGEABLE_FLAG(type, name, value, doc)
extern "C" type name;
#define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_PRODUCT_RW_FLAG(type, name, value, doc)
extern "C" type name;
#ifdef PRODUCT
#ifdef PRODUCT
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) const type name = value;
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc)
extern "C" type CONST_##name;
const type name = value;
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) const type name = pd_##name;
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc)
extern "C" type CONST_##name;
const type name = pd_##name;
#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc)
#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc)
extern "C" type CONST_##name;
#else
#else
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_DEVELOPER_FLAG(type, name, value, doc)
extern "C" type name;
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc) extern "C" type name;
#define DECLARE_PD_DEVELOPER_FLAG(type, name, doc)
extern "C" type name;
#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc) extern "C" type name;
#define DECLARE_NOTPRODUCT_FLAG(type, name, value, doc)
extern "C" type name;
#endif
#endif
// Special LP64 flags, product only needed for now.
// Special LP64 flags, product only needed for now.
#ifdef _LP64
#ifdef _LP64
...
@@ -3750,23 +3791,23 @@ class CommandLineFlags {
...
@@ -3750,23 +3791,23 @@ class CommandLineFlags {
#endif // _LP64
#endif // _LP64
// Implementation macros
// Implementation macros
#define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_PRODUCT_FLAG(type, name, value, doc)
type name = value;
#define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc) type name = pd_##name;
#define MATERIALIZE_PD_PRODUCT_FLAG(type, name, doc)
type name = pd_##name;
#define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_DIAGNOSTIC_FLAG(type, name, value, doc)
type name = value;
#define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_EXPERIMENTAL_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_MANAGEABLE_FLAG(type, name, value, doc)
type name = value;
#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_PRODUCT_RW_FLAG(type, name, value, doc)
type name = value;
#ifdef PRODUCT
#ifdef PRODUCT
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc)
/* flag name is constant */
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc)
type CONST_##name = value;
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc)
/* flag name is constant */
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc)
type CONST_##name = pd_##name;
#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc)
#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc)
type CONST_##name = value;
#else
#else
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_DEVELOPER_FLAG(type, name, value, doc)
type name = value;
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc) type name = pd_##name;
#define MATERIALIZE_PD_DEVELOPER_FLAG(type, name, doc)
type name = pd_##name;
#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc) type name = value;
#define MATERIALIZE_NOTPRODUCT_FLAG(type, name, value, doc)
type name = value;
#endif
#endif
#ifdef _LP64
#ifdef _LP64
#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc)
type name = value;
#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc) type name = value;
#else
#else
#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc)
/* flag is constant */
#define MATERIALIZE_LP64_PRODUCT_FLAG(type, name, value, doc)
/* flag is constant */
#endif // _LP64
#endif // _LP64
...
...
src/share/vm/runtime/globals_extension.hpp
浏览文件 @
f526d9e6
...
@@ -34,64 +34,42 @@
...
@@ -34,64 +34,42 @@
// Parens left off in the following for the enum decl below.
// Parens left off in the following for the enum decl below.
#define FLAG_MEMBER(flag) Flag_##flag
#define FLAG_MEMBER(flag) Flag_##flag
#define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_PRODUCT_FLAG_MEMBER(type, name, value, doc)
FLAG_MEMBER(name),
#define RUNTIME_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define RUNTIME_PD_PRODUCT_FLAG_MEMBER(type, name, doc)
FLAG_MEMBER(name),
#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc)
FLAG_MEMBER(name),
#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_MANAGEABLE_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_MANAGEABLE_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_PRODUCT_RW_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_PRODUCT_RW_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#ifdef PRODUCT
#define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc)
/* flag is constant */
#define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc)
/* flag is constant */
#define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
#else
#define RUNTIME_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define RUNTIME_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define RUNTIME_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#endif
#ifdef _LP64
#ifdef _LP64
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc)
FLAG_MEMBER(name),
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#else
#else
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc)
/* flag is constant */
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER(type, name, value, doc)
/* flag is constant */
#endif // _LP64
#endif // _LP64
#define C1_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C1_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C1_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#ifdef PRODUCT
#define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc)
/* flag is constant */
#define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc)
/* flag is constant */
#define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
#else
#define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C1_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C1_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#endif
#define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C2_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_PD_PRODUCT_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C2_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#ifdef PRODUCT
#define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc)
/* flag is constant */
#define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc)
/* flag is constant */
#define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
#else
#define C2_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define C2_PD_DEVELOP_FLAG_MEMBER(type, name, doc) FLAG_MEMBER(name),
#define C2_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#endif
#define ARCH_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_PRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_EXPERIMENTAL_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#ifdef PRODUCT
#define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc)
/* flag is constant */
#define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc)
#else
#define ARCH_DEVELOP_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#define ARCH_NOTPRODUCT_FLAG_MEMBER(type, name, value, doc) FLAG_MEMBER(name),
#endif
typedef
enum
{
typedef
enum
{
RUNTIME_FLAGS
(
RUNTIME_DEVELOP_FLAG_MEMBER
,
RUNTIME_PD_DEVELOP_FLAG_MEMBER
,
RUNTIME_PRODUCT_FLAG_MEMBER
,
RUNTIME_PD_PRODUCT_FLAG_MEMBER
,
RUNTIME_DIAGNOSTIC_FLAG_MEMBER
,
RUNTIME_EXPERIMENTAL_FLAG_MEMBER
,
RUNTIME_NOTPRODUCT_FLAG_MEMBER
,
RUNTIME_MANAGEABLE_FLAG_MEMBER
,
RUNTIME_PRODUCT_RW_FLAG_MEMBER
,
RUNTIME_LP64_PRODUCT_FLAG_MEMBER
)
RUNTIME_FLAGS
(
RUNTIME_DEVELOP_FLAG_MEMBER
,
RUNTIME_PD_DEVELOP_FLAG_MEMBER
,
RUNTIME_PRODUCT_FLAG_MEMBER
,
RUNTIME_PD_PRODUCT_FLAG_MEMBER
,
RUNTIME_DIAGNOSTIC_FLAG_MEMBER
,
RUNTIME_EXPERIMENTAL_FLAG_MEMBER
,
RUNTIME_NOTPRODUCT_FLAG_MEMBER
,
RUNTIME_MANAGEABLE_FLAG_MEMBER
,
RUNTIME_PRODUCT_RW_FLAG_MEMBER
,
RUNTIME_LP64_PRODUCT_FLAG_MEMBER
)
...
@@ -114,64 +92,42 @@ typedef enum {
...
@@ -114,64 +92,42 @@ typedef enum {
#define FLAG_MEMBER_WITH_TYPE(flag,type) Flag_##flag##_##type
#define FLAG_MEMBER_WITH_TYPE(flag,type) Flag_##flag##_##type
#define RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc)
FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_MANAGEABLE_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PRODUCT_RW_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#ifdef PRODUCT
#define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
/* flag is constant */
#define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc)
/* flag is constant */
#define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
#else
#define C1_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#endif
#define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#ifdef PRODUCT
#define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
/* flag is constant */
#define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc)
/* flag is constant */
#define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
#else
#define C1_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C1_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#endif
#ifdef _LP64
#ifdef _LP64
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
FLAG_MEMBER_WITH_TYPE(name,type),
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#else
#else
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
/* flag is constant */
#define RUNTIME_LP64_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
/* flag is constant */
#endif // _LP64
#endif // _LP64
#define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PD_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, doc)
FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#ifdef PRODUCT
#define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
/* flag is constant */
#define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc)
/* flag is constant */
#define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
#else
#define C2_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_PD_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define C2_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#endif
#define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_PRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_DIAGNOSTIC_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_EXPERIMENTAL_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#ifdef PRODUCT
#define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
/* flag is constant */
#define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc)
#else
#define ARCH_DEVELOP_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#define ARCH_NOTPRODUCT_FLAG_MEMBER_WITH_TYPE(type, name, value, doc) FLAG_MEMBER_WITH_TYPE(name,type),
#endif
typedef
enum
{
typedef
enum
{
RUNTIME_FLAGS
(
RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE
,
RUNTIME_FLAGS
(
RUNTIME_DEVELOP_FLAG_MEMBER_WITH_TYPE
,
...
@@ -233,19 +189,19 @@ typedef enum {
...
@@ -233,19 +189,19 @@ typedef enum {
#define FLAG_SET_DEFAULT(name, value) ((name) = (value))
#define FLAG_SET_DEFAULT(name, value) ((name) = (value))
#define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), COMMAND_LINE))
#define FLAG_SET_CMDLINE(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value),
Flag::
COMMAND_LINE))
#define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value), ERGONOMIC))
#define FLAG_SET_ERGO(type, name, value) (CommandLineFlagsEx::type##AtPut(FLAG_MEMBER_WITH_TYPE(name,type), (type)(value),
Flag::
ERGONOMIC))
// Can't put the following in CommandLineFlags because
// Can't put the following in CommandLineFlags because
// of a circular dependency on the enum definition.
// of a circular dependency on the enum definition.
class
CommandLineFlagsEx
:
CommandLineFlags
{
class
CommandLineFlagsEx
:
CommandLineFlags
{
public:
public:
static
void
boolAtPut
(
CommandLineFlagWithType
flag
,
bool
value
,
Flag
ValueOrigin
origin
);
static
void
boolAtPut
(
CommandLineFlagWithType
flag
,
bool
value
,
Flag
::
Flags
origin
);
static
void
intxAtPut
(
CommandLineFlagWithType
flag
,
intx
value
,
Flag
ValueOrigin
origin
);
static
void
intxAtPut
(
CommandLineFlagWithType
flag
,
intx
value
,
Flag
::
Flags
origin
);
static
void
uintxAtPut
(
CommandLineFlagWithType
flag
,
uintx
value
,
Flag
ValueOrigin
origin
);
static
void
uintxAtPut
(
CommandLineFlagWithType
flag
,
uintx
value
,
Flag
::
Flags
origin
);
static
void
uint64_tAtPut
(
CommandLineFlagWithType
flag
,
uint64_t
value
,
Flag
ValueOrigin
origin
);
static
void
uint64_tAtPut
(
CommandLineFlagWithType
flag
,
uint64_t
value
,
Flag
::
Flags
origin
);
static
void
doubleAtPut
(
CommandLineFlagWithType
flag
,
double
value
,
Flag
ValueOrigin
origin
);
static
void
doubleAtPut
(
CommandLineFlagWithType
flag
,
double
value
,
Flag
::
Flags
origin
);
static
void
ccstrAtPut
(
CommandLineFlagWithType
flag
,
ccstr
value
,
Flag
ValueOrigin
origin
);
static
void
ccstrAtPut
(
CommandLineFlagWithType
flag
,
ccstr
value
,
Flag
::
Flags
origin
);
static
bool
is_default
(
CommandLineFlag
flag
);
static
bool
is_default
(
CommandLineFlag
flag
);
static
bool
is_ergo
(
CommandLineFlag
flag
);
static
bool
is_ergo
(
CommandLineFlag
flag
);
...
...
src/share/vm/runtime/vmStructs.cpp
浏览文件 @
f526d9e6
...
@@ -1185,11 +1185,10 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
...
@@ -1185,11 +1185,10 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
/* -XX flags */
\
/* -XX flags */
\
/*********************/
\
/*********************/
\
\
\
nonstatic_field(Flag, type, const char*) \
nonstatic_field(Flag, _type, const char*) \
nonstatic_field(Flag, name, const char*) \
nonstatic_field(Flag, _name, const char*) \
unchecked_nonstatic_field(Flag, addr, sizeof(void*))
/* NOTE: no type */
\
unchecked_nonstatic_field(Flag, _addr, sizeof(void*))
/* NOTE: no type */
\
nonstatic_field(Flag, kind, const char*) \
nonstatic_field(Flag, _flags, Flag::Flags) \
nonstatic_field(Flag, origin, FlagValueOrigin) \
static_field(Flag, flags, Flag*) \
static_field(Flag, flags, Flag*) \
static_field(Flag, numFlags, size_t) \
static_field(Flag, numFlags, size_t) \
\
\
...
@@ -2074,7 +2073,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
...
@@ -2074,7 +2073,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
declare_integer_type(JavaThreadState) \
declare_integer_type(JavaThreadState) \
declare_integer_type(Location::Type) \
declare_integer_type(Location::Type) \
declare_integer_type(Location::Where) \
declare_integer_type(Location::Where) \
declare_integer_type(Flag
ValueOrigin)
\
declare_integer_type(Flag
::Flags)
\
COMPILER2_PRESENT(declare_integer_type(OptoReg::Name)) \
COMPILER2_PRESENT(declare_integer_type(OptoReg::Name)) \
\
\
declare_toplevel_type(CHeapObj<mtInternal>) \
declare_toplevel_type(CHeapObj<mtInternal>) \
...
@@ -2082,7 +2081,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
...
@@ -2082,7 +2081,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
declare_type(Array<u1>, MetaspaceObj) \
declare_type(Array<u1>, MetaspaceObj) \
declare_type(Array<u2>, MetaspaceObj) \
declare_type(Array<u2>, MetaspaceObj) \
declare_type(Array<Klass*>, MetaspaceObj) \
declare_type(Array<Klass*>, MetaspaceObj) \
declare_type(Array<Method*>, MetaspaceObj) \
declare_type(Array<Method*>, MetaspaceObj)
\
\
\
declare_integer_type(AccessFlags)
/* FIXME: wrong type (not integer) */
\
declare_integer_type(AccessFlags)
/* FIXME: wrong type (not integer) */
\
declare_toplevel_type(address)
/* FIXME: should this be an integer type? */
\
declare_toplevel_type(address)
/* FIXME: should this be an integer type? */
\
...
...
src/share/vm/services/attachListener.cpp
浏览文件 @
f526d9e6
...
@@ -245,7 +245,7 @@ static jint set_bool_flag(const char* name, AttachOperation* op, outputStream* o
...
@@ -245,7 +245,7 @@ static jint set_bool_flag(const char* name, AttachOperation* op, outputStream* o
}
}
value
=
(
tmp
!=
0
);
value
=
(
tmp
!=
0
);
}
}
bool
res
=
CommandLineFlags
::
boolAtPut
((
char
*
)
name
,
&
value
,
ATTACH_ON_DEMAND
);
bool
res
=
CommandLineFlags
::
boolAtPut
((
char
*
)
name
,
&
value
,
Flag
::
ATTACH_ON_DEMAND
);
if
(
!
res
)
{
if
(
!
res
)
{
out
->
print_cr
(
"setting flag %s failed"
,
name
);
out
->
print_cr
(
"setting flag %s failed"
,
name
);
}
}
...
@@ -263,7 +263,7 @@ static jint set_intx_flag(const char* name, AttachOperation* op, outputStream* o
...
@@ -263,7 +263,7 @@ static jint set_intx_flag(const char* name, AttachOperation* op, outputStream* o
return
JNI_ERR
;
return
JNI_ERR
;
}
}
}
}
bool
res
=
CommandLineFlags
::
intxAtPut
((
char
*
)
name
,
&
value
,
ATTACH_ON_DEMAND
);
bool
res
=
CommandLineFlags
::
intxAtPut
((
char
*
)
name
,
&
value
,
Flag
::
ATTACH_ON_DEMAND
);
if
(
!
res
)
{
if
(
!
res
)
{
out
->
print_cr
(
"setting flag %s failed"
,
name
);
out
->
print_cr
(
"setting flag %s failed"
,
name
);
}
}
...
@@ -282,7 +282,7 @@ static jint set_uintx_flag(const char* name, AttachOperation* op, outputStream*
...
@@ -282,7 +282,7 @@ static jint set_uintx_flag(const char* name, AttachOperation* op, outputStream*
return
JNI_ERR
;
return
JNI_ERR
;
}
}
}
}
bool
res
=
CommandLineFlags
::
uintxAtPut
((
char
*
)
name
,
&
value
,
ATTACH_ON_DEMAND
);
bool
res
=
CommandLineFlags
::
uintxAtPut
((
char
*
)
name
,
&
value
,
Flag
::
ATTACH_ON_DEMAND
);
if
(
!
res
)
{
if
(
!
res
)
{
out
->
print_cr
(
"setting flag %s failed"
,
name
);
out
->
print_cr
(
"setting flag %s failed"
,
name
);
}
}
...
@@ -301,7 +301,7 @@ static jint set_uint64_t_flag(const char* name, AttachOperation* op, outputStrea
...
@@ -301,7 +301,7 @@ static jint set_uint64_t_flag(const char* name, AttachOperation* op, outputStrea
return
JNI_ERR
;
return
JNI_ERR
;
}
}
}
}
bool
res
=
CommandLineFlags
::
uint64_tAtPut
((
char
*
)
name
,
&
value
,
ATTACH_ON_DEMAND
);
bool
res
=
CommandLineFlags
::
uint64_tAtPut
((
char
*
)
name
,
&
value
,
Flag
::
ATTACH_ON_DEMAND
);
if
(
!
res
)
{
if
(
!
res
)
{
out
->
print_cr
(
"setting flag %s failed"
,
name
);
out
->
print_cr
(
"setting flag %s failed"
,
name
);
}
}
...
@@ -316,7 +316,7 @@ static jint set_ccstr_flag(const char* name, AttachOperation* op, outputStream*
...
@@ -316,7 +316,7 @@ static jint set_ccstr_flag(const char* name, AttachOperation* op, outputStream*
out
->
print_cr
(
"flag value must be a string"
);
out
->
print_cr
(
"flag value must be a string"
);
return
JNI_ERR
;
return
JNI_ERR
;
}
}
bool
res
=
CommandLineFlags
::
ccstrAtPut
((
char
*
)
name
,
&
value
,
ATTACH_ON_DEMAND
);
bool
res
=
CommandLineFlags
::
ccstrAtPut
((
char
*
)
name
,
&
value
,
Flag
::
ATTACH_ON_DEMAND
);
if
(
res
)
{
if
(
res
)
{
FREE_C_HEAP_ARRAY
(
char
,
value
,
mtInternal
);
FREE_C_HEAP_ARRAY
(
char
,
value
,
mtInternal
);
}
else
{
}
else
{
...
...
src/share/vm/services/classLoadingService.cpp
浏览文件 @
f526d9e6
...
@@ -202,7 +202,7 @@ bool ClassLoadingService::set_verbose(bool verbose) {
...
@@ -202,7 +202,7 @@ bool ClassLoadingService::set_verbose(bool verbose) {
MutexLocker
m
(
Management_lock
);
MutexLocker
m
(
Management_lock
);
// verbose will be set to the previous value
// verbose will be set to the previous value
bool
succeed
=
CommandLineFlags
::
boolAtPut
((
char
*
)
"TraceClassLoading"
,
&
verbose
,
MANAGEMENT
);
bool
succeed
=
CommandLineFlags
::
boolAtPut
((
char
*
)
"TraceClassLoading"
,
&
verbose
,
Flag
::
MANAGEMENT
);
assert
(
succeed
,
"Setting TraceClassLoading flag fails"
);
assert
(
succeed
,
"Setting TraceClassLoading flag fails"
);
reset_trace_class_unloading
();
reset_trace_class_unloading
();
...
@@ -213,7 +213,7 @@ bool ClassLoadingService::set_verbose(bool verbose) {
...
@@ -213,7 +213,7 @@ bool ClassLoadingService::set_verbose(bool verbose) {
void
ClassLoadingService
::
reset_trace_class_unloading
()
{
void
ClassLoadingService
::
reset_trace_class_unloading
()
{
assert
(
Management_lock
->
owned_by_self
(),
"Must own the Management_lock"
);
assert
(
Management_lock
->
owned_by_self
(),
"Must own the Management_lock"
);
bool
value
=
MemoryService
::
get_verbose
()
||
ClassLoadingService
::
get_verbose
();
bool
value
=
MemoryService
::
get_verbose
()
||
ClassLoadingService
::
get_verbose
();
bool
succeed
=
CommandLineFlags
::
boolAtPut
((
char
*
)
"TraceClassUnloading"
,
&
value
,
MANAGEMENT
);
bool
succeed
=
CommandLineFlags
::
boolAtPut
((
char
*
)
"TraceClassUnloading"
,
&
value
,
Flag
::
MANAGEMENT
);
assert
(
succeed
,
"Setting TraceClassUnLoading flag fails"
);
assert
(
succeed
,
"Setting TraceClassUnLoading flag fails"
);
}
}
...
...
src/share/vm/services/dtraceAttacher.cpp
浏览文件 @
f526d9e6
...
@@ -51,7 +51,7 @@ class VM_DeoptimizeTheWorld : public VM_Operation {
...
@@ -51,7 +51,7 @@ class VM_DeoptimizeTheWorld : public VM_Operation {
static
void
set_bool_flag
(
const
char
*
flag
,
bool
value
)
{
static
void
set_bool_flag
(
const
char
*
flag
,
bool
value
)
{
CommandLineFlags
::
boolAtPut
((
char
*
)
flag
,
strlen
(
flag
),
&
value
,
CommandLineFlags
::
boolAtPut
((
char
*
)
flag
,
strlen
(
flag
),
&
value
,
ATTACH_ON_DEMAND
);
Flag
::
ATTACH_ON_DEMAND
);
}
}
// Enable only the "fine grained" flags. Do *not* touch
// Enable only the "fine grained" flags. Do *not* touch
...
...
src/share/vm/services/management.cpp
浏览文件 @
f526d9e6
...
@@ -1643,9 +1643,13 @@ JVM_ENTRY(jobjectArray, jmm_GetVMGlobalNames(JNIEnv *env))
...
@@ -1643,9 +1643,13 @@ JVM_ENTRY(jobjectArray, jmm_GetVMGlobalNames(JNIEnv *env))
int
num_entries
=
0
;
int
num_entries
=
0
;
for
(
int
i
=
0
;
i
<
nFlags
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nFlags
;
i
++
)
{
Flag
*
flag
=
&
Flag
::
flags
[
i
];
Flag
*
flag
=
&
Flag
::
flags
[
i
];
// Exclude notproduct and develop flags in product builds.
if
(
flag
->
is_constant_in_binary
())
{
continue
;
}
// Exclude the locked (experimental, diagnostic) flags
// Exclude the locked (experimental, diagnostic) flags
if
(
flag
->
is_unlocked
()
||
flag
->
is_unlocker
())
{
if
(
flag
->
is_unlocked
()
||
flag
->
is_unlocker
())
{
Handle
s
=
java_lang_String
::
create_from_str
(
flag
->
name
,
CHECK_0
);
Handle
s
=
java_lang_String
::
create_from_str
(
flag
->
_
name
,
CHECK_0
);
flags_ah
->
obj_at_put
(
num_entries
,
s
());
flags_ah
->
obj_at_put
(
num_entries
,
s
());
num_entries
++
;
num_entries
++
;
}
}
...
@@ -1669,7 +1673,7 @@ JVM_END
...
@@ -1669,7 +1673,7 @@ JVM_END
bool
add_global_entry
(
JNIEnv
*
env
,
Handle
name
,
jmmVMGlobal
*
global
,
Flag
*
flag
,
TRAPS
)
{
bool
add_global_entry
(
JNIEnv
*
env
,
Handle
name
,
jmmVMGlobal
*
global
,
Flag
*
flag
,
TRAPS
)
{
Handle
flag_name
;
Handle
flag_name
;
if
(
name
()
==
NULL
)
{
if
(
name
()
==
NULL
)
{
flag_name
=
java_lang_String
::
create_from_str
(
flag
->
name
,
CHECK_false
);
flag_name
=
java_lang_String
::
create_from_str
(
flag
->
_
name
,
CHECK_false
);
}
else
{
}
else
{
flag_name
=
name
;
flag_name
=
name
;
}
}
...
@@ -1698,23 +1702,23 @@ bool add_global_entry(JNIEnv* env, Handle name, jmmVMGlobal *global, Flag *flag,
...
@@ -1698,23 +1702,23 @@ bool add_global_entry(JNIEnv* env, Handle name, jmmVMGlobal *global, Flag *flag,
global
->
writeable
=
flag
->
is_writeable
();
global
->
writeable
=
flag
->
is_writeable
();
global
->
external
=
flag
->
is_external
();
global
->
external
=
flag
->
is_external
();
switch
(
flag
->
origin
)
{
switch
(
flag
->
get_origin
()
)
{
case
DEFAULT
:
case
Flag
::
DEFAULT
:
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_DEFAULT
;
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_DEFAULT
;
break
;
break
;
case
COMMAND_LINE
:
case
Flag
::
COMMAND_LINE
:
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_COMMAND_LINE
;
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_COMMAND_LINE
;
break
;
break
;
case
ENVIRON_VAR
:
case
Flag
::
ENVIRON_VAR
:
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_ENVIRON_VAR
;
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_ENVIRON_VAR
;
break
;
break
;
case
CONFIG_FILE
:
case
Flag
::
CONFIG_FILE
:
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_CONFIG_FILE
;
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_CONFIG_FILE
;
break
;
break
;
case
MANAGEMENT
:
case
Flag
::
MANAGEMENT
:
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_MANAGEMENT
;
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_MANAGEMENT
;
break
;
break
;
case
ERGONOMIC
:
case
Flag
::
ERGONOMIC
:
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_ERGONOMIC
;
global
->
origin
=
JMM_VMGLOBAL_ORIGIN_ERGONOMIC
;
break
;
break
;
default:
default:
...
@@ -1781,6 +1785,10 @@ JVM_ENTRY(jint, jmm_GetVMGlobals(JNIEnv *env,
...
@@ -1781,6 +1785,10 @@ JVM_ENTRY(jint, jmm_GetVMGlobals(JNIEnv *env,
int
num_entries
=
0
;
int
num_entries
=
0
;
for
(
int
i
=
0
;
i
<
nFlags
&&
num_entries
<
count
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nFlags
&&
num_entries
<
count
;
i
++
)
{
Flag
*
flag
=
&
Flag
::
flags
[
i
];
Flag
*
flag
=
&
Flag
::
flags
[
i
];
// Exclude notproduct and develop flags in product builds.
if
(
flag
->
is_constant_in_binary
())
{
continue
;
}
// Exclude the locked (diagnostic, experimental) flags
// Exclude the locked (diagnostic, experimental) flags
if
((
flag
->
is_unlocked
()
||
flag
->
is_unlocker
())
&&
if
((
flag
->
is_unlocked
()
||
flag
->
is_unlocker
())
&&
add_global_entry
(
env
,
null_h
,
&
globals
[
num_entries
],
flag
,
THREAD
))
{
add_global_entry
(
env
,
null_h
,
&
globals
[
num_entries
],
flag
,
THREAD
))
{
...
@@ -1813,23 +1821,23 @@ JVM_ENTRY(void, jmm_SetVMGlobal(JNIEnv *env, jstring flag_name, jvalue new_value
...
@@ -1813,23 +1821,23 @@ JVM_ENTRY(void, jmm_SetVMGlobal(JNIEnv *env, jstring flag_name, jvalue new_value
bool
succeed
;
bool
succeed
;
if
(
flag
->
is_bool
())
{
if
(
flag
->
is_bool
())
{
bool
bvalue
=
(
new_value
.
z
==
JNI_TRUE
?
true
:
false
);
bool
bvalue
=
(
new_value
.
z
==
JNI_TRUE
?
true
:
false
);
succeed
=
CommandLineFlags
::
boolAtPut
(
name
,
&
bvalue
,
MANAGEMENT
);
succeed
=
CommandLineFlags
::
boolAtPut
(
name
,
&
bvalue
,
Flag
::
MANAGEMENT
);
}
else
if
(
flag
->
is_intx
())
{
}
else
if
(
flag
->
is_intx
())
{
intx
ivalue
=
(
intx
)
new_value
.
j
;
intx
ivalue
=
(
intx
)
new_value
.
j
;
succeed
=
CommandLineFlags
::
intxAtPut
(
name
,
&
ivalue
,
MANAGEMENT
);
succeed
=
CommandLineFlags
::
intxAtPut
(
name
,
&
ivalue
,
Flag
::
MANAGEMENT
);
}
else
if
(
flag
->
is_uintx
())
{
}
else
if
(
flag
->
is_uintx
())
{
uintx
uvalue
=
(
uintx
)
new_value
.
j
;
uintx
uvalue
=
(
uintx
)
new_value
.
j
;
succeed
=
CommandLineFlags
::
uintxAtPut
(
name
,
&
uvalue
,
MANAGEMENT
);
succeed
=
CommandLineFlags
::
uintxAtPut
(
name
,
&
uvalue
,
Flag
::
MANAGEMENT
);
}
else
if
(
flag
->
is_uint64_t
())
{
}
else
if
(
flag
->
is_uint64_t
())
{
uint64_t
uvalue
=
(
uint64_t
)
new_value
.
j
;
uint64_t
uvalue
=
(
uint64_t
)
new_value
.
j
;
succeed
=
CommandLineFlags
::
uint64_tAtPut
(
name
,
&
uvalue
,
MANAGEMENT
);
succeed
=
CommandLineFlags
::
uint64_tAtPut
(
name
,
&
uvalue
,
Flag
::
MANAGEMENT
);
}
else
if
(
flag
->
is_ccstr
())
{
}
else
if
(
flag
->
is_ccstr
())
{
oop
str
=
JNIHandles
::
resolve_external_guard
(
new_value
.
l
);
oop
str
=
JNIHandles
::
resolve_external_guard
(
new_value
.
l
);
if
(
str
==
NULL
)
{
if
(
str
==
NULL
)
{
THROW
(
vmSymbols
::
java_lang_NullPointerException
());
THROW
(
vmSymbols
::
java_lang_NullPointerException
());
}
}
ccstr
svalue
=
java_lang_String
::
as_utf8_string
(
str
);
ccstr
svalue
=
java_lang_String
::
as_utf8_string
(
str
);
succeed
=
CommandLineFlags
::
ccstrAtPut
(
name
,
&
svalue
,
MANAGEMENT
);
succeed
=
CommandLineFlags
::
ccstrAtPut
(
name
,
&
svalue
,
Flag
::
MANAGEMENT
);
}
}
assert
(
succeed
,
"Setting flag should succeed"
);
assert
(
succeed
,
"Setting flag should succeed"
);
JVM_END
JVM_END
...
...
src/share/vm/services/memoryService.cpp
浏览文件 @
f526d9e6
...
@@ -515,7 +515,7 @@ void MemoryService::oops_do(OopClosure* f) {
...
@@ -515,7 +515,7 @@ void MemoryService::oops_do(OopClosure* f) {
bool
MemoryService
::
set_verbose
(
bool
verbose
)
{
bool
MemoryService
::
set_verbose
(
bool
verbose
)
{
MutexLocker
m
(
Management_lock
);
MutexLocker
m
(
Management_lock
);
// verbose will be set to the previous value
// verbose will be set to the previous value
bool
succeed
=
CommandLineFlags
::
boolAtPut
((
char
*
)
"PrintGC"
,
&
verbose
,
MANAGEMENT
);
bool
succeed
=
CommandLineFlags
::
boolAtPut
((
char
*
)
"PrintGC"
,
&
verbose
,
Flag
::
MANAGEMENT
);
assert
(
succeed
,
"Setting PrintGC flag fails"
);
assert
(
succeed
,
"Setting PrintGC flag fails"
);
ClassLoadingService
::
reset_trace_class_unloading
();
ClassLoadingService
::
reset_trace_class_unloading
();
...
@@ -618,4 +618,3 @@ TraceMemoryManagerStats::~TraceMemoryManagerStats() {
...
@@ -618,4 +618,3 @@ TraceMemoryManagerStats::~TraceMemoryManagerStats() {
MemoryService
::
gc_end
(
_fullGC
,
_recordPostGCUsage
,
_recordAccumulatedGCTime
,
MemoryService
::
gc_end
(
_fullGC
,
_recordPostGCUsage
,
_recordAccumulatedGCTime
,
_recordGCEndTime
,
_countCollection
,
_cause
);
_recordGCEndTime
,
_countCollection
,
_cause
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录