Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
2f76931b
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看板
提交
2f76931b
编写于
4月 16, 2010
作者:
T
twisti
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
2138e8e1
e94f7545
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
120 addition
and
133 deletion
+120
-133
src/cpu/zero/vm/cppInterpreter_zero.cpp
src/cpu/zero/vm/cppInterpreter_zero.cpp
+35
-72
src/cpu/zero/vm/cppInterpreter_zero.hpp
src/cpu/zero/vm/cppInterpreter_zero.hpp
+0
-4
src/cpu/zero/vm/entryFrame_zero.hpp
src/cpu/zero/vm/entryFrame_zero.hpp
+4
-4
src/cpu/zero/vm/fakeStubFrame_zero.hpp
src/cpu/zero/vm/fakeStubFrame_zero.hpp
+2
-2
src/cpu/zero/vm/interpreterFrame_zero.hpp
src/cpu/zero/vm/interpreterFrame_zero.hpp
+3
-5
src/cpu/zero/vm/interpreterRT_zero.cpp
src/cpu/zero/vm/interpreterRT_zero.cpp
+3
-4
src/cpu/zero/vm/stack_zero.hpp
src/cpu/zero/vm/stack_zero.hpp
+15
-2
src/cpu/zero/vm/stubGenerator_zero.cpp
src/cpu/zero/vm/stubGenerator_zero.cpp
+39
-34
src/os_cpu/linux_zero/vm/thread_linux_zero.hpp
src/os_cpu/linux_zero/vm/thread_linux_zero.hpp
+6
-5
src/share/vm/includeDB_zero
src/share/vm/includeDB_zero
+13
-1
未找到文件。
src/cpu/zero/vm/cppInterpreter_zero.cpp
浏览文件 @
2f76931b
...
...
@@ -39,21 +39,9 @@
void
CppInterpreter
::
normal_entry
(
methodOop
method
,
intptr_t
UNUSED
,
TRAPS
)
{
JavaThread
*
thread
=
(
JavaThread
*
)
THREAD
;
ZeroStack
*
stack
=
thread
->
zero_stack
();
// Adjust the caller's stack frame to accomodate any additional
// local variables we have contiguously with our parameters.
int
extra_locals
=
method
->
max_locals
()
-
method
->
size_of_parameters
();
if
(
extra_locals
>
0
)
{
if
(
extra_locals
>
stack
->
available_words
())
{
Unimplemented
();
}
for
(
int
i
=
0
;
i
<
extra_locals
;
i
++
)
stack
->
push
(
0
);
}
// Allocate and initialize our frame.
InterpreterFrame
*
frame
=
InterpreterFrame
::
build
(
stack
,
method
,
thread
);
InterpreterFrame
*
frame
=
InterpreterFrame
::
build
(
method
,
CHECK
);
thread
->
push_zero_frame
(
frame
);
// Execute those bytecodes!
...
...
@@ -76,12 +64,6 @@ void CppInterpreter::main_loop(int recurse, TRAPS) {
intptr_t
*
result
=
NULL
;
int
result_slots
=
0
;
// Check we're not about to run out of stack
if
(
stack_overflow_imminent
(
thread
))
{
CALL_VM_NOCHECK
(
InterpreterRuntime
::
throw_StackOverflowError
(
thread
));
goto
unwind_and_return
;
}
while
(
true
)
{
// We can set up the frame anchor with everything we want at
// this point as we are thread_in_Java and no safepoints can
...
...
@@ -123,9 +105,9 @@ void CppInterpreter::main_loop(int recurse, TRAPS) {
int
monitor_words
=
frame
::
interpreter_frame_monitor_size
();
// Allocate the space
if
(
monitor_words
>
stack
->
available_words
())
{
Unimplemented
();
}
stack
->
overflow_check
(
monitor_words
,
THREAD
);
if
(
HAS_PENDING_EXCEPTION
)
break
;
stack
->
alloc
(
monitor_words
*
wordSize
);
// Move the expression stack contents
...
...
@@ -172,8 +154,6 @@ void CppInterpreter::main_loop(int recurse, TRAPS) {
}
}
unwind_and_return:
// Unwind the current frame
thread
->
pop_zero_frame
();
...
...
@@ -193,17 +173,11 @@ void CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) {
ZeroStack
*
stack
=
thread
->
zero_stack
();
// Allocate and initialize our frame
InterpreterFrame
*
frame
=
InterpreterFrame
::
build
(
stack
,
method
,
thread
);
InterpreterFrame
*
frame
=
InterpreterFrame
::
build
(
method
,
CHECK
);
thread
->
push_zero_frame
(
frame
);
interpreterState
istate
=
frame
->
interpreter_state
();
intptr_t
*
locals
=
istate
->
locals
();
// Check we're not about to run out of stack
if
(
stack_overflow_imminent
(
thread
))
{
CALL_VM_NOCHECK
(
InterpreterRuntime
::
throw_StackOverflowError
(
thread
));
goto
unwind_and_return
;
}
// Update the invocation counter
if
((
UseCompiler
||
CountCompiledCalls
)
&&
!
method
->
is_synchronized
())
{
InvocationCounter
*
counter
=
method
->
invocation_counter
();
...
...
@@ -264,9 +238,10 @@ void CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) {
assert
(
function
!=
NULL
,
"should be set if signature handler is"
);
// Build the argument list
if
(
handler
->
argument_count
()
*
2
>
stack
->
available_words
())
{
Unimplemented
();
}
stack
->
overflow_check
(
handler
->
argument_count
()
*
2
,
THREAD
);
if
(
HAS_PENDING_EXCEPTION
)
goto
unlock_unwind_and_return
;
void
**
arguments
;
void
*
mirror
;
{
arguments
=
...
...
@@ -503,9 +478,7 @@ void CppInterpreter::accessor_entry(methodOop method, intptr_t UNUSED, TRAPS) {
switch
(
entry
->
flag_state
())
{
case
ltos
:
case
dtos
:
if
(
stack
->
available_words
()
<
1
)
{
Unimplemented
();
}
stack
->
overflow_check
(
1
,
CHECK
);
stack
->
alloc
(
wordSize
);
break
;
}
...
...
@@ -601,39 +574,30 @@ void CppInterpreter::empty_entry(methodOop method, intptr_t UNUSED, TRAPS) {
stack
->
set_sp
(
stack
->
sp
()
+
method
->
size_of_parameters
());
}
bool
CppInterpreter
::
stack_overflow_imminent
(
JavaThread
*
thread
)
{
// How is the ABI stack?
address
stack_top
=
thread
->
stack_base
()
-
thread
->
stack_size
();
int
free_stack
=
os
::
current_stack_pointer
()
-
stack_top
;
if
(
free_stack
<
StackShadowPages
*
os
::
vm_page_size
())
{
return
true
;
}
// How is the Zero stack?
// Throwing a StackOverflowError involves a VM call, which means
// we need a frame on the stack. We should be checking here to
// ensure that methods we call have enough room to install the
// largest possible frame, but that's more than twice the size
// of the entire Zero stack we get by default, so we just check
// we have *some* space instead...
free_stack
=
thread
->
zero_stack
()
->
available_words
()
*
wordSize
;
if
(
free_stack
<
StackShadowPages
*
os
::
vm_page_size
())
{
return
true
;
}
return
false
;
}
InterpreterFrame
*
InterpreterFrame
::
build
(
const
methodOop
method
,
TRAPS
)
{
JavaThread
*
thread
=
(
JavaThread
*
)
THREAD
;
ZeroStack
*
stack
=
thread
->
zero_stack
();
InterpreterFrame
*
InterpreterFrame
::
build
(
ZeroStack
*
stack
,
const
methodOop
method
,
JavaThread
*
thread
)
{
int
monitor_words
=
method
->
is_synchronized
()
?
frame
::
interpreter_frame_monitor_size
()
:
0
;
int
stack_words
=
method
->
is_native
()
?
0
:
method
->
max_stack
();
// Calculate the size of the frame we'll build, including
// any adjustments to the caller's frame that we'll make.
int
extra_locals
=
0
;
int
monitor_words
=
0
;
int
stack_words
=
0
;
if
(
header_words
+
monitor_words
+
stack_words
>
stack
->
available_words
())
{
Unimplemented
();
if
(
!
method
->
is_native
())
{
extra_locals
=
method
->
max_locals
()
-
method
->
size_of_parameters
();
stack_words
=
method
->
max_stack
();
}
if
(
method
->
is_synchronized
())
{
monitor_words
=
frame
::
interpreter_frame_monitor_size
();
}
stack
->
overflow_check
(
extra_locals
+
header_words
+
monitor_words
+
stack_words
,
CHECK_NULL
);
// Adjust the caller's stack frame to accomodate any additional
// local variables we have contiguously with our parameters.
for
(
int
i
=
0
;
i
<
extra_locals
;
i
++
)
stack
->
push
(
0
);
intptr_t
*
locals
;
if
(
method
->
is_native
())
...
...
@@ -812,14 +776,13 @@ InterpreterGenerator::InterpreterGenerator(StubQueue* code)
// Deoptimization helpers
InterpreterFrame
*
InterpreterFrame
::
build
(
ZeroStack
*
stack
,
int
size
)
{
InterpreterFrame
*
InterpreterFrame
::
build
(
int
size
,
TRAPS
)
{
ZeroStack
*
stack
=
((
JavaThread
*
)
THREAD
)
->
zero_stack
();
int
size_in_words
=
size
>>
LogBytesPerWord
;
assert
(
size_in_words
*
wordSize
==
size
,
"unaligned"
);
assert
(
size_in_words
>=
header_words
,
"too small"
);
if
(
size_in_words
>
stack
->
available_words
())
{
Unimplemented
();
}
stack
->
overflow_check
(
size_in_words
,
CHECK_NULL
);
stack
->
push
(
0
);
// next_frame, filled in later
intptr_t
*
fp
=
stack
->
sp
();
...
...
src/cpu/zero/vm/cppInterpreter_zero.hpp
浏览文件 @
2f76931b
...
...
@@ -38,10 +38,6 @@
// Main loop of normal_entry
static
void
main_loop
(
int
recurse
,
TRAPS
);
private
:
// Stack overflow checks
static
bool
stack_overflow_imminent
(
JavaThread
*
thread
);
private
:
// Fast result type determination
static
BasicType
result_type_of
(
methodOop
method
);
src/cpu/zero/vm/entryFrame_zero.hpp
浏览文件 @
2f76931b
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2008 Red Hat, Inc.
* Copyright 2008
, 2010
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -47,10 +47,10 @@ class EntryFrame : public ZeroFrame {
};
public:
static
EntryFrame
*
build
(
ZeroStack
*
stack
,
const
intptr_t
*
parameters
,
static
EntryFrame
*
build
(
const
intptr_t
*
parameters
,
int
parameter_words
,
JavaCallWrapper
*
call_wrapper
);
JavaCallWrapper
*
call_wrapper
,
TRAPS
);
public:
JavaCallWrapper
*
call_wrapper
()
const
{
return
(
JavaCallWrapper
*
)
value_of_word
(
call_wrapper_off
);
...
...
src/cpu/zero/vm/fakeStubFrame_zero.hpp
浏览文件 @
2f76931b
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2008 Red Hat, Inc.
* Copyright 2008
, 2010
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -42,7 +42,7 @@ class FakeStubFrame : public ZeroFrame {
};
public:
static
FakeStubFrame
*
build
(
ZeroStack
*
stack
);
static
FakeStubFrame
*
build
(
TRAPS
);
public:
void
identify_word
(
int
frame_index
,
...
...
src/cpu/zero/vm/interpreterFrame_zero.hpp
浏览文件 @
2f76931b
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2008 Red Hat, Inc.
* Copyright 2008
, 2010
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -55,10 +55,8 @@ class InterpreterFrame : public ZeroFrame {
};
public:
static
InterpreterFrame
*
build
(
ZeroStack
*
stack
,
const
methodOop
method
,
JavaThread
*
thread
);
static
InterpreterFrame
*
build
(
ZeroStack
*
stack
,
int
size
);
static
InterpreterFrame
*
build
(
const
methodOop
method
,
TRAPS
);
static
InterpreterFrame
*
build
(
int
size
,
TRAPS
);
public:
interpreterState
interpreter_state
()
const
{
...
...
src/cpu/zero/vm/interpreterRT_zero.cpp
浏览文件 @
2f76931b
/*
* Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2007, 2008 Red Hat, Inc.
* Copyright 2007, 2008
, 2010
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -140,9 +140,8 @@ IRT_ENTRY(address,
int
required_words
=
(
align_size_up
(
sizeof
(
ffi_cif
),
wordSize
)
>>
LogBytesPerWord
)
+
(
method
->
is_static
()
?
2
:
1
)
+
method
->
size_of_parameters
()
+
1
;
if
(
required_words
>
stack
->
available_words
())
{
Unimplemented
();
}
stack
->
overflow_check
(
required_words
,
CHECK_NULL
);
intptr_t
*
buf
=
(
intptr_t
*
)
stack
->
alloc
(
required_words
*
wordSize
);
SlowSignatureHandlerGenerator
sshg
(
methodHandle
(
thread
,
method
),
buf
);
...
...
src/cpu/zero/vm/stack_zero.hpp
浏览文件 @
2f76931b
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2008, 2009 Red Hat, Inc.
* Copyright 2008, 2009
, 2010
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -29,9 +29,14 @@ class ZeroStack {
intptr_t
*
_top
;
// the word past the end of the stack
intptr_t
*
_sp
;
// the top word on the stack
private:
int
_shadow_pages_size
;
// how much ABI stack must we keep free?
public:
ZeroStack
()
:
_base
(
NULL
),
_top
(
NULL
),
_sp
(
NULL
)
{}
:
_base
(
NULL
),
_top
(
NULL
),
_sp
(
NULL
)
{
_shadow_pages_size
=
StackShadowPages
*
os
::
vm_page_size
();
}
bool
needs_setup
()
const
{
return
_base
==
NULL
;
...
...
@@ -81,6 +86,14 @@ class ZeroStack {
return
_sp
-=
count
;
}
int
shadow_pages_size
()
const
{
return
_shadow_pages_size
;
}
public:
void
overflow_check
(
int
required_words
,
TRAPS
);
static
void
handle_overflow
(
TRAPS
);
public:
static
ByteSize
base_offset
()
{
return
byte_offset_of
(
ZeroStack
,
_base
);
...
...
src/cpu/zero/vm/stubGenerator_zero.cpp
浏览文件 @
2f76931b
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2007, 2008 Red Hat, Inc.
* Copyright 2007, 2008
, 2010
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -60,37 +60,42 @@ class StubGenerator: public StubCodeGenerator {
}
// Allocate and initialize our frame
thread
->
push_zero_frame
(
EntryFrame
::
build
(
stack
,
parameters
,
parameter_words
,
call_wrapper
)
);
EntryFrame
*
frame
=
EntryFrame
::
build
(
parameters
,
parameter_words
,
call_wrapper
,
THREAD
);
// Make the call
Interpreter
::
invoke_method
(
method
,
entry_point
,
THREAD
);
// Store result depending on type
if
(
!
HAS_PENDING_EXCEPTION
)
{
switch
(
result_type
)
{
case
T_INT
:
*
(
jint
*
)
result
=
*
(
jint
*
)
stack
->
sp
();
break
;
case
T_LONG
:
*
(
jlong
*
)
result
=
*
(
jlong
*
)
stack
->
sp
();
break
;
case
T_FLOAT
:
*
(
jfloat
*
)
result
=
*
(
jfloat
*
)
stack
->
sp
();
break
;
case
T_DOUBLE
:
*
(
jdouble
*
)
result
=
*
(
jdouble
*
)
stack
->
sp
();
break
;
case
T_OBJECT
:
*
(
oop
*
)
result
=
*
(
oop
*
)
stack
->
sp
();
break
;
default:
ShouldNotReachHere
();
// Push the frame
thread
->
push_zero_frame
(
frame
);
// Make the call
Interpreter
::
invoke_method
(
method
,
entry_point
,
THREAD
);
// Store the result
if
(
!
HAS_PENDING_EXCEPTION
)
{
switch
(
result_type
)
{
case
T_INT
:
*
(
jint
*
)
result
=
*
(
jint
*
)
stack
->
sp
();
break
;
case
T_LONG
:
*
(
jlong
*
)
result
=
*
(
jlong
*
)
stack
->
sp
();
break
;
case
T_FLOAT
:
*
(
jfloat
*
)
result
=
*
(
jfloat
*
)
stack
->
sp
();
break
;
case
T_DOUBLE
:
*
(
jdouble
*
)
result
=
*
(
jdouble
*
)
stack
->
sp
();
break
;
case
T_OBJECT
:
*
(
oop
*
)
result
=
*
(
oop
*
)
stack
->
sp
();
break
;
default:
ShouldNotReachHere
();
}
}
}
// Unwind our frame
thread
->
pop_zero_frame
();
// Unwind the frame
thread
->
pop_zero_frame
();
}
// Tear down the stack if necessary
if
(
stack_needs_teardown
)
...
...
@@ -226,13 +231,13 @@ void StubGenerator_generate(CodeBuffer* code, bool all) {
StubGenerator
g
(
code
,
all
);
}
EntryFrame
*
EntryFrame
::
build
(
ZeroStack
*
stack
,
const
intptr_t
*
parameters
,
EntryFrame
*
EntryFrame
::
build
(
const
intptr_t
*
parameters
,
int
parameter_words
,
JavaCallWrapper
*
call_wrapper
)
{
if
(
header_words
+
parameter_words
>
stack
->
available_words
())
{
Unimplemented
();
}
JavaCallWrapper
*
call_wrapper
,
TRAPS
)
{
ZeroStack
*
stack
=
((
JavaThread
*
)
THREAD
)
->
zero_stack
();
stack
->
overflow_check
(
header_words
+
parameter_words
,
CHECK_NULL
);
stack
->
push
(
0
);
// next_frame, filled in later
intptr_t
*
fp
=
stack
->
sp
();
...
...
src/os_cpu/linux_zero/vm/thread_linux_zero.hpp
浏览文件 @
2f76931b
/*
* Copyright 2000-2007 Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2007, 2008, 2009 Red Hat, Inc.
* Copyright 2007, 2008, 2009
, 2010
Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -68,12 +68,13 @@
public
:
void
set_last_Java_frame
()
{
JavaFrameAnchor
*
jfa
=
frame_anchor
();
jfa
->
set_last_Java_sp
((
intptr_t
*
)
top_zero_frame
());
set_last_Java_frame
(
top_zero_frame
());
}
void
reset_last_Java_frame
()
{
JavaFrameAnchor
*
jfa
=
frame_anchor
();
jfa
->
set_last_Java_sp
(
NULL
);
set_last_Java_frame
(
NULL
);
}
void
set_last_Java_frame
(
ZeroFrame
*
frame
)
{
frame_anchor
()
->
set_last_Java_sp
((
intptr_t
*
)
frame
);
}
private
:
...
...
src/share/vm/includeDB_zero
浏览文件 @
2f76931b
//
// Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved.
// Copyright 2009 Red Hat, Inc.
// Copyright 2009
, 2010
Red Hat, Inc.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This code is free software; you can redistribute it and/or modify it
...
...
@@ -25,6 +25,8 @@
// NOTE: DO NOT CHANGE THIS COPYRIGHT TO NEW STYLE - IT WILL BREAK makeDeps!
cppInterpreter_<arch>.cpp stack_<arch>.inline.hpp
entryFrame_<arch>.hpp javaCalls.hpp
entryFrame_<arch>.hpp stack_<arch>.hpp
...
...
@@ -47,9 +49,19 @@ interpreterFrame_<arch>.hpp methodOop.hpp
interpreterFrame_<arch>.hpp stack_<arch>.hpp
interpreterFrame_<arch>.hpp thread.hpp
interpreterRT_<arch>.cpp stack_<arch>.inline.hpp
sharkFrame_<arch>.hpp methodOop.hpp
sharkFrame_<arch>.hpp stack_<arch>.hpp
stack_<arch>.hpp sizes.hpp
stack_<arch>.inline.hpp stack_<arch>.hpp
stack_<arch>.inline.hpp thread.hpp
stack_<arch>.cpp interpreterRuntime.hpp
stack_<arch>.cpp stack_<arch>.hpp
stubGenerator_<arch>.cpp stack_<arch>.inline.hpp
thread.hpp stack_<arch>.hpp
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录