Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
8fdb95ad
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看板
提交
8fdb95ad
编写于
3月 18, 2009
作者:
A
acorn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
4766230: Hotspot vtable inconsistencies cause core dumps. 6579515. 6582242.
Reviewed-by: kamg, coleenp
上级
579d807c
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
176 addition
and
155 deletion
+176
-155
src/share/vm/classfile/classFileParser.cpp
src/share/vm/classfile/classFileParser.cpp
+4
-3
src/share/vm/oops/instanceKlass.cpp
src/share/vm/oops/instanceKlass.cpp
+19
-0
src/share/vm/oops/instanceKlass.hpp
src/share/vm/oops/instanceKlass.hpp
+3
-0
src/share/vm/oops/klassVtable.cpp
src/share/vm/oops/klassVtable.cpp
+142
-147
src/share/vm/oops/klassVtable.hpp
src/share/vm/oops/klassVtable.hpp
+8
-5
未找到文件。
src/share/vm/classfile/classFileParser.cpp
浏览文件 @
8fdb95ad
...
@@ -2747,9 +2747,10 @@ instanceKlassHandle ClassFileParser::parseClassFile(symbolHandle name,
...
@@ -2747,9 +2747,10 @@ instanceKlassHandle ClassFileParser::parseClassFile(symbolHandle name,
super_klass
(),
super_klass
(),
methods
(),
methods
(),
access_flags
,
access_flags
,
class_loader
(),
class_loader
,
class_name
(),
class_name
,
local_interfaces
());
local_interfaces
(),
CHECK_
(
nullHandle
));
// Size of Java itable (in words)
// Size of Java itable (in words)
itable_size
=
access_flags
.
is_interface
()
?
0
:
klassItable
::
compute_itable_size
(
transitive_interfaces
);
itable_size
=
access_flags
.
is_interface
()
?
0
:
klassItable
::
compute_itable_size
(
transitive_interfaces
);
...
...
src/share/vm/oops/instanceKlass.cpp
浏览文件 @
8fdb95ad
...
@@ -1859,6 +1859,25 @@ bool instanceKlass::is_same_class_package(oop class_loader1, symbolOop class_nam
...
@@ -1859,6 +1859,25 @@ bool instanceKlass::is_same_class_package(oop class_loader1, symbolOop class_nam
}
}
}
}
// Returns true iff super_method can be overridden by a method in targetclassname
// See JSL 3rd edition 8.4.6.1
// Assumes name-signature match
// "this" is instanceKlass of super_method which must exist
// note that the instanceKlass of the method in the targetclassname has not always been created yet
bool
instanceKlass
::
is_override
(
methodHandle
super_method
,
Handle
targetclassloader
,
symbolHandle
targetclassname
,
TRAPS
)
{
// Private methods can not be overridden
if
(
super_method
->
is_private
())
{
return
false
;
}
// If super method is accessible, then override
if
((
super_method
->
is_protected
())
||
(
super_method
->
is_public
()))
{
return
true
;
}
// Package-private methods are not inherited outside of package
assert
(
super_method
->
is_package_private
(),
"must be package private"
);
return
(
is_same_class_package
(
targetclassloader
(),
targetclassname
()));
}
jint
instanceKlass
::
compute_modifier_flags
(
TRAPS
)
const
{
jint
instanceKlass
::
compute_modifier_flags
(
TRAPS
)
const
{
klassOop
k
=
as_klassOop
();
klassOop
k
=
as_klassOop
();
...
...
src/share/vm/oops/instanceKlass.hpp
浏览文件 @
8fdb95ad
...
@@ -303,6 +303,9 @@ class instanceKlass: public Klass {
...
@@ -303,6 +303,9 @@ class instanceKlass: public Klass {
inner_class_next_offset
=
4
inner_class_next_offset
=
4
};
};
// method override check
bool
is_override
(
methodHandle
super_method
,
Handle
targetclassloader
,
symbolHandle
targetclassname
,
TRAPS
);
// package
// package
bool
is_same_class_package
(
klassOop
class2
);
bool
is_same_class_package
(
klassOop
class2
);
bool
is_same_class_package
(
oop
classloader2
,
symbolOop
classname2
);
bool
is_same_class_package
(
oop
classloader2
,
symbolOop
classname2
);
...
...
src/share/vm/oops/klassVtable.cpp
浏览文件 @
8fdb95ad
此差异已折叠。
点击以展开。
src/share/vm/oops/klassVtable.hpp
浏览文件 @
8fdb95ad
...
@@ -70,8 +70,9 @@ class klassVtable : public ResourceObj {
...
@@ -70,8 +70,9 @@ class klassVtable : public ResourceObj {
// conputes vtable length (in words) and the number of miranda methods
// conputes vtable length (in words) and the number of miranda methods
static
void
compute_vtable_size_and_num_mirandas
(
int
&
vtable_length
,
int
&
num_miranda_methods
,
static
void
compute_vtable_size_and_num_mirandas
(
int
&
vtable_length
,
int
&
num_miranda_methods
,
klassOop
super
,
objArrayOop
methods
,
klassOop
super
,
objArrayOop
methods
,
AccessFlags
class_flags
,
oop
classloader
,
AccessFlags
class_flags
,
Handle
classloader
,
symbolOop
classname
,
objArrayOop
local_interfaces
);
symbolHandle
classname
,
objArrayOop
local_interfaces
,
TRAPS
);
// RedefineClasses() API support:
// RedefineClasses() API support:
// If any entry of this vtable points to any of old_methods,
// If any entry of this vtable points to any of old_methods,
...
@@ -111,14 +112,16 @@ class klassVtable : public ResourceObj {
...
@@ -111,14 +112,16 @@ class klassVtable : public ResourceObj {
protected:
protected:
friend
class
vtableEntry
;
friend
class
vtableEntry
;
private:
private:
enum
{
VTABLE_TRANSITIVE_OVERRIDE_VERSION
=
51
}
;
void
copy_vtable_to
(
vtableEntry
*
start
);
void
copy_vtable_to
(
vtableEntry
*
start
);
int
initialize_from_super
(
KlassHandle
super
);
int
initialize_from_super
(
KlassHandle
super
);
int
index_of
(
methodOop
m
,
int
len
)
const
;
// same as index_of, but search only up to len
int
index_of
(
methodOop
m
,
int
len
)
const
;
// same as index_of, but search only up to len
void
put_method_at
(
methodOop
m
,
int
index
);
void
put_method_at
(
methodOop
m
,
int
index
);
static
bool
needs_new_vtable_entry
(
methodOop
m
,
klassOop
super
,
oop
classloader
,
symbolOop
classname
,
AccessFlags
access_flags
);
static
bool
needs_new_vtable_entry
(
methodHandle
m
,
klassOop
super
,
Handle
classloader
,
symbolHandle
classname
,
AccessFlags
access_flags
,
TRAPS
);
AccessType
vtable_accessibility_at
(
int
i
);
bool
update_super_vtable
(
instanceKlass
*
klass
,
methodHandle
target_method
,
int
super_vtable_len
,
bool
checkconstraints
,
TRAPS
);
bool
update_inherited_vtable
(
instanceKlass
*
klass
,
methodHandle
target_method
,
int
super_vtable_len
,
bool
checkconstraints
,
TRAPS
);
instanceKlass
*
find_transitive_override
(
instanceKlass
*
initialsuper
,
methodHandle
target_method
,
int
vtable_index
,
Handle
target_loader
,
symbolHandle
target_classname
,
Thread
*
THREAD
);
// support for miranda methods
// support for miranda methods
bool
is_miranda_entry_at
(
int
i
);
bool
is_miranda_entry_at
(
int
i
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录