Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
865bcfe4
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看板
提交
865bcfe4
编写于
5月 06, 2016
作者:
R
robm
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
8ed56a61
2b99b696
变更
19
显示空白变更内容
内联
并排
Showing
19 changed file
with
111 addition
and
41 deletion
+111
-41
src/cpu/ppc/vm/compiledIC_ppc.cpp
src/cpu/ppc/vm/compiledIC_ppc.cpp
+3
-3
src/cpu/ppc/vm/ppc.ad
src/cpu/ppc/vm/ppc.ad
+13
-5
src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp
src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp
+3
-0
src/cpu/sparc/vm/compiledIC_sparc.cpp
src/cpu/sparc/vm/compiledIC_sparc.cpp
+6
-4
src/cpu/sparc/vm/sparc.ad
src/cpu/sparc/vm/sparc.ad
+16
-7
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
+3
-0
src/cpu/x86/vm/compiledIC_x86.cpp
src/cpu/x86/vm/compiledIC_x86.cpp
+6
-4
src/cpu/x86/vm/x86.ad
src/cpu/x86/vm/x86.ad
+8
-2
src/cpu/x86/vm/x86_32.ad
src/cpu/x86/vm/x86_32.ad
+5
-1
src/cpu/x86/vm/x86_64.ad
src/cpu/x86/vm/x86_64.ad
+5
-1
src/cpu/zero/vm/compiledIC_zero.cpp
src/cpu/zero/vm/compiledIC_zero.cpp
+2
-1
src/cpu/zero/vm/cppInterpreter_zero.cpp
src/cpu/zero/vm/cppInterpreter_zero.cpp
+9
-2
src/share/vm/c1/c1_LIRAssembler.cpp
src/share/vm/c1/c1_LIRAssembler.cpp
+1
-0
src/share/vm/classfile/vmSymbols.hpp
src/share/vm/classfile/vmSymbols.hpp
+2
-1
src/share/vm/code/compiledIC.hpp
src/share/vm/code/compiledIC.hpp
+1
-1
src/share/vm/interpreter/bytecodeInterpreter.cpp
src/share/vm/interpreter/bytecodeInterpreter.cpp
+3
-2
src/share/vm/opto/compile.cpp
src/share/vm/opto/compile.cpp
+4
-0
src/share/vm/opto/output.cpp
src/share/vm/opto/output.cpp
+11
-1
src/share/vm/prims/jvm.cpp
src/share/vm/prims/jvm.cpp
+10
-6
未找到文件。
src/cpu/ppc/vm/compiledIC_ppc.cpp
浏览文件 @
865bcfe4
...
...
@@ -94,7 +94,7 @@ bool CompiledIC::is_icholder_call_site(virtual_call_Relocation* call_site) {
const
int
IC_pos_in_java_to_interp_stub
=
8
;
#define __ _masm.
void
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
address
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
#ifdef COMPILER2
// Get the mark within main instrs section which is set to the address of the call.
address
call_addr
=
cbuf
.
insts_mark
();
...
...
@@ -106,8 +106,7 @@ void CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf) {
// Start the stub.
address
stub
=
__
start_a_stub
(
CompiledStaticCall
::
to_interp_stub_size
());
if
(
stub
==
NULL
)
{
Compile
::
current
()
->
env
()
->
record_out_of_memory_failure
();
return
;
return
NULL
;
// CodeCache is full
}
// For java_to_interp stubs we use R11_scratch1 as scratch register
...
...
@@ -149,6 +148,7 @@ void CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf) {
// End the stub.
__
end_a_stub
();
return
stub
;
#else
ShouldNotReachHere
();
#endif
...
...
src/cpu/ppc/vm/ppc.ad
浏览文件 @
865bcfe4
...
...
@@ -1171,7 +1171,7 @@ void CallStubImpl::emit_trampoline_stub(MacroAssembler &_masm, int destination_t
// Start the stub.
address stub = __ start_a_stub(Compile::MAX_stubs_size/2);
if (stub == NULL) {
Compile::current()->env()->record_out_of_memory_failure(
);
ciEnv::current()->record_failure("CodeCache is full"
);
return;
}
...
...
@@ -1249,7 +1249,7 @@ EmitCallOffsets emit_call_with_trampoline_stub(MacroAssembler &_masm, address en
// Emit the trampoline stub which will be related to the branch-and-link below.
CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, offsets.insts_call_instruction_offset);
if (
Compile::current()->env
()->failing()) { return offsets; } // Code cache may be full.
if (
ciEnv::current
()->failing()) { return offsets; } // Code cache may be full.
__ relocate(rtype);
}
...
...
@@ -3488,7 +3488,7 @@ encode %{
// Emit the trampoline stub which will be related to the branch-and-link below.
CallStubImpl::emit_trampoline_stub(_masm, entry_point_toc_offset, start_offset);
if (
Compile::current()->env
()->failing()) { return; } // Code cache may be full.
if (
ciEnv::current
()->failing()) { return; } // Code cache may be full.
__ relocate(_optimized_virtual ?
relocInfo::opt_virtual_call_type : relocInfo::static_call_type);
}
...
...
@@ -3501,7 +3501,11 @@ encode %{
__ bl(__ pc()); // Emits a relocation.
// The stub for call to interpreter.
CompiledStaticCall::emit_to_interp_stub(cbuf);
address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
if (stub == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return;
}
}
%}
...
...
@@ -3546,7 +3550,11 @@ encode %{
assert(_method, "execute next statement conditionally");
// The stub for call to interpreter.
CompiledStaticCall::emit_to_interp_stub(cbuf);
address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
if (stub == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return;
}
// Restore original sp.
__ ld(R11_scratch1, 0, R1_SP); // Load caller sp.
...
...
src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp
浏览文件 @
865bcfe4
...
...
@@ -431,6 +431,9 @@ void ArrayCopyStub::emit_code(LIR_Assembler* ce) {
__
mov
(
length
()
->
as_register
(),
O4
);
ce
->
emit_static_call_stub
();
if
(
ce
->
compilation
()
->
bailed_out
())
{
return
;
// CodeCache is full
}
__
call
(
SharedRuntime
::
get_resolve_static_call_stub
(),
relocInfo
::
static_call_type
);
__
delayed
()
->
nop
();
...
...
src/cpu/sparc/vm/compiledIC_sparc.cpp
浏览文件 @
865bcfe4
...
...
@@ -53,7 +53,7 @@ bool CompiledIC::is_icholder_call_site(virtual_call_Relocation* call_site) {
// ----------------------------------------------------------------------------
#define __ _masm.
void
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
address
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
#ifdef COMPILER2
// Stub is fixed up when the corresponding call is converted from calling
// compiled code to calling interpreted code.
...
...
@@ -64,9 +64,10 @@ void CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf) {
MacroAssembler
_masm
(
&
cbuf
);
address
base
=
__
start_a_stub
(
to_interp_stub_size
()
*
2
);
if
(
base
==
NULL
)
return
;
// CodeBuffer::expand failed.
address
base
=
__
start_a_stub
(
to_interp_stub_size
());
if
(
base
==
NULL
)
{
return
NULL
;
// CodeBuffer::expand failed.
}
// Static stub relocation stores the instruction address of the call.
__
relocate
(
static_stub_Relocation
::
spec
(
mark
));
...
...
@@ -81,6 +82,7 @@ void CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf) {
// Update current stubs pointer and restore code_end.
__
end_a_stub
();
return
base
;
#else
ShouldNotReachHere
();
#endif
...
...
src/cpu/sparc/vm/sparc.ad
浏览文件 @
865bcfe4
...
...
@@ -1775,9 +1775,11 @@ int HandlerImpl::emit_exception_handler(CodeBuffer& cbuf) {
AddressLiteral exception_blob(OptoRuntime::exception_blob()->entry_point());
MacroAssembler _masm(&cbuf);
address base =
__ start_a_stub(size_exception_handler());
if (base == NULL) return 0; // CodeBuffer::expand failed
address base = __ start_a_stub(size_exception_handler());
if (base == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return 0; // CodeBuffer::expand failed
}
int offset = __ offset();
...
...
@@ -1798,9 +1800,11 @@ int HandlerImpl::emit_deopt_handler(CodeBuffer& cbuf) {
AddressLiteral deopt_blob(SharedRuntime::deopt_blob()->unpack());
MacroAssembler _masm(&cbuf);
address base =
__ start_a_stub(size_deopt_handler());
if (base == NULL) return 0; // CodeBuffer::expand failed
address base = __ start_a_stub(size_deopt_handler());
if (base == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return 0; // CodeBuffer::expand failed
}
int offset = __ offset();
__ save_frame(0);
...
...
@@ -2601,7 +2605,12 @@ encode %{
emit_call_reloc(cbuf, $meth$$method, relocInfo::static_call_type);
}
if (_method) { // Emit stub for static call.
CompiledStaticCall::emit_to_interp_stub(cbuf);
address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
// Stub does not fit into scratch buffer if TraceJumps is enabled
if (stub == NULL && !(TraceJumps && Compile::current()->in_scratch_emit_size())) {
ciEnv::current()->record_failure("CodeCache is full");
return;
}
}
%}
...
...
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
浏览文件 @
865bcfe4
...
...
@@ -502,6 +502,9 @@ void ArrayCopyStub::emit_code(LIR_Assembler* ce) {
ce
->
align_call
(
lir_static_call
);
ce
->
emit_static_call_stub
();
if
(
ce
->
compilation
()
->
bailed_out
())
{
return
;
// CodeCache is full
}
AddressLiteral
resolve
(
SharedRuntime
::
get_resolve_static_call_stub
(),
relocInfo
::
static_call_type
);
__
call
(
resolve
);
...
...
src/cpu/x86/vm/compiledIC_x86.cpp
浏览文件 @
865bcfe4
...
...
@@ -50,7 +50,7 @@ bool CompiledIC::is_icholder_call_site(virtual_call_Relocation* call_site) {
// ----------------------------------------------------------------------------
#define __ _masm.
void
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
address
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
// Stub is fixed up when the corresponding call is converted from
// calling compiled code to calling interpreted code.
// movq rbx, 0
...
...
@@ -62,9 +62,10 @@ void CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf) {
// That's why we must use the macroassembler to generate a stub.
MacroAssembler
_masm
(
&
cbuf
);
address
base
=
__
start_a_stub
(
to_interp_stub_size
()
*
2
);
if
(
base
==
NULL
)
return
;
// CodeBuffer::expand failed.
address
base
=
__
start_a_stub
(
to_interp_stub_size
());
if
(
base
==
NULL
)
{
return
NULL
;
// CodeBuffer::expand failed.
}
// Static stub relocation stores the instruction address of the call.
__
relocate
(
static_stub_Relocation
::
spec
(
mark
),
Assembler
::
imm_operand
);
// Static stub relocation also tags the Method* in the code-stream.
...
...
@@ -74,6 +75,7 @@ void CompiledStaticCall::emit_to_interp_stub(CodeBuffer &cbuf) {
// Update current stubs pointer and restore insts_end.
__
end_a_stub
();
return
base
;
}
#undef __
...
...
src/cpu/x86/vm/x86.ad
浏览文件 @
865bcfe4
...
...
@@ -550,7 +550,10 @@ int HandlerImpl::emit_exception_handler(CodeBuffer& cbuf) {
// That's why we must use the macroassembler to generate a handler.
MacroAssembler _masm(&cbuf);
address base = __ start_a_stub(size_exception_handler());
if (base == NULL) return 0; // CodeBuffer::expand failed
if (base == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return 0; // CodeBuffer::expand failed
}
int offset = __ offset();
__ jump(RuntimeAddress(OptoRuntime::exception_blob()->entry_point()));
assert(__ offset() - offset <= (int) size_exception_handler(), "overflow");
...
...
@@ -565,7 +568,10 @@ int HandlerImpl::emit_deopt_handler(CodeBuffer& cbuf) {
// That's why we must use the macroassembler to generate a handler.
MacroAssembler _masm(&cbuf);
address base = __ start_a_stub(size_deopt_handler());
if (base == NULL) return 0; // CodeBuffer::expand failed
if (base == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return 0; // CodeBuffer::expand failed
}
int offset = __ offset();
#ifdef _LP64
...
...
src/cpu/x86/vm/x86_32.ad
浏览文件 @
865bcfe4
...
...
@@ -1870,7 +1870,11 @@ encode %{
static_call_Relocation::spec(), RELOC_IMM32 );
}
if (_method) { // Emit stub for static call.
CompiledStaticCall::emit_to_interp_stub(cbuf);
address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
if (stub == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return;
}
}
%}
...
...
src/cpu/x86/vm/x86_64.ad
浏览文件 @
865bcfe4
...
...
@@ -2125,7 +2125,11 @@ encode %{
}
if (_method) {
// Emit stub for static call.
CompiledStaticCall::emit_to_interp_stub(cbuf);
address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
if (stub == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return;
}
}
%}
...
...
src/cpu/zero/vm/compiledIC_zero.cpp
浏览文件 @
865bcfe4
...
...
@@ -60,8 +60,9 @@ bool CompiledIC::is_icholder_call_site(virtual_call_Relocation* call_site) {
// ----------------------------------------------------------------------------
void
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
address
CompiledStaticCall
::
emit_to_interp_stub
(
CodeBuffer
&
cbuf
)
{
ShouldNotReachHere
();
// Only needed for COMPILER2.
return
NULL
;
}
int
CompiledStaticCall
::
to_interp_stub_size
()
{
...
...
src/cpu/zero/vm/cppInterpreter_zero.cpp
浏览文件 @
865bcfe4
...
...
@@ -220,9 +220,16 @@ void CppInterpreter::main_loop(int recurse, TRAPS) {
// Push our result
for
(
int
i
=
0
;
i
<
result_slots
;
i
++
)
{
// Adjust result to smaller
intptr_t
res
=
result
[
-
i
];
union
{
intptr_t
res
;
jint
res_jint
;
};
res
=
result
[
-
i
];
if
(
result_slots
==
1
)
{
res
=
narrow
(
method
->
result_type
(),
res
);
BasicType
t
=
method
->
result_type
();
if
(
is_subword_type
(
t
))
{
res_jint
=
(
jint
)
narrow
(
t
,
res_jint
);
}
}
stack
->
push
(
res
);
}
...
...
src/share/vm/c1/c1_LIRAssembler.cpp
浏览文件 @
865bcfe4
...
...
@@ -464,6 +464,7 @@ void LIR_Assembler::emit_call(LIR_OpJavaCall* op) {
// emit the static call stub stuff out of line
emit_static_call_stub
();
CHECK_BAILOUT
();
switch
(
op
->
code
())
{
case
lir_static_call
:
...
...
src/share/vm/classfile/vmSymbols.hpp
浏览文件 @
865bcfe4
/*
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
6
, 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
...
...
@@ -517,6 +517,7 @@
template(int_StringBuffer_signature, "(I)Ljava/lang/StringBuffer;") \
template(char_StringBuffer_signature, "(C)Ljava/lang/StringBuffer;") \
template(int_String_signature, "(I)Ljava/lang/String;") \
template(codesource_permissioncollection_signature, "(Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V") \
/* signature symbols needed by intrinsics */
\
VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, template, VM_ALIAS_IGNORE) \
\
...
...
src/share/vm/code/compiledIC.hpp
浏览文件 @
865bcfe4
...
...
@@ -320,7 +320,7 @@ class CompiledStaticCall: public NativeCall {
friend
CompiledStaticCall
*
compiledStaticCall_at
(
Relocation
*
call_site
);
// Code
static
void
emit_to_interp_stub
(
CodeBuffer
&
cbuf
);
static
address
emit_to_interp_stub
(
CodeBuffer
&
cbuf
);
static
int
to_interp_stub_size
();
static
int
reloc_to_interp_stub
();
...
...
src/share/vm/interpreter/bytecodeInterpreter.cpp
浏览文件 @
865bcfe4
...
...
@@ -593,8 +593,9 @@ BytecodeInterpreter::run(interpreterState istate) {
/* 0xDC */
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
/* 0xE0 */
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
/* 0xE4 */
&&
opc_default
,
&&
opc_fast_aldc
,
&&
opc_fast_aldc_w
,
&&
opc_return_register_finalizer
,
/* 0xE8 */
&&
opc_invokehandle
,
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
/* 0xE4 */
&&
opc_default
,
&&
opc_default
,
&&
opc_fast_aldc
,
&&
opc_fast_aldc_w
,
/* 0xE8 */
&&
opc_return_register_finalizer
,
&&
opc_invokehandle
,
&&
opc_default
,
&&
opc_default
,
/* 0xEC */
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
/* 0xF0 */
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
&&
opc_default
,
...
...
src/share/vm/opto/compile.cpp
浏览文件 @
865bcfe4
...
...
@@ -608,6 +608,10 @@ uint Compile::scratch_emit_size(const Node* n) {
n
->
as_MachBranch
()
->
label_set
(
&
fakeL
,
0
);
}
n
->
emit
(
buf
,
this
->
regalloc
());
// Emitting into the scratch buffer should not fail
assert
(
!
failing
(),
err_msg_res
(
"Must not have pending failure. Reason is: %s"
,
failure_reason
()));
if
(
is_branch
)
// Restore label.
n
->
as_MachBranch
()
->
label_set
(
saveL
,
save_bnum
);
...
...
src/share/vm/opto/output.cpp
浏览文件 @
865bcfe4
...
...
@@ -1502,6 +1502,13 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
n
->
emit
(
*
cb
,
_regalloc
);
current_offset
=
cb
->
insts_size
();
// Above we only verified that there is enough space in the instruction section.
// However, the instruction may emit stubs that cause code buffer expansion.
// Bail out here if expansion failed due to a lack of code cache space.
if
(
failing
())
{
return
;
}
#ifdef ASSERT
if
(
n
->
size
(
_regalloc
)
<
(
current_offset
-
instr_offset
))
{
n
->
dump
();
...
...
@@ -1630,11 +1637,14 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
if
(
_method
)
{
// Emit the exception handler code.
_code_offsets
.
set_value
(
CodeOffsets
::
Exceptions
,
HandlerImpl
::
emit_exception_handler
(
*
cb
));
if
(
failing
())
{
return
;
// CodeBuffer::expand failed
}
// Emit the deopt handler code.
_code_offsets
.
set_value
(
CodeOffsets
::
Deopt
,
HandlerImpl
::
emit_deopt_handler
(
*
cb
));
// Emit the MethodHandle deopt handler code (if required).
if
(
has_method_handle_invokes
())
{
if
(
has_method_handle_invokes
()
&&
!
failing
()
)
{
// We can use the same code as for the normal deopt handler, we
// just need a different entry point address.
_code_offsets
.
set_value
(
CodeOffsets
::
DeoptMH
,
HandlerImpl
::
emit_deopt_handler
(
*
cb
));
...
...
src/share/vm/prims/jvm.cpp
浏览文件 @
865bcfe4
...
...
@@ -1290,18 +1290,22 @@ static bool is_authorized(Handle context, instanceKlassHandle klass, TRAPS) {
// and null permissions - which gives no permissions.
oop
create_dummy_access_control_context
(
TRAPS
)
{
InstanceKlass
*
pd_klass
=
InstanceKlass
::
cast
(
SystemDictionary
::
ProtectionDomain_klass
());
// new ProtectionDomain(null,null);
oop
null_protection_domain
=
pd_klass
->
allocate_instance
(
CHECK_NULL
);
Handle
null_pd
(
THREAD
,
null_protection_domain
);
Handle
obj
=
pd_klass
->
allocate_instance_handle
(
CHECK_NULL
);
// Call constructor ProtectionDomain(null, null);
JavaValue
result
(
T_VOID
);
JavaCalls
::
call_special
(
&
result
,
obj
,
KlassHandle
(
THREAD
,
pd_klass
),
vmSymbols
::
object_initializer_name
(),
vmSymbols
::
codesource_permissioncollection_signature
(),
Handle
(),
Handle
(),
CHECK_NULL
);
// new ProtectionDomain[] {pd};
objArrayOop
context
=
oopFactory
::
new_objArray
(
pd_klass
,
1
,
CHECK_NULL
);
context
->
obj_at_put
(
0
,
null_pd
());
context
->
obj_at_put
(
0
,
obj
());
// new AccessControlContext(new ProtectionDomain[] {pd})
objArrayHandle
h_context
(
THREAD
,
context
);
oop
result
=
java_security_AccessControlContext
::
create
(
h_context
,
false
,
Handle
(),
CHECK_NULL
);
return
result
;
oop
acc
=
java_security_AccessControlContext
::
create
(
h_context
,
false
,
Handle
(),
CHECK_NULL
);
return
acc
;
}
JVM_ENTRY
(
jobject
,
JVM_DoPrivileged
(
JNIEnv
*
env
,
jclass
cls
,
jobject
action
,
jobject
context
,
jboolean
wrapException
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录