Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
c45a54ef
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c45a54ef
编写于
9月 27, 2017
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
1659b51e
4744f9a1
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
133 addition
and
81 deletion
+133
-81
.hgtags
.hgtags
+18
-0
src/cpu/x86/vm/c1_Runtime1_x86.cpp
src/cpu/x86/vm/c1_Runtime1_x86.cpp
+2
-2
src/cpu/x86/vm/frame_x86.cpp
src/cpu/x86/vm/frame_x86.cpp
+26
-5
src/cpu/x86/vm/frame_x86.inline.hpp
src/cpu/x86/vm/frame_x86.inline.hpp
+1
-0
src/cpu/x86/vm/javaFrameAnchor_x86.hpp
src/cpu/x86/vm/javaFrameAnchor_x86.hpp
+3
-4
src/cpu/x86/vm/macroAssembler_x86.cpp
src/cpu/x86/vm/macroAssembler_x86.cpp
+7
-9
src/cpu/x86/vm/macroAssembler_x86.hpp
src/cpu/x86/vm/macroAssembler_x86.hpp
+2
-2
src/cpu/x86/vm/runtime_x86_32.cpp
src/cpu/x86/vm/runtime_x86_32.cpp
+1
-1
src/cpu/x86/vm/sharedRuntime_x86_32.cpp
src/cpu/x86/vm/sharedRuntime_x86_32.cpp
+8
-8
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
+9
-9
src/cpu/x86/vm/stubGenerator_x86_32.cpp
src/cpu/x86/vm/stubGenerator_x86_32.cpp
+1
-1
src/cpu/x86/vm/stubGenerator_x86_64.cpp
src/cpu/x86/vm/stubGenerator_x86_64.cpp
+1
-1
src/cpu/x86/vm/templateInterpreter_x86_32.cpp
src/cpu/x86/vm/templateInterpreter_x86_32.cpp
+2
-2
src/cpu/x86/vm/templateInterpreter_x86_64.cpp
src/cpu/x86/vm/templateInterpreter_x86_64.cpp
+2
-2
src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp
src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp
+1
-1
src/os_cpu/bsd_x86/vm/thread_bsd_x86.hpp
src/os_cpu/bsd_x86/vm/thread_bsd_x86.hpp
+2
-6
src/os_cpu/linux_x86/vm/thread_linux_x86.cpp
src/os_cpu/linux_x86/vm/thread_linux_x86.cpp
+1
-1
src/os_cpu/linux_x86/vm/thread_linux_x86.hpp
src/os_cpu/linux_x86/vm/thread_linux_x86.hpp
+2
-6
src/os_cpu/solaris_x86/vm/thread_solaris_x86.cpp
src/os_cpu/solaris_x86/vm/thread_solaris_x86.cpp
+2
-3
src/os_cpu/solaris_x86/vm/thread_solaris_x86.hpp
src/os_cpu/solaris_x86/vm/thread_solaris_x86.hpp
+2
-6
src/os_cpu/windows_x86/vm/thread_windows_x86.cpp
src/os_cpu/windows_x86/vm/thread_windows_x86.cpp
+1
-1
src/os_cpu/windows_x86/vm/thread_windows_x86.hpp
src/os_cpu/windows_x86/vm/thread_windows_x86.hpp
+2
-6
src/share/vm/runtime/arguments.cpp
src/share/vm/runtime/arguments.cpp
+10
-0
src/share/vm/services/lowMemoryDetector.cpp
src/share/vm/services/lowMemoryDetector.cpp
+27
-5
未找到文件。
.hgtags
浏览文件 @
c45a54ef
...
...
@@ -931,6 +931,8 @@ c2c4db2a42a215c98a4f027edb8bbb00dd62d9b9 jdk8u112-b14
b28d012a24cab8f4ceeee0c9d3252969757423ed jdk8u112-b15
e134dc1879b72124e478be01680b0646a2fbf585 jdk8u112-b16
87440ed4e1de7753a436f957d35555d8b4e26f1d jdk8u112-b31
ba25f5833a128b8062e597f794efda26b30f095d jdk8u112-b32
919ffdca10c2721ee0f6f233e704709174556510 jdk8u112-b33
3b0e5f01891f5ebbf67797b1aae786196f1bb4f6 jdk8u121-b00
251a2493b1857f2ff4f11eab2dfd8b2fe8ed441b jdk8u121-b01
70c4a50f576a01ec975d0a02b3642ee33db39ed8 jdk8u121-b02
...
...
@@ -945,6 +947,12 @@ f26f6895c9dfb32dfb4c228d69b371d8ab118536 jdk8u121-b10
11f91811e4d7e5ddfaf938dcf386ec8fe5bf7b7c jdk8u121-b11
b132b08b28bf23a26329928cf6b4ffda5857f4d3 jdk8u121-b12
90f94521c3515e5f27af0ab9b31d036e88bb322a jdk8u121-b13
351bf1d4ff9a41137f91e2ec97ec59ed29a38d8b jdk8u121-b31
41daac438a2ac5a80755dc3de88b76e4ac66750a jdk8u121-b32
eb9e617d6f64d4ad689feac0707b5e4335b00ce2 jdk8u121-b33
c60b0994e8eee152666252c3ba4105db65c004db jdk8u121-b34
0612a789929b88612509668bea4b3138613e91e4 jdk8u121-b35
0ea269e49511a890e6fabfd468638dd1c0ed0be3 jdk8u121-b36
c0a1ba0df20fda10ddb8599e888eb56ad98b3874 jdk8u131-b00
0b85ccd6240991e1a501602ff5addec6b88ae0af jdk8u131-b01
ef90c721a4e59b01ca36f25619010a1afe9ed4d5 jdk8u131-b02
...
...
@@ -957,6 +965,10 @@ db221c0a423e776bec5c3198d11d3f26827bd786 jdk8u131-b08
56e71d16083904ceddfdd1d66312582a42781646 jdk8u131-b09
1da23ae49386608550596502d90a381ee6c1dfaa jdk8u131-b10
829ea9b92cda9545652f1b309f56c57383024ebb jdk8u131-b11
41e0713bcca27cef5d6a9afd44c7ca4811937713 jdk8u131-b31
e318654a4fa352a06935dd56eebf88ae387b31f9 jdk8u131-b32
32998fc932dc58c6bbac185cc17d2752fa6dba4c jdk8u131-b33
50b3fa6791f46bc582528bdc7f6311b3b6832c51 jdk8u131-b34
692bc6b674dcab72453de08ee9da0856a7e41c0f jdk8u141-b00
0cee0db0180b64655751e7058c251103f9660f85 jdk8u141-b01
82435799636c8b50a090aebcb5af49946afa7bb5 jdk8u141-b02
...
...
@@ -973,8 +985,14 @@ d6e7c7d2c6f69906b4cb643a6813eccba0de988f jdk8u141-b12
df6af363337eff5b22ae7940b0981231fdf5dfb4 jdk8u141-b13
3a1543e089c32592be9c201c6e021295fbf5fdc1 jdk8u141-b14
23f1790147d838ddb1133cc79dc08e7c9ba5ab44 jdk8u141-b15
9ffa0d7ed932045a0b4ceb095fb52444eed39c1b jdk8u141-b31
ae8cae699f62b845703c891e0e7633e2089a3ec4 jdk8u141-b32
eea89df81a8e414813d921eeeeef9b6795f56698 jdk8u144-b00
db36f4d498b1bde975700a800b5ce732941c04b7 jdk8u144-b01
f5ded236c4130415259efc3234a92cc69fd7d2c5 jdk8u144-b31
d89d36d67c9417151b470eb8254504bd2a90cc1e jdk8u144-b32
3d505f6c7af1c522d03644eda168d77732a5e7e5 jdk8u144-b33
0becf604dfcc98fb13a17121a43bef7fc77a9ed7 jdk8u144-b34
2d5100bddeb80cf767485b787fc3051311e3d7b9 jdk8u151-b00
596b584c68b73ec635347807571463580deb955f jdk8u151-b01
1f6f436360d5cd375b806aec1c78abb8fcb4e5f6 jdk8u151-b02
...
...
src/cpu/x86/vm/c1_Runtime1_x86.cpp
浏览文件 @
c45a54ef
...
...
@@ -98,7 +98,7 @@ int StubAssembler::call_RT(Register oop_result1, Register metadata_result, addre
}
pop
(
rax
);
#endif
reset_last_Java_frame
(
thread
,
true
,
align_stack
);
reset_last_Java_frame
(
thread
,
true
);
// discard thread and arguments
NOT_LP64
(
addptr
(
rsp
,
num_rt_args
()
*
BytesPerWord
));
...
...
@@ -882,7 +882,7 @@ OopMapSet* Runtime1::generate_patching(StubAssembler* sasm, address target) {
}
__
pop
(
rax
);
#endif
__
reset_last_Java_frame
(
thread
,
true
,
false
);
__
reset_last_Java_frame
(
thread
,
true
);
#ifndef _LP64
__
pop
(
rcx
);
// discard thread arg
__
pop
(
rcx
);
// discard dummy
...
...
src/cpu/x86/vm/frame_x86.cpp
浏览文件 @
c45a54ef
...
...
@@ -370,13 +370,16 @@ frame frame::sender_for_entry_frame(RegisterMap* map) const {
JavaFrameAnchor
*
jfa
=
entry_frame_call_wrapper
()
->
anchor
();
assert
(
!
entry_frame_is_first
(),
"next Java fp must be non zero"
);
assert
(
jfa
->
last_Java_sp
()
>
sp
(),
"must be above this frame on stack"
);
// Since we are walking the stack now this nested anchor is obviously walkable
// even if it wasn't when it was stacked.
if
(
!
jfa
->
walkable
())
{
// Capture _last_Java_pc (if needed) and mark anchor walkable.
jfa
->
capture_last_Java_pc
();
}
map
->
clear
();
assert
(
map
->
include_argument_oops
(),
"should be set by clear"
);
if
(
jfa
->
last_Java_pc
()
!=
NULL
)
{
frame
fr
(
jfa
->
last_Java_sp
(),
jfa
->
last_Java_fp
(),
jfa
->
last_Java_pc
());
return
fr
;
}
frame
fr
(
jfa
->
last_Java_sp
(),
jfa
->
last_Java_fp
());
assert
(
jfa
->
last_Java_pc
()
!=
NULL
,
"not walkable"
);
frame
fr
(
jfa
->
last_Java_sp
(),
jfa
->
last_Java_fp
(),
jfa
->
last_Java_pc
());
return
fr
;
}
...
...
@@ -714,3 +717,21 @@ frame::frame(void* sp, void* fp, void* pc) {
init
((
intptr_t
*
)
sp
,
(
intptr_t
*
)
fp
,
(
address
)
pc
);
}
#endif
void
JavaFrameAnchor
::
make_walkable
(
JavaThread
*
thread
)
{
// last frame set?
if
(
last_Java_sp
()
==
NULL
)
return
;
// already walkable?
if
(
walkable
())
return
;
assert
(
Thread
::
current
()
==
(
Thread
*
)
thread
,
"not current thread"
);
assert
(
last_Java_sp
()
!=
NULL
,
"not called from Java code?"
);
assert
(
last_Java_pc
()
==
NULL
,
"already walkable"
);
capture_last_Java_pc
();
assert
(
walkable
(),
"something went wrong"
);
}
void
JavaFrameAnchor
::
capture_last_Java_pc
()
{
assert
(
_last_Java_sp
!=
NULL
,
"no last frame set"
);
assert
(
_last_Java_pc
==
NULL
,
"already walkable"
);
_last_Java_pc
=
(
address
)
_last_Java_sp
[
-
1
];
}
src/cpu/x86/vm/frame_x86.inline.hpp
浏览文件 @
c45a54ef
...
...
@@ -96,6 +96,7 @@ inline frame::frame(intptr_t* sp, intptr_t* fp) {
// call a specialized frame constructor instead of this one.
// Then we could use the assert below. However this assert is of somewhat dubious
// value.
// UPDATE: this constructor is only used by trace_method_handle_stub() now.
// assert(_pc != NULL, "no pc?");
_cb
=
CodeCache
::
find_blob
(
_pc
);
...
...
src/cpu/x86/vm/javaFrameAnchor_x86.hpp
浏览文件 @
c45a54ef
...
...
@@ -62,10 +62,9 @@ public:
_last_Java_sp
=
src
->
_last_Java_sp
;
}
// Always walkable
bool
walkable
(
void
)
{
return
true
;
}
// Never any thing to do since we are always walkable and can find address of return addresses
void
make_walkable
(
JavaThread
*
thread
)
{
}
bool
walkable
(
void
)
{
return
_last_Java_sp
!=
NULL
&&
_last_Java_pc
!=
NULL
;
}
void
make_walkable
(
JavaThread
*
thread
);
void
capture_last_Java_pc
(
void
);
intptr_t
*
last_Java_sp
(
void
)
const
{
return
_last_Java_sp
;
}
...
...
src/cpu/x86/vm/macroAssembler_x86.cpp
浏览文件 @
c45a54ef
...
...
@@ -748,8 +748,7 @@ void MacroAssembler::pushptr(AddressLiteral src) {
}
}
void
MacroAssembler
::
reset_last_Java_frame
(
bool
clear_fp
,
bool
clear_pc
)
{
void
MacroAssembler
::
reset_last_Java_frame
(
bool
clear_fp
)
{
// we must set sp to zero to clear frame
movptr
(
Address
(
r15_thread
,
JavaThread
::
last_Java_sp_offset
()),
NULL_WORD
);
// must clear fp, so that compiled frames are not confused; it is
...
...
@@ -758,9 +757,8 @@ void MacroAssembler::reset_last_Java_frame(bool clear_fp,
movptr
(
Address
(
r15_thread
,
JavaThread
::
last_Java_fp_offset
()),
NULL_WORD
);
}
if
(
clear_pc
)
{
movptr
(
Address
(
r15_thread
,
JavaThread
::
last_Java_pc_offset
()),
NULL_WORD
);
}
// Always clear the pc because it could have been set by make_walkable()
movptr
(
Address
(
r15_thread
,
JavaThread
::
last_Java_pc_offset
()),
NULL_WORD
);
}
void
MacroAssembler
::
set_last_Java_frame
(
Register
last_java_sp
,
...
...
@@ -2561,7 +2559,7 @@ void MacroAssembler::call_VM_base(Register oop_result,
}
// reset last Java frame
// Only interpreter should have to clear fp
reset_last_Java_frame
(
java_thread
,
true
,
false
);
reset_last_Java_frame
(
java_thread
,
true
);
#ifndef CC_INTERP
// C++ interp handles this in the interpreter
...
...
@@ -3808,7 +3806,7 @@ void MacroAssembler::push_IU_state() {
pusha
();
}
void
MacroAssembler
::
reset_last_Java_frame
(
Register
java_thread
,
bool
clear_fp
,
bool
clear_pc
)
{
void
MacroAssembler
::
reset_last_Java_frame
(
Register
java_thread
,
bool
clear_fp
)
{
// determine java_thread register
if
(
!
java_thread
->
is_valid
())
{
java_thread
=
rdi
;
...
...
@@ -3820,8 +3818,8 @@ void MacroAssembler::reset_last_Java_frame(Register java_thread, bool clear_fp,
movptr
(
Address
(
java_thread
,
JavaThread
::
last_Java_fp_offset
()),
NULL_WORD
);
}
if
(
clear_pc
)
movptr
(
Address
(
java_thread
,
JavaThread
::
last_Java_pc_offset
()),
NULL_WORD
);
// Always clear the pc because it could have been set by make_walkable(
)
movptr
(
Address
(
java_thread
,
JavaThread
::
last_Java_pc_offset
()),
NULL_WORD
);
}
...
...
src/cpu/x86/vm/macroAssembler_x86.hpp
浏览文件 @
c45a54ef
...
...
@@ -289,10 +289,10 @@ class MacroAssembler: public Assembler {
Register
last_java_fp
,
address
last_java_pc
);
void
reset_last_Java_frame
(
Register
thread
,
bool
clear_fp
,
bool
clear_pc
);
void
reset_last_Java_frame
(
Register
thread
,
bool
clear_fp
);
// thread in the default location (r15_thread on 64bit)
void
reset_last_Java_frame
(
bool
clear_fp
,
bool
clear_pc
);
void
reset_last_Java_frame
(
bool
clear_fp
);
// Stores
void
store_check
(
Register
obj
);
// store check for obj - register is destroyed afterwards
...
...
src/cpu/x86/vm/runtime_x86_32.cpp
浏览文件 @
c45a54ef
...
...
@@ -116,7 +116,7 @@ void OptoRuntime::generate_exception_blob() {
// No registers to map, rbp is known implicitly
oop_maps
->
add_gc_map
(
__
pc
()
-
start
,
new
OopMap
(
framesize
,
0
));
__
get_thread
(
rcx
);
__
reset_last_Java_frame
(
rcx
,
false
,
false
);
__
reset_last_Java_frame
(
rcx
,
false
);
// Restore callee-saved registers
__
movptr
(
rbp
,
Address
(
rsp
,
rbp_off
*
wordSize
));
...
...
src/cpu/x86/vm/sharedRuntime_x86_32.cpp
浏览文件 @
c45a54ef
...
...
@@ -1333,7 +1333,7 @@ static void check_needs_gc_for_critical_native(MacroAssembler* masm,
__
increment
(
rsp
,
wordSize
);
__
get_thread
(
thread
);
__
reset_last_Java_frame
(
thread
,
false
,
true
);
__
reset_last_Java_frame
(
thread
,
false
);
save_or_restore_arguments
(
masm
,
stack_slots
,
total_in_args
,
arg_save_area
,
NULL
,
in_regs
,
in_sig_bt
);
...
...
@@ -2251,7 +2251,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
// We can finally stop using that last_Java_frame we setup ages ago
__
reset_last_Java_frame
(
thread
,
false
,
true
);
__
reset_last_Java_frame
(
thread
,
false
);
// Unpack oop result
if
(
ret_type
==
T_OBJECT
||
ret_type
==
T_ARRAY
)
{
...
...
@@ -2951,7 +2951,7 @@ void SharedRuntime::generate_deopt_blob() {
__
pop
(
rcx
);
__
get_thread
(
rcx
);
__
reset_last_Java_frame
(
rcx
,
false
,
false
);
__
reset_last_Java_frame
(
rcx
,
false
);
// Load UnrollBlock into EDI
__
mov
(
rdi
,
rax
);
...
...
@@ -3117,7 +3117,7 @@ void SharedRuntime::generate_deopt_blob() {
__
push
(
rax
);
__
get_thread
(
rcx
);
__
reset_last_Java_frame
(
rcx
,
false
,
false
);
__
reset_last_Java_frame
(
rcx
,
false
);
// Collect return values
__
movptr
(
rax
,
Address
(
rsp
,
(
RegisterSaver
::
raxOffset
()
+
additional_words
+
1
)
*
wordSize
));
...
...
@@ -3219,7 +3219,7 @@ void SharedRuntime::generate_uncommon_trap_blob() {
__
get_thread
(
rcx
);
__
reset_last_Java_frame
(
rcx
,
false
,
false
);
__
reset_last_Java_frame
(
rcx
,
false
);
// Load UnrollBlock into EDI
__
movptr
(
rdi
,
rax
);
...
...
@@ -3331,7 +3331,7 @@ void SharedRuntime::generate_uncommon_trap_blob() {
oop_maps
->
add_gc_map
(
__
pc
()
-
start
,
new
OopMap
(
framesize
,
0
)
);
__
get_thread
(
rdi
);
__
reset_last_Java_frame
(
rdi
,
true
,
false
);
__
reset_last_Java_frame
(
rdi
,
true
);
// Pop self-frame.
__
leave
();
// Epilog!
...
...
@@ -3426,7 +3426,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
// Clear last_Java_sp again
__
get_thread
(
java_thread
);
__
reset_last_Java_frame
(
java_thread
,
false
,
false
);
__
reset_last_Java_frame
(
java_thread
,
false
);
__
cmpptr
(
Address
(
java_thread
,
Thread
::
pending_exception_offset
()),
(
int32_t
)
NULL_WORD
);
__
jcc
(
Assembler
::
equal
,
noException
);
...
...
@@ -3501,7 +3501,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha
__
addptr
(
rsp
,
wordSize
);
// clear last_Java_sp
__
reset_last_Java_frame
(
thread
,
true
,
false
);
__
reset_last_Java_frame
(
thread
,
true
);
// check for pending exceptions
Label
pending
;
__
cmpptr
(
Address
(
thread
,
Thread
::
pending_exception_offset
()),
(
int32_t
)
NULL_WORD
);
...
...
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
浏览文件 @
c45a54ef
...
...
@@ -1388,7 +1388,7 @@ static void check_needs_gc_for_critical_native(MacroAssembler* masm,
__
mov
(
rsp
,
r12
);
// restore sp
__
reinit_heapbase
();
__
reset_last_Java_frame
(
false
,
true
);
__
reset_last_Java_frame
(
false
);
save_or_restore_arguments
(
masm
,
stack_slots
,
total_in_args
,
arg_save_area
,
NULL
,
in_regs
,
in_sig_bt
);
...
...
@@ -2497,7 +2497,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
restore_native_result
(
masm
,
ret_type
,
stack_slots
);
}
__
reset_last_Java_frame
(
false
,
true
);
__
reset_last_Java_frame
(
false
);
// Unpack oop result
if
(
ret_type
==
T_OBJECT
||
ret_type
==
T_ARRAY
)
{
...
...
@@ -3435,7 +3435,7 @@ void SharedRuntime::generate_deopt_blob() {
// find any register it might need.
oop_maps
->
add_gc_map
(
__
pc
()
-
start
,
map
);
__
reset_last_Java_frame
(
false
,
false
);
__
reset_last_Java_frame
(
false
);
// Load UnrollBlock* into rdi
__
mov
(
rdi
,
rax
);
...
...
@@ -3592,7 +3592,7 @@ void SharedRuntime::generate_deopt_blob() {
new
OopMap
(
frame_size_in_words
,
0
));
// Clear fp AND pc
__
reset_last_Java_frame
(
true
,
true
);
__
reset_last_Java_frame
(
true
);
// Collect return values
__
movdbl
(
xmm0
,
Address
(
rsp
,
RegisterSaver
::
xmm0_offset_in_bytes
()));
...
...
@@ -3662,7 +3662,7 @@ void SharedRuntime::generate_uncommon_trap_blob() {
oop_maps
->
add_gc_map
(
__
pc
()
-
start
,
map
);
__
reset_last_Java_frame
(
false
,
false
);
__
reset_last_Java_frame
(
false
);
// Load UnrollBlock* into rdi
__
mov
(
rdi
,
rax
);
...
...
@@ -3775,7 +3775,7 @@ void SharedRuntime::generate_uncommon_trap_blob() {
oop_maps
->
add_gc_map
(
the_pc
-
start
,
new
OopMap
(
SimpleRuntimeFrame
::
framesize
,
0
));
// Clear fp AND pc
__
reset_last_Java_frame
(
true
,
true
);
__
reset_last_Java_frame
(
true
);
// Pop self-frame.
__
leave
();
// Epilog
...
...
@@ -3858,7 +3858,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t
Label
noException
;
__
reset_last_Java_frame
(
false
,
false
);
__
reset_last_Java_frame
(
false
);
__
cmpptr
(
Address
(
r15_thread
,
Thread
::
pending_exception_offset
()),
(
int32_t
)
NULL_WORD
);
__
jcc
(
Assembler
::
equal
,
noException
);
...
...
@@ -3928,7 +3928,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha
// rax contains the address we are going to jump to assuming no exception got installed
// clear last_Java_sp
__
reset_last_Java_frame
(
false
,
false
);
__
reset_last_Java_frame
(
false
);
// check for pending exceptions
Label
pending
;
__
cmpptr
(
Address
(
r15_thread
,
Thread
::
pending_exception_offset
()),
(
int32_t
)
NULL_WORD
);
...
...
@@ -4309,7 +4309,7 @@ void OptoRuntime::generate_exception_blob() {
oop_maps
->
add_gc_map
(
the_pc
-
start
,
new
OopMap
(
SimpleRuntimeFrame
::
framesize
,
0
));
__
reset_last_Java_frame
(
false
,
true
);
__
reset_last_Java_frame
(
false
);
// Restore callee-saved registers
...
...
src/cpu/x86/vm/stubGenerator_x86_32.cpp
浏览文件 @
c45a54ef
...
...
@@ -2901,7 +2901,7 @@ class StubGenerator: public StubCodeGenerator {
// however can use the register value directly if it is callee saved.
__
get_thread
(
java_thread
);
__
reset_last_Java_frame
(
java_thread
,
true
,
false
);
__
reset_last_Java_frame
(
java_thread
,
true
);
__
leave
();
// required for proper stackwalking of RuntimeStub frame
...
...
src/cpu/x86/vm/stubGenerator_x86_64.cpp
浏览文件 @
c45a54ef
...
...
@@ -3923,7 +3923,7 @@ class StubGenerator: public StubCodeGenerator {
oop_maps
->
add_gc_map
(
the_pc
-
start
,
map
);
__
reset_last_Java_frame
(
true
,
true
);
__
reset_last_Java_frame
(
true
);
__
leave
();
// required for proper stackwalking of RuntimeStub frame
...
...
src/cpu/x86/vm/templateInterpreter_x86_32.cpp
浏览文件 @
c45a54ef
...
...
@@ -1289,7 +1289,7 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) {
// change thread state
__
movl
(
Address
(
thread
,
JavaThread
::
thread_state_offset
()),
_thread_in_Java
);
__
reset_last_Java_frame
(
thread
,
true
,
true
);
__
reset_last_Java_frame
(
thread
,
true
);
// reset handle block
__
movptr
(
t
,
Address
(
thread
,
JavaThread
::
active_handles_offset
()));
...
...
@@ -1819,7 +1819,7 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
__
set_last_Java_frame
(
thread
,
noreg
,
rbp
,
__
pc
());
__
super_call_VM_leaf
(
CAST_FROM_FN_PTR
(
address
,
InterpreterRuntime
::
popframe_move_outgoing_args
),
thread
,
rax
,
rbx
);
__
get_thread
(
thread
);
__
reset_last_Java_frame
(
thread
,
true
,
true
);
__
reset_last_Java_frame
(
thread
,
true
);
// Restore the last_sp and null it out
__
movptr
(
rsp
,
Address
(
rbp
,
frame
::
interpreter_frame_last_sp_offset
*
wordSize
));
__
movptr
(
Address
(
rbp
,
frame
::
interpreter_frame_last_sp_offset
*
wordSize
),
NULL_WORD
);
...
...
src/cpu/x86/vm/templateInterpreter_x86_64.cpp
浏览文件 @
c45a54ef
...
...
@@ -1262,7 +1262,7 @@ address InterpreterGenerator::generate_native_entry(bool synchronized) {
__
movl
(
Address
(
r15_thread
,
JavaThread
::
thread_state_offset
()),
_thread_in_Java
);
// reset_last_Java_frame
__
reset_last_Java_frame
(
true
,
true
);
__
reset_last_Java_frame
(
r15_thread
,
true
);
// reset handle block
__
movptr
(
t
,
Address
(
r15_thread
,
JavaThread
::
active_handles_offset
()));
...
...
@@ -1837,7 +1837,7 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
// PC must point into interpreter here
__
set_last_Java_frame
(
noreg
,
rbp
,
__
pc
());
__
super_call_VM_leaf
(
CAST_FROM_FN_PTR
(
address
,
InterpreterRuntime
::
popframe_move_outgoing_args
),
r15_thread
,
c_rarg1
,
c_rarg2
);
__
reset_last_Java_frame
(
true
,
true
);
__
reset_last_Java_frame
(
r15_thread
,
true
);
// Restore the last_sp and null it out
__
movptr
(
rsp
,
Address
(
rbp
,
frame
::
interpreter_frame_last_sp_offset
*
wordSize
));
__
movptr
(
Address
(
rbp
,
frame
::
interpreter_frame_last_sp_offset
*
wordSize
),
(
int32_t
)
NULL_WORD
);
...
...
src/os_cpu/bsd_x86/vm/thread_bsd_x86.cpp
浏览文件 @
c45a54ef
...
...
@@ -44,7 +44,7 @@ bool JavaThread::pd_get_top_frame(frame* fr_addr, void* ucontext, bool isInJava)
// If we have a last_Java_frame, then we should use it even if
// isInJava == true. It should be more reliable than ucontext info.
if
(
jt
->
has_last_Java_frame
())
{
if
(
jt
->
has_last_Java_frame
()
&&
jt
->
frame_anchor
()
->
walkable
()
)
{
*
fr_addr
=
jt
->
pd_last_frame
();
return
true
;
}
...
...
src/os_cpu/bsd_x86/vm/thread_bsd_x86.hpp
浏览文件 @
c45a54ef
...
...
@@ -32,12 +32,8 @@
frame
pd_last_frame
()
{
assert
(
has_last_Java_frame
(),
"must have last_Java_sp() when suspended"
);
if
(
_anchor
.
last_Java_pc
()
!=
NULL
)
{
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
else
{
// This will pick up pc from sp
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
());
}
assert
(
_anchor
.
last_Java_pc
()
!=
NULL
,
"not walkable"
);
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
public
:
...
...
src/os_cpu/linux_x86/vm/thread_linux_x86.cpp
浏览文件 @
c45a54ef
...
...
@@ -45,7 +45,7 @@ bool JavaThread::pd_get_top_frame(frame* fr_addr, void* ucontext, bool isInJava)
// If we have a last_Java_frame, then we should use it even if
// isInJava == true. It should be more reliable than ucontext info.
if
(
jt
->
has_last_Java_frame
())
{
if
(
jt
->
has_last_Java_frame
()
&&
jt
->
frame_anchor
()
->
walkable
()
)
{
*
fr_addr
=
jt
->
pd_last_frame
();
return
true
;
}
...
...
src/os_cpu/linux_x86/vm/thread_linux_x86.hpp
浏览文件 @
c45a54ef
...
...
@@ -32,12 +32,8 @@
frame
pd_last_frame
()
{
assert
(
has_last_Java_frame
(),
"must have last_Java_sp() when suspended"
);
if
(
_anchor
.
last_Java_pc
()
!=
NULL
)
{
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
else
{
// This will pick up pc from sp
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
());
}
assert
(
_anchor
.
last_Java_pc
()
!=
NULL
,
"not walkable"
);
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
public
:
...
...
src/os_cpu/solaris_x86/vm/thread_solaris_x86.cpp
浏览文件 @
c45a54ef
...
...
@@ -44,9 +44,8 @@ bool JavaThread::pd_get_top_frame(frame* fr_addr,
assert
(
this
->
is_Java_thread
(),
"must be JavaThread"
);
JavaThread
*
jt
=
(
JavaThread
*
)
this
;
// last_Java_frame is always walkable and safe use it if we have it
if
(
jt
->
has_last_Java_frame
())
{
// There is small window where last_Java_frame is not walkable or safe
if
(
jt
->
has_last_Java_frame
()
&&
jt
->
frame_anchor
()
->
walkable
())
{
*
fr_addr
=
jt
->
pd_last_frame
();
return
true
;
}
...
...
src/os_cpu/solaris_x86/vm/thread_solaris_x86.hpp
浏览文件 @
c45a54ef
...
...
@@ -30,12 +30,8 @@
frame
pd_last_frame
()
{
assert
(
has_last_Java_frame
(),
"must have last_Java_sp() when suspended"
);
if
(
_anchor
.
last_Java_pc
()
!=
NULL
)
{
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
else
{
// This will pick up pc from sp
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
());
}
assert
(
_anchor
.
last_Java_pc
()
!=
NULL
,
"not walkable"
);
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
public
:
...
...
src/os_cpu/windows_x86/vm/thread_windows_x86.cpp
浏览文件 @
c45a54ef
...
...
@@ -47,7 +47,7 @@ bool JavaThread::pd_get_top_frame(frame* fr_addr, void* ucontext, bool isInJava)
// If we have a last_Java_frame, then we should use it even if
// isInJava == true. It should be more reliable than CONTEXT info.
if
(
jt
->
has_last_Java_frame
())
{
if
(
jt
->
has_last_Java_frame
()
&&
jt
->
frame_anchor
()
->
walkable
()
)
{
*
fr_addr
=
jt
->
pd_last_frame
();
return
true
;
}
...
...
src/os_cpu/windows_x86/vm/thread_windows_x86.hpp
浏览文件 @
c45a54ef
...
...
@@ -32,12 +32,8 @@
frame
pd_last_frame
()
{
assert
(
has_last_Java_frame
(),
"must have last_Java_sp() when suspended"
);
if
(
_anchor
.
last_Java_pc
()
!=
NULL
)
{
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
else
{
// This will pick up pc from sp
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
());
}
assert
(
_anchor
.
last_Java_pc
()
!=
NULL
,
"not walkable"
);
return
frame
(
_anchor
.
last_Java_sp
(),
_anchor
.
last_Java_fp
(),
_anchor
.
last_Java_pc
());
}
public
:
...
...
src/share/vm/runtime/arguments.cpp
浏览文件 @
c45a54ef
...
...
@@ -4056,6 +4056,16 @@ jint Arguments::apply_ergo() {
set_shared_spaces_flags
();
#if defined(SPARC)
// BIS instructions require 'membar' instruction regardless of the number
// of CPUs because in virtualized/container environments which might use only 1
// CPU, BIS instructions may produce incorrect results.
if
(
FLAG_IS_DEFAULT
(
AssumeMP
))
{
FLAG_SET_DEFAULT
(
AssumeMP
,
true
);
}
#endif
// Check the GC selections again.
if
(
!
check_gc_consistency
())
{
return
JNI_EINVAL
;
...
...
src/share/vm/services/lowMemoryDetector.cpp
浏览文件 @
c45a54ef
/*
* Copyright (c) 2003, 201
4
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
7
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -298,19 +298,41 @@ void SensorInfo::trigger(int count, TRAPS) {
Klass
*
k
=
Management
::
sun_management_Sensor_klass
(
CHECK
);
instanceKlassHandle
sensorKlass
(
THREAD
,
k
);
Handle
sensor_h
(
THREAD
,
_sensor_obj
);
Handle
usage_h
=
MemoryService
::
create_MemoryUsage_obj
(
_usage
,
CHECK
);
Symbol
*
trigger_method_signature
;
JavaValue
result
(
T_VOID
);
JavaCallArguments
args
(
sensor_h
);
args
.
push_int
((
int
)
count
);
args
.
push_oop
(
usage_h
);
Handle
usage_h
=
MemoryService
::
create_MemoryUsage_obj
(
_usage
,
THREAD
);
// Call Sensor::trigger(int, MemoryUsage) to send notification to listeners.
// When OOME occurs and fails to allocate MemoryUsage object, call
// Sensor::trigger(int) instead. The pending request will be processed
// but no notification will be sent.
if
(
HAS_PENDING_EXCEPTION
)
{
assert
((
PENDING_EXCEPTION
->
is_a
(
SystemDictionary
::
OutOfMemoryError_klass
())),
"we expect only an OOME here"
);
CLEAR_PENDING_EXCEPTION
;
trigger_method_signature
=
vmSymbols
::
int_void_signature
();
}
else
{
trigger_method_signature
=
vmSymbols
::
trigger_method_signature
();
args
.
push_oop
(
usage_h
);
}
JavaCalls
::
call_virtual
(
&
result
,
sensorKlass
,
vmSymbols
::
trigger_name
(),
vmSymbols
::
trigger_method_signature
()
,
trigger_method_signature
,
&
args
,
CHECK
);
THREAD
);
if
(
HAS_PENDING_EXCEPTION
)
{
// We just clear the OOM pending exception that we might have encountered
// in Java's tiggerAction(), and continue with updating the counters since
// the Java counters have been updated too.
assert
((
PENDING_EXCEPTION
->
is_a
(
SystemDictionary
::
OutOfMemoryError_klass
())),
"we expect only an OOME here"
);
CLEAR_PENDING_EXCEPTION
;
}
}
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录