Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
6f7ef75c
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看板
提交
6f7ef75c
编写于
11月 29, 2012
作者:
C
cjplummer
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
a8acad24
9af6e93d
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
144 addition
and
70 deletion
+144
-70
agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java
...t/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java
+29
-7
agent/src/share/classes/sun/jvm/hotspot/oops/Method.java
agent/src/share/classes/sun/jvm/hotspot/oops/Method.java
+1
-4
src/cpu/sparc/vm/cppInterpreter_sparc.cpp
src/cpu/sparc/vm/cppInterpreter_sparc.cpp
+6
-4
src/cpu/sparc/vm/interp_masm_sparc.cpp
src/cpu/sparc/vm/interp_masm_sparc.cpp
+2
-1
src/cpu/sparc/vm/templateInterpreter_sparc.cpp
src/cpu/sparc/vm/templateInterpreter_sparc.cpp
+3
-2
src/cpu/x86/vm/cppInterpreter_x86.cpp
src/cpu/x86/vm/cppInterpreter_x86.cpp
+8
-8
src/share/vm/classfile/classFileParser.cpp
src/share/vm/classfile/classFileParser.cpp
+1
-2
src/share/vm/classfile/defaultMethods.cpp
src/share/vm/classfile/defaultMethods.cpp
+1
-2
src/share/vm/oops/constMethod.cpp
src/share/vm/oops/constMethod.cpp
+39
-16
src/share/vm/oops/constMethod.hpp
src/share/vm/oops/constMethod.hpp
+40
-11
src/share/vm/oops/method.cpp
src/share/vm/oops/method.cpp
+5
-1
src/share/vm/oops/method.hpp
src/share/vm/oops/method.hpp
+7
-10
src/share/vm/runtime/vmStructs.cpp
src/share/vm/runtime/vmStructs.cpp
+2
-2
未找到文件。
agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java
浏览文件 @
6f7ef75c
...
@@ -48,6 +48,7 @@ public class ConstMethod extends VMObject {
...
@@ -48,6 +48,7 @@ public class ConstMethod extends VMObject {
private
static
int
HAS_CHECKED_EXCEPTIONS
;
private
static
int
HAS_CHECKED_EXCEPTIONS
;
private
static
int
HAS_LOCALVARIABLE_TABLE
;
private
static
int
HAS_LOCALVARIABLE_TABLE
;
private
static
int
HAS_EXCEPTION_TABLE
;
private
static
int
HAS_EXCEPTION_TABLE
;
private
static
int
HAS_GENERIC_SIGNATURE
;
private
static
synchronized
void
initialize
(
TypeDataBase
db
)
throws
WrongTypeException
{
private
static
synchronized
void
initialize
(
TypeDataBase
db
)
throws
WrongTypeException
{
Type
type
=
db
.
lookupType
(
"ConstMethod"
);
Type
type
=
db
.
lookupType
(
"ConstMethod"
);
...
@@ -60,13 +61,14 @@ public class ConstMethod extends VMObject {
...
@@ -60,13 +61,14 @@ public class ConstMethod extends VMObject {
HAS_CHECKED_EXCEPTIONS
=
db
.
lookupIntConstant
(
"ConstMethod::_has_checked_exceptions"
).
intValue
();
HAS_CHECKED_EXCEPTIONS
=
db
.
lookupIntConstant
(
"ConstMethod::_has_checked_exceptions"
).
intValue
();
HAS_LOCALVARIABLE_TABLE
=
db
.
lookupIntConstant
(
"ConstMethod::_has_localvariable_table"
).
intValue
();
HAS_LOCALVARIABLE_TABLE
=
db
.
lookupIntConstant
(
"ConstMethod::_has_localvariable_table"
).
intValue
();
HAS_EXCEPTION_TABLE
=
db
.
lookupIntConstant
(
"ConstMethod::_has_exception_table"
).
intValue
();
HAS_EXCEPTION_TABLE
=
db
.
lookupIntConstant
(
"ConstMethod::_has_exception_table"
).
intValue
();
HAS_GENERIC_SIGNATURE
=
db
.
lookupIntConstant
(
"ConstMethod::_has_generic_signature"
).
intValue
();
// Size of Java bytecodes allocated immediately after ConstMethod*.
// Size of Java bytecodes allocated immediately after ConstMethod*.
codeSize
=
new
CIntField
(
type
.
getCIntegerField
(
"_code_size"
),
0
);
codeSize
=
new
CIntField
(
type
.
getCIntegerField
(
"_code_size"
),
0
);
nameIndex
=
new
CIntField
(
type
.
getCIntegerField
(
"_name_index"
),
0
);
nameIndex
=
new
CIntField
(
type
.
getCIntegerField
(
"_name_index"
),
0
);
signatureIndex
=
new
CIntField
(
type
.
getCIntegerField
(
"_signature_index"
),
0
);
signatureIndex
=
new
CIntField
(
type
.
getCIntegerField
(
"_signature_index"
),
0
);
genericSignatureIndex
=
new
CIntField
(
type
.
getCIntegerField
(
"_generic_signature_index"
),
0
);
idnum
=
new
CIntField
(
type
.
getCIntegerField
(
"_method_idnum"
),
0
);
idnum
=
new
CIntField
(
type
.
getCIntegerField
(
"_method_idnum"
),
0
);
maxStack
=
new
CIntField
(
type
.
getCIntegerField
(
"_max_stack"
),
0
);
// start of byte code
// start of byte code
bytecodeOffset
=
type
.
getSize
();
bytecodeOffset
=
type
.
getSize
();
...
@@ -92,8 +94,8 @@ public class ConstMethod extends VMObject {
...
@@ -92,8 +94,8 @@ public class ConstMethod extends VMObject {
private
static
CIntField
codeSize
;
private
static
CIntField
codeSize
;
private
static
CIntField
nameIndex
;
private
static
CIntField
nameIndex
;
private
static
CIntField
signatureIndex
;
private
static
CIntField
signatureIndex
;
private
static
CIntField
genericSignatureIndex
;
private
static
CIntField
idnum
;
private
static
CIntField
idnum
;
private
static
CIntField
maxStack
;
// start of bytecode
// start of bytecode
private
static
long
bytecodeOffset
;
private
static
long
bytecodeOffset
;
...
@@ -134,13 +136,21 @@ public class ConstMethod extends VMObject {
...
@@ -134,13 +136,21 @@ public class ConstMethod extends VMObject {
}
}
public
long
getGenericSignatureIndex
()
{
public
long
getGenericSignatureIndex
()
{
return
genericSignatureIndex
.
getValue
(
this
);
if
(
hasGenericSignature
())
{
return
getAddress
().
getCIntegerAt
(
offsetOfGenericSignatureIndex
(),
2
,
true
);
}
else
{
return
0
;
}
}
}
public
long
getIdNum
()
{
public
long
getIdNum
()
{
return
idnum
.
getValue
(
this
);
return
idnum
.
getValue
(
this
);
}
}
public
long
getMaxStack
()
{
return
maxStack
.
getValue
(
this
);
}
public
Symbol
getName
()
{
public
Symbol
getName
()
{
return
getMethod
().
getName
();
return
getMethod
().
getName
();
}
}
...
@@ -235,8 +245,8 @@ public class ConstMethod extends VMObject {
...
@@ -235,8 +245,8 @@ public class ConstMethod extends VMObject {
visitor
.
doCInt
(
codeSize
,
true
);
visitor
.
doCInt
(
codeSize
,
true
);
visitor
.
doCInt
(
nameIndex
,
true
);
visitor
.
doCInt
(
nameIndex
,
true
);
visitor
.
doCInt
(
signatureIndex
,
true
);
visitor
.
doCInt
(
signatureIndex
,
true
);
visitor
.
doCInt
(
genericSignatureIndex
,
true
);
visitor
.
doCInt
(
codeSize
,
true
);
visitor
.
doCInt
(
codeSize
,
true
);
visitor
.
doCInt
(
maxStack
,
true
);
}
}
// Accessors
// Accessors
...
@@ -353,6 +363,10 @@ public class ConstMethod extends VMObject {
...
@@ -353,6 +363,10 @@ public class ConstMethod extends VMObject {
return
ret
;
return
ret
;
}
}
private
boolean
hasGenericSignature
()
{
return
(
getFlags
()
&
HAS_GENERIC_SIGNATURE
)
!=
0
;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Internals only below this point
// Internals only below this point
...
@@ -377,10 +391,16 @@ public class ConstMethod extends VMObject {
...
@@ -377,10 +391,16 @@ public class ConstMethod extends VMObject {
return
getSize
()
*
VM
.
getVM
().
getObjectHeap
().
getOopSize
()
-
2
;
return
getSize
()
*
VM
.
getVM
().
getObjectHeap
().
getOopSize
()
-
2
;
}
}
private
long
offsetOfCheckedExceptionsLength
()
{
// Offset of the generic signature index
private
long
offsetOfGenericSignatureIndex
()
{
return
offsetOfLastU2Element
();
return
offsetOfLastU2Element
();
}
}
private
long
offsetOfCheckedExceptionsLength
()
{
return
hasGenericSignature
()
?
offsetOfLastU2Element
()
-
2
:
offsetOfLastU2Element
();
}
private
int
getCheckedExceptionsLength
()
{
private
int
getCheckedExceptionsLength
()
{
if
(
hasCheckedExceptions
())
{
if
(
hasCheckedExceptions
())
{
return
(
int
)
getAddress
().
getCIntegerAt
(
offsetOfCheckedExceptionsLength
(),
2
,
true
);
return
(
int
)
getAddress
().
getCIntegerAt
(
offsetOfCheckedExceptionsLength
(),
2
,
true
);
...
@@ -431,7 +451,8 @@ public class ConstMethod extends VMObject {
...
@@ -431,7 +451,8 @@ public class ConstMethod extends VMObject {
}
else
if
(
hasCheckedExceptions
())
{
}
else
if
(
hasCheckedExceptions
())
{
return
offsetOfCheckedExceptions
()
-
2
;
return
offsetOfCheckedExceptions
()
-
2
;
}
else
{
}
else
{
return
offsetOfLastU2Element
();
return
hasGenericSignature
()
?
offsetOfLastU2Element
()
-
2
:
offsetOfLastU2Element
();
}
}
}
}
...
@@ -460,7 +481,8 @@ public class ConstMethod extends VMObject {
...
@@ -460,7 +481,8 @@ public class ConstMethod extends VMObject {
if
(
hasCheckedExceptions
())
{
if
(
hasCheckedExceptions
())
{
return
offsetOfCheckedExceptions
()
-
2
;
return
offsetOfCheckedExceptions
()
-
2
;
}
else
{
}
else
{
return
offsetOfLastU2Element
();
return
hasGenericSignature
()
?
offsetOfLastU2Element
()
-
2
:
offsetOfLastU2Element
();
}
}
}
}
...
...
agent/src/share/classes/sun/jvm/hotspot/oops/Method.java
浏览文件 @
6f7ef75c
...
@@ -50,7 +50,6 @@ public class Method extends Metadata {
...
@@ -50,7 +50,6 @@ public class Method extends Metadata {
constMethod
=
type
.
getAddressField
(
"_constMethod"
);
constMethod
=
type
.
getAddressField
(
"_constMethod"
);
methodData
=
type
.
getAddressField
(
"_method_data"
);
methodData
=
type
.
getAddressField
(
"_method_data"
);
methodSize
=
new
CIntField
(
type
.
getCIntegerField
(
"_method_size"
),
0
);
methodSize
=
new
CIntField
(
type
.
getCIntegerField
(
"_method_size"
),
0
);
maxStack
=
new
CIntField
(
type
.
getCIntegerField
(
"_max_stack"
),
0
);
maxLocals
=
new
CIntField
(
type
.
getCIntegerField
(
"_max_locals"
),
0
);
maxLocals
=
new
CIntField
(
type
.
getCIntegerField
(
"_max_locals"
),
0
);
sizeOfParameters
=
new
CIntField
(
type
.
getCIntegerField
(
"_size_of_parameters"
),
0
);
sizeOfParameters
=
new
CIntField
(
type
.
getCIntegerField
(
"_size_of_parameters"
),
0
);
accessFlags
=
new
CIntField
(
type
.
getCIntegerField
(
"_access_flags"
),
0
);
accessFlags
=
new
CIntField
(
type
.
getCIntegerField
(
"_access_flags"
),
0
);
...
@@ -84,7 +83,6 @@ public class Method extends Metadata {
...
@@ -84,7 +83,6 @@ public class Method extends Metadata {
private
static
AddressField
constMethod
;
private
static
AddressField
constMethod
;
private
static
AddressField
methodData
;
private
static
AddressField
methodData
;
private
static
CIntField
methodSize
;
private
static
CIntField
methodSize
;
private
static
CIntField
maxStack
;
private
static
CIntField
maxLocals
;
private
static
CIntField
maxLocals
;
private
static
CIntField
sizeOfParameters
;
private
static
CIntField
sizeOfParameters
;
private
static
CIntField
accessFlags
;
private
static
CIntField
accessFlags
;
...
@@ -135,7 +133,7 @@ public class Method extends Metadata {
...
@@ -135,7 +133,7 @@ public class Method extends Metadata {
}
}
/** WARNING: this is in words, not useful in this system; use getObjectSize() instead */
/** WARNING: this is in words, not useful in this system; use getObjectSize() instead */
public
long
getMethodSize
()
{
return
methodSize
.
getValue
(
this
);
}
public
long
getMethodSize
()
{
return
methodSize
.
getValue
(
this
);
}
public
long
getMaxStack
()
{
return
maxStack
.
getValue
(
this
);
}
public
long
getMaxStack
()
{
return
getConstMethod
().
getMaxStack
();
}
public
long
getMaxLocals
()
{
return
maxLocals
.
getValue
(
this
);
}
public
long
getMaxLocals
()
{
return
maxLocals
.
getValue
(
this
);
}
public
long
getSizeOfParameters
()
{
return
sizeOfParameters
.
getValue
(
this
);
}
public
long
getSizeOfParameters
()
{
return
sizeOfParameters
.
getValue
(
this
);
}
public
long
getNameIndex
()
{
return
getConstMethod
().
getNameIndex
();
}
public
long
getNameIndex
()
{
return
getConstMethod
().
getNameIndex
();
}
...
@@ -284,7 +282,6 @@ public class Method extends Metadata {
...
@@ -284,7 +282,6 @@ public class Method extends Metadata {
public
void
iterateFields
(
MetadataVisitor
visitor
)
{
public
void
iterateFields
(
MetadataVisitor
visitor
)
{
visitor
.
doCInt
(
methodSize
,
true
);
visitor
.
doCInt
(
methodSize
,
true
);
visitor
.
doCInt
(
maxStack
,
true
);
visitor
.
doCInt
(
maxLocals
,
true
);
visitor
.
doCInt
(
maxLocals
,
true
);
visitor
.
doCInt
(
sizeOfParameters
,
true
);
visitor
.
doCInt
(
sizeOfParameters
,
true
);
visitor
.
doCInt
(
accessFlags
,
true
);
visitor
.
doCInt
(
accessFlags
,
true
);
...
...
src/cpu/sparc/vm/cppInterpreter_sparc.cpp
浏览文件 @
6f7ef75c
...
@@ -1048,7 +1048,6 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
...
@@ -1048,7 +1048,6 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
const
Address
constMethod
(
G5_method
,
0
,
in_bytes
(
Method
::
const_offset
()));
const
Address
constMethod
(
G5_method
,
0
,
in_bytes
(
Method
::
const_offset
()));
const
Address
access_flags
(
G5_method
,
0
,
in_bytes
(
Method
::
access_flags_offset
()));
const
Address
access_flags
(
G5_method
,
0
,
in_bytes
(
Method
::
access_flags_offset
()));
const
Address
size_of_parameters
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_parameters_offset
()));
const
Address
size_of_parameters
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_parameters_offset
()));
const
Address
max_stack
(
G5_method
,
0
,
in_bytes
(
Method
::
max_stack_offset
()));
const
Address
size_of_locals
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_locals_offset
()));
const
Address
size_of_locals
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_locals_offset
()));
// slop factor is two extra slots on the expression stack so that
// slop factor is two extra slots on the expression stack so that
...
@@ -1070,7 +1069,9 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
...
@@ -1070,7 +1069,9 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
__
lduh
(
size_of_parameters
,
Gtmp
);
__
lduh
(
size_of_parameters
,
Gtmp
);
__
calc_mem_param_words
(
Gtmp
,
Gtmp
);
// space for native call parameters passed on the stack in words
__
calc_mem_param_words
(
Gtmp
,
Gtmp
);
// space for native call parameters passed on the stack in words
}
else
{
}
else
{
__
lduh
(
max_stack
,
Gtmp
);
// Full size expression stack
// Full size expression stack
__
ld_ptr
(
constMethod
,
Gtmp
);
__
lduh
(
Gtmp
,
in_bytes
(
ConstMethod
::
max_stack_offset
()),
Gtmp
);
}
}
__
add
(
Gtmp
,
fixed_size
,
Gtmp
);
// plus the fixed portion
__
add
(
Gtmp
,
fixed_size
,
Gtmp
);
// plus the fixed portion
...
@@ -1206,7 +1207,9 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
...
@@ -1206,7 +1207,9 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
__
sub
(
O2
,
wordSize
,
O2
);
// prepush
__
sub
(
O2
,
wordSize
,
O2
);
// prepush
__
st_ptr
(
O2
,
XXX_STATE
(
_stack
));
// PREPUSH
__
st_ptr
(
O2
,
XXX_STATE
(
_stack
));
// PREPUSH
__
lduh
(
max_stack
,
O3
);
// Full size expression stack
// Full size expression stack
__
ld_ptr
(
constMethod
,
O3
);
__
lduh
(
O3
,
in_bytes
(
ConstMethod
::
max_stack_offset
()),
O3
);
guarantee
(
!
EnableInvokeDynamic
,
"no support yet for java.lang.invoke.MethodHandle"
);
//6815692
guarantee
(
!
EnableInvokeDynamic
,
"no support yet for java.lang.invoke.MethodHandle"
);
//6815692
//6815692//if (EnableInvokeDynamic)
//6815692//if (EnableInvokeDynamic)
//6815692// __ inc(O3, Method::extra_stack_entries());
//6815692// __ inc(O3, Method::extra_stack_entries());
...
@@ -1539,7 +1542,6 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) {
...
@@ -1539,7 +1542,6 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) {
const
Address
constMethod
(
G5_method
,
0
,
in_bytes
(
Method
::
const_offset
()));
const
Address
constMethod
(
G5_method
,
0
,
in_bytes
(
Method
::
const_offset
()));
const
Address
access_flags
(
G5_method
,
0
,
in_bytes
(
Method
::
access_flags_offset
()));
const
Address
access_flags
(
G5_method
,
0
,
in_bytes
(
Method
::
access_flags_offset
()));
const
Address
size_of_parameters
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_parameters_offset
()));
const
Address
size_of_parameters
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_parameters_offset
()));
const
Address
max_stack
(
G5_method
,
0
,
in_bytes
(
Method
::
max_stack_offset
()));
const
Address
size_of_locals
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_locals_offset
()));
const
Address
size_of_locals
(
G5_method
,
0
,
in_bytes
(
Method
::
size_of_locals_offset
()));
address
entry_point
=
__
pc
();
address
entry_point
=
__
pc
();
...
...
src/cpu/sparc/vm/interp_masm_sparc.cpp
浏览文件 @
6f7ef75c
...
@@ -518,7 +518,8 @@ void InterpreterMacroAssembler::empty_expression_stack() {
...
@@ -518,7 +518,8 @@ void InterpreterMacroAssembler::empty_expression_stack() {
delayed
()
->
nop
();
delayed
()
->
nop
();
// Compute max expression stack+register save area
// Compute max expression stack+register save area
lduh
(
Lmethod
,
in_bytes
(
Method
::
max_stack_offset
()),
Gframe_size
);
// Load max stack.
ld_ptr
(
Lmethod
,
in_bytes
(
Method
::
const_offset
()),
Gframe_size
);
lduh
(
Gframe_size
,
in_bytes
(
ConstMethod
::
max_stack_offset
()),
Gframe_size
);
// Load max stack.
add
(
Gframe_size
,
frame
::
memory_parameter_word_sp_offset
,
Gframe_size
);
add
(
Gframe_size
,
frame
::
memory_parameter_word_sp_offset
,
Gframe_size
);
//
//
...
...
src/cpu/sparc/vm/templateInterpreter_sparc.cpp
浏览文件 @
6f7ef75c
...
@@ -496,7 +496,7 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
...
@@ -496,7 +496,7 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
const
Address
size_of_parameters
(
G5_method
,
Method
::
size_of_parameters_offset
());
const
Address
size_of_parameters
(
G5_method
,
Method
::
size_of_parameters_offset
());
const
Address
size_of_locals
(
G5_method
,
Method
::
size_of_locals_offset
());
const
Address
size_of_locals
(
G5_method
,
Method
::
size_of_locals_offset
());
const
Address
max_stack
(
G5_method
,
Method
::
max_stack
_offset
());
const
Address
constMethod
(
G5_method
,
Method
::
const
_offset
());
int
rounded_vm_local_words
=
round_to
(
frame
::
interpreter_frame_vm_local_words
,
WordsPerLong
);
int
rounded_vm_local_words
=
round_to
(
frame
::
interpreter_frame_vm_local_words
,
WordsPerLong
);
const
int
extra_space
=
const
int
extra_space
=
...
@@ -538,7 +538,8 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
...
@@ -538,7 +538,8 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
// see if the frame is greater than one page in size. If so,
// see if the frame is greater than one page in size. If so,
// then we need to verify there is enough stack space remaining
// then we need to verify there is enough stack space remaining
// Frame_size = (max_stack + extra_space) * BytesPerWord;
// Frame_size = (max_stack + extra_space) * BytesPerWord;
__
lduh
(
max_stack
,
Gframe_size
);
__
ld_ptr
(
constMethod
,
Gframe_size
);
__
lduh
(
Gframe_size
,
in_bytes
(
ConstMethod
::
max_stack_offset
()),
Gframe_size
);
__
add
(
Gframe_size
,
extra_space
,
Gframe_size
);
__
add
(
Gframe_size
,
extra_space
,
Gframe_size
);
__
round_to
(
Gframe_size
,
WordsPerLong
);
__
round_to
(
Gframe_size
,
WordsPerLong
);
__
sll
(
Gframe_size
,
Interpreter
::
logStackElementSize
,
Gframe_size
);
__
sll
(
Gframe_size
,
Interpreter
::
logStackElementSize
,
Gframe_size
);
...
...
src/cpu/x86/vm/cppInterpreter_x86.cpp
浏览文件 @
6f7ef75c
...
@@ -538,9 +538,9 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
...
@@ -538,9 +538,9 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
// compute full expression stack limit
// compute full expression stack limit
const
Address
size_of_stack
(
rbx
,
Method
::
max_stack_offset
());
const
int
extra_stack
=
0
;
//6815692//Method::extra_stack_words();
const
int
extra_stack
=
0
;
//6815692//Method::extra_stack_words();
__
load_unsigned_short
(
rdx
,
size_of_stack
);
// get size of expression stack in words
__
movptr
(
rdx
,
Address
(
rbx
,
Method
::
const_offset
()));
__
load_unsigned_short
(
rdx
,
Address
(
rdx
,
ConstMethod
::
max_stack_offset
()));
// get size of expression stack in words
__
negptr
(
rdx
);
// so we can subtract in next step
__
negptr
(
rdx
);
// so we can subtract in next step
// Allocate expression stack
// Allocate expression stack
__
lea
(
rsp
,
Address
(
rsp
,
rdx
,
Address
::
times_ptr
,
-
extra_stack
));
__
lea
(
rsp
,
Address
(
rsp
,
rdx
,
Address
::
times_ptr
,
-
extra_stack
));
...
@@ -682,12 +682,12 @@ void InterpreterGenerator::generate_stack_overflow_check(void) {
...
@@ -682,12 +682,12 @@ void InterpreterGenerator::generate_stack_overflow_check(void) {
const
Address
stack_size
(
thread
,
Thread
::
stack_size_offset
());
const
Address
stack_size
(
thread
,
Thread
::
stack_size_offset
());
// locals + overhead, in bytes
// locals + overhead, in bytes
const
Address
size_of_stack
(
rbx
,
Method
::
max_stack_offset
());
// Always give one monitor to allow us to start interp if sync method.
// Always give one monitor to allow us to start interp if sync method.
// Any additional monitors need a check when moving the expression stack
// Any additional monitors need a check when moving the expression stack
const
int
one_monitor
=
frame
::
interpreter_frame_monitor_size
()
*
wordSize
;
const
int
one_monitor
=
frame
::
interpreter_frame_monitor_size
()
*
wordSize
;
const
int
extra_stack
=
0
;
//6815692//Method::extra_stack_entries()
;
const
int
extra_stack
=
0
;
//6815692//Method::extra_stack_entries(
);
__
movptr
(
rax
,
Address
(
rbx
,
Method
::
const_offset
())
);
__
load_unsigned_short
(
rax
,
size_of_stack
);
// get size of expression stack in words
__
load_unsigned_short
(
rax
,
Address
(
rax
,
ConstMethod
::
max_stack_offset
()));
// get size of expression stack in words
__
lea
(
rax
,
Address
(
noreg
,
rax
,
Interpreter
::
stackElementScale
(),
extra_stack
+
one_monitor
));
__
lea
(
rax
,
Address
(
noreg
,
rax
,
Interpreter
::
stackElementScale
(),
extra_stack
+
one_monitor
));
__
lea
(
rax
,
Address
(
rax
,
rdx
,
Interpreter
::
stackElementScale
(),
overhead_size
));
__
lea
(
rax
,
Address
(
rax
,
rdx
,
Interpreter
::
stackElementScale
(),
overhead_size
));
...
...
src/share/vm/classfile/classFileParser.cpp
浏览文件 @
6f7ef75c
...
@@ -2184,7 +2184,7 @@ methodHandle ClassFileParser::parse_method(ClassLoaderData* loader_data,
...
@@ -2184,7 +2184,7 @@ methodHandle ClassFileParser::parse_method(ClassLoaderData* loader_data,
Method
*
m
=
Method
::
allocate
(
Method
*
m
=
Method
::
allocate
(
loader_data
,
code_length
,
access_flags
,
linenumber_table_length
,
loader_data
,
code_length
,
access_flags
,
linenumber_table_length
,
total_lvt_length
,
exception_table_length
,
checked_exceptions_length
,
total_lvt_length
,
exception_table_length
,
checked_exceptions_length
,
ConstMethod
::
NORMAL
,
CHECK_
(
nullHandle
));
generic_signature_index
,
ConstMethod
::
NORMAL
,
CHECK_
(
nullHandle
));
ClassLoadingService
::
add_class_method_size
(
m
->
size
()
*
HeapWordSize
);
ClassLoadingService
::
add_class_method_size
(
m
->
size
()
*
HeapWordSize
);
...
@@ -2192,7 +2192,6 @@ methodHandle ClassFileParser::parse_method(ClassLoaderData* loader_data,
...
@@ -2192,7 +2192,6 @@ methodHandle ClassFileParser::parse_method(ClassLoaderData* loader_data,
m
->
set_constants
(
cp
());
m
->
set_constants
(
cp
());
m
->
set_name_index
(
name_index
);
m
->
set_name_index
(
name_index
);
m
->
set_signature_index
(
signature_index
);
m
->
set_signature_index
(
signature_index
);
m
->
set_generic_signature_index
(
generic_signature_index
);
#ifdef CC_INTERP
#ifdef CC_INTERP
// hmm is there a gc issue here??
// hmm is there a gc issue here??
ResultTypeFinder
rtf
(
cp
->
symbol_at
(
signature_index
));
ResultTypeFinder
rtf
(
cp
->
symbol_at
(
signature_index
));
...
...
src/share/vm/classfile/defaultMethods.cpp
浏览文件 @
6f7ef75c
...
@@ -1148,12 +1148,11 @@ static Method* new_method(
...
@@ -1148,12 +1148,11 @@ static Method* new_method(
int
code_length
=
bytecodes
->
length
();
int
code_length
=
bytecodes
->
length
();
Method
*
m
=
Method
::
allocate
(
cp
->
pool_holder
()
->
class_loader_data
(),
Method
*
m
=
Method
::
allocate
(
cp
->
pool_holder
()
->
class_loader_data
(),
code_length
,
flags
,
0
,
0
,
0
,
0
,
mt
,
CHECK_NULL
);
code_length
,
flags
,
0
,
0
,
0
,
0
,
0
,
mt
,
CHECK_NULL
);
m
->
set_constants
(
NULL
);
// This will get filled in later
m
->
set_constants
(
NULL
);
// This will get filled in later
m
->
set_name_index
(
cp
->
utf8
(
name
));
m
->
set_name_index
(
cp
->
utf8
(
name
));
m
->
set_signature_index
(
cp
->
utf8
(
sig
));
m
->
set_signature_index
(
cp
->
utf8
(
sig
));
m
->
set_generic_signature_index
(
0
);
#ifdef CC_INTERP
#ifdef CC_INTERP
ResultTypeFinder
rtf
(
sig
);
ResultTypeFinder
rtf
(
sig
);
m
->
set_result_index
(
rtf
.
type
());
m
->
set_result_index
(
rtf
.
type
());
...
...
src/share/vm/oops/constMethod.cpp
浏览文件 @
6f7ef75c
...
@@ -39,16 +39,19 @@ ConstMethod* ConstMethod::allocate(ClassLoaderData* loader_data,
...
@@ -39,16 +39,19 @@ ConstMethod* ConstMethod::allocate(ClassLoaderData* loader_data,
int
localvariable_table_length
,
int
localvariable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
,
int
checked_exceptions_length
,
u2
generic_signature_index
,
MethodType
method_type
,
MethodType
method_type
,
TRAPS
)
{
TRAPS
)
{
int
size
=
ConstMethod
::
size
(
byte_code_size
,
int
size
=
ConstMethod
::
size
(
byte_code_size
,
compressed_line_number_size
,
compressed_line_number_size
,
localvariable_table_length
,
localvariable_table_length
,
exception_table_length
,
exception_table_length
,
checked_exceptions_length
);
checked_exceptions_length
,
generic_signature_index
);
return
new
(
loader_data
,
size
,
true
,
THREAD
)
ConstMethod
(
return
new
(
loader_data
,
size
,
true
,
THREAD
)
ConstMethod
(
byte_code_size
,
compressed_line_number_size
,
localvariable_table_length
,
byte_code_size
,
compressed_line_number_size
,
localvariable_table_length
,
exception_table_length
,
checked_exceptions_length
,
method_type
,
size
);
exception_table_length
,
checked_exceptions_length
,
generic_signature_index
,
method_type
,
size
);
}
}
ConstMethod
::
ConstMethod
(
int
byte_code_size
,
ConstMethod
::
ConstMethod
(
int
byte_code_size
,
...
@@ -56,6 +59,7 @@ ConstMethod::ConstMethod(int byte_code_size,
...
@@ -56,6 +59,7 @@ ConstMethod::ConstMethod(int byte_code_size,
int
localvariable_table_length
,
int
localvariable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
,
int
checked_exceptions_length
,
u2
generic_signature_index
,
MethodType
method_type
,
MethodType
method_type
,
int
size
)
{
int
size
)
{
...
@@ -66,7 +70,8 @@ ConstMethod::ConstMethod(int byte_code_size,
...
@@ -66,7 +70,8 @@ ConstMethod::ConstMethod(int byte_code_size,
set_stackmap_data
(
NULL
);
set_stackmap_data
(
NULL
);
set_code_size
(
byte_code_size
);
set_code_size
(
byte_code_size
);
set_constMethod_size
(
size
);
set_constMethod_size
(
size
);
set_inlined_tables_length
(
checked_exceptions_length
,
set_inlined_tables_length
(
generic_signature_index
,
checked_exceptions_length
,
compressed_line_number_size
,
compressed_line_number_size
,
localvariable_table_length
,
localvariable_table_length
,
exception_table_length
);
exception_table_length
);
...
@@ -90,7 +95,8 @@ int ConstMethod::size(int code_size,
...
@@ -90,7 +95,8 @@ int ConstMethod::size(int code_size,
int
compressed_line_number_size
,
int
compressed_line_number_size
,
int
local_variable_table_length
,
int
local_variable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
)
{
int
checked_exceptions_length
,
u2
generic_signature_index
)
{
int
extra_bytes
=
code_size
;
int
extra_bytes
=
code_size
;
if
(
compressed_line_number_size
>
0
)
{
if
(
compressed_line_number_size
>
0
)
{
extra_bytes
+=
compressed_line_number_size
;
extra_bytes
+=
compressed_line_number_size
;
...
@@ -108,6 +114,9 @@ int ConstMethod::size(int code_size,
...
@@ -108,6 +114,9 @@ int ConstMethod::size(int code_size,
extra_bytes
+=
sizeof
(
u2
);
extra_bytes
+=
sizeof
(
u2
);
extra_bytes
+=
exception_table_length
*
sizeof
(
ExceptionTableElement
);
extra_bytes
+=
exception_table_length
*
sizeof
(
ExceptionTableElement
);
}
}
if
(
generic_signature_index
!=
0
)
{
extra_bytes
+=
sizeof
(
u2
);
}
int
extra_words
=
align_size_up
(
extra_bytes
,
BytesPerWord
)
/
BytesPerWord
;
int
extra_words
=
align_size_up
(
extra_bytes
,
BytesPerWord
)
/
BytesPerWord
;
return
align_object_size
(
header_size
()
+
extra_words
);
return
align_object_size
(
header_size
()
+
extra_words
);
}
}
...
@@ -125,20 +134,29 @@ u_char* ConstMethod::compressed_linenumber_table() const {
...
@@ -125,20 +134,29 @@ u_char* ConstMethod::compressed_linenumber_table() const {
return
code_end
();
return
code_end
();
}
}
u2
*
ConstMethod
::
checked_exceptions_length
_addr
()
const
{
u2
*
ConstMethod
::
generic_signature_index
_addr
()
const
{
// Located at the end of the constMethod.
// Located at the end of the constMethod.
assert
(
has_
checked_exceptions
(),
"called only if table is present
"
);
assert
(
has_
generic_signature
(),
"called only if generic signature exists
"
);
return
last_u2_element
();
return
last_u2_element
();
}
}
u2
*
ConstMethod
::
checked_exceptions_length_addr
()
const
{
// Located immediately before the generic signature index.
assert
(
has_checked_exceptions
(),
"called only if table is present"
);
return
has_generic_signature
()
?
(
last_u2_element
()
-
1
)
:
last_u2_element
();
}
u2
*
ConstMethod
::
exception_table_length_addr
()
const
{
u2
*
ConstMethod
::
exception_table_length_addr
()
const
{
assert
(
has_exception_handler
(),
"called only if table is present"
);
assert
(
has_exception_handler
(),
"called only if table is present"
);
if
(
has_checked_exceptions
())
{
if
(
has_checked_exceptions
())
{
// If checked_exception present, locate immediately before them.
// If checked_exception present, locate immediately before them.
return
(
u2
*
)
checked_exceptions_start
()
-
1
;
return
(
u2
*
)
checked_exceptions_start
()
-
1
;
}
else
{
}
else
{
// Else, the exception table is at the end of the constMethod.
// Else, the exception table is at the end of the constMethod or
return
last_u2_element
();
// immediately before the generic signature index.
return
has_generic_signature
()
?
(
last_u2_element
()
-
1
)
:
last_u2_element
();
}
}
}
}
...
@@ -152,25 +170,30 @@ u2* ConstMethod::localvariable_table_length_addr() const {
...
@@ -152,25 +170,30 @@ u2* ConstMethod::localvariable_table_length_addr() const {
// If checked_exception present, locate immediately before them.
// If checked_exception present, locate immediately before them.
return
(
u2
*
)
checked_exceptions_start
()
-
1
;
return
(
u2
*
)
checked_exceptions_start
()
-
1
;
}
else
{
}
else
{
// Else, the linenumber table is at the end of the constMethod.
// Else, the linenumber table is at the end of the constMethod or
return
last_u2_element
();
// immediately before the generic signature index.
return
has_generic_signature
()
?
(
last_u2_element
()
-
1
)
:
last_u2_element
();
}
}
}
}
}
}
// Update the flags to indicate the presence of these optional fields.
// Update the flags to indicate the presence of these optional fields.
void
ConstMethod
::
set_inlined_tables_length
(
void
ConstMethod
::
set_inlined_tables_length
(
u2
generic_signature_index
,
int
checked_exceptions_len
,
int
checked_exceptions_len
,
int
compressed_line_number_size
,
int
compressed_line_number_size
,
int
localvariable_table_len
,
int
localvariable_table_len
,
int
exception_table_len
)
{
int
exception_table_len
)
{
// Must be done in the order below, otherwise length_addr accessors
// Must be done in the order below, otherwise length_addr accessors
// will not work. Only set bit in header if length is positive.
// will not work. Only set bit in header if length is positive.
assert
(
_flags
==
0
,
"Error"
);
assert
(
_flags
==
0
,
"Error"
);
if
(
compressed_line_number_size
>
0
)
{
if
(
compressed_line_number_size
>
0
)
{
_flags
|=
_has_linenumber_table
;
_flags
|=
_has_linenumber_table
;
}
}
if
(
generic_signature_index
!=
0
)
{
_flags
|=
_has_generic_signature
;
*
(
generic_signature_index_addr
())
=
generic_signature_index
;
}
if
(
checked_exceptions_len
>
0
)
{
if
(
checked_exceptions_len
>
0
)
{
_flags
|=
_has_checked_exceptions
;
_flags
|=
_has_checked_exceptions
;
*
(
checked_exceptions_length_addr
())
=
checked_exceptions_len
;
*
(
checked_exceptions_length_addr
())
=
checked_exceptions_len
;
...
...
src/share/vm/oops/constMethod.hpp
浏览文件 @
6f7ef75c
...
@@ -45,7 +45,7 @@
...
@@ -45,7 +45,7 @@
// | constMethod_size |
// | constMethod_size |
// | interp_kind | flags | code_size |
// | interp_kind | flags | code_size |
// | name index | signature index |
// | name index | signature index |
// | method_idnum |
generic_signature_index
|
// | method_idnum |
max_stack
|
// |------------------------------------------------------|
// |------------------------------------------------------|
// | |
// | |
// | byte codes |
// | byte codes |
...
@@ -55,26 +55,29 @@
...
@@ -55,26 +55,29 @@
// | (see class CompressedLineNumberReadStream) |
// | (see class CompressedLineNumberReadStream) |
// | (note that length is unknown until decompressed) |
// | (note that length is unknown until decompressed) |
// | (access flags bit tells whether table is present) |
// | (access flags bit tells whether table is present) |
// | (indexed from start of ConstMethod*) |
// | (indexed from start of ConstMethod*)
|
// | (elements not necessarily sorted!) |
// | (elements not necessarily sorted!) |
// |------------------------------------------------------|
// |------------------------------------------------------|
// | localvariable table elements + length (length last) |
// | localvariable table elements + length (length last) |
// | (length is u2, elements are 6-tuples of u2) |
// | (length is u2, elements are 6-tuples of u2) |
// | (see class LocalVariableTableElement) |
// | (see class LocalVariableTableElement) |
// | (access flags bit tells whether table is present) |
// | (access flags bit tells whether table is present) |
// | (indexed from end of ConstMethod*) |
// | (indexed from end of ConstMethod*)
|
// |------------------------------------------------------|
// |------------------------------------------------------|
// | exception table + length (length last) |
// | exception table + length (length last) |
// | (length is u2, elements are 4-tuples of u2) |
// | (length is u2, elements are 4-tuples of u2) |
// | (see class ExceptionTableElement) |
// | (see class ExceptionTableElement) |
// | (access flags bit tells whether table is present) |
// | (access flags bit tells whether table is present) |
// | (indexed from end of ConstMethod*) |
// | (indexed from end of ConstMethod*)
|
// |------------------------------------------------------|
// |------------------------------------------------------|
// | checked exceptions elements + length (length last) |
// | checked exceptions elements + length (length last) |
// | (length is u2, elements are u2) |
// | (length is u2, elements are u2) |
// | (see class CheckedExceptionElement) |
// | (see class CheckedExceptionElement) |
// | (access flags bit tells whether table is present) |
// | (access flags bit tells whether table is present) |
// | (indexed from end of ConstMethod*) |
// | (indexed from end of ConstMethod*) |
// |------------------------------------------------------|
// | generic signature index (u2) |
// | (indexed from start of constMethodOop) |
// |------------------------------------------------------|
// |------------------------------------------------------|
...
@@ -118,7 +121,8 @@ private:
...
@@ -118,7 +121,8 @@ private:
_has_checked_exceptions
=
2
,
_has_checked_exceptions
=
2
,
_has_localvariable_table
=
4
,
_has_localvariable_table
=
4
,
_has_exception_table
=
8
,
_has_exception_table
=
8
,
_is_overpass
=
16
_has_generic_signature
=
16
,
_is_overpass
=
32
};
};
// Bit vector of signature
// Bit vector of signature
...
@@ -145,7 +149,7 @@ private:
...
@@ -145,7 +149,7 @@ private:
u2
_method_idnum
;
// unique identification number for the method within the class
u2
_method_idnum
;
// unique identification number for the method within the class
// initially corresponds to the index into the methods array.
// initially corresponds to the index into the methods array.
// but this may change with redefinition
// but this may change with redefinition
u2
_
generic_signature_index
;
// Generic signature (index in constant pool, 0 if absent)
u2
_
max_stack
;
// Maximum number of entries on the expression stack
// Constructor
// Constructor
...
@@ -154,6 +158,7 @@ private:
...
@@ -154,6 +158,7 @@ private:
int
localvariable_table_length
,
int
localvariable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
,
int
checked_exceptions_length
,
u2
generic_signature_index
,
MethodType
is_overpass
,
MethodType
is_overpass
,
int
size
);
int
size
);
public:
public:
...
@@ -164,17 +169,22 @@ public:
...
@@ -164,17 +169,22 @@ public:
int
localvariable_table_length
,
int
localvariable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
,
int
checked_exceptions_length
,
u2
generic_signature_index
,
MethodType
mt
,
MethodType
mt
,
TRAPS
);
TRAPS
);
bool
is_constMethod
()
const
{
return
true
;
}
bool
is_constMethod
()
const
{
return
true
;
}
// Inlined tables
// Inlined tables
void
set_inlined_tables_length
(
int
checked_exceptions_len
,
void
set_inlined_tables_length
(
u2
generic_signature_index
,
int
checked_exceptions_len
,
int
compressed_line_number_size
,
int
compressed_line_number_size
,
int
localvariable_table_len
,
int
localvariable_table_len
,
int
exception_table_len
);
int
exception_table_len
);
bool
has_generic_signature
()
const
{
return
(
_flags
&
_has_generic_signature
)
!=
0
;
}
bool
has_linenumber_table
()
const
bool
has_linenumber_table
()
const
{
return
(
_flags
&
_has_linenumber_table
)
!=
0
;
}
{
return
(
_flags
&
_has_linenumber_table
)
!=
0
;
}
...
@@ -252,8 +262,18 @@ public:
...
@@ -252,8 +262,18 @@ public:
void
set_signature_index
(
int
index
)
{
_signature_index
=
index
;
}
void
set_signature_index
(
int
index
)
{
_signature_index
=
index
;
}
// generics support
// generics support
int
generic_signature_index
()
const
{
return
_generic_signature_index
;
}
int
generic_signature_index
()
const
{
void
set_generic_signature_index
(
int
index
)
{
_generic_signature_index
=
index
;
}
if
(
has_generic_signature
())
{
return
*
generic_signature_index_addr
();
}
else
{
return
0
;
}
}
void
set_generic_signature_index
(
u2
index
)
{
assert
(
has_generic_signature
(),
""
);
u2
*
addr
=
generic_signature_index_addr
();
*
addr
=
index
;
}
// Sizing
// Sizing
static
int
header_size
()
{
static
int
header_size
()
{
...
@@ -264,7 +284,8 @@ public:
...
@@ -264,7 +284,8 @@ public:
static
int
size
(
int
code_size
,
int
compressed_line_number_size
,
static
int
size
(
int
code_size
,
int
compressed_line_number_size
,
int
local_variable_table_length
,
int
local_variable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
);
int
checked_exceptions_length
,
u2
generic_signature_index
);
int
size
()
const
{
return
_constMethod_size
;}
int
size
()
const
{
return
_constMethod_size
;}
void
set_constMethod_size
(
int
size
)
{
_constMethod_size
=
size
;
}
void
set_constMethod_size
(
int
size
)
{
_constMethod_size
=
size
;
}
...
@@ -281,6 +302,7 @@ public:
...
@@ -281,6 +302,7 @@ public:
// linenumber table - note that length is unknown until decompression,
// linenumber table - note that length is unknown until decompression,
// see class CompressedLineNumberReadStream.
// see class CompressedLineNumberReadStream.
u_char
*
compressed_linenumber_table
()
const
;
// not preserved by gc
u_char
*
compressed_linenumber_table
()
const
;
// not preserved by gc
u2
*
generic_signature_index_addr
()
const
;
u2
*
checked_exceptions_length_addr
()
const
;
u2
*
checked_exceptions_length_addr
()
const
;
u2
*
localvariable_table_length_addr
()
const
;
u2
*
localvariable_table_length_addr
()
const
;
u2
*
exception_table_length_addr
()
const
;
u2
*
exception_table_length_addr
()
const
;
...
@@ -314,12 +336,19 @@ public:
...
@@ -314,12 +336,19 @@ public:
static
ByteSize
constants_offset
()
static
ByteSize
constants_offset
()
{
return
byte_offset_of
(
ConstMethod
,
_constants
);
}
{
return
byte_offset_of
(
ConstMethod
,
_constants
);
}
static
ByteSize
max_stack_offset
()
{
return
byte_offset_of
(
ConstMethod
,
_max_stack
);
}
// Unique id for the method
// Unique id for the method
static
const
u2
MAX_IDNUM
;
static
const
u2
MAX_IDNUM
;
static
const
u2
UNSET_IDNUM
;
static
const
u2
UNSET_IDNUM
;
u2
method_idnum
()
const
{
return
_method_idnum
;
}
u2
method_idnum
()
const
{
return
_method_idnum
;
}
void
set_method_idnum
(
u2
idnum
)
{
_method_idnum
=
idnum
;
}
void
set_method_idnum
(
u2
idnum
)
{
_method_idnum
=
idnum
;
}
// max stack
int
max_stack
()
const
{
return
_max_stack
;
}
void
set_max_stack
(
int
size
)
{
_max_stack
=
size
;
}
// Deallocation for RedefineClasses
// Deallocation for RedefineClasses
void
deallocate_contents
(
ClassLoaderData
*
loader_data
);
void
deallocate_contents
(
ClassLoaderData
*
loader_data
);
bool
is_klass
()
const
{
return
false
;
}
bool
is_klass
()
const
{
return
false
;
}
...
...
src/share/vm/oops/method.cpp
浏览文件 @
6f7ef75c
...
@@ -64,6 +64,7 @@ Method* Method::allocate(ClassLoaderData* loader_data,
...
@@ -64,6 +64,7 @@ Method* Method::allocate(ClassLoaderData* loader_data,
int
localvariable_table_length
,
int
localvariable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
,
int
checked_exceptions_length
,
u2
generic_signature_index
,
ConstMethod
::
MethodType
method_type
,
ConstMethod
::
MethodType
method_type
,
TRAPS
)
{
TRAPS
)
{
assert
(
!
access_flags
.
is_native
()
||
byte_code_size
==
0
,
assert
(
!
access_flags
.
is_native
()
||
byte_code_size
==
0
,
...
@@ -74,6 +75,7 @@ Method* Method::allocate(ClassLoaderData* loader_data,
...
@@ -74,6 +75,7 @@ Method* Method::allocate(ClassLoaderData* loader_data,
localvariable_table_length
,
localvariable_table_length
,
exception_table_length
,
exception_table_length
,
checked_exceptions_length
,
checked_exceptions_length
,
generic_signature_index
,
method_type
,
method_type
,
CHECK_NULL
);
CHECK_NULL
);
...
@@ -1034,7 +1036,7 @@ methodHandle Method::make_method_handle_intrinsic(vmIntrinsics::ID iid,
...
@@ -1034,7 +1036,7 @@ methodHandle Method::make_method_handle_intrinsic(vmIntrinsics::ID iid,
methodHandle
m
;
methodHandle
m
;
{
{
Method
*
m_oop
=
Method
::
allocate
(
loader_data
,
0
,
accessFlags_from
(
flags_bits
),
Method
*
m_oop
=
Method
::
allocate
(
loader_data
,
0
,
accessFlags_from
(
flags_bits
),
0
,
0
,
0
,
0
,
ConstMethod
::
NORMAL
,
CHECK_
(
empty
));
0
,
0
,
0
,
0
,
0
,
ConstMethod
::
NORMAL
,
CHECK_
(
empty
));
m
=
methodHandle
(
THREAD
,
m_oop
);
m
=
methodHandle
(
THREAD
,
m_oop
);
}
}
m
->
set_constants
(
cp
());
m
->
set_constants
(
cp
());
...
@@ -1082,6 +1084,7 @@ methodHandle Method::clone_with_new_data(methodHandle m, u_char* new_code, int n
...
@@ -1082,6 +1084,7 @@ methodHandle Method::clone_with_new_data(methodHandle m, u_char* new_code, int n
assert
(
!
m
->
is_native
(),
"cannot rewrite native methods"
);
assert
(
!
m
->
is_native
(),
"cannot rewrite native methods"
);
// Allocate new Method*
// Allocate new Method*
AccessFlags
flags
=
m
->
access_flags
();
AccessFlags
flags
=
m
->
access_flags
();
u2
generic_signature_index
=
m
->
generic_signature_index
();
int
checked_exceptions_len
=
m
->
checked_exceptions_length
();
int
checked_exceptions_len
=
m
->
checked_exceptions_length
();
int
localvariable_len
=
m
->
localvariable_table_length
();
int
localvariable_len
=
m
->
localvariable_table_length
();
int
exception_table_len
=
m
->
exception_table_length
();
int
exception_table_len
=
m
->
exception_table_length
();
...
@@ -1094,6 +1097,7 @@ methodHandle Method::clone_with_new_data(methodHandle m, u_char* new_code, int n
...
@@ -1094,6 +1097,7 @@ methodHandle Method::clone_with_new_data(methodHandle m, u_char* new_code, int n
localvariable_len
,
localvariable_len
,
exception_table_len
,
exception_table_len
,
checked_exceptions_len
,
checked_exceptions_len
,
generic_signature_index
,
m
->
method_type
(),
m
->
method_type
(),
CHECK_
(
methodHandle
()));
CHECK_
(
methodHandle
()));
methodHandle
newm
(
THREAD
,
newm_oop
);
methodHandle
newm
(
THREAD
,
newm_oop
);
...
...
src/share/vm/oops/method.hpp
浏览文件 @
6f7ef75c
...
@@ -73,12 +73,10 @@
...
@@ -73,12 +73,10 @@
// |------------------------------------------------------|
// |------------------------------------------------------|
// | result_index (C++ interpreter only) |
// | result_index (C++ interpreter only) |
// |------------------------------------------------------|
// |------------------------------------------------------|
// | method_size |
max_stack
|
// | method_size |
max_locals
|
// |
max_locals | size_of_parameters
|
// |
size_of_parameters | intrinsic_id| flags
|
// |------------------------------------------------------|
// |------------------------------------------------------|
// |intrinsic_id| flags | throwout_count |
// | throwout_count | num_breakpoints |
// |------------------------------------------------------|
// | num_breakpoints | (unused) |
// |------------------------------------------------------|
// |------------------------------------------------------|
// | invocation_counter |
// | invocation_counter |
// | backedge_counter |
// | backedge_counter |
...
@@ -118,7 +116,6 @@ class Method : public Metadata {
...
@@ -118,7 +116,6 @@ class Method : public Metadata {
int
_result_index
;
// C++ interpreter needs for converting results to/from stack
int
_result_index
;
// C++ interpreter needs for converting results to/from stack
#endif
#endif
u2
_method_size
;
// size of this object
u2
_method_size
;
// size of this object
u2
_max_stack
;
// Maximum number of entries on the expression stack
u2
_max_locals
;
// Number of local variables used by this method
u2
_max_locals
;
// Number of local variables used by this method
u2
_size_of_parameters
;
// size of the parameter block (receiver + arguments) in words
u2
_size_of_parameters
;
// size of the parameter block (receiver + arguments) in words
u1
_intrinsic_id
;
// vmSymbols::intrinsic_id (0 == _none)
u1
_intrinsic_id
;
// vmSymbols::intrinsic_id (0 == _none)
...
@@ -166,6 +163,7 @@ class Method : public Metadata {
...
@@ -166,6 +163,7 @@ class Method : public Metadata {
int
localvariable_table_length
,
int
localvariable_table_length
,
int
exception_table_length
,
int
exception_table_length
,
int
checked_exceptions_length
,
int
checked_exceptions_length
,
u2
generic_signature_index
,
ConstMethod
::
MethodType
method_type
,
ConstMethod
::
MethodType
method_type
,
TRAPS
);
TRAPS
);
...
@@ -289,9 +287,9 @@ class Method : public Metadata {
...
@@ -289,9 +287,9 @@ class Method : public Metadata {
// max stack
// max stack
// return original max stack size for method verification
// return original max stack size for method verification
int
verifier_max_stack
()
const
{
return
_max_stack
;
}
int
verifier_max_stack
()
const
{
return
constMethod
()
->
max_stack
()
;
}
int
max_stack
()
const
{
return
_max_stack
+
extra_stack_entries
();
}
int
max_stack
()
const
{
return
constMethod
()
->
max_stack
()
+
extra_stack_entries
();
}
void
set_max_stack
(
int
size
)
{
_max_stack
=
size
;
}
void
set_max_stack
(
int
size
)
{
constMethod
()
->
set_max_stack
(
size
)
;
}
// max locals
// max locals
int
max_locals
()
const
{
return
_max_locals
;
}
int
max_locals
()
const
{
return
_max_locals
;
}
...
@@ -607,7 +605,6 @@ class Method : public Metadata {
...
@@ -607,7 +605,6 @@ class Method : public Metadata {
static
ByteSize
from_interpreted_offset
()
{
return
byte_offset_of
(
Method
,
_from_interpreted_entry
);
}
static
ByteSize
from_interpreted_offset
()
{
return
byte_offset_of
(
Method
,
_from_interpreted_entry
);
}
static
ByteSize
interpreter_entry_offset
()
{
return
byte_offset_of
(
Method
,
_i2i_entry
);
}
static
ByteSize
interpreter_entry_offset
()
{
return
byte_offset_of
(
Method
,
_i2i_entry
);
}
static
ByteSize
signature_handler_offset
()
{
return
in_ByteSize
(
sizeof
(
Method
)
+
wordSize
);
}
static
ByteSize
signature_handler_offset
()
{
return
in_ByteSize
(
sizeof
(
Method
)
+
wordSize
);
}
static
ByteSize
max_stack_offset
()
{
return
byte_offset_of
(
Method
,
_max_stack
);
}
// for code generation
// for code generation
static
int
method_data_offset_in_bytes
()
{
return
offset_of
(
Method
,
_method_data
);
}
static
int
method_data_offset_in_bytes
()
{
return
offset_of
(
Method
,
_method_data
);
}
...
...
src/share/vm/runtime/vmStructs.cpp
浏览文件 @
6f7ef75c
...
@@ -355,7 +355,6 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
...
@@ -355,7 +355,6 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
nonstatic_field(Method, _access_flags, AccessFlags) \
nonstatic_field(Method, _access_flags, AccessFlags) \
nonstatic_field(Method, _vtable_index, int) \
nonstatic_field(Method, _vtable_index, int) \
nonstatic_field(Method, _method_size, u2) \
nonstatic_field(Method, _method_size, u2) \
nonstatic_field(Method, _max_stack, u2) \
nonstatic_field(Method, _max_locals, u2) \
nonstatic_field(Method, _max_locals, u2) \
nonstatic_field(Method, _size_of_parameters, u2) \
nonstatic_field(Method, _size_of_parameters, u2) \
nonstatic_field(Method, _interpreter_throwout_count, u2) \
nonstatic_field(Method, _interpreter_throwout_count, u2) \
...
@@ -378,7 +377,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
...
@@ -378,7 +377,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
nonstatic_field(ConstMethod, _name_index, u2) \
nonstatic_field(ConstMethod, _name_index, u2) \
nonstatic_field(ConstMethod, _signature_index, u2) \
nonstatic_field(ConstMethod, _signature_index, u2) \
nonstatic_field(ConstMethod, _method_idnum, u2) \
nonstatic_field(ConstMethod, _method_idnum, u2) \
nonstatic_field(ConstMethod, _
generic_signature_index,
u2) \
nonstatic_field(ConstMethod, _
max_stack,
u2) \
nonstatic_field(ObjArrayKlass, _element_klass, Klass*) \
nonstatic_field(ObjArrayKlass, _element_klass, Klass*) \
nonstatic_field(ObjArrayKlass, _bottom_klass, Klass*) \
nonstatic_field(ObjArrayKlass, _bottom_klass, Klass*) \
volatile_nonstatic_field(Symbol, _refcount, int) \
volatile_nonstatic_field(Symbol, _refcount, int) \
...
@@ -2280,6 +2279,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
...
@@ -2280,6 +2279,7 @@ typedef BinaryTreeDictionary<Metablock, FreeList> MetablockTreeDictionary;
declare_constant(ConstMethod::_has_checked_exceptions) \
declare_constant(ConstMethod::_has_checked_exceptions) \
declare_constant(ConstMethod::_has_localvariable_table) \
declare_constant(ConstMethod::_has_localvariable_table) \
declare_constant(ConstMethod::_has_exception_table) \
declare_constant(ConstMethod::_has_exception_table) \
declare_constant(ConstMethod::_has_generic_signature) \
\
\
/*************************************/
\
/*************************************/
\
/* InstanceKlass enum */
\
/* InstanceKlass enum */
\
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录