Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
0bb60c7a
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看板
提交
0bb60c7a
编写于
8月 17, 2009
作者:
N
never
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6795465: Crash in assembler_sparc.cpp with client compiler on solaris-sparc
Reviewed-by: twisti, cfang
上级
8ce199f6
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
66 addition
and
20 deletion
+66
-20
src/cpu/sparc/vm/c1_Defs_sparc.hpp
src/cpu/sparc/vm/c1_Defs_sparc.hpp
+2
-2
src/cpu/sparc/vm/c1_FrameMap_sparc.cpp
src/cpu/sparc/vm/c1_FrameMap_sparc.cpp
+4
-0
src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp
src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp
+13
-14
src/share/vm/includeDB_compiler1
src/share/vm/includeDB_compiler1
+0
-4
test/compiler/6795465/Test6795465.java
test/compiler/6795465/Test6795465.java
+47
-0
未找到文件。
src/cpu/sparc/vm/c1_Defs_sparc.hpp
浏览文件 @
0bb60c7a
/*
* Copyright 2000-200
5
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2000-200
9
Sun Microsystems, Inc. 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
...
...
@@ -38,7 +38,7 @@ enum {
// registers
enum
{
pd_nof_cpu_regs_frame_map
=
32
,
// number of registers used during code emission
pd_nof_caller_save_cpu_regs_frame_map
=
6
,
// number of cpu registers killed by calls
pd_nof_caller_save_cpu_regs_frame_map
=
10
,
// number of cpu registers killed by calls
pd_nof_cpu_regs_reg_alloc
=
20
,
// number of registers that are visible to register allocator
pd_nof_cpu_regs_linearscan
=
32
,
// number of registers visible linear scan
pd_first_cpu_reg
=
0
,
...
...
src/cpu/sparc/vm/c1_FrameMap_sparc.cpp
浏览文件 @
0bb60c7a
...
...
@@ -320,6 +320,10 @@ void FrameMap::init () {
_caller_save_cpu_regs
[
3
]
=
FrameMap
::
O3_opr
;
_caller_save_cpu_regs
[
4
]
=
FrameMap
::
O4_opr
;
_caller_save_cpu_regs
[
5
]
=
FrameMap
::
O5_opr
;
_caller_save_cpu_regs
[
6
]
=
FrameMap
::
G1_opr
;
_caller_save_cpu_regs
[
7
]
=
FrameMap
::
G3_opr
;
_caller_save_cpu_regs
[
8
]
=
FrameMap
::
G4_opr
;
_caller_save_cpu_regs
[
9
]
=
FrameMap
::
G5_opr
;
for
(
int
i
=
0
;
i
<
nof_caller_save_fpu_regs
;
i
++
)
{
_caller_save_fpu_regs
[
i
]
=
LIR_OprFact
::
single_fpu
(
i
);
}
...
...
src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp
浏览文件 @
0bb60c7a
...
...
@@ -749,6 +749,10 @@ void LIRGenerator::do_MathIntrinsic(Intrinsic* x) {
void
LIRGenerator
::
do_ArrayCopy
(
Intrinsic
*
x
)
{
assert
(
x
->
number_of_arguments
()
==
5
,
"wrong type"
);
// Make all state_for calls early since they can emit code
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
// Note: spill caller save before setting the item
LIRItem
src
(
x
->
argument_at
(
0
),
this
);
LIRItem
src_pos
(
x
->
argument_at
(
1
),
this
);
...
...
@@ -767,7 +771,6 @@ void LIRGenerator::do_ArrayCopy(Intrinsic* x) {
ciArrayKlass
*
expected_type
;
arraycopy_helper
(
x
,
&
flags
,
&
expected_type
);
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
__
arraycopy
(
src
.
result
(),
src_pos
.
result
(),
dst
.
result
(),
dst_pos
.
result
(),
length
.
result
(),
rlock_callee_saved
(
T_INT
),
expected_type
,
flags
,
info
);
...
...
@@ -878,6 +881,9 @@ void LIRGenerator::do_NewInstance(NewInstance* x) {
void
LIRGenerator
::
do_NewTypeArray
(
NewTypeArray
*
x
)
{
// Evaluate state_for early since it may emit code
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
LIRItem
length
(
x
->
length
(),
this
);
length
.
load_item
();
...
...
@@ -892,7 +898,6 @@ void LIRGenerator::do_NewTypeArray(NewTypeArray* x) {
__
oop2reg
(
ciTypeArrayKlass
::
make
(
elem_type
)
->
encoding
(),
klass_reg
);
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
CodeStub
*
slow_path
=
new
NewTypeArrayStub
(
klass_reg
,
len
,
reg
,
info
);
__
allocate_array
(
reg
,
len
,
tmp1
,
tmp2
,
tmp3
,
tmp4
,
elem_type
,
klass_reg
,
slow_path
);
...
...
@@ -902,7 +907,8 @@ void LIRGenerator::do_NewTypeArray(NewTypeArray* x) {
void
LIRGenerator
::
do_NewObjectArray
(
NewObjectArray
*
x
)
{
LIRItem
length
(
x
->
length
(),
this
);
// Evaluate state_for early since it may emit code.
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
// in case of patching (i.e., object class is not yet loaded), we need to reexecute the instruction
// and therefore provide the state before the parameters have been consumed
CodeEmitInfo
*
patching_info
=
NULL
;
...
...
@@ -910,6 +916,7 @@ void LIRGenerator::do_NewObjectArray(NewObjectArray* x) {
patching_info
=
state_for
(
x
,
x
->
state_before
());
}
LIRItem
length
(
x
->
length
(),
this
);
length
.
load_item
();
const
LIR_Opr
reg
=
result_register_for
(
x
->
type
());
...
...
@@ -919,7 +926,6 @@ void LIRGenerator::do_NewObjectArray(NewObjectArray* x) {
LIR_Opr
tmp4
=
FrameMap
::
O1_oop_opr
;
LIR_Opr
klass_reg
=
FrameMap
::
G5_oop_opr
;
LIR_Opr
len
=
length
.
result
();
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
CodeStub
*
slow_path
=
new
NewObjectArrayStub
(
klass_reg
,
len
,
reg
,
info
);
ciObject
*
obj
=
(
ciObject
*
)
ciObjArrayKlass
::
make
(
x
->
klass
());
...
...
@@ -943,25 +949,20 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) {
items
->
at_put
(
i
,
size
);
}
// need to get the info before, as the items may become invalid through item_free
// Evaluate state_for early since it may emit code.
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
CodeEmitInfo
*
patching_info
=
NULL
;
if
(
!
x
->
klass
()
->
is_loaded
()
||
PatchALot
)
{
patching_info
=
state_for
(
x
,
x
->
state_before
());
// cannot re-use same xhandlers for multiple CodeEmitInfos, so
// clone all handlers
// clone all handlers
.
x
->
set_exception_handlers
(
new
XHandlers
(
x
->
exception_handlers
()));
}
i
=
dims
->
length
();
while
(
i
--
>
0
)
{
LIRItem
*
size
=
items
->
at
(
i
);
// if a patching_info was generated above then debug information for the state before
// the call is going to be emitted. The LIRGenerator calls above may have left some values
// in registers and that's been recorded in the CodeEmitInfo. In that case the items
// for those values can't simply be freed if they are registers because the values
// might be destroyed by store_stack_parameter. So in the case of patching, delay the
// freeing of the items that already were in registers
size
->
load_item
();
store_stack_parameter
(
size
->
result
(),
in_ByteSize
(
STACK_BIAS
+
...
...
@@ -972,8 +973,6 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) {
// This instruction can be deoptimized in the slow path : use
// O0 as result register.
const
LIR_Opr
reg
=
result_register_for
(
x
->
type
());
CodeEmitInfo
*
info
=
state_for
(
x
,
x
->
state
());
jobject2reg_with_patching
(
reg
,
x
->
klass
(),
patching_info
);
LIR_Opr
rank
=
FrameMap
::
O1_opr
;
__
move
(
LIR_OprFact
::
intConst
(
x
->
rank
()),
rank
);
...
...
src/share/vm/includeDB_compiler1
浏览文件 @
0bb60c7a
...
...
@@ -409,8 +409,6 @@ codeBlob.cpp c1_Runtime1.hpp
compileBroker.cpp c1_Compiler.hpp
frame.hpp c1_Defs.hpp
frame_<arch>.cpp c1_Runtime1.hpp
globals.cpp c1_globals.hpp
...
...
@@ -433,8 +431,6 @@ os_<os_family>.cpp c1_Runtime1.hpp
os_<os_arch>.cpp c1_Runtime1.hpp
registerMap.hpp c1_Defs.hpp
safepoint.cpp c1_globals.hpp
sharedRuntime.cpp c1_Runtime1.hpp
...
...
test/compiler/6795465/Test6795465.java
0 → 100644
浏览文件 @
0bb60c7a
/*
* Copyright 2009 Sun Microsystems, Inc. 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
/**
* @test
* @bug 6795465
* @summary Crash in assembler_sparc.cpp with client compiler on solaris-sparc
*
* @run main Test6795465
*/
public
class
Test6795465
{
static
long
var_1
=
-
1
;
void
test
()
{
long
var_2
=
var_1
*
1
;
var_2
=
var_2
+
(
new
byte
[
1
])[
0
];
}
public
static
void
main
(
String
[]
args
)
{
Test6795465
t
=
new
Test6795465
();
for
(
int
i
=
0
;
i
<
200000
;
i
++)
{
t
.
test
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录