Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
21f04fe3
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,发现更多精彩内容 >>
提交
21f04fe3
编写于
4月 08, 2011
作者:
I
iveresov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7034967: C1: assert(false) failed: error (assembler_sparc.cpp:2043)
Summary: Fix -XX:+VerifyOops Reviewed-by: kvn, never
上级
5413f3b9
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
23 addition
and
7 deletion
+23
-7
src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp
src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp
+2
-2
src/cpu/x86/vm/assembler_x86.cpp
src/cpu/x86/vm/assembler_x86.cpp
+13
-2
src/cpu/x86/vm/assembler_x86.hpp
src/cpu/x86/vm/assembler_x86.hpp
+1
-0
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
+3
-1
src/share/vm/c1/c1_LIRGenerator.cpp
src/share/vm/c1/c1_LIRGenerator.cpp
+4
-2
未找到文件。
src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp
浏览文件 @
21f04fe3
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, 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
...
...
@@ -387,7 +387,7 @@ void C1_MacroAssembler::verify_stack_oop(int stack_offset) {
void
C1_MacroAssembler
::
verify_not_null_oop
(
Register
r
)
{
Label
not_null
;
br_
zero
(
Assembler
::
notEqual
,
false
,
Assembler
::
pt
,
r
,
not_null
);
br_
notnull
(
r
,
false
,
Assembler
::
pt
,
not_null
);
delayed
()
->
nop
();
stop
(
"non-null oop required"
);
bind
(
not_null
);
...
...
src/cpu/x86/vm/assembler_x86.cpp
浏览文件 @
21f04fe3
...
...
@@ -7941,12 +7941,12 @@ void MacroAssembler::verify_oop_addr(Address addr, const char* s) {
#endif
push
(
rax
);
// save rax,
// addr may contain rsp so we will have to adjust it based on the push
// we just did
// we just did
(and on 64 bit we do two pushes)
// NOTE: 64bit seemed to have had a bug in that it did movq(addr, rax); which
// stores rax into addr which is backwards of what was intended.
if
(
addr
.
uses
(
rsp
))
{
lea
(
rax
,
addr
);
pushptr
(
Address
(
rax
,
BytesPerWord
));
pushptr
(
Address
(
rax
,
LP64_ONLY
(
2
*
)
BytesPerWord
));
}
else
{
pushptr
(
addr
);
}
...
...
@@ -8396,6 +8396,17 @@ void MacroAssembler::load_heap_oop(Register dst, Address src) {
movptr
(
dst
,
src
);
}
// Doesn't do verfication, generates fixed size code
void
MacroAssembler
::
load_heap_oop_not_null
(
Register
dst
,
Address
src
)
{
#ifdef _LP64
if
(
UseCompressedOops
)
{
movl
(
dst
,
src
);
decode_heap_oop_not_null
(
dst
);
}
else
#endif
movptr
(
dst
,
src
);
}
void
MacroAssembler
::
store_heap_oop
(
Address
dst
,
Register
src
)
{
#ifdef _LP64
if
(
UseCompressedOops
)
{
...
...
src/cpu/x86/vm/assembler_x86.hpp
浏览文件 @
21f04fe3
...
...
@@ -1709,6 +1709,7 @@ class MacroAssembler: public Assembler {
void
store_klass
(
Register
dst
,
Register
src
);
void
load_heap_oop
(
Register
dst
,
Address
src
);
void
load_heap_oop_not_null
(
Register
dst
,
Address
src
);
void
store_heap_oop
(
Address
dst
,
Register
src
);
// Used for storing NULL. All other oop constants should be
...
...
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
浏览文件 @
21f04fe3
...
...
@@ -316,7 +316,9 @@ void PatchingStub::emit_code(LIR_Assembler* ce) {
Register
tmp2
=
rbx
;
__
push
(
tmp
);
__
push
(
tmp2
);
__
load_heap_oop
(
tmp2
,
Address
(
_obj
,
java_lang_Class
::
klass_offset_in_bytes
()));
// Load without verification to keep code size small. We need it because
// begin_initialized_entry_offset has to fit in a byte. Also, we know it's not null.
__
load_heap_oop_not_null
(
tmp2
,
Address
(
_obj
,
java_lang_Class
::
klass_offset_in_bytes
()));
__
get_thread
(
tmp
);
__
cmpptr
(
tmp
,
Address
(
tmp2
,
instanceKlass
::
init_thread_offset_in_bytes
()
+
sizeof
(
klassOopDesc
)));
__
pop
(
tmp2
);
...
...
src/share/vm/c1/c1_LIRGenerator.cpp
浏览文件 @
21f04fe3
...
...
@@ -1456,7 +1456,7 @@ void LIRGenerator::G1SATBCardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_Opr
if
(
addr
->
is_address
())
{
LIR_Address
*
address
=
addr
->
as_address_ptr
();
LIR_Opr
ptr
=
new_
register
(
T_OBJECT
);
LIR_Opr
ptr
=
new_
pointer_register
(
);
if
(
!
address
->
index
()
->
is_valid
()
&&
address
->
disp
()
==
0
)
{
__
move
(
address
->
base
(),
ptr
);
}
else
{
...
...
@@ -1508,7 +1508,9 @@ void LIRGenerator::CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc*
LIR_Const
*
card_table_base
=
new
LIR_Const
(((
CardTableModRefBS
*
)
_bs
)
->
byte_map_base
);
if
(
addr
->
is_address
())
{
LIR_Address
*
address
=
addr
->
as_address_ptr
();
LIR_Opr
ptr
=
new_register
(
T_OBJECT
);
// ptr cannot be an object because we use this barrier for array card marks
// and addr can point in the middle of an array.
LIR_Opr
ptr
=
new_pointer_register
();
if
(
!
address
->
index
()
->
is_valid
()
&&
address
->
disp
()
==
0
)
{
__
move
(
address
->
base
(),
ptr
);
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录