Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
320ecc73
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看板
提交
320ecc73
编写于
4月 27, 2011
作者:
C
coleenp
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
14015bc9
dac7ba64
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
33 addition
and
11 deletion
+33
-11
src/share/vm/c1/c1_Runtime1.cpp
src/share/vm/c1/c1_Runtime1.cpp
+13
-1
src/share/vm/classfile/javaClasses.cpp
src/share/vm/classfile/javaClasses.cpp
+13
-3
src/share/vm/classfile/javaClasses.hpp
src/share/vm/classfile/javaClasses.hpp
+2
-2
src/share/vm/runtime/javaCalls.cpp
src/share/vm/runtime/javaCalls.cpp
+1
-1
src/share/vm/utilities/exceptions.cpp
src/share/vm/utilities/exceptions.cpp
+3
-3
src/share/vm/utilities/exceptions.hpp
src/share/vm/utilities/exceptions.hpp
+1
-1
未找到文件。
src/share/vm/c1/c1_Runtime1.cpp
浏览文件 @
320ecc73
...
...
@@ -1026,9 +1026,21 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* thread, Runtime1::StubID stub_i
// first replace the tail, then the call
#ifdef ARM
if
(
stub_id
==
Runtime1
::
load_klass_patching_id
&&
!
VM_Version
::
supports_movw
())
{
nmethod
*
nm
=
CodeCache
::
find_nmethod
(
instr_pc
);
oop
*
oop_addr
=
NULL
;
assert
(
nm
!=
NULL
,
"invalid nmethod_pc"
);
RelocIterator
oops
(
nm
,
copy_buff
,
copy_buff
+
1
);
while
(
oops
.
next
())
{
if
(
oops
.
type
()
==
relocInfo
::
oop_type
)
{
oop_Relocation
*
r
=
oops
.
oop_reloc
();
oop_addr
=
r
->
oop_addr
();
break
;
}
}
assert
(
oop_addr
!=
NULL
,
"oop relocation must exist"
);
copy_buff
-=
*
byte_count
;
NativeMovConstReg
*
n_copy2
=
nativeMovConstReg_at
(
copy_buff
);
n_copy2
->
set_
data
((
intx
)
(
load_klass
())
,
instr_pc
);
n_copy2
->
set_
pc_relative_offset
((
address
)
oop_addr
,
instr_pc
);
}
#endif
...
...
src/share/vm/classfile/javaClasses.cpp
浏览文件 @
320ecc73
...
...
@@ -1357,7 +1357,7 @@ class BacktraceBuilder: public StackObj {
};
void
java_lang_Throwable
::
fill_in_stack_trace
(
Handle
throwable
,
TRAPS
)
{
void
java_lang_Throwable
::
fill_in_stack_trace
(
Handle
throwable
,
methodHandle
method
,
TRAPS
)
{
if
(
!
StackTraceInThrowable
)
return
;
ResourceMark
rm
(
THREAD
);
...
...
@@ -1374,6 +1374,16 @@ void java_lang_Throwable::fill_in_stack_trace(Handle throwable, TRAPS) {
JavaThread
*
thread
=
(
JavaThread
*
)
THREAD
;
BacktraceBuilder
bt
(
CHECK
);
// If there is no Java frame just return the method that was being called
// with bci 0
if
(
!
thread
->
has_last_Java_frame
())
{
if
(
max_depth
>=
1
&&
method
()
!=
NULL
)
{
bt
.
push
(
method
(),
0
,
CHECK
);
set_backtrace
(
throwable
(),
bt
.
backtrace
());
}
return
;
}
// Instead of using vframe directly, this version of fill_in_stack_trace
// basically handles everything by hand. This significantly improved the
// speed of this method call up to 28.5% on Solaris sparc. 27.1% on Windows.
...
...
@@ -1477,7 +1487,7 @@ void java_lang_Throwable::fill_in_stack_trace(Handle throwable, TRAPS) {
set_backtrace
(
throwable
(),
bt
.
backtrace
());
}
void
java_lang_Throwable
::
fill_in_stack_trace
(
Handle
throwable
)
{
void
java_lang_Throwable
::
fill_in_stack_trace
(
Handle
throwable
,
methodHandle
method
)
{
// No-op if stack trace is disabled
if
(
!
StackTraceInThrowable
)
{
return
;
...
...
@@ -1491,7 +1501,7 @@ void java_lang_Throwable::fill_in_stack_trace(Handle throwable) {
PRESERVE_EXCEPTION_MARK
;
JavaThread
*
thread
=
JavaThread
::
active
();
fill_in_stack_trace
(
throwable
,
thread
);
fill_in_stack_trace
(
throwable
,
method
,
thread
);
// ignore exceptions thrown during stack trace filling
CLEAR_PENDING_EXCEPTION
;
}
...
...
src/share/vm/classfile/javaClasses.hpp
浏览文件 @
320ecc73
...
...
@@ -440,8 +440,8 @@ class java_lang_Throwable: AllStatic {
static
void
fill_in_stack_trace_of_preallocated_backtrace
(
Handle
throwable
);
// Fill in current stack trace, can cause GC
static
void
fill_in_stack_trace
(
Handle
throwable
,
TRAPS
);
static
void
fill_in_stack_trace
(
Handle
throwable
);
static
void
fill_in_stack_trace
(
Handle
throwable
,
methodHandle
method
,
TRAPS
);
static
void
fill_in_stack_trace
(
Handle
throwable
,
methodHandle
method
=
methodHandle
()
);
// Programmatic access to stack trace
static
oop
get_stack_trace_element
(
oop
throwable
,
int
index
,
TRAPS
);
static
int
get_stack_trace_depth
(
oop
throwable
,
TRAPS
);
...
...
src/share/vm/runtime/javaCalls.cpp
浏览文件 @
320ecc73
...
...
@@ -389,7 +389,7 @@ void JavaCalls::call_helper(JavaValue* result, methodHandle* m, JavaCallArgument
// to Java
if
(
!
os
::
stack_shadow_pages_available
(
THREAD
,
method
))
{
// Throw stack overflow exception with preinitialized exception.
Exceptions
::
throw_stack_overflow_exception
(
THREAD
,
__FILE__
,
__LINE__
);
Exceptions
::
throw_stack_overflow_exception
(
THREAD
,
__FILE__
,
__LINE__
,
method
);
return
;
}
else
{
// Touch pages checked if the OS needs them to be touched to be mapped.
...
...
src/share/vm/utilities/exceptions.cpp
浏览文件 @
320ecc73
...
...
@@ -207,7 +207,7 @@ void Exceptions::_throw_args(Thread* thread, const char* file, int line, Symbol*
}
void
Exceptions
::
throw_stack_overflow_exception
(
Thread
*
THREAD
,
const
char
*
file
,
int
line
)
{
void
Exceptions
::
throw_stack_overflow_exception
(
Thread
*
THREAD
,
const
char
*
file
,
int
line
,
methodHandle
method
)
{
Handle
exception
;
if
(
!
THREAD
->
has_pending_exception
())
{
klassOop
k
=
SystemDictionary
::
StackOverflowError_klass
();
...
...
@@ -215,13 +215,13 @@ void Exceptions::throw_stack_overflow_exception(Thread* THREAD, const char* file
exception
=
Handle
(
THREAD
,
e
);
// fill_in_stack trace does gc
assert
(
instanceKlass
::
cast
(
k
)
->
is_initialized
(),
"need to increase min_stack_allowed calculation"
);
if
(
StackTraceInThrowable
)
{
java_lang_Throwable
::
fill_in_stack_trace
(
exception
);
java_lang_Throwable
::
fill_in_stack_trace
(
exception
,
method
()
);
}
}
else
{
// if prior exception, throw that one instead
exception
=
Handle
(
THREAD
,
THREAD
->
pending_exception
());
}
_throw
_oop
(
THREAD
,
file
,
line
,
exception
()
);
_throw
(
THREAD
,
file
,
line
,
exception
);
}
void
Exceptions
::
fthrow
(
Thread
*
thread
,
const
char
*
file
,
int
line
,
Symbol
*
h_name
,
const
char
*
format
,
...)
{
...
...
src/share/vm/utilities/exceptions.hpp
浏览文件 @
320ecc73
...
...
@@ -144,7 +144,7 @@ class Exceptions {
const
char
*
message
,
ExceptionMsgToUtf8Mode
to_utf8_safe
=
safe_to_utf8
);
static
void
throw_stack_overflow_exception
(
Thread
*
thread
,
const
char
*
file
,
int
line
);
static
void
throw_stack_overflow_exception
(
Thread
*
thread
,
const
char
*
file
,
int
line
,
methodHandle
method
);
// for AbortVMOnException flag
NOT_PRODUCT
(
static
void
debug_check_abort
(
Handle
exception
,
const
char
*
message
=
NULL
);)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录