Merge
This commit is contained in:
commit
b823af9f1f
2
.hgtags
2
.hgtags
@ -257,3 +257,5 @@ efe7dbc6088691757404e0c8745f894e3ca9c022 jdk9-b09
|
||||
0d1f816217dce5e72187f167cc1816080cbeb453 jdk9-b12
|
||||
1a30593dcb9802faec3b6edb24d86ca088594e4e jdk9-b13
|
||||
97932f6ad950ae5a73a9da5c96e6e58503ff646b jdk9-b14
|
||||
74eb0778e4f2dbff6628e718378449fba27c4265 jdk9-b15
|
||||
4a09f5d30be844ac6f714bdb0f63d8c3c08b9a98 jdk9-b16
|
||||
|
@ -257,3 +257,5 @@ ab55a18a95e1990a588929d5d29db3eb9985fea0 jdk9-b11
|
||||
59f6350295f9681fe5956d8bc889bf341914c6cb jdk9-b12
|
||||
5800456add07e1a68170a229fb5e27376f8875e5 jdk9-b13
|
||||
4e3aa9723e9972623e3dafc321b368e7db7e9b3b jdk9-b14
|
||||
b114474fb25af4e73cb7219f7c04bd8994da03a5 jdk9-b15
|
||||
cf22a728521f91a4692b433d39d730a0a1b23155 jdk9-b16
|
||||
|
4
common/autoconf/configure
vendored
4
common/autoconf/configure
vendored
@ -49,7 +49,7 @@ fi
|
||||
###
|
||||
|
||||
run_autogen_or_fail() {
|
||||
if test "x`which autoconf 2> /dev/null`" = x; then
|
||||
if test "x`which autoconf 2> /dev/null | grep -v '^no autoconf in'`" = x; then
|
||||
echo "Cannot locate autoconf, unable to correct situation."
|
||||
echo "Please install autoconf and run 'bash autogen.sh' to update the generated files."
|
||||
echo "Error: Cannot continue" 1>&2
|
||||
@ -80,7 +80,7 @@ check_autoconf_timestamps() {
|
||||
}
|
||||
|
||||
check_hg_updates() {
|
||||
if test "x`which hg 2> /dev/null`" != x; then
|
||||
if test "x`which hg 2> /dev/null | grep -v '^no hg in'`" != x; then
|
||||
conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf`
|
||||
if test "x$conf_updated_autoconf_files" != x; then
|
||||
echo "Configure source code has been updated, checking time stamps"
|
||||
|
@ -257,3 +257,5 @@ a4bf701ac316946c2e5e83138ad8e687da6a4b30 jdk9-b06
|
||||
e212cdcc8c11f0ba5acf6f5ddb596c4c545a93f9 jdk9-b12
|
||||
088eec4c36f4d7f250fcd19c4969bf698e3d2cdc jdk9-b13
|
||||
a2b82f863ba95a596da555a4c1b871c404863e7e jdk9-b14
|
||||
e54022d0dd92106fff7f7fe670010cd7e6517ee3 jdk9-b15
|
||||
422ef9d29d84f571453f015c4cb8713c3af70ee4 jdk9-b16
|
||||
|
@ -417,3 +417,5 @@ ebc44d040cd149d2120d69fe183a3dae7840f4b4 jdk9-b10
|
||||
1c383bb39e2849ca62cb763f4e182a29b421d60a jdk9-b12
|
||||
456ad9c99133803d4e1433124c85a6fd141b9ac9 jdk9-b13
|
||||
bd333491bb6c012d7b606939406d0fa9a5ac7ffd jdk9-b14
|
||||
170f6d733d7aec062f743a6b8c1cce940a7a984a jdk9-b15
|
||||
b14e7c0b7d3ec04127f565cda1d84122e205680c jdk9-b16
|
||||
|
@ -1221,10 +1221,8 @@ void LIRGenerator::do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) {
|
||||
bool is_obj = (type == T_ARRAY || type == T_OBJECT);
|
||||
LIR_Opr offset = off.result();
|
||||
|
||||
if (data != dst) {
|
||||
__ move(data, dst);
|
||||
data = dst;
|
||||
}
|
||||
// Because we want a 2-arg form of xchg
|
||||
__ move(data, dst);
|
||||
|
||||
assert (!x->is_add() && (type == T_INT || (is_obj LP64_ONLY(&& UseCompressedOops))), "unexpected type");
|
||||
LIR_Address* addr;
|
||||
@ -1254,7 +1252,7 @@ void LIRGenerator::do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) {
|
||||
pre_barrier(ptr, LIR_OprFact::illegalOpr /* pre_val */,
|
||||
true /* do_load */, false /* patch */, NULL);
|
||||
}
|
||||
__ xchg(LIR_OprFact::address(addr), data, dst, tmp);
|
||||
__ xchg(LIR_OprFact::address(addr), dst, dst, tmp);
|
||||
if (is_obj) {
|
||||
// Seems to be a precise address
|
||||
post_barrier(ptr, data);
|
||||
|
@ -184,7 +184,7 @@ static void pd_fill_to_aligned_words(HeapWord* tohw, size_t count, juint value)
|
||||
assert(MinObjAlignmentInBytes >= BytesPerLong, "need alternate implementation");
|
||||
|
||||
if (value == 0 && UseBlockZeroing &&
|
||||
(count > (BlockZeroingLowLimit >> LogHeapWordSize))) {
|
||||
(count > (size_t)(BlockZeroingLowLimit >> LogHeapWordSize))) {
|
||||
// Call it only when block zeroing is used
|
||||
((_zero_Fn)StubRoutines::zero_aligned_words())(tohw, count);
|
||||
} else {
|
||||
|
@ -231,6 +231,9 @@ public class CallSite {
|
||||
// identical call sites with the same method name/bci are
|
||||
// possible so we have to try them all until we find the late
|
||||
// inline call site that has a matching inline id.
|
||||
if (calls == null) {
|
||||
return null;
|
||||
}
|
||||
CallSite site = sites.pop();
|
||||
for (CallSite c : calls) {
|
||||
if (c.matches(site)) {
|
||||
@ -250,6 +253,27 @@ public class CallSite {
|
||||
return null;
|
||||
}
|
||||
|
||||
public ArrayDeque<CallSite> findCallSite2(CallSite site) {
|
||||
if (calls == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (CallSite c : calls) {
|
||||
if (c.matches(site)) {
|
||||
ArrayDeque<CallSite> stack = new ArrayDeque<CallSite>();
|
||||
stack.push(c);
|
||||
return stack;
|
||||
} else {
|
||||
ArrayDeque<CallSite> stack = c.findCallSite2(site);
|
||||
if (stack != null) {
|
||||
stack.push(c);
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public long getInlineId() {
|
||||
return inlineId;
|
||||
}
|
||||
|
@ -49,6 +49,12 @@ public class Compilation implements LogEvent {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
void reset() {
|
||||
call = new CallSite();
|
||||
lateInlineCall = new CallSite();
|
||||
phases = new ArrayList<Phase>(4);
|
||||
}
|
||||
|
||||
Phase getPhase(String s) {
|
||||
for (Phase p : getPhases()) {
|
||||
if (p.getName().equals(s)) {
|
||||
@ -212,10 +218,6 @@ public class Compilation implements LogEvent {
|
||||
return phases;
|
||||
}
|
||||
|
||||
public void setPhases(ArrayList<Phase> phases) {
|
||||
this.setPhases(phases);
|
||||
}
|
||||
|
||||
public String getFailureReason() {
|
||||
return failureReason;
|
||||
}
|
||||
@ -240,10 +242,6 @@ public class Compilation implements LogEvent {
|
||||
return call;
|
||||
}
|
||||
|
||||
public void setCall(CallSite call) {
|
||||
this.call = call;
|
||||
}
|
||||
|
||||
public CallSite getLateInlineCall() {
|
||||
return lateInlineCall;
|
||||
}
|
||||
|
@ -395,6 +395,7 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants
|
||||
compile.setEnd(Double.parseDouble(search(atts, "stamp")));
|
||||
if (Integer.parseInt(search(atts, "success")) == 0) {
|
||||
compile.setFailureReason(failureReason);
|
||||
failureReason = null;
|
||||
}
|
||||
} else if (qname.equals("make_not_entrant")) {
|
||||
String id = makeId(atts);
|
||||
@ -451,6 +452,12 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants
|
||||
nmethods.put(id, nm);
|
||||
events.add(nm);
|
||||
} else if (qname.equals("parse")) {
|
||||
if (failureReason != null && scopes.size() == 0 && !lateInlining) {
|
||||
failureReason = null;
|
||||
compile.reset();
|
||||
site = compile.getCall();
|
||||
}
|
||||
|
||||
if (methodHandleSite != null) {
|
||||
throw new InternalError("method handle site should have been replaced");
|
||||
}
|
||||
@ -529,6 +536,18 @@ public class LogParser extends DefaultHandler implements ErrorHandler, Constants
|
||||
|
||||
site = compile.getCall().findCallSite(thisCallScopes);
|
||||
if (site == null) {
|
||||
System.out.println("call scopes:");
|
||||
for (CallSite c : thisCallScopes) {
|
||||
System.out.println(c.getMethod() + " " + c.getBci() + " " + c.getInlineId());
|
||||
}
|
||||
CallSite c = thisCallScopes.getLast();
|
||||
if (c.getInlineId() != 0) {
|
||||
System.out.println("Looking for call site in entire tree:");
|
||||
ArrayDeque<CallSite> stack = compile.getCall().findCallSite2(c);
|
||||
for (CallSite c2 : stack) {
|
||||
System.out.println(c2.getMethod() + " " + c2.getBci() + " " + c2.getInlineId());
|
||||
}
|
||||
}
|
||||
System.out.println(caller.getMethod() + " bci: " + bci);
|
||||
throw new InternalError("couldn't find call site");
|
||||
}
|
||||
|
@ -1083,7 +1083,7 @@ void LIR_OpLabel::emit_code(LIR_Assembler* masm) {
|
||||
|
||||
void LIR_OpArrayCopy::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_arraycopy(this);
|
||||
masm->emit_code_stub(stub());
|
||||
masm->append_code_stub(stub());
|
||||
}
|
||||
|
||||
void LIR_OpUpdateCRC32::emit_code(LIR_Assembler* masm) {
|
||||
@ -1100,20 +1100,20 @@ void LIR_Op1::emit_code(LIR_Assembler* masm) {
|
||||
|
||||
void LIR_OpAllocObj::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_alloc_obj(this);
|
||||
masm->emit_code_stub(stub());
|
||||
masm->append_code_stub(stub());
|
||||
}
|
||||
|
||||
void LIR_OpBranch::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_opBranch(this);
|
||||
if (stub()) {
|
||||
masm->emit_code_stub(stub());
|
||||
masm->append_code_stub(stub());
|
||||
}
|
||||
}
|
||||
|
||||
void LIR_OpConvert::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_opConvert(this);
|
||||
if (stub() != NULL) {
|
||||
masm->emit_code_stub(stub());
|
||||
masm->append_code_stub(stub());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1123,13 +1123,13 @@ void LIR_Op2::emit_code(LIR_Assembler* masm) {
|
||||
|
||||
void LIR_OpAllocArray::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_alloc_array(this);
|
||||
masm->emit_code_stub(stub());
|
||||
masm->append_code_stub(stub());
|
||||
}
|
||||
|
||||
void LIR_OpTypeCheck::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_opTypeCheck(this);
|
||||
if (stub()) {
|
||||
masm->emit_code_stub(stub());
|
||||
masm->append_code_stub(stub());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1144,7 +1144,7 @@ void LIR_Op3::emit_code(LIR_Assembler* masm) {
|
||||
void LIR_OpLock::emit_code(LIR_Assembler* masm) {
|
||||
masm->emit_lock(this);
|
||||
if (stub()) {
|
||||
masm->emit_code_stub(stub());
|
||||
masm->append_code_stub(stub());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1127,6 +1127,7 @@ class LIR_Op: public CompilationResourceObj {
|
||||
virtual void print_instr(outputStream* out) const = 0;
|
||||
virtual void print_on(outputStream* st) const PRODUCT_RETURN;
|
||||
|
||||
virtual bool is_patching() { return false; }
|
||||
virtual LIR_OpCall* as_OpCall() { return NULL; }
|
||||
virtual LIR_OpJavaCall* as_OpJavaCall() { return NULL; }
|
||||
virtual LIR_OpLabel* as_OpLabel() { return NULL; }
|
||||
@ -1387,6 +1388,7 @@ class LIR_Op1: public LIR_Op {
|
||||
return (LIR_MoveKind)_flags;
|
||||
}
|
||||
|
||||
virtual bool is_patching() { return _patch != lir_patch_none; }
|
||||
virtual void emit_code(LIR_Assembler* masm);
|
||||
virtual LIR_Op1* as_Op1() { return this; }
|
||||
virtual const char * name() const PRODUCT_RETURN0;
|
||||
@ -1619,6 +1621,7 @@ public:
|
||||
int profiled_bci() const { return _profiled_bci; }
|
||||
bool should_profile() const { return _should_profile; }
|
||||
|
||||
virtual bool is_patching() { return _info_for_patch != NULL; }
|
||||
virtual void emit_code(LIR_Assembler* masm);
|
||||
virtual LIR_OpTypeCheck* as_OpTypeCheck() { return this; }
|
||||
void print_instr(outputStream* out) const PRODUCT_RETURN;
|
||||
|
@ -58,7 +58,7 @@ void LIR_Assembler::patching_epilog(PatchingStub* patch, LIR_PatchCode patch_cod
|
||||
_masm->nop();
|
||||
}
|
||||
patch->install(_masm, patch_code, obj, info);
|
||||
append_patching_stub(patch);
|
||||
append_code_stub(patch);
|
||||
|
||||
#ifdef ASSERT
|
||||
Bytecodes::Code code = info->scope()->method()->java_code_at_bci(info->stack()->bci());
|
||||
@ -131,11 +131,6 @@ LIR_Assembler::~LIR_Assembler() {
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::append_patching_stub(PatchingStub* stub) {
|
||||
_slow_case_stubs->append(stub);
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::check_codespace() {
|
||||
CodeSection* cs = _masm->code_section();
|
||||
if (cs->remaining() < (int)(NOT_LP64(1*K)LP64_ONLY(2*K))) {
|
||||
@ -144,7 +139,7 @@ void LIR_Assembler::check_codespace() {
|
||||
}
|
||||
|
||||
|
||||
void LIR_Assembler::emit_code_stub(CodeStub* stub) {
|
||||
void LIR_Assembler::append_code_stub(CodeStub* stub) {
|
||||
_slow_case_stubs->append(stub);
|
||||
}
|
||||
|
||||
@ -442,7 +437,7 @@ void LIR_Assembler::add_debug_info_for_null_check_here(CodeEmitInfo* cinfo) {
|
||||
|
||||
void LIR_Assembler::add_debug_info_for_null_check(int pc_offset, CodeEmitInfo* cinfo) {
|
||||
ImplicitNullCheckStub* stub = new ImplicitNullCheckStub(pc_offset, cinfo);
|
||||
emit_code_stub(stub);
|
||||
append_code_stub(stub);
|
||||
}
|
||||
|
||||
void LIR_Assembler::add_debug_info_for_div0_here(CodeEmitInfo* info) {
|
||||
@ -451,7 +446,7 @@ void LIR_Assembler::add_debug_info_for_div0_here(CodeEmitInfo* info) {
|
||||
|
||||
void LIR_Assembler::add_debug_info_for_div0(int pc_offset, CodeEmitInfo* cinfo) {
|
||||
DivByZeroStub* stub = new DivByZeroStub(pc_offset, cinfo);
|
||||
emit_code_stub(stub);
|
||||
append_code_stub(stub);
|
||||
}
|
||||
|
||||
void LIR_Assembler::emit_rtcall(LIR_OpRTCall* op) {
|
||||
|
@ -144,7 +144,7 @@ class LIR_Assembler: public CompilationResourceObj {
|
||||
// stubs
|
||||
void emit_slow_case_stubs();
|
||||
void emit_static_call_stub();
|
||||
void emit_code_stub(CodeStub* op);
|
||||
void append_code_stub(CodeStub* op);
|
||||
void add_call_info_here(CodeEmitInfo* info) { add_call_info(code_offset(), info); }
|
||||
|
||||
// code patterns
|
||||
|
@ -2382,16 +2382,6 @@ OopMap* LinearScan::compute_oop_map(IntervalWalker* iw, LIR_Op* op, CodeEmitInfo
|
||||
int arg_count = frame_map()->oop_map_arg_count();
|
||||
OopMap* map = new OopMap(frame_size, arg_count);
|
||||
|
||||
// Check if this is a patch site.
|
||||
bool is_patch_info = false;
|
||||
if (op->code() == lir_move) {
|
||||
assert(!is_call_site, "move must not be a call site");
|
||||
assert(op->as_Op1() != NULL, "move must be LIR_Op1");
|
||||
LIR_Op1* move = (LIR_Op1*)op;
|
||||
|
||||
is_patch_info = move->patch_code() != lir_patch_none;
|
||||
}
|
||||
|
||||
// Iterate through active intervals
|
||||
for (Interval* interval = iw->active_first(fixedKind); interval != Interval::end(); interval = interval->next()) {
|
||||
int assigned_reg = interval->assigned_reg();
|
||||
@ -2406,7 +2396,7 @@ OopMap* LinearScan::compute_oop_map(IntervalWalker* iw, LIR_Op* op, CodeEmitInfo
|
||||
// moves, any intervals which end at this instruction are included
|
||||
// in the oop map since we may safepoint while doing the patch
|
||||
// before we've consumed the inputs.
|
||||
if (is_patch_info || op->id() < interval->current_to()) {
|
||||
if (op->is_patching() || op->id() < interval->current_to()) {
|
||||
|
||||
// caller-save registers must not be included into oop-maps at calls
|
||||
assert(!is_call_site || assigned_reg >= nof_regs || !is_caller_save(assigned_reg), "interval is in a caller-save register at a call -> register will be overwritten");
|
||||
|
@ -274,6 +274,8 @@ void ClassLoaderData::add_class(Klass* k) {
|
||||
MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
|
||||
Klass* old_value = _klasses;
|
||||
k->set_next_link(old_value);
|
||||
// Make sure linked class is stable, since the class list is walked without a lock
|
||||
OrderAccess::storestore();
|
||||
// link the new item into the list
|
||||
_klasses = k;
|
||||
|
||||
|
@ -2036,7 +2036,7 @@ void ClassVerifier::verify_switch(
|
||||
while ((bcp + padding_offset) < aligned_bcp) {
|
||||
if(*(bcp + padding_offset) != 0) {
|
||||
verify_error(ErrorContext::bad_code(bci),
|
||||
"Nonzero padding byte in lookswitch or tableswitch");
|
||||
"Nonzero padding byte in lookupswitch or tableswitch");
|
||||
return;
|
||||
}
|
||||
padding_offset++;
|
||||
|
@ -307,6 +307,9 @@ bool CompilerOracle::should_print(methodHandle method) {
|
||||
return (check_predicate(PrintCommand, method));
|
||||
}
|
||||
|
||||
bool CompilerOracle::should_print_methods() {
|
||||
return lists[PrintCommand] != NULL;
|
||||
}
|
||||
|
||||
bool CompilerOracle::should_log(methodHandle method) {
|
||||
if (!LogCompilation) return false;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2014, 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
|
||||
@ -73,6 +73,9 @@ class CompilerOracle : AllStatic {
|
||||
// For updating the oracle file
|
||||
static void append_comment_to_file(const char* message);
|
||||
static void append_exclude_to_file(methodHandle method);
|
||||
|
||||
// Tells whether there are any methods to print for print_method_statistics()
|
||||
static bool should_print_methods();
|
||||
};
|
||||
|
||||
#endif // SHARE_VM_COMPILER_COMPILERORACLE_HPP
|
||||
|
@ -1267,8 +1267,10 @@ IRT_END
|
||||
// This is a support of the JVMTI PopFrame interface.
|
||||
// Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument
|
||||
// and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters.
|
||||
// The dmh argument is a reference to a DirectMethoHandle that has a member name field.
|
||||
IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh,
|
||||
// The member_name argument is a saved reference (in local#0) to the member_name.
|
||||
// For backward compatibility with some JDK versions (7, 8) it can also be a direct method handle.
|
||||
// FIXME: remove DMH case after j.l.i.InvokerBytecodeGenerator code shape is updated.
|
||||
IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address member_name,
|
||||
Method* method, address bcp))
|
||||
Bytecodes::Code code = Bytecodes::code_at(method, bcp);
|
||||
if (code != Bytecodes::_invokestatic) {
|
||||
@ -1280,8 +1282,12 @@ IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread,
|
||||
Symbol* mname = cpool->name_ref_at(cp_index);
|
||||
|
||||
if (MethodHandles::has_member_arg(cname, mname)) {
|
||||
oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh);
|
||||
thread->set_vm_result(member_name);
|
||||
oop member_name_oop = (oop) member_name;
|
||||
if (java_lang_invoke_DirectMethodHandle::is_instance(member_name_oop)) {
|
||||
// FIXME: remove after j.l.i.InvokerBytecodeGenerator code shape is updated.
|
||||
member_name_oop = java_lang_invoke_DirectMethodHandle::member(member_name_oop);
|
||||
}
|
||||
thread->set_vm_result(member_name_oop);
|
||||
}
|
||||
IRT_END
|
||||
#endif // INCLUDE_JVMTI
|
||||
|
@ -3095,7 +3095,7 @@ void Metaspace::ergo_initialize() {
|
||||
|
||||
void Metaspace::global_initialize() {
|
||||
// Initialize the alignment for shared spaces.
|
||||
int max_alignment = os::vm_page_size();
|
||||
int max_alignment = os::vm_allocation_granularity();
|
||||
size_t cds_total = 0;
|
||||
|
||||
MetaspaceShared::set_max_alignment(max_alignment);
|
||||
|
@ -1273,6 +1273,12 @@ bool InstanceKlass::find_field_from_offset(int offset, bool is_static, fieldDesc
|
||||
|
||||
|
||||
void InstanceKlass::methods_do(void f(Method* method)) {
|
||||
// Methods aren't stable until they are loaded. This can be read outside
|
||||
// a lock through the ClassLoaderData for profiling
|
||||
if (!is_loaded()) {
|
||||
return;
|
||||
}
|
||||
|
||||
int len = methods()->length();
|
||||
for (int index = 0; index < len; index++) {
|
||||
Method* m = methods()->at(index);
|
||||
|
@ -155,6 +155,9 @@ void C2Compiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
|
||||
}
|
||||
}
|
||||
|
||||
// print inlining for last compilation only
|
||||
C.dump_print_inlining();
|
||||
|
||||
// No retry; just break the loop.
|
||||
break;
|
||||
}
|
||||
|
@ -672,6 +672,7 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
|
||||
_print_inlining_list(NULL),
|
||||
_print_inlining_stream(NULL),
|
||||
_print_inlining_idx(0),
|
||||
_print_inlining_output(NULL),
|
||||
_preserve_jvm_state(0),
|
||||
_interpreter_frame_size(0) {
|
||||
C = this;
|
||||
@ -978,6 +979,7 @@ Compile::Compile( ciEnv* ci_env,
|
||||
_print_inlining_list(NULL),
|
||||
_print_inlining_stream(NULL),
|
||||
_print_inlining_idx(0),
|
||||
_print_inlining_output(NULL),
|
||||
_preserve_jvm_state(0),
|
||||
_allowed_reasons(0),
|
||||
_interpreter_frame_size(0) {
|
||||
@ -2207,7 +2209,7 @@ void Compile::Optimize() {
|
||||
|
||||
} // (End scope of igvn; run destructor if necessary for asserts.)
|
||||
|
||||
dump_inlining();
|
||||
process_print_inlining();
|
||||
// A method with only infinite loops has no edges entering loops from root
|
||||
{
|
||||
NOT_PRODUCT( TracePhase t2("graphReshape", &_t_graphReshaping, TimeCompiler); )
|
||||
@ -3868,7 +3870,7 @@ void Compile::print_inlining_assert_ready() {
|
||||
assert(!_print_inlining || _print_inlining_stream->size() == 0, "loosing data");
|
||||
}
|
||||
|
||||
void Compile::dump_inlining() {
|
||||
void Compile::process_print_inlining() {
|
||||
bool do_print_inlining = print_inlining() || print_intrinsics();
|
||||
if (do_print_inlining || log() != NULL) {
|
||||
// Print inlining message for candidates that we couldn't inline
|
||||
@ -3885,9 +3887,21 @@ void Compile::dump_inlining() {
|
||||
}
|
||||
}
|
||||
if (do_print_inlining) {
|
||||
ResourceMark rm;
|
||||
stringStream ss;
|
||||
for (int i = 0; i < _print_inlining_list->length(); i++) {
|
||||
tty->print("%s", _print_inlining_list->adr_at(i)->ss()->as_string());
|
||||
ss.print("%s", _print_inlining_list->adr_at(i)->ss()->as_string());
|
||||
}
|
||||
size_t end = ss.size();
|
||||
_print_inlining_output = NEW_ARENA_ARRAY(comp_arena(), char, end+1);
|
||||
strncpy(_print_inlining_output, ss.base(), end+1);
|
||||
_print_inlining_output[end] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void Compile::dump_print_inlining() {
|
||||
if (_print_inlining_output != NULL) {
|
||||
tty->print_raw(_print_inlining_output);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -420,6 +420,7 @@ class Compile : public Phase {
|
||||
stringStream* _print_inlining_stream;
|
||||
GrowableArray<PrintInliningBuffer>* _print_inlining_list;
|
||||
int _print_inlining_idx;
|
||||
char* _print_inlining_output;
|
||||
|
||||
// Only keep nodes in the expensive node list that need to be optimized
|
||||
void cleanup_expensive_nodes(PhaseIterGVN &igvn);
|
||||
@ -917,7 +918,8 @@ class Compile : public Phase {
|
||||
|
||||
void remove_useless_late_inlines(GrowableArray<CallGenerator*>* inlines, Unique_Node_List &useful);
|
||||
|
||||
void dump_inlining();
|
||||
void process_print_inlining();
|
||||
void dump_print_inlining();
|
||||
|
||||
bool over_inlining_cutoff() const {
|
||||
if (!inlining_incrementally()) {
|
||||
|
@ -307,9 +307,9 @@ JvmtiEnv::GetObjectSize(jobject object, jlong* size_ptr) {
|
||||
!java_lang_Class::is_primitive(mirror)) {
|
||||
Klass* k = java_lang_Class::as_Klass(mirror);
|
||||
assert(k != NULL, "class for non-primitive mirror must exist");
|
||||
*size_ptr = k->size() * wordSize;
|
||||
*size_ptr = (jlong)k->size() * wordSize;
|
||||
} else {
|
||||
*size_ptr = mirror->size() * wordSize;
|
||||
*size_ptr = (jlong)mirror->size() * wordSize;
|
||||
}
|
||||
return JVMTI_ERROR_NONE;
|
||||
} /* end GetObjectSize */
|
||||
|
@ -33,9 +33,11 @@
|
||||
#include "prims/whitebox.hpp"
|
||||
#include "prims/wbtestmethods/parserTests.hpp"
|
||||
|
||||
#include "runtime/thread.hpp"
|
||||
#include "runtime/arguments.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
|
||||
#include "utilities/debug.hpp"
|
||||
#include "utilities/macros.hpp"
|
||||
#include "utilities/exceptions.hpp"
|
||||
@ -576,6 +578,15 @@ WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jbo
|
||||
WB_END
|
||||
|
||||
|
||||
WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o))
|
||||
return (jlong) Thread::current()->stack_size();
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o))
|
||||
JavaThread* t = JavaThread::current();
|
||||
return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong) StackShadowPages * os::vm_page_size();
|
||||
WB_END
|
||||
|
||||
//Some convenience methods to deal with objects from java
|
||||
int WhiteBox::offset_for_field(const char* field_name, oop object,
|
||||
Symbol* signature_symbol) {
|
||||
@ -690,6 +701,8 @@ static JNINativeMethod methods[] = {
|
||||
{CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
|
||||
{CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
|
||||
(void*)&WB_GetNMethod },
|
||||
{CC"getThreadStackSize", CC"()J", (void*)&WB_GetThreadStackSize },
|
||||
{CC"getThreadRemainingStackSize", CC"()J", (void*)&WB_GetThreadRemainingStackSize },
|
||||
};
|
||||
|
||||
#undef CC
|
||||
|
@ -1449,7 +1449,7 @@ bool verify_object_alignment() {
|
||||
return true;
|
||||
}
|
||||
|
||||
uintx Arguments::max_heap_for_compressed_oops() {
|
||||
size_t Arguments::max_heap_for_compressed_oops() {
|
||||
// Avoid sign flip.
|
||||
assert(OopEncodingHeapMax > (uint64_t)os::vm_page_size(), "Unusual page size");
|
||||
// We need to fit both the NULL page and the heap into the memory budget, while
|
||||
|
@ -120,7 +120,8 @@ void collect_profiled_methods(Method* m) {
|
||||
}
|
||||
|
||||
void print_method_profiling_data() {
|
||||
if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData)) {
|
||||
if (ProfileInterpreter COMPILER1_PRESENT(|| C1UpdateMethodData) &&
|
||||
(PrintMethodData || CompilerOracle::should_print_methods())) {
|
||||
ResourceMark rm;
|
||||
HandleMark hm;
|
||||
collected_profiled_methods = new GrowableArray<Method*>(1024);
|
||||
|
97
hotspot/src/share/vm/runtime/sharedRuntimeMath.hpp
Normal file
97
hotspot/src/share/vm/runtime/sharedRuntimeMath.hpp
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 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
|
||||
* 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SHARE_VM_RUNTIME_SHAREDRUNTIMEMATH_HPP
|
||||
#define SHARE_VM_RUNTIME_SHAREDRUNTIMEMATH_HPP
|
||||
|
||||
#include <math.h>
|
||||
|
||||
// VM_LITTLE_ENDIAN is #defined appropriately in the Makefiles
|
||||
// [jk] this is not 100% correct because the float word order may different
|
||||
// from the byte order (e.g. on ARM FPA)
|
||||
#ifdef VM_LITTLE_ENDIAN
|
||||
# define __HI(x) *(1+(int*)&x)
|
||||
# define __LO(x) *(int*)&x
|
||||
#else
|
||||
# define __HI(x) *(int*)&x
|
||||
# define __LO(x) *(1+(int*)&x)
|
||||
#endif
|
||||
|
||||
static double copysignA(double x, double y) {
|
||||
__HI(x) = (__HI(x)&0x7fffffff)|(__HI(y)&0x80000000);
|
||||
return x;
|
||||
}
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (c) 1998 Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* scalbn (double x, int n)
|
||||
* scalbn(x,n) returns x* 2**n computed by exponent
|
||||
* manipulation rather than by actually performing an
|
||||
* exponentiation or a multiplication.
|
||||
*/
|
||||
|
||||
static const double
|
||||
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
|
||||
twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
|
||||
hugeX = 1.0e+300,
|
||||
tiny = 1.0e-300;
|
||||
|
||||
static double scalbnA (double x, int n) {
|
||||
int k,hx,lx;
|
||||
hx = __HI(x);
|
||||
lx = __LO(x);
|
||||
k = (hx&0x7ff00000)>>20; /* extract exponent */
|
||||
if (k==0) { /* 0 or subnormal x */
|
||||
if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
|
||||
x *= two54;
|
||||
hx = __HI(x);
|
||||
k = ((hx&0x7ff00000)>>20) - 54;
|
||||
if (n< -50000) return tiny*x; /*underflow*/
|
||||
}
|
||||
if (k==0x7ff) return x+x; /* NaN or Inf */
|
||||
k = k+n;
|
||||
if (k > 0x7fe) return hugeX*copysignA(hugeX,x); /* overflow */
|
||||
if (k > 0) /* normal result */
|
||||
{__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
|
||||
if (k <= -54) {
|
||||
if (n > 50000) /* in case integer overflow in n+k */
|
||||
return hugeX*copysignA(hugeX,x); /*overflow*/
|
||||
else return tiny*copysignA(tiny,x); /*underflow*/
|
||||
}
|
||||
k += 54; /* subnormal result */
|
||||
__HI(x) = (hx&0x800fffff)|(k<<20);
|
||||
return x*twom54;
|
||||
}
|
||||
|
||||
#endif // SHARE_VM_RUNTIME_SHAREDRUNTIMEMATH_HPP
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2014, 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
|
||||
@ -43,78 +43,7 @@
|
||||
# pragma optimize ( "", off )
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
// VM_LITTLE_ENDIAN is #defined appropriately in the Makefiles
|
||||
// [jk] this is not 100% correct because the float word order may different
|
||||
// from the byte order (e.g. on ARM)
|
||||
#ifdef VM_LITTLE_ENDIAN
|
||||
# define __HI(x) *(1+(int*)&x)
|
||||
# define __LO(x) *(int*)&x
|
||||
#else
|
||||
# define __HI(x) *(int*)&x
|
||||
# define __LO(x) *(1+(int*)&x)
|
||||
#endif
|
||||
|
||||
#if !defined(AIX)
|
||||
double copysign(double x, double y) {
|
||||
__HI(x) = (__HI(x)&0x7fffffff)|(__HI(y)&0x80000000);
|
||||
return x;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (c) 1998 Oracle and/or its affiliates. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
* scalbn (double x, int n)
|
||||
* scalbn(x,n) returns x* 2**n computed by exponent
|
||||
* manipulation rather than by actually performing an
|
||||
* exponentiation or a multiplication.
|
||||
*/
|
||||
|
||||
static const double
|
||||
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
|
||||
twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
|
||||
hugeX = 1.0e+300,
|
||||
tiny = 1.0e-300;
|
||||
|
||||
#if !defined(AIX)
|
||||
double scalbn (double x, int n) {
|
||||
int k,hx,lx;
|
||||
hx = __HI(x);
|
||||
lx = __LO(x);
|
||||
k = (hx&0x7ff00000)>>20; /* extract exponent */
|
||||
if (k==0) { /* 0 or subnormal x */
|
||||
if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
|
||||
x *= two54;
|
||||
hx = __HI(x);
|
||||
k = ((hx&0x7ff00000)>>20) - 54;
|
||||
if (n< -50000) return tiny*x; /*underflow*/
|
||||
}
|
||||
if (k==0x7ff) return x+x; /* NaN or Inf */
|
||||
k = k+n;
|
||||
if (k > 0x7fe) return hugeX*copysign(hugeX,x); /* overflow */
|
||||
if (k > 0) /* normal result */
|
||||
{__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
|
||||
if (k <= -54) {
|
||||
if (n > 50000) /* in case integer overflow in n+k */
|
||||
return hugeX*copysign(hugeX,x); /*overflow*/
|
||||
else return tiny*copysign(tiny,x); /*underflow*/
|
||||
}
|
||||
k += 54; /* subnormal result */
|
||||
__HI(x) = (hx&0x800fffff)|(k<<20);
|
||||
return x*twom54;
|
||||
}
|
||||
#endif
|
||||
#include "runtime/sharedRuntimeMath.hpp"
|
||||
|
||||
/* __ieee754_log(x)
|
||||
* Return the logarithm of x
|
||||
@ -719,7 +648,7 @@ double __ieee754_pow(double x, double y) {
|
||||
z = one-(r-z);
|
||||
j = __HI(z);
|
||||
j += (n<<20);
|
||||
if((j>>20)<=0) z = scalbn(z,n); /* subnormal output */
|
||||
if((j>>20)<=0) z = scalbnA(z,n); /* subnormal output */
|
||||
else __HI(z) += (n<<20);
|
||||
return s*z;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2014, 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
|
||||
@ -63,63 +63,7 @@
|
||||
#define SAFEBUF
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
// VM_LITTLE_ENDIAN is #defined appropriately in the Makefiles
|
||||
// [jk] this is not 100% correct because the float word order may different
|
||||
// from the byte order (e.g. on ARM)
|
||||
#ifdef VM_LITTLE_ENDIAN
|
||||
# define __HI(x) *(1+(int*)&x)
|
||||
# define __LO(x) *(int*)&x
|
||||
#else
|
||||
# define __HI(x) *(int*)&x
|
||||
# define __LO(x) *(1+(int*)&x)
|
||||
#endif
|
||||
|
||||
static double copysignA(double x, double y) {
|
||||
__HI(x) = (__HI(x)&0x7fffffff)|(__HI(y)&0x80000000);
|
||||
return x;
|
||||
}
|
||||
|
||||
/*
|
||||
* scalbn (double x, int n)
|
||||
* scalbn(x,n) returns x* 2**n computed by exponent
|
||||
* manipulation rather than by actually performing an
|
||||
* exponentiation or a multiplication.
|
||||
*/
|
||||
|
||||
static const double
|
||||
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
|
||||
twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
|
||||
hugeX = 1.0e+300,
|
||||
tiny = 1.0e-300;
|
||||
|
||||
static double scalbnA (double x, int n) {
|
||||
int k,hx,lx;
|
||||
hx = __HI(x);
|
||||
lx = __LO(x);
|
||||
k = (hx&0x7ff00000)>>20; /* extract exponent */
|
||||
if (k==0) { /* 0 or subnormal x */
|
||||
if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
|
||||
x *= two54;
|
||||
hx = __HI(x);
|
||||
k = ((hx&0x7ff00000)>>20) - 54;
|
||||
if (n< -50000) return tiny*x; /*underflow*/
|
||||
}
|
||||
if (k==0x7ff) return x+x; /* NaN or Inf */
|
||||
k = k+n;
|
||||
if (k > 0x7fe) return hugeX*copysignA(hugeX,x); /* overflow */
|
||||
if (k > 0) /* normal result */
|
||||
{__HI(x) = (hx&0x800fffff)|(k<<20); return x;}
|
||||
if (k <= -54) {
|
||||
if (n > 50000) /* in case integer overflow in n+k */
|
||||
return hugeX*copysignA(hugeX,x); /*overflow*/
|
||||
else return tiny*copysignA(tiny,x); /*underflow*/
|
||||
}
|
||||
k += 54; /* subnormal result */
|
||||
__HI(x) = (hx&0x800fffff)|(k<<20);
|
||||
return x*twom54;
|
||||
}
|
||||
#include "runtime/sharedRuntimeMath.hpp"
|
||||
|
||||
/*
|
||||
* __kernel_rem_pio2(x,y,e0,nx,prec,ipio2)
|
||||
|
@ -83,6 +83,7 @@ needs_jdk = \
|
||||
runtime/RedefineObject/TestRedefineObject.java \
|
||||
runtime/XCheckJniJsig/XCheckJSig.java \
|
||||
serviceability/attach/AttachWithStalePidFile.java \
|
||||
serviceability/jvmti/8036666/GetObjectLockCount.java \
|
||||
serviceability/sa/jmap-hprof/JMapHProfLargeHeapTest.java \
|
||||
serviceability/dcmd/DynLibDcmdTest.java
|
||||
|
||||
@ -134,9 +135,12 @@ needs_compact3 = \
|
||||
gc/parallelScavenge/TestDynShrinkHeap.java \
|
||||
runtime/InternalApi/ThreadCpuTimesDeadlock.java \
|
||||
serviceability/threads/TestFalseDeadLock.java \
|
||||
serviceability/jvmti/GetObjectSizeOverflow.java \
|
||||
serviceability/jvmti/TestRedefineWithUnresolvedClass.java \
|
||||
compiler/tiered/NonTieredLevelsTest.java \
|
||||
compiler/tiered/TieredLevelsTest.java \
|
||||
compiler/intrinsics/bmi/verifycode
|
||||
compiler/intrinsics/bmi/verifycode \
|
||||
runtime/whitebox/WBStackSize.java
|
||||
|
||||
# Compact 2 adds full VM tests
|
||||
compact2 = \
|
||||
|
@ -25,7 +25,6 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 7005594
|
||||
* @ignore 7117034
|
||||
* @summary Array overflow not handled correctly with loop optimzations
|
||||
*
|
||||
* @run shell Test7005594.sh
|
||||
|
@ -78,7 +78,7 @@ cp ${TESTSRC}/Test7005594.sh .
|
||||
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test7005594.java
|
||||
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} -Xms1600m -XX:+IgnoreUnrecognizedVMOptions -XX:-ZapUnusedHeapArea -Xcomp -XX:CompileOnly=Test7005594.test Test7005594 > test.out 2>&1
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} -Xmx1600m -Xms1600m -XX:+IgnoreUnrecognizedVMOptions -XX:-ZapUnusedHeapArea -Xcomp -XX:CompileOnly=Test7005594.test Test7005594 > test.out 2>&1
|
||||
|
||||
result=$?
|
||||
|
||||
@ -97,7 +97,7 @@ then
|
||||
fi
|
||||
|
||||
# The test should pass when no enough space for object heap
|
||||
grep "Could not reserve enough space for object heap" test.out
|
||||
grep "Could not reserve enough space for .*object heap" test.out
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
echo "Passed"
|
||||
|
@ -25,6 +25,12 @@ import com.oracle.java.testlibrary.cli.*;
|
||||
|
||||
/**
|
||||
* Base class for all X86 bit manipulation related command line options.
|
||||
*
|
||||
* Note that this test intended to verify that VM could be launched with
|
||||
* specific options and that values of these options processed correctly.
|
||||
* In order to do that test launch a new VM with tested options, the same
|
||||
* flavor-specific flag as one that was used for parent VM (-client, -server,
|
||||
* -minimal, -graal) and '-version'.
|
||||
*/
|
||||
public abstract class BMICommandLineOptionTestBase
|
||||
extends CPUSpecificCommandLineOptionTest {
|
||||
@ -58,10 +64,11 @@ public abstract class BMICommandLineOptionTestBase
|
||||
String supportedCPUFeatures[],
|
||||
String unsupportedCPUFeatures[]) {
|
||||
super(".*", supportedCPUFeatures, unsupportedCPUFeatures);
|
||||
this.optionName = optionName;
|
||||
this.warningMessage = warningMessage;
|
||||
this.errorMessage = CommandLineOptionTest.
|
||||
UNRECOGNIZED_OPTION_ERROR_FORMAT.format(optionName);
|
||||
this.optionName = optionName;
|
||||
this.warningMessage = warningMessage;
|
||||
this.errorMessage = String.format(
|
||||
CommandLineOptionTest.UNRECOGNIZED_OPTION_ERROR_FORMAT,
|
||||
optionName);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,6 +28,12 @@ import com.oracle.java.testlibrary.cli.*;
|
||||
* Test on bit manipulation related command line options,
|
||||
* that should be executed on CPU that supports all required
|
||||
* features.
|
||||
*
|
||||
* Note that this test intended to verify that VM could be launched with
|
||||
* specific options and that values of these options processed correctly.
|
||||
* In order to do that test launch a new VM with tested options, the same
|
||||
* flavor-specific flag as one that was used for parent VM (-client, -server,
|
||||
* -minimal, -graal) and '-version'.
|
||||
*/
|
||||
public class BMISupportedCPUTest extends BMICommandLineOptionTestBase {
|
||||
|
||||
@ -49,24 +55,38 @@ public class BMISupportedCPUTest extends BMICommandLineOptionTestBase {
|
||||
|
||||
@Override
|
||||
public void runTestCases() throws Throwable {
|
||||
// verify that VM will succesfully start up whithout warnings
|
||||
CommandLineOptionTest.
|
||||
verifyJVMStartup("-XX:+" + optionName,
|
||||
null, new String[] { warningMessage },
|
||||
ExitCode.OK);
|
||||
/*
|
||||
Verify that VM will successfully start up without warnings.
|
||||
VM will be launched with following flags:
|
||||
-XX:+<tested option> -version
|
||||
*/
|
||||
CommandLineOptionTest.verifySameJVMStartup(null,
|
||||
new String[] { warningMessage }, ExitCode.OK,
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, true));
|
||||
|
||||
// verify that VM will succesfully start up whithout warnings
|
||||
CommandLineOptionTest.
|
||||
verifyJVMStartup("-XX:-" + optionName,
|
||||
null, new String[] { warningMessage },
|
||||
ExitCode.OK);
|
||||
/*
|
||||
Verify that VM will successfully start up without warnings.
|
||||
VM will be launched with following flags:
|
||||
-XX:-<tested option> -version
|
||||
*/
|
||||
CommandLineOptionTest.verifySameJVMStartup(null,
|
||||
new String[] { warningMessage }, ExitCode.OK,
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, false));
|
||||
|
||||
// verify that on appropriate CPU option in on by default
|
||||
CommandLineOptionTest.verifyOptionValue(optionName, "true");
|
||||
/*
|
||||
Verify that on appropriate CPU option in on by default.
|
||||
VM will be launched with following flags:
|
||||
-version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true");
|
||||
|
||||
// verify that option could be explicitly turned off
|
||||
CommandLineOptionTest.verifyOptionValue(optionName, "false",
|
||||
"-XX:-" + optionName);
|
||||
/*
|
||||
Verify that option could be explicitly turned off.
|
||||
VM will be launched with following flags:
|
||||
-XX:-<tested option> -version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,12 @@ import com.oracle.java.testlibrary.cli.*;
|
||||
* Test on bit manipulation related command line options,
|
||||
* that should be executed on CPU that does not support
|
||||
* required features.
|
||||
*
|
||||
* Note that this test intended to verify that VM could be launched with
|
||||
* specific options and that values of these options processed correctly.
|
||||
* In order to do that test launch a new VM with tested options, the same
|
||||
* flavor-specific flag as one that was used for parent VM (-client, -server,
|
||||
* -minimal, -graal) and '-version'.
|
||||
*/
|
||||
public class BMIUnsupportedCPUTest extends BMICommandLineOptionTestBase {
|
||||
|
||||
@ -64,28 +70,38 @@ public class BMIUnsupportedCPUTest extends BMICommandLineOptionTestBase {
|
||||
*/
|
||||
public void unsupportedX86CPUTestCases() throws Throwable {
|
||||
|
||||
// verify that VM will succesfully start up, but output will
|
||||
// contain a warning
|
||||
CommandLineOptionTest.
|
||||
verifyJVMStartup("-XX:+" + optionName,
|
||||
new String[] { warningMessage },
|
||||
new String[] { errorMessage },
|
||||
ExitCode.OK);
|
||||
/*
|
||||
Verify that VM will successfully start up, but output will contain a
|
||||
warning. VM will be launched with following options:
|
||||
-XX:+<tested option> -version
|
||||
*/
|
||||
CommandLineOptionTest.verifySameJVMStartup(
|
||||
new String[] { warningMessage }, new String[] { errorMessage },
|
||||
ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(
|
||||
optionName, true));
|
||||
|
||||
// verify that VM will succesfully startup without any warnings
|
||||
CommandLineOptionTest.
|
||||
verifyJVMStartup("-XX:-" + optionName,
|
||||
null,
|
||||
new String[] { warningMessage, errorMessage },
|
||||
ExitCode.OK);
|
||||
/*
|
||||
Verify that VM will successfully startup without any warnings.
|
||||
VM will be launched with following options:
|
||||
-XX:-<tested option> -version
|
||||
*/
|
||||
CommandLineOptionTest.verifySameJVMStartup(null,
|
||||
new String[] { warningMessage, errorMessage }, ExitCode.OK,
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, false));
|
||||
|
||||
// verify that on unsupported CPUs option is off by default
|
||||
CommandLineOptionTest.verifyOptionValue(optionName, "false");
|
||||
/*
|
||||
Verify that on unsupported CPUs option is off by default.
|
||||
VM will be launched with following options: -version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false");
|
||||
|
||||
// verify that on unsupported CPUs option will be off even if
|
||||
// it was explicitly turned on by uset
|
||||
CommandLineOptionTest.verifyOptionValue(optionName, "false",
|
||||
"-XX:+" + optionName);
|
||||
/*
|
||||
Verify that on unsupported CPUs option will be off even if
|
||||
it was explicitly turned on by user. VM will be launched with
|
||||
following options: -XX:+<tested option> -version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, true));
|
||||
|
||||
}
|
||||
|
||||
@ -97,18 +113,17 @@ public class BMIUnsupportedCPUTest extends BMICommandLineOptionTestBase {
|
||||
*/
|
||||
public void unsupportedNonX86CPUTestCases() throws Throwable {
|
||||
|
||||
// verify that VM known nothing about tested option
|
||||
CommandLineOptionTest.
|
||||
verifyJVMStartup("-XX:+" + optionName,
|
||||
new String[] { errorMessage },
|
||||
null,
|
||||
ExitCode.FAIL);
|
||||
/*
|
||||
Verify that VM known nothing about tested option. VM will be launched
|
||||
with following options: -XX:[+-]<tested option> -version
|
||||
*/
|
||||
CommandLineOptionTest.verifySameJVMStartup(
|
||||
new String[] { errorMessage }, null, ExitCode.FAIL,
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, true));
|
||||
|
||||
CommandLineOptionTest.
|
||||
verifyJVMStartup("-XX:-" + optionName,
|
||||
new String[] { errorMessage },
|
||||
null,
|
||||
ExitCode.FAIL);
|
||||
CommandLineOptionTest.verifySameJVMStartup(
|
||||
new String[] { errorMessage }, null, ExitCode.FAIL,
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,8 @@ import com.oracle.java.testlibrary.*;
|
||||
import com.oracle.java.testlibrary.cli.*;
|
||||
|
||||
public class TestUseCountTrailingZerosInstructionOnSupportedCPU
|
||||
extends BMISupportedCPUTest {
|
||||
extends BMISupportedCPUTest {
|
||||
private static final String DISABLE_BMI = "-XX:-UseBMI1Instructions";
|
||||
|
||||
public TestUseCountTrailingZerosInstructionOnSupportedCPU() {
|
||||
super("UseCountTrailingZerosInstruction", TZCNT_WARNING, "bmi1");
|
||||
@ -51,18 +52,23 @@ public class TestUseCountTrailingZerosInstructionOnSupportedCPU
|
||||
|
||||
super.runTestCases();
|
||||
|
||||
// verify that option will be disabled if all BMI1 instuctions
|
||||
// are explicitly disabled
|
||||
CommandLineOptionTest.
|
||||
verifyOptionValue("UseCountTrailingZerosInstruction", "false",
|
||||
"-XX:-UseBMI1Instructions");
|
||||
/*
|
||||
Verify that option will be disabled if all BMI1 instructions
|
||||
are explicitly disabled. VM will be launched with following options:
|
||||
-XX:-UseBMI1Instructions -version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
|
||||
TestUseCountTrailingZerosInstructionOnSupportedCPU.DISABLE_BMI);
|
||||
|
||||
// verify that option could be turned on even if other BMI1
|
||||
// instructions were turned off
|
||||
CommandLineOptionTest.
|
||||
verifyOptionValue("UseCountTrailingZerosInstruction", "true",
|
||||
"-XX:-UseBMI1Instructions",
|
||||
"-XX:+UseCountTrailingZerosInstruction");
|
||||
/*
|
||||
Verify that option could be turned on even if other BMI1
|
||||
instructions were turned off. VM will be launched with following
|
||||
options: -XX:-UseBMI1Instructions
|
||||
-XX:+UseCountTrailingZerosInstruction -version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true",
|
||||
TestUseCountTrailingZerosInstructionOnSupportedCPU.DISABLE_BMI,
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, true));
|
||||
}
|
||||
|
||||
public static void main(String args[]) throws Throwable {
|
||||
|
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @bug 8031321
|
||||
* @summary Verify processing of UseCountTrailingZerosInstruction option
|
||||
* on CPU without TZCNT instuction (BMI1 feature) support.
|
||||
* on CPU without TZCNT instruction (BMI1 feature) support.
|
||||
* @library /testlibrary /testlibrary/whitebox
|
||||
* @build TestUseCountTrailingZerosInstructionOnUnsupportedCPU
|
||||
* BMIUnsupportedCPUTest
|
||||
@ -40,7 +40,8 @@ import com.oracle.java.testlibrary.*;
|
||||
import com.oracle.java.testlibrary.cli.*;
|
||||
|
||||
public class TestUseCountTrailingZerosInstructionOnUnsupportedCPU
|
||||
extends BMIUnsupportedCPUTest {
|
||||
extends BMIUnsupportedCPUTest {
|
||||
private static final String ENABLE_BMI = "-XX:+UseBMI1Instructions";
|
||||
|
||||
public TestUseCountTrailingZerosInstructionOnUnsupportedCPU() {
|
||||
super("UseCountTrailingZerosInstruction", TZCNT_WARNING, "bmi1");
|
||||
@ -51,16 +52,24 @@ public class TestUseCountTrailingZerosInstructionOnUnsupportedCPU
|
||||
|
||||
super.unsupportedX86CPUTestCases();
|
||||
|
||||
// verify that option will not be turned on during
|
||||
// UseBMI1Instuctions processing
|
||||
CommandLineOptionTest.
|
||||
verifyOptionValue("UseCountTrailingZerosInstruction", "false",
|
||||
"-XX:+UseBMI1Instructions");
|
||||
/*
|
||||
Verify that option will not be turned on during UseBMI1Instructions
|
||||
processing. VM will be launched with following options:
|
||||
-XX:+UseBMI1Instructions -version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
|
||||
TestUseCountTrailingZerosInstructionOnUnsupportedCPU.
|
||||
ENABLE_BMI);
|
||||
|
||||
CommandLineOptionTest.
|
||||
verifyOptionValue("UseCountTrailingZerosInstruction", "false",
|
||||
"-XX:+UseCountTrailingZerosInstruction",
|
||||
"-XX:+UseBMI1Instructions");
|
||||
/*
|
||||
VM will be launched with following options:
|
||||
-XX:+UseCountTrailingZerosInstruction -XX:+UseBMI1Instructions
|
||||
-version
|
||||
*/
|
||||
CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false",
|
||||
CommandLineOptionTest.prepareBooleanFlag(optionName, true),
|
||||
TestUseCountTrailingZerosInstructionOnUnsupportedCPU.
|
||||
ENABLE_BMI);
|
||||
}
|
||||
|
||||
public static void main(String args[]) throws Throwable {
|
||||
|
@ -25,7 +25,7 @@
|
||||
* @test
|
||||
* @bug 8031752
|
||||
* @summary speculative traps need to be cleaned up at GC
|
||||
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx1M TestSpecTrapClassUnloading
|
||||
* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:-BackgroundCompilation -XX:+UseTypeSpeculation -XX:TypeProfileLevel=222 -XX:CompileCommand=exclude,java.lang.reflect.Method::invoke -XX:CompileCommand=exclude,sun.reflect.DelegatingMethodAccessorImpl::invoke -Xmx512M TestSpecTrapClassUnloading
|
||||
*
|
||||
*/
|
||||
|
||||
@ -45,7 +45,7 @@ public class TestSpecTrapClassUnloading {
|
||||
MemoryChunk other;
|
||||
long[] array;
|
||||
MemoryChunk(MemoryChunk other) {
|
||||
other = other;
|
||||
this.other = other;
|
||||
array = new long[1024 * 1024 * 1024];
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@
|
||||
* @bug 8016479
|
||||
* @summary Verify that the heap shrinks after full GC according to the current values of the Min/MaxHeapFreeRatio flags
|
||||
* @library /testlibrary
|
||||
* @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -verbose:gc TestDynShrinkHeap
|
||||
* @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -Xmx1g -verbose:gc TestDynShrinkHeap
|
||||
*/
|
||||
import com.oracle.java.testlibrary.DynamicVMOption;
|
||||
import java.lang.management.ManagementFactory;
|
||||
@ -41,7 +41,7 @@ public class TestDynShrinkHeap {
|
||||
public static final String MAX_FREE_RATIO_FLAG_NAME = "MaxHeapFreeRatio";
|
||||
|
||||
private static ArrayList<byte[]> list = new ArrayList<>(0);
|
||||
private static final int M = 1024 * 1024; // to make heap more manageable by test code
|
||||
private static final int LEN = 512 * 1024 + 1;
|
||||
|
||||
public TestDynShrinkHeap() {
|
||||
}
|
||||
@ -69,12 +69,12 @@ public class TestDynShrinkHeap {
|
||||
}
|
||||
|
||||
private void eat() {
|
||||
for (int i = 0; i < M; i++) {
|
||||
for (int i = 0; i < LEN; i++) {
|
||||
list.add(new byte[1024]);
|
||||
}
|
||||
MemoryUsagePrinter.printMemoryUsage("allocated " + M + " arrays");
|
||||
MemoryUsagePrinter.printMemoryUsage("allocated " + LEN + " arrays");
|
||||
|
||||
list.subList(0, M / 2).clear();
|
||||
list.subList(0, LEN / 2).clear();
|
||||
System.gc();
|
||||
MemoryUsagePrinter.printMemoryUsage("array halved");
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
public class T
|
||||
{
|
||||
public static boolean foo(boolean bar)
|
||||
{
|
||||
return bar;
|
||||
}
|
||||
|
||||
public static void printIt()
|
||||
{
|
||||
System.out.println("Hello");
|
||||
}
|
||||
}
|
@ -1,90 +0,0 @@
|
||||
#include <assert.h>
|
||||
#include <jni.h>
|
||||
#include <alloca.h>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
union env_union
|
||||
{
|
||||
void *void_env;
|
||||
JNIEnv *jni_env;
|
||||
};
|
||||
|
||||
union env_union tmp;
|
||||
JNIEnv* env;
|
||||
JavaVM* jvm;
|
||||
JavaVMInitArgs vm_args;
|
||||
JavaVMOption options[1];
|
||||
jclass class_id;
|
||||
jmethodID method_id;
|
||||
jint result;
|
||||
|
||||
long product(unsigned long n, unsigned long m) {
|
||||
if (m == 1) {
|
||||
return n;
|
||||
} else {
|
||||
int *p = alloca(sizeof (int));
|
||||
*p = n;
|
||||
return product (n, m-1) + *p;
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
floobydust (void *p)
|
||||
{
|
||||
(*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
|
||||
env = tmp.jni_env;
|
||||
|
||||
class_id = (*env)->FindClass (env, "T");
|
||||
assert (class_id);
|
||||
|
||||
method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
|
||||
assert (method_id);
|
||||
|
||||
(*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
|
||||
|
||||
(*jvm)->DetachCurrentThread(jvm);
|
||||
|
||||
printf("%ld\n", product(5000,5000));
|
||||
|
||||
(*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
|
||||
env = tmp.jni_env;
|
||||
|
||||
class_id = (*env)->FindClass (env, "T");
|
||||
assert (class_id);
|
||||
|
||||
method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
|
||||
assert (method_id);
|
||||
|
||||
(*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
|
||||
|
||||
(*jvm)->DetachCurrentThread(jvm);
|
||||
|
||||
printf("%ld\n", product(5000,5000));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, const char** argv)
|
||||
{
|
||||
options[0].optionString = "-Xss320k";
|
||||
|
||||
vm_args.version = JNI_VERSION_1_2;
|
||||
vm_args.ignoreUnrecognized = JNI_TRUE;
|
||||
vm_args.options = options;
|
||||
vm_args.nOptions = 1;
|
||||
|
||||
result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args);
|
||||
assert (result >= 0);
|
||||
|
||||
env = tmp.jni_env;
|
||||
|
||||
floobydust (NULL);
|
||||
|
||||
pthread_t thr;
|
||||
pthread_create (&thr, NULL, floobydust, NULL);
|
||||
pthread_join (thr, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 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
|
||||
* 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <jni.h>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
JavaVM* jvm;
|
||||
|
||||
void *
|
||||
floobydust (void *p) {
|
||||
JNIEnv *env;
|
||||
jclass class_id;
|
||||
jmethodID method_id;
|
||||
|
||||
(*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL);
|
||||
|
||||
class_id = (*env)->FindClass (env, "DoOverflow");
|
||||
assert (class_id);
|
||||
|
||||
method_id = (*env)->GetStaticMethodID(env, class_id, "printIt", "()V");
|
||||
assert (method_id);
|
||||
|
||||
(*env)->CallStaticVoidMethod(env, class_id, method_id, NULL);
|
||||
|
||||
(*jvm)->DetachCurrentThread(jvm);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, const char** argv) {
|
||||
JavaVMOption options[1];
|
||||
options[0].optionString = (char*) "-Xss320k";
|
||||
|
||||
JavaVMInitArgs vm_args;
|
||||
vm_args.version = JNI_VERSION_1_2;
|
||||
vm_args.ignoreUnrecognized = JNI_TRUE;
|
||||
vm_args.options = options;
|
||||
vm_args.nOptions = 1;
|
||||
|
||||
JNIEnv* env;
|
||||
jint result = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
|
||||
assert(result >= 0);
|
||||
|
||||
pthread_t thr;
|
||||
pthread_create(&thr, NULL, floobydust, NULL);
|
||||
pthread_join(thr, NULL);
|
||||
|
||||
floobydust(NULL);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,77 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright (c) 2013 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
|
||||
# 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
|
||||
# @test testme.sh
|
||||
# @bug 8009062
|
||||
# @summary Poor performance of JNI AttachCurrentThread after fix for 7017193
|
||||
# @compile DoOverflow.java
|
||||
# @run shell testme.sh
|
||||
|
||||
set -x
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
TESTSRC=${PWD}
|
||||
echo "TESTSRC not set. Using "${TESTSRC}" as default"
|
||||
fi
|
||||
echo "TESTSRC=${TESTSRC}"
|
||||
## Adding common setup Variables for running shell tests.
|
||||
. ${TESTSRC}/../../test_env.sh
|
||||
|
||||
if [ "${VM_OS}" != "linux" ]
|
||||
then
|
||||
echo "Test only valid for Linux"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
gcc_cmd=`which gcc`
|
||||
if [ "x$gcc_cmd" = "x" ]; then
|
||||
echo "WARNING: gcc not found. Cannot execute test." 2>&1
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
CFLAGS="-m${VM_BITS}"
|
||||
|
||||
LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH
|
||||
|
||||
cp ${TESTSRC}/invoke.c .
|
||||
|
||||
# Copy the result of our @compile action:
|
||||
cp ${TESTCLASSES}/DoOverflow.class .
|
||||
|
||||
echo "Architecture: ${VM_CPU}"
|
||||
echo "Compilation flag: ${CFLAGS}"
|
||||
echo "VM type: ${VM_TYPE}"
|
||||
echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}"
|
||||
|
||||
# Note pthread may not be found thus invoke creation will fail to be created.
|
||||
# Check to ensure you have a /usr/lib/libpthread.so if you don't please look
|
||||
# for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
|
||||
|
||||
$gcc_cmd -DLINUX ${CFLAGS} -o invoke \
|
||||
-I${TESTJAVA}/include -I${TESTJAVA}/include/linux \
|
||||
-L${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE} \
|
||||
-ljvm -lpthread invoke.c
|
||||
|
||||
./invoke
|
||||
exit $?
|
@ -30,12 +30,16 @@ public class DoOverflow {
|
||||
overflow();
|
||||
}
|
||||
|
||||
public static void printAlive() {
|
||||
System.out.println("Java thread is alive.");
|
||||
}
|
||||
|
||||
public static void printIt() {
|
||||
System.out.println("Going to overflow stack");
|
||||
try {
|
||||
new DoOverflow().overflow();
|
||||
} catch(java.lang.StackOverflowError e) {
|
||||
System.out.println("Overflow OK " + count);
|
||||
System.out.println("Test PASSED. Got StackOverflowError at " + count + " iteration");
|
||||
}
|
||||
}
|
||||
}
|
266
hotspot/test/runtime/StackGuardPages/invoke.c
Normal file
266
hotspot/test/runtime/StackGuardPages/invoke.c
Normal file
@ -0,0 +1,266 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2014, 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
|
||||
* 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*
|
||||
*/
|
||||
|
||||
/* This code tests the fact that we actually remove stack guard page when calling
|
||||
* JavaThread::exit() i.e. when detaching from current thread.
|
||||
* We overflow the stack and check that we get access error because of a guard page.
|
||||
* Than we detach from vm thread and overflow stack once again. This time we shouldn't
|
||||
* get access error because stack guard page is removed
|
||||
*
|
||||
* Notice: due a complicated interaction of signal handlers, the test may crash.
|
||||
* It's OK - don't file a bug.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <jni.h>
|
||||
#include <alloca.h>
|
||||
#include <signal.h>
|
||||
#include <sys/mman.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ucontext.h>
|
||||
#include <setjmp.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
JavaVM* _jvm;
|
||||
|
||||
static jmp_buf context;
|
||||
|
||||
static int _last_si_code = -1;
|
||||
static int _failures = 0;
|
||||
static int _rec_count = 0;
|
||||
static int _kp_rec_count = 0;
|
||||
|
||||
pid_t gettid() {
|
||||
return (pid_t) syscall(SYS_gettid);
|
||||
}
|
||||
|
||||
static void handler(int sig, siginfo_t *si, void *unused) {
|
||||
_last_si_code = si->si_code;
|
||||
printf("Got SIGSEGV(%d) at address: 0x%lx\n",si->si_code, (long) si->si_addr);
|
||||
longjmp(context, 1);
|
||||
}
|
||||
|
||||
void set_signal_handler() {
|
||||
static char altstack[SIGSTKSZ];
|
||||
|
||||
stack_t ss = {
|
||||
.ss_size = SIGSTKSZ,
|
||||
.ss_flags = 0,
|
||||
.ss_sp = altstack
|
||||
};
|
||||
|
||||
struct sigaction sa = {
|
||||
.sa_sigaction = handler,
|
||||
.sa_flags = SA_ONSTACK | SA_SIGINFO | SA_RESETHAND
|
||||
};
|
||||
|
||||
_last_si_code = -1;
|
||||
|
||||
sigaltstack(&ss, 0);
|
||||
sigemptyset(&sa.sa_mask);
|
||||
if (sigaction(SIGSEGV, &sa, NULL) == -1) {
|
||||
fprintf(stderr, "Test ERROR. Can't set sigaction (%d)\n", errno);
|
||||
exit(7);
|
||||
}
|
||||
}
|
||||
|
||||
void *run_java_overflow (void *p) {
|
||||
JNIEnv *env;
|
||||
jclass class_id;
|
||||
jmethodID method_id;
|
||||
int res;
|
||||
|
||||
res = (*_jvm)->AttachCurrentThread(_jvm, (void**)&env, NULL);
|
||||
if (res != JNI_OK) {
|
||||
fprintf(stderr, "Test ERROR. Can't attach to current thread\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
class_id = (*env)->FindClass (env, "DoOverflow");
|
||||
if (class_id == NULL) {
|
||||
fprintf(stderr, "Test ERROR. Can't load class DoOverflow\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
method_id = (*env)->GetStaticMethodID(env, class_id, "printIt", "()V");
|
||||
if (method_id == NULL) {
|
||||
fprintf(stderr, "Test ERROR. Can't find method DoOverflow.printIt\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
(*env)->CallStaticVoidMethod(env, class_id, method_id, NULL);
|
||||
|
||||
res = (*_jvm)->DetachCurrentThread(_jvm);
|
||||
if (res != JNI_OK) {
|
||||
fprintf(stderr, "Test ERROR. Can't call detach from current thread\n");
|
||||
exit(7);
|
||||
}
|
||||
}
|
||||
|
||||
void do_overflow(){
|
||||
int *p = alloca(sizeof(int));
|
||||
if (_kp_rec_count == 0 || _rec_count < _kp_rec_count) {
|
||||
_rec_count ++;
|
||||
do_overflow();
|
||||
}
|
||||
}
|
||||
|
||||
void *run_native_overflow(void *p) {
|
||||
// Test that stack guard page is correctly set for initial and non initial thread
|
||||
// and correctly removed for the initial thread
|
||||
JNIEnv *env;
|
||||
jclass class_id;
|
||||
jmethodID method_id;
|
||||
int res;
|
||||
|
||||
printf("run_native_overflow %ld\n", (long) gettid());
|
||||
|
||||
res = (*_jvm)->AttachCurrentThread(_jvm, (void **)&env, NULL);
|
||||
if (res != JNI_OK) {
|
||||
fprintf(stderr, "Test ERROR. Can't attach to current thread\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
class_id = (*env)->FindClass (env, "DoOverflow");
|
||||
if (class_id == NULL) {
|
||||
fprintf(stderr, "Test ERROR. Can't load class DoOverflow\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
method_id = (*env)->GetStaticMethodID (env, class_id, "printAlive", "()V");
|
||||
if (method_id == NULL) {
|
||||
fprintf(stderr, "Test ERROR. Can't find method DoOverflow.printAlive\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
(*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
|
||||
|
||||
set_signal_handler();
|
||||
if (! setjmp(context)) {
|
||||
do_overflow();
|
||||
}
|
||||
|
||||
if (_last_si_code == SEGV_ACCERR) {
|
||||
printf("Test PASSED. Got access violation accessing guard page at %d\n", _rec_count);
|
||||
}
|
||||
|
||||
res = (*_jvm)->DetachCurrentThread(_jvm);
|
||||
if (res != JNI_OK) {
|
||||
fprintf(stderr, "Test ERROR. Can't call detach from current thread\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
if (getpid() != gettid()) {
|
||||
// For non-initial thread we don't unmap the region but call os::uncommit_memory and keep PROT_NONE
|
||||
// so if host has enough swap space we will get the same SEGV with code SEGV_ACCERR(2) trying
|
||||
// to access it as if the guard page is present.
|
||||
// We have no way to check this, so bail out, marking test as succeeded
|
||||
printf("Test PASSED. Not initial thread\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Limit depth of recursion for second run. It can't exceed one for first run.
|
||||
_kp_rec_count = _rec_count;
|
||||
_rec_count = 0;
|
||||
|
||||
set_signal_handler();
|
||||
if (! setjmp(context)) {
|
||||
do_overflow();
|
||||
}
|
||||
|
||||
if (_last_si_code == SEGV_ACCERR) {
|
||||
++ _failures;
|
||||
fprintf(stderr,"Test FAILED. Stack guard page is still there at %d\n", _rec_count);
|
||||
} else if (_last_si_code == -1) {
|
||||
printf("Test PASSED. No stack guard page is present. Maximum recursion level reached at %d\n", _rec_count);
|
||||
}
|
||||
else{
|
||||
printf("Test PASSED. No stack guard page is present. SIGSEGV(%d) at %d\n", _last_si_code, _rec_count);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void usage() {
|
||||
fprintf(stderr, "Usage: invoke test_java_overflow\n");
|
||||
fprintf(stderr, " invoke test_native_overflow\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
|
||||
int main (int argc, const char** argv) {
|
||||
JavaVMInitArgs vm_args;
|
||||
JavaVMOption options[2];
|
||||
JNIEnv* env;
|
||||
|
||||
printf("Test started with pid: %ld\n", (long) getpid());
|
||||
|
||||
options[0].optionString = "-Xint";
|
||||
options[1].optionString = "-Xss320k";
|
||||
|
||||
vm_args.version = JNI_VERSION_1_2;
|
||||
vm_args.ignoreUnrecognized = JNI_TRUE;
|
||||
vm_args.options = options;
|
||||
vm_args.nOptions = 2;
|
||||
|
||||
if (JNI_CreateJavaVM (&_jvm, (void **)&env, &vm_args) < 0 ) {
|
||||
fprintf(stderr, "Test ERROR. Can't create JavaVM\n");
|
||||
exit(7);
|
||||
}
|
||||
|
||||
pthread_t thr;
|
||||
|
||||
if (argc > 1 && strcmp(argv[1], "test_java_overflow") == 0) {
|
||||
printf("\nTesting JAVA_OVERFLOW\n");
|
||||
|
||||
printf("Testing stack guard page behaviour for other thread\n");
|
||||
pthread_create (&thr, NULL, run_java_overflow, NULL);
|
||||
pthread_join (thr, NULL);
|
||||
|
||||
printf("Testing stack guard page behaviour for initial thread\n");
|
||||
run_java_overflow(NULL);
|
||||
// This test crash on error
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (argc > 1 && strcmp(argv[1], "test_native_overflow") == 0) {
|
||||
printf("\nTesting NATIVE_OVERFLOW\n");
|
||||
|
||||
printf("Testing stack guard page behaviour for other thread\n");
|
||||
pthread_create (&thr, NULL, run_native_overflow, NULL);
|
||||
pthread_join (thr, NULL);
|
||||
|
||||
printf("Testing stack guard page behaviour for initial thread\n");
|
||||
run_native_overflow(NULL);
|
||||
|
||||
exit((_failures > 0) ? 1 : 0);
|
||||
}
|
||||
|
||||
fprintf(stderr, "Test ERROR. Unknown parameter %s\n", ((argc > 1) ? argv[1] : "none"));
|
||||
usage();
|
||||
}
|
@ -1,13 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
##
|
||||
## @test Test6929067.sh
|
||||
## @bug 6929067
|
||||
## @bug 8021296
|
||||
## @bug 8025519
|
||||
## @summary Stack guard pages should be removed when thread is detached
|
||||
## @run shell Test6929067.sh
|
||||
##
|
||||
#
|
||||
# @test testme.sh
|
||||
# @summary Stack guard pages should be installed correctly and removed when thread is detached
|
||||
# @run shell testme.sh
|
||||
#
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then
|
||||
@ -32,12 +29,9 @@ fi
|
||||
|
||||
CFLAGS=-m${VM_BITS}
|
||||
|
||||
LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
|
||||
LD_LIBRARY_PATH=.:${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE}:${TESTJAVA}/lib/${VM_CPU}/${VM_TYPE}:/usr/lib:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH
|
||||
|
||||
cp ${TESTSRC}/*.java ${THIS_DIR}
|
||||
${COMPILEJAVA}/bin/javac *.java
|
||||
|
||||
echo "Architecture: ${VM_CPU}"
|
||||
echo "Compilation flag: ${CFLAGS}"
|
||||
echo "VM type: ${VM_TYPE}"
|
||||
@ -47,10 +41,20 @@ echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH}"
|
||||
# Check to ensure you have a /usr/lib/libpthread.so if you don't please look
|
||||
# for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
|
||||
|
||||
$gcc_cmd -DLINUX ${CFLAGS} -o invoke \
|
||||
cp ${TESTSRC}/DoOverflow.java .
|
||||
${COMPILEJAVA}/bin/javac DoOverflow.java
|
||||
|
||||
$gcc_cmd -DLINUX -g3 ${CFLAGS} -o invoke \
|
||||
-I${TESTJAVA}/include -I${TESTJAVA}/include/linux \
|
||||
-L${TESTJAVA}/jre/lib/${VM_CPU}/${VM_TYPE} \
|
||||
-L${TESTJAVA}/lib/${VM_CPU}/${VM_TYPE} \
|
||||
${TESTSRC}/invoke.c -ljvm -lpthread
|
||||
|
||||
./invoke
|
||||
if [ $? -ne 0 ] ; then
|
||||
echo "Compile failed, Ignoring failed compilation and forcing the test to pass"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
./invoke test_java_overflow
|
||||
./invoke test_native_overflow
|
||||
exit $?
|
121
hotspot/test/runtime/whitebox/WBStackSize.java
Normal file
121
hotspot/test/runtime/whitebox/WBStackSize.java
Normal file
@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 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
|
||||
* 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test WBStackSize
|
||||
* @summary verify that whitebox functions getThreadFullStackSize() and getThreadRemainingStackSize are working
|
||||
* @library /testlibrary /testlibrary/whitebox
|
||||
* @build WBStackSize
|
||||
* @run main ClassFileInstaller sun.hotspot.WhiteBox
|
||||
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xss512k WBStackSize
|
||||
*/
|
||||
|
||||
/*
|
||||
* The test may product a false failure if too big StackYellowPages/StackRedPages/ShackShadowPages
|
||||
* VM options are specified. The proper test would retrieve the page size from VM and account for these options
|
||||
* instead of check below:
|
||||
* Math.abs(actualStackSize - configStackSize) > configStackSize * 0.1
|
||||
*
|
||||
* Please file a test bug, if this is a problem.
|
||||
*/
|
||||
|
||||
import com.sun.management.HotSpotDiagnosticMXBean;
|
||||
import sun.hotspot.WhiteBox;
|
||||
|
||||
public class WBStackSize {
|
||||
|
||||
static final long K = 1024;
|
||||
|
||||
static final long MIN_STACK_SIZE = 8 * K;
|
||||
static final long MAX_STACK_SIZE_ALLOCATED_IN_MAIN = 200 * K; // current value is about 130k on 64-bit platforms
|
||||
|
||||
static final WhiteBox wb = WhiteBox.getWhiteBox();
|
||||
|
||||
static long stackSizeOnOverflow = -1;
|
||||
|
||||
static int eatAllStack() {
|
||||
return eatAllStack() * 2;
|
||||
}
|
||||
|
||||
static void testStackOverflow() {
|
||||
|
||||
stackSizeOnOverflow = wb.getThreadRemainingStackSize();
|
||||
|
||||
if (stackSizeOnOverflow > MIN_STACK_SIZE) {
|
||||
|
||||
try {
|
||||
testStackOverflow();
|
||||
} catch (StackOverflowError e) {
|
||||
// We caught SOE too early. The error will be reported in main()
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
try {
|
||||
eatAllStack();
|
||||
throw new RuntimeException("Haven't caught StackOverflowError at all");
|
||||
} catch (StackOverflowError e) {
|
||||
// OK: we caught the anticipated error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
HotSpotDiagnosticMXBean bean = sun.management.ManagementFactoryHelper.getDiagnosticMXBean();
|
||||
long configStackSize = Long.valueOf(bean.getVMOption("ThreadStackSize").getValue()) * K;
|
||||
|
||||
System.out.println("ThreadStackSize VM option: " + configStackSize);
|
||||
|
||||
long actualStackSize = wb.getThreadStackSize();
|
||||
System.out.println("Full stack size: " + actualStackSize);
|
||||
|
||||
if (Math.abs(actualStackSize - configStackSize) > configStackSize * 0.1) {
|
||||
throw new RuntimeException("getThreadFullStackSize value [" + actualStackSize
|
||||
+ "] should be within 90%..110% of the value returned by HotSpotDiagnosticMXBean");
|
||||
}
|
||||
|
||||
long remainingStackSize = wb.getThreadRemainingStackSize();
|
||||
System.out.println("Remaining stack size in main(): " + remainingStackSize);
|
||||
|
||||
// Up to 200k can be already allocated by VM
|
||||
if (remainingStackSize > configStackSize
|
||||
|| (configStackSize > MAX_STACK_SIZE_ALLOCATED_IN_MAIN
|
||||
&& remainingStackSize < configStackSize - MAX_STACK_SIZE_ALLOCATED_IN_MAIN)) {
|
||||
|
||||
throw new RuntimeException("getThreadRemainingStackSize value [" + remainingStackSize
|
||||
+ "] should be at least ThreadStackSize value [" + configStackSize + "] minus ["
|
||||
+ MAX_STACK_SIZE_ALLOCATED_IN_MAIN + "]");
|
||||
}
|
||||
|
||||
testStackOverflow();
|
||||
|
||||
if (stackSizeOnOverflow > MIN_STACK_SIZE) {
|
||||
throw new RuntimeException("Caught StackOverflowError too early: when there were "
|
||||
+ stackSizeOnOverflow + " bytes in stack");
|
||||
} else if (stackSizeOnOverflow < 0) {
|
||||
throw new RuntimeException("Internal test error: stackRemainingSize < 0");
|
||||
} else {
|
||||
System.out.println("Caught StackOverflowError as expected");
|
||||
}
|
||||
}
|
||||
}
|
64
hotspot/test/serviceability/jvmti/GetObjectSizeOverflow.java
Normal file
64
hotspot/test/serviceability/jvmti/GetObjectSizeOverflow.java
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (c) 2014 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
|
||||
* 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
import java.io.PrintWriter;
|
||||
import com.oracle.java.testlibrary.*;
|
||||
|
||||
/*
|
||||
* Test to verify GetObjectSize does not overflow on a 600M element int[]
|
||||
*
|
||||
* @test
|
||||
* @bug 8027230
|
||||
* @library /testlibrary
|
||||
* @build GetObjectSizeOverflowAgent
|
||||
* @run main ClassFileInstaller GetObjectSizeOverflowAgent
|
||||
* @run main GetObjectSizeOverflow
|
||||
*/
|
||||
public class GetObjectSizeOverflow {
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
if (!Platform.is64bit()) {
|
||||
System.out.println("Test needs a 4GB heap and can only be run as a 64bit process, skipping.");
|
||||
return;
|
||||
}
|
||||
|
||||
PrintWriter pw = new PrintWriter("MANIFEST.MF");
|
||||
pw.println("Premain-Class: GetObjectSizeOverflowAgent");
|
||||
pw.close();
|
||||
|
||||
ProcessBuilder pb = new ProcessBuilder();
|
||||
pb.command(new String[] { JDKToolFinder.getJDKTool("jar"), "cmf", "MANIFEST.MF", "agent.jar", "GetObjectSizeOverflowAgent.class"});
|
||||
pb.start().waitFor();
|
||||
|
||||
ProcessBuilder pt = ProcessTools.createJavaProcessBuilder(true, "-Xmx4000m", "-javaagent:agent.jar", "GetObjectSizeOverflowAgent");
|
||||
OutputAnalyzer output = new OutputAnalyzer(pt.start());
|
||||
|
||||
if (output.getStdout().contains("Could not reserve enough space") || output.getStderr().contains("java.lang.OutOfMemoryError")) {
|
||||
System.out.println("stdout: " + output.getStdout());
|
||||
System.out.println("stderr: " + output.getStderr());
|
||||
System.out.println("Test could not reserve or allocate enough space, skipping");
|
||||
return;
|
||||
}
|
||||
|
||||
output.stdoutShouldContain("GetObjectSizeOverflow passed");
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 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
|
||||
* 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
import java.lang.instrument.*;
|
||||
|
||||
public class GetObjectSizeOverflowAgent {
|
||||
|
||||
static Instrumentation instrumentation;
|
||||
|
||||
public static void premain(String agentArgs, Instrumentation instrumentation) {
|
||||
GetObjectSizeOverflowAgent.instrumentation = instrumentation;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
int[] a = new int[600_000_000];
|
||||
long size = instrumentation.getObjectSize(a);
|
||||
|
||||
if (size < 2_400_000_000L) {
|
||||
throw new RuntimeException("Invalid size of array, expected >= 2400000000, got " + size);
|
||||
}
|
||||
|
||||
System.out.println("GetObjectSizeOverflow passed");
|
||||
}
|
||||
}
|
@ -150,6 +150,8 @@ public class WhiteBox {
|
||||
public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations);
|
||||
public native void runMemoryUnitTests();
|
||||
public native void readFromNoaccessArea();
|
||||
public native long getThreadStackSize();
|
||||
public native long getThreadRemainingStackSize();
|
||||
|
||||
// CPU features
|
||||
public native String getCPUFeatures();
|
||||
|
@ -257,3 +257,5 @@ f93a792fe37279d4d37aea86a99f3abbdc6fe79b jdk9-b09
|
||||
e88cecf5a21b760ff7d7761c2db6bb8c82bc9f0c jdk9-b12
|
||||
5eaf717f6e36037a6d3744ffeee0e4c88e64a0d2 jdk9-b13
|
||||
32b3fc4bc7374a34d52b7f4e2391b4b4b0c084e8 jdk9-b14
|
||||
6bad71866c7598587860e0981b0b0e51ec8c0476 jdk9-b15
|
||||
a1461221b05d4620e4d7d1907e2a0282aaedf31c jdk9-b16
|
||||
|
@ -260,3 +260,5 @@ c9e8bb8c1144a966ca7b481142c6b5e55d14a29c jdk9-b09
|
||||
779f8b21c75f83e3918dac8499e4d0ecb3a54ed7 jdk9-b12
|
||||
3d42204854c9f703e3ccdc8891248e73057713ab jdk9-b13
|
||||
02e58850b7062825308413d420f2b02c1f25a724 jdk9-b14
|
||||
e9780330017a6b464a385356d77e5136f9de8d09 jdk9-b15
|
||||
1e1a3b2215b7551d88e89d1ca8c1e1ebe3d3c0ab jdk9-b16
|
||||
|
@ -257,3 +257,5 @@ ab06ba2894313a47e4969ca37792ff119c49e711 jdk9-b10
|
||||
83d9bc20973de232cae45b139fdff8a4549c130f jdk9-b12
|
||||
c7c8002d02721e02131d104549ebeb8b379fb8d2 jdk9-b13
|
||||
5c7a17a81afd0906b53ee31d95a3211c96ff6b25 jdk9-b14
|
||||
4537360f09fe23ab339ee588747b657feb12d0c8 jdk9-b15
|
||||
ab7d2c565b0de5bee1361d282d4029371327fc9e jdk9-b16
|
||||
|
@ -74,19 +74,16 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
JDK_TARGET_LIST := $(subst $(JDK_IMAGE_DIR)/,$(JDK_BUNDLE_DIR)/Home/,$(JDK_FILE_LIST))
|
||||
JRE_TARGET_LIST := $(subst $(JRE_IMAGE_DIR)/,$(JRE_BUNDLE_DIR)/Home/,$(JRE_FILE_LIST))
|
||||
|
||||
# The old builds implementation of this did not preserve symlinks so
|
||||
# make sure they are followed and the contents copied instead.
|
||||
# To fix this, remove -L
|
||||
# Copy empty directories (jre/lib/applet).
|
||||
$(JDK_BUNDLE_DIR)/Home/%: $(JDK_IMAGE_DIR)/%
|
||||
$(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
|
||||
$(MKDIR) -p $(@D)
|
||||
if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -L '$<' '$@'; fi
|
||||
if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -P '$<' '$@'; fi
|
||||
|
||||
$(JRE_BUNDLE_DIR)/Home/%: $(JRE_IMAGE_DIR)/%
|
||||
$(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@)
|
||||
$(MKDIR) -p $(@D)
|
||||
if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -L '$<' '$@'; fi
|
||||
if [ -d "$<" ]; then $(MKDIR) -p $@; else $(CP) -f -R -P '$<' '$@'; fi
|
||||
|
||||
$(JDK_BUNDLE_DIR)/MacOS/libjli.dylib:
|
||||
$(ECHO) Creating link $(patsubst $(OUTPUT_ROOT)/%,%,$@)
|
||||
|
@ -373,7 +373,7 @@ ifndef OPENJDK
|
||||
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
||||
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/32bit, \
|
||||
BIN := $(JDK_OUTPUTDIR)/classes_ab/32bit, \
|
||||
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
|
||||
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/32))
|
||||
|
||||
$(BUILD_ACCESSBRIDGE_32): $(BUILD_JDK)
|
||||
|
||||
@ -382,7 +382,7 @@ ifndef OPENJDK
|
||||
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
||||
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/legacy, \
|
||||
BIN := $(JDK_OUTPUTDIR)/classes_ab/legacy, \
|
||||
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
|
||||
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/legacy))
|
||||
|
||||
$(BUILD_ACCESSBRIDGE_LEGACY): $(BUILD_JDK)
|
||||
|
||||
@ -393,7 +393,7 @@ ifndef OPENJDK
|
||||
JAVAC_FLAGS := -cp $(JDK_OUTPUTDIR)/classes, \
|
||||
SRC := $(JDK_OUTPUTDIR)/gensrc_ab/64bit, \
|
||||
BIN := $(JDK_OUTPUTDIR)/classes_ab/64bit, \
|
||||
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers))
|
||||
HEADERS := $(JDK_OUTPUTDIR)/gensrc_headers_ab/64))
|
||||
|
||||
$(BUILD_ACCESSBRIDGE_64): $(BUILD_JDK)
|
||||
|
||||
|
@ -428,7 +428,7 @@ ifeq ($(USE_EXTERNAL_LIBZ), true)
|
||||
UNPACKEXE_CFLAGS := -DSYSTEM_ZLIB
|
||||
UNPACKEXE_ZIPOBJS := -lz
|
||||
else
|
||||
UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
|
||||
UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
|
||||
UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \
|
||||
$(JDK_OUTPUTDIR)/objs/libzip/deflate$(OBJ_SUFFIX) \
|
||||
$(JDK_OUTPUTDIR)/objs/libzip/trees$(OBJ_SUFFIX) \
|
||||
@ -442,11 +442,6 @@ else
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
|
||||
UNPACKEXE_CFLAGS += -xregs=no%appl
|
||||
UNPACKEXE_LDFLAGS_solaris += -xmemalign=4s
|
||||
endif
|
||||
|
||||
UNPACKEXE_LANG := C
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
UNPACKEXE_LANG := C++
|
||||
|
@ -30,7 +30,6 @@ COPY_PATTERNS := .icu _dict .dat _options .js aliasmap .spp .wav .css \
|
||||
|
||||
# These directories should not be copied at all
|
||||
EXCLUDES += \
|
||||
com/sun/org/apache/xml/internal/security/resource/schema \
|
||||
java/awt/doc-files \
|
||||
java/lang/doc-files \
|
||||
javax/swing/doc-files \
|
||||
|
@ -552,40 +552,53 @@ $(eval $(call SetupArchive,BUILD_CT_SYM, $(IMAGES_OUTPUTDIR)/symbols/_the.symbol
|
||||
|
||||
##########################################################################################
|
||||
|
||||
SRC_ZIP_INCLUDES = \
|
||||
com/sun/corba \
|
||||
com/sun/image/codec/jpeg \
|
||||
com/sun/imageio \
|
||||
com/sun/java_cup \
|
||||
com/sun/javadoc \
|
||||
com/sun/java/swing \
|
||||
com/sun/jmx \
|
||||
com/sun/naming \
|
||||
com/sun/org/apache \
|
||||
com/sun/security/auth \
|
||||
com/sun/security/jgss \
|
||||
com/sun/source \
|
||||
java \
|
||||
javax/accessibility \
|
||||
javax/annotation \
|
||||
javax/imageio \
|
||||
javax/lang \
|
||||
javax/management \
|
||||
javax/naming \
|
||||
javax/print \
|
||||
javax/rmi \
|
||||
javax/script \
|
||||
javax/security \
|
||||
javax/sound \
|
||||
javax/sql \
|
||||
javax/swing \
|
||||
javax/tools \
|
||||
javax/xml \
|
||||
org/ietf \
|
||||
org/omg \
|
||||
org/w3c/dom \
|
||||
org/xml/sax \
|
||||
#
|
||||
ifdef OPENJDK
|
||||
SRC_ZIP_INCLUDES = \
|
||||
com \
|
||||
java \
|
||||
javax \
|
||||
jdk \
|
||||
org \
|
||||
sun \
|
||||
#
|
||||
SRC_ZIP_EXCLUDES =
|
||||
else
|
||||
SRC_ZIP_INCLUDES = \
|
||||
com/sun/corba \
|
||||
com/sun/image/codec/jpeg \
|
||||
com/sun/imageio \
|
||||
com/sun/java_cup \
|
||||
com/sun/javadoc \
|
||||
com/sun/java/swing \
|
||||
com/sun/jmx \
|
||||
com/sun/naming \
|
||||
com/sun/org/apache \
|
||||
com/sun/security/auth \
|
||||
com/sun/security/jgss \
|
||||
com/sun/source \
|
||||
java \
|
||||
javax/accessibility \
|
||||
javax/annotation \
|
||||
javax/imageio \
|
||||
javax/lang \
|
||||
javax/management \
|
||||
javax/naming \
|
||||
javax/print \
|
||||
javax/rmi \
|
||||
javax/script \
|
||||
javax/security \
|
||||
javax/sound \
|
||||
javax/sql \
|
||||
javax/swing \
|
||||
javax/tools \
|
||||
javax/xml \
|
||||
org/ietf \
|
||||
org/omg \
|
||||
org/w3c/dom \
|
||||
org/xml/sax \
|
||||
#
|
||||
SRC_ZIP_EXCLUDES = javax/swing/beaninfo
|
||||
endif
|
||||
|
||||
SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes
|
||||
SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc
|
||||
@ -616,7 +629,7 @@ $(eval $(call MakeDir, $(IMAGES_OUTPUTDIR)/src))
|
||||
$(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \
|
||||
SRC := $(SRC_ZIP_SRCS) $(IMAGES_OUTPUTDIR)/src, \
|
||||
INCLUDES := $(SRC_ZIP_INCLUDES) launcher, \
|
||||
EXCLUDES := javax/swing/beaninfo, \
|
||||
EXCLUDES := $(SRC_ZIP_EXCLUDES), \
|
||||
SUFFIXES := .java .c .h, \
|
||||
ZIP := $(IMAGES_OUTPUTDIR)/src.zip, \
|
||||
EXTRA_DEPS := $(LAUNCHER_ZIP_SRC)))
|
||||
|
@ -27,7 +27,7 @@ DISABLE_WARNINGS := -Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,-
|
||||
|
||||
# To build with all warnings enabled, do the following:
|
||||
# make JAVAC_WARNINGS="-Xlint:all -Xmaxwarns 10000"
|
||||
JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,cast,classfile,dep-ann,divzero,empty,overloads,serial,static,try,varargs -Werror
|
||||
JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,cast,classfile,dep-ann,divzero,empty,fallthrough,overloads,serial,static,try,varargs -Werror
|
||||
|
||||
# Any java code executed during a JDK build to build other parts of the JDK must be
|
||||
# executed by the bootstrap JDK (probably with -Xbootclasspath/p: ) and for this
|
||||
|
@ -1251,7 +1251,7 @@ ifndef BUILD_HEADLESS_ONLY
|
||||
LIBSPLASHSCREEN_LDFLAGS_SUFFIX :=
|
||||
|
||||
ifneq ($(USE_EXTERNAL_LIBZ), true)
|
||||
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
|
||||
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
|
||||
LIBSPLASHSCREEN_CFLAGS += $(ZLIB_CPPFLAGS)
|
||||
endif
|
||||
|
||||
|
@ -231,9 +231,9 @@ $(BUILD_LIBJAVA): $(BUILD_LIBFDLIBM)
|
||||
BUILD_LIBZIP_EXCLUDES :=
|
||||
ifeq ($(USE_EXTERNAL_LIBZ), true)
|
||||
LIBZ := -lz
|
||||
LIBZIP_EXCLUDES += zlib-1.2.5
|
||||
LIBZIP_EXCLUDES += zlib-1.2.8
|
||||
else
|
||||
ZLIB_CPPFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
|
||||
ZLIB_CPPFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
|
||||
endif
|
||||
|
||||
BUILD_LIBZIP_REORDER :=
|
||||
@ -410,7 +410,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
|
||||
endif
|
||||
|
||||
ifneq ($(USE_EXTERNAL_LIBZ), true)
|
||||
BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
|
||||
BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.8
|
||||
LIBJLI_CFLAGS += $(ZLIB_CPPFLAGS)
|
||||
BUILD_LIBJLI_FILES += \
|
||||
inflate.c \
|
||||
|
@ -143,7 +143,8 @@ ifndef OPENJDK
|
||||
define SetupAccessBridge
|
||||
# Parameter 1 Suffix
|
||||
# Parameter 2 Machine
|
||||
# Parameter 3 ACCESSBRIDGE_ARCH_ suffix
|
||||
# Parameter 3 ACCESSBRIDGE_ARCH_ suffix and name of directory where gensrc headers
|
||||
# are found.
|
||||
|
||||
$(call SetupNativeCompilation,BUILD_JAWTACCESSBRIDGE$1, \
|
||||
LIBRARY = JAWTAccessBridge$1, \
|
||||
@ -153,7 +154,8 @@ ifndef OPENJDK
|
||||
LANG := C++, \
|
||||
OPTIMIZATION := LOW, \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) \
|
||||
-DACCESSBRIDGE_ARCH_$3, \
|
||||
-DACCESSBRIDGE_ARCH_$3 \
|
||||
-I$(JDK_OUTPUTDIR)/gensrc_headers_ab/$3, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
|
||||
winspool.lib jawt.lib comdlg32.lib advapi32.lib shell32.lib \
|
||||
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
|
||||
@ -179,7 +181,8 @@ ifndef OPENJDK
|
||||
LANG := C++, \
|
||||
OPTIMIZATION := LOW, \
|
||||
CFLAGS := $(CFLAGS_JDKLIB) \
|
||||
-DACCESSBRIDGE_ARCH_$3, \
|
||||
-DACCESSBRIDGE_ARCH_$3 \
|
||||
-I$(JDK_OUTPUTDIR)/gensrc_headers_ab/$3, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
|
||||
winspool.lib comdlg32.lib advapi32.lib shell32.lib \
|
||||
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
|
||||
@ -204,7 +207,8 @@ ifndef OPENJDK
|
||||
LANG := C++, \
|
||||
OPTIMIZATION := LOW, \
|
||||
CFLAGS := $(filter-out -MD, $(CFLAGS_JDKLIB)) -MT \
|
||||
-DACCESSBRIDGE_ARCH_$3, \
|
||||
-DACCESSBRIDGE_ARCH_$3 \
|
||||
-I$(JDK_OUTPUTDIR)/gensrc_headers_ab/$3, \
|
||||
LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
|
||||
winspool.lib comdlg32.lib advapi32.lib shell32.lib \
|
||||
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
|
||||
@ -225,7 +229,7 @@ ifndef OPENJDK
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
|
||||
$(eval $(call SetupAccessBridge,-32,I386,32))
|
||||
$(eval $(call SetupAccessBridge,,I386,LEGACY))
|
||||
$(eval $(call SetupAccessBridge,,I386,legacy))
|
||||
else
|
||||
$(eval $(call SetupAccessBridge,-64,X64,64))
|
||||
endif
|
||||
|
@ -88,7 +88,7 @@ PROFILE_2_RTJAR_INCLUDE_PACKAGES := \
|
||||
java/sql \
|
||||
javax/rmi/ssl \
|
||||
javax/sql \
|
||||
javax/transaction \
|
||||
javax/transaction/xa \
|
||||
javax/xml \
|
||||
org/w3c \
|
||||
org/xml/sax \
|
||||
@ -223,7 +223,8 @@ FULL_JRE_RTJAR_INCLUDE_TYPES := \
|
||||
javax/management/remote/rmi/_RMIConnection_Stub.class \
|
||||
javax/management/remote/rmi/_RMIServerImpl_Tie.class \
|
||||
javax/management/remote/rmi/_RMIServer_Stub.class \
|
||||
javax/rmi/*.class
|
||||
javax/rmi/*.class \
|
||||
javax/transaction/*.class
|
||||
|
||||
FULL_JRE_RTJAR_EXCLUDE_TYPES :=
|
||||
|
||||
|
@ -512,7 +512,7 @@ class ConstantPool {
|
||||
}
|
||||
static String qualifiedStringValue(String s1, String s234) {
|
||||
// Qualification by dot must decompose uniquely. Second string might already be qualified.
|
||||
assert(s1.indexOf(".") < 0);
|
||||
assert(s1.indexOf('.') < 0);
|
||||
return s1+"."+s234;
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ public final class CorbanameUrl {
|
||||
}
|
||||
location = url.substring(addrStart, addrEnd);
|
||||
|
||||
int keyStart = location.indexOf("/");
|
||||
int keyStart = location.indexOf('/');
|
||||
if (keyStart >= 0) {
|
||||
// Has key string
|
||||
if (keyStart == (location.length() -1)) {
|
||||
|
@ -336,7 +336,7 @@ public class RegistryContext implements Context, Referenceable {
|
||||
String url = "rmi://";
|
||||
|
||||
// Enclose IPv6 literal address in '[' and ']'
|
||||
url = (host.indexOf(":") > -1) ? url + "[" + host + "]" :
|
||||
url = (host.indexOf(':') > -1) ? url + "[" + host + "]" :
|
||||
url + host;
|
||||
if (port > 0) {
|
||||
url += ":" + Integer.toString(port);
|
||||
|
@ -149,7 +149,7 @@ abstract public class GenericURLContext implements Context {
|
||||
* foo:rest/of/name foo:
|
||||
*/
|
||||
protected String getURLPrefix(String url) throws NamingException {
|
||||
int start = url.indexOf(":");
|
||||
int start = url.indexOf(':');
|
||||
|
||||
if (start < 0) {
|
||||
throw new OperationNotSupportedException("Invalid URL: " + url);
|
||||
@ -160,7 +160,7 @@ abstract public class GenericURLContext implements Context {
|
||||
start += 2; // skip double slash
|
||||
|
||||
// find last slash
|
||||
int posn = url.indexOf("/", start);
|
||||
int posn = url.indexOf('/', start);
|
||||
if (posn >= 0) {
|
||||
start = posn;
|
||||
} else {
|
||||
|
@ -1,347 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by XMLSpy v4 (Altova) -->
|
||||
<xsd:schema targetNamespace="http://uri.etsi.org/01903/v1.1.1#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://uri.etsi.org/01903/v1.1.1#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" xsi:schemaLocation="http://www.w3.org/2000/09/xmldsig# xmldsig-core-schema.xsd">
|
||||
<xsd:element name="Any" type="AnyType"/>
|
||||
<xsd:complexType name="AnyType" mixed="true">
|
||||
<xsd:sequence>
|
||||
<xsd:any namespace="##any"/>
|
||||
</xsd:sequence>
|
||||
<xsd:anyAttribute namespace="##any"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="ObjectIdentifier" type="ObjectIdentifierType"/>
|
||||
<xsd:complexType name="ObjectIdentifierType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Identifier" type="IdentifierType"/>
|
||||
<xsd:element name="Description" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="DocumentationReferences" type="DocumentationReferencesType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="IdentifierType">
|
||||
<xsd:simpleContent>
|
||||
<xsd:extension base="xsd:anyURI">
|
||||
<xsd:attribute name="Qualifier" type="QualifierType" use="optional"/>
|
||||
</xsd:extension>
|
||||
</xsd:simpleContent>
|
||||
</xsd:complexType>
|
||||
<xsd:simpleType name="QualifierType">
|
||||
<xsd:restriction base="xsd:string">
|
||||
<xsd:enumeration value="OIDAsURI"/>
|
||||
<xsd:enumeration value="OIDAsURN"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
<xsd:complexType name="DocumentationReferencesType">
|
||||
<xsd:sequence maxOccurs="unbounded">
|
||||
<xsd:element name="DocumentationReference" type="xsd:anyURI"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="EncapsulatedPKIData" type="EncapsulatedPKIDataType"/>
|
||||
<xsd:complexType name="EncapsulatedPKIDataType">
|
||||
<xsd:simpleContent>
|
||||
<xsd:extension base="xsd:base64Binary">
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:extension>
|
||||
</xsd:simpleContent>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="TimeStamp" type="TimeStampType"/>
|
||||
<xsd:complexType name="TimeStampType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="HashDataInfo" type="HashDataInfoType" maxOccurs="unbounded"/>
|
||||
<xsd:choice>
|
||||
<xsd:element name="EncapsulatedTimeStamp" type="EncapsulatedPKIDataType"/>
|
||||
<xsd:element name="XMLTimeStamp" type="AnyType"/>
|
||||
</xsd:choice>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="HashDataInfoType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Transforms" type="ds:TransformsType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="uri" type="xsd:anyURI" use="required"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="QualifyingProperties" type="QualifyingPropertiesType"/>
|
||||
<xsd:complexType name="QualifyingPropertiesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="SignedProperties" type="SignedPropertiesType" minOccurs="0"/>
|
||||
<xsd:element name="UnsignedProperties" type="UnsignedPropertiesType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="Target" type="xsd:anyURI" use="required"/>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SignedProperties" type="SignedPropertiesType"/>
|
||||
<xsd:complexType name="SignedPropertiesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="SignedSignatureProperties" type="SignedSignaturePropertiesType"/>
|
||||
<xsd:element name="SignedDataObjectProperties" type="SignedDataObjectPropertiesType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="UnsignedProperties" type="UnsignedPropertiesType"/>
|
||||
<xsd:complexType name="UnsignedPropertiesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="UnsignedSignatureProperties" type="UnsignedSignaturePropertiesType" minOccurs="0"/>
|
||||
<xsd:element name="UnsignedDataObjectProperties" type="UnsignedDataObjectPropertiesType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SignedSignatureProperties" type="SignedSignaturePropertiesType"/>
|
||||
<xsd:complexType name="SignedSignaturePropertiesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="SigningTime" type="xsd:dateTime"/>
|
||||
<xsd:element name="SigningCertificate" type="CertIDListType"/>
|
||||
<xsd:element name="SignaturePolicyIdentifier" type="SignaturePolicyIdentifierType"/>
|
||||
<xsd:element name="SignatureProductionPlace" type="SignatureProductionPlaceType" minOccurs="0"/>
|
||||
<xsd:element name="SignerRole" type="SignerRoleType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SignedDataObjectProperties" type="SignedDataObjectPropertiesType"/>
|
||||
<xsd:complexType name="SignedDataObjectPropertiesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="DataObjectFormat" type="DataObjectFormatType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xsd:element name="CommitmentTypeIndication" type="CommitmentTypeIndicationType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xsd:element name="AllDataObjectsTimeStamp" type="TimeStampType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xsd:element name="IndividualDataObjectsTimeStamp" type="TimeStampType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="UnsignedSignatureProperties" type="UnsignedSignaturePropertiesType"/>
|
||||
<xsd:complexType name="UnsignedSignaturePropertiesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CounterSignature" type="CounterSignatureType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xsd:element name="SignatureTimeStamp" type="TimeStampType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xsd:element name="CompleteCertificateRefs" type="CompleteCertificateRefsType" minOccurs="0"/>
|
||||
<xsd:element name="CompleteRevocationRefs" type="CompleteRevocationRefsType" minOccurs="0"/>
|
||||
<xsd:choice>
|
||||
<xsd:element name="SigAndRefsTimeStamp" type="TimeStampType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xsd:element name="RefsOnlyTimeStamp" type="TimeStampType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xsd:choice>
|
||||
<xsd:element name="CertificateValues" type="CertificateValuesType" minOccurs="0"/>
|
||||
<xsd:element name="RevocationValues" type="RevocationValuesType" minOccurs="0"/>
|
||||
<xsd:element name="ArchiveTimeStamp" type="TimeStampType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="UnsignedDataObjectProperties" type="UnsignedDataObjectPropertiesType"/>
|
||||
<xsd:complexType name="UnsignedDataObjectPropertiesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="UnsignedDataObjectProperty" type="AnyType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="QualifyingPropertiesReference" type="QualifyingPropertiesReferenceType"/>
|
||||
<xsd:complexType name="QualifyingPropertiesReferenceType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Transforms" type="ds:TransformsType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SigningTime" type="xsd:dateTime"/>
|
||||
<xsd:element name="SigningCertificate" type="CertIDListType"/>
|
||||
<xsd:complexType name="CertIDListType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Cert" type="CertIDType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="CertIDType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CertDigest" type="DigestAlgAndValueType"/>
|
||||
<xsd:element name="IssuerSerial" type="ds:X509IssuerSerialType"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="DigestAlgAndValueType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="DigestMethod" type="ds:DigestMethodType"/>
|
||||
<xsd:element name="DigestValue" type="ds:DigestValueType"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SignaturePolicyIdentifier" type="SignaturePolicyIdentifierType"/>
|
||||
<xsd:complexType name="SignaturePolicyIdentifierType">
|
||||
<xsd:choice>
|
||||
<xsd:element name="SignaturePolicyId" type="SignaturePolicyIdType"/>
|
||||
<xsd:element name="SignaturePolicyImplied"/>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="SignaturePolicyIdType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="SigPolicyId" type="ObjectIdentifierType"/>
|
||||
<xsd:element ref="ds:Transforms" minOccurs="0"/>
|
||||
<xsd:element name="SigPolicyHash" type="DigestAlgAndValueType"/>
|
||||
<xsd:element name="SigPolicyQualifiers" type="SigPolicyQualifiersListType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="SigPolicyQualifiersListType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="SigPolicyQualifier" type="AnyType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SPURI" type="xsd:anyURI"/>
|
||||
<xsd:element name="SPUserNotice" type="SPUserNoticeType"/>
|
||||
<xsd:complexType name="SPUserNoticeType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="NoticeRef" type="NoticeReferenceType" minOccurs="0"/>
|
||||
<xsd:element name="ExplicitText" type="xsd:string" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="NoticeReferenceType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Organization" type="xsd:string"/>
|
||||
<xsd:element name="NoticeNumbers" type="IntegerListType"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="IntegerListType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="int" type="xsd:integer" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="CounterSignature" type="CounterSignatureType"/>
|
||||
<xsd:complexType name="CounterSignatureType">
|
||||
<xsd:sequence>
|
||||
<xsd:element ref="ds:Signature"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="DataObjectFormat" type="DataObjectFormatType"/>
|
||||
<xsd:complexType name="DataObjectFormatType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Description" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="ObjectIdentifier" type="ObjectIdentifierType" minOccurs="0"/>
|
||||
<xsd:element name="MimeType" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="Encoding" type="xsd:anyURI" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="ObjectReference" type="xsd:anyURI" use="required"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="CommitmentTypeIndication" type="CommitmentTypeIndicationType"/>
|
||||
<xsd:complexType name="CommitmentTypeIndicationType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CommitmentTypeId" type="ObjectIdentifierType"/>
|
||||
<xsd:choice>
|
||||
<xsd:element name="ObjectReference" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xsd:element name="AllSignedDataObjects"/>
|
||||
</xsd:choice>
|
||||
<xsd:element name="CommitmentTypeQualifiers" type="CommitmentTypeQualifiersListType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="CommitmentTypeQualifiersListType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CommitmentTypeQualifier" type="AnyType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SignatureProductionPlace" type="SignatureProductionPlaceType"/>
|
||||
<xsd:complexType name="SignatureProductionPlaceType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="City" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="StateOrProvince" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="PostalCode" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="CountryName" type="xsd:string" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SignerRole" type="SignerRoleType"/>
|
||||
<xsd:complexType name="SignerRoleType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="ClaimedRoles" type="ClaimedRolesListType" minOccurs="0"/>
|
||||
<xsd:element name="CertifiedRoles" type="CertifiedRolesListType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="ClaimedRolesListType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="ClaimedRole" type="AnyType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="CertifiedRolesListType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CertifiedRole" type="EncapsulatedPKIDataType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="AllDataObjectsTimeStamp" type="TimeStampType"/>
|
||||
<xsd:element name="IndividualDataObjectsTimeStamp" type="TimeStampType"/>
|
||||
<xsd:element name="SignatureTimeStamp" type="TimeStampType"/>
|
||||
<xsd:element name="CompleteCertificateRefs" type="CompleteCertificateRefsType"/>
|
||||
<xsd:complexType name="CompleteCertificateRefsType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CertRefs" type="CertIDListType"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="CompleteRevocationRefs" type="CompleteRevocationRefsType"/>
|
||||
<xsd:complexType name="CompleteRevocationRefsType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CRLRefs" type="CRLRefsType" minOccurs="0"/>
|
||||
<xsd:element name="OCSPRefs" type="OCSPRefsType" minOccurs="0"/>
|
||||
<xsd:element name="OtherRefs" type="OtherCertStatusRefsType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="CRLRefsType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CRLRef" type="CRLRefType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="CRLRefType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="DigestAlgAndValue" type="DigestAlgAndValueType"/>
|
||||
<xsd:element name="CRLIdentifier" type="CRLIdentifierType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="CRLIdentifierType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Issuer" type="xsd:string"/>
|
||||
<xsd:element name="IssueTime" type="xsd:dateTime"/>
|
||||
<xsd:element name="Number" type="xsd:integer" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="URI" type="xsd:anyURI" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="OCSPRefsType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="OCSPRef" type="OCSPRefType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="OCSPRefType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="OCSPIdentifier" type="OCSPIdentifierType"/>
|
||||
<xsd:element name="DigestAlgAndValue" type="DigestAlgAndValueType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="OCSPIdentifierType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="ResponderID" type="xsd:string"/>
|
||||
<xsd:element name="ProducedAt" type="xsd:dateTime"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="URI" type="xsd:anyURI" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="OtherCertStatusRefsType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="OtherRef" type="AnyType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="SigAndRefsTimeStamp" type="TimeStampType"/>
|
||||
<xsd:element name="RefsOnlyTimeStamp" type="TimeStampType"/>
|
||||
<xsd:element name="CertificateValues" type="CertificateValuesType"/>
|
||||
<xsd:complexType name="CertificateValuesType">
|
||||
<xsd:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xsd:element name="EncapsulatedX509Certificate" type="EncapsulatedPKIDataType"/>
|
||||
<xsd:element name="OtherCertificate" type="AnyType"/>
|
||||
</xsd:choice>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="RevocationValues" type="RevocationValuesType"/>
|
||||
<xsd:complexType name="RevocationValuesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="CRLValues" type="CRLValuesType" minOccurs="0"/>
|
||||
<xsd:element name="OCSPValues" type="OCSPValuesType" minOccurs="0"/>
|
||||
<xsd:element name="OtherValues" type="OtherCertStatusValuesType" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="Id" type="xsd:ID" use="optional"/>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="CRLValuesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="EncapsulatedCRLValue" type="EncapsulatedPKIDataType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="OCSPValuesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="EncapsulatedOCSPValue" type="EncapsulatedPKIDataType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:complexType name="OtherCertStatusValuesType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="OtherValue" type="AnyType" maxOccurs="unbounded"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
<xsd:element name="ArchiveTimeStamp" type="TimeStampType"/>
|
||||
</xsd:schema>
|
@ -1,219 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
|
||||
<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
|
||||
<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
|
||||
<!-- http://lists.oasis-open.org/archives/relax-ng-comment/200206/maillist.html -->
|
||||
|
||||
<grammar xmlns='http://relaxng.org/ns/structure/1.0'
|
||||
xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
ns="http://www.w3.org/2001/04/xmlenc#"
|
||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
|
||||
<include href="http://www.w3.org/Signature/Drafts/xmldsig-core/xmldsig-core-schema.rng">
|
||||
<!-- Used for DigestMethod, KeyInfoType and anyThing -->
|
||||
<!-- Since xmldsig-core also has a start, I have to include it
|
||||
in the include for redefinition. -->
|
||||
<start>
|
||||
<choice>
|
||||
<!-- We get to define the permissible root elements! -->
|
||||
<element name="EncryptedData"><ref name="EncryptedDataType"/></element>
|
||||
<element name="EncryptedKey"><ref name="EncryptedKeyType"/></element>
|
||||
</choice>
|
||||
</start>
|
||||
|
||||
<define name='anyThing'>
|
||||
<zeroOrMore>
|
||||
<choice>
|
||||
<text/>
|
||||
<element>
|
||||
<anyName>
|
||||
<except>
|
||||
<nsName/>
|
||||
<nsName ns='http://www.w3.org/2000/09/xmldsig#'/>
|
||||
</except>
|
||||
</anyName>
|
||||
<ref name='anyThing'/>
|
||||
<zeroOrMore>
|
||||
<attribute>
|
||||
<anyName/>
|
||||
</attribute>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</choice>
|
||||
</zeroOrMore>
|
||||
</define>
|
||||
|
||||
|
||||
</include>
|
||||
|
||||
<!-- Import definitions from the xmldsig rng -->
|
||||
|
||||
<define name="KeyInfoType" combine="interleave">
|
||||
<zeroOrMore>
|
||||
<choice>
|
||||
<element name="EncryptedKey"><ref name="EncryptedKeyType"/></element>
|
||||
<element name="AgreementMethod"><ref name="AgreementMethodType"/></element>
|
||||
</choice>
|
||||
</zeroOrMore>
|
||||
</define>
|
||||
|
||||
<define name="DigestMethodType" combine="choice">
|
||||
<notAllowed/>
|
||||
</define>
|
||||
|
||||
<define name="TransformType" combine="choice">
|
||||
<notAllowed/>
|
||||
</define>
|
||||
|
||||
<!-- Now redefined in the include statement
|
||||
<define name="anyThing" combine="choice">
|
||||
<notAllowed/>
|
||||
</define>
|
||||
-->
|
||||
|
||||
<!-- End import -->
|
||||
|
||||
|
||||
<define name="EncryptedDataType">
|
||||
<ref name="EncryptedType"/>
|
||||
</define>
|
||||
|
||||
|
||||
<define name="EncryptedKeyType">
|
||||
<ref name="EncryptedType"/>
|
||||
<optional><element name='ReferenceList'>
|
||||
<ref name="ReferenceListType"/></element>
|
||||
</optional>
|
||||
<optional><element name='CarriedKeyName'><data type="string"/></element></optional>
|
||||
<optional><attribute name='Recipient'> <data type="string"/></attribute></optional>
|
||||
</define>
|
||||
|
||||
|
||||
<define name="EncryptedType">
|
||||
<element name="EncryptionMethod"><ref name="EncryptionMethodType"/></element>
|
||||
<optional>
|
||||
<element name="KeyInfo" ns="http://www.w3.org/2000/09/xmldsig#">
|
||||
<ref name="KeyInfoType"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="CipherData"><ref name="CipherDataType"/></element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="EncryptionProperties"><ref name="EncryptionPropertiesType"/></element>
|
||||
</optional>
|
||||
<optional><attribute name="Id"><data type="ID"/></attribute></optional>
|
||||
<optional><attribute name="Type"><data type="anyURI"/></attribute></optional>
|
||||
<optional><attribute name="MimeType"><data type="string"/></attribute></optional>
|
||||
<optional><attribute name="Encoding"><data type="anyURI"/></attribute></optional>
|
||||
<optional><attribute name='xsi:schemaLocation'/></optional>
|
||||
</define>
|
||||
|
||||
<define name="EncryptionMethodType">
|
||||
<zeroOrMore>
|
||||
<choice>
|
||||
<element name="KeySize">
|
||||
<data type="integer"/>
|
||||
</element>
|
||||
<element name="OAEPparams">
|
||||
<data type="base64Binary"/>
|
||||
</element>
|
||||
<text/>
|
||||
<element name='DigestMethod' ns="http://www.w3.org/2000/09/xmldsig#">
|
||||
<ref name="DigestMethodType"/>
|
||||
</element>
|
||||
</choice>
|
||||
</zeroOrMore>
|
||||
<attribute name="Algorithm"><data type="anyURI"/></attribute>
|
||||
</define>
|
||||
|
||||
|
||||
<define name="AgreementMethodType">
|
||||
<zeroOrMore>
|
||||
<choice>
|
||||
<element name="KA-Nonce">
|
||||
<data type="base64Binary"/>
|
||||
</element>
|
||||
<element name='DigestMethod' ns="http://www.w3.org/2000/09/xmldsig#">
|
||||
<ref name="DigestMethodType"/>
|
||||
</element>
|
||||
<text/>
|
||||
<element>
|
||||
<nsName ns="http://www.w3.org/2000/09/xmldsig#"/>
|
||||
<ref name="anyThing"/>
|
||||
</element>
|
||||
<element name="OriginatorKeyInfo"><ref name="KeyInfoType"/></element>
|
||||
<element name="RecipientKeyInfo"><ref name="KeyInfoType"/></element>
|
||||
</choice>
|
||||
</zeroOrMore>
|
||||
<attribute name="Algorithm"><data type="anyURI"/></attribute>
|
||||
</define>
|
||||
|
||||
|
||||
<define name="ReferenceListType">
|
||||
<oneOrMore>
|
||||
<choice>
|
||||
<element name="DataReference">
|
||||
<text/>
|
||||
<attribute name="URI"><data type="anyURI"/></attribute>
|
||||
</element>
|
||||
<element name="KeyReference">
|
||||
<text/>
|
||||
<attribute name="URI"><data type="anyURI"/></attribute>
|
||||
</element>
|
||||
</choice>
|
||||
</oneOrMore>
|
||||
</define>
|
||||
|
||||
|
||||
<define name="CipherDataType">
|
||||
<choice>
|
||||
<element name="CipherValue"><data type="base64Binary"/></element>
|
||||
<element name="CipherReference">
|
||||
<element name="Transforms">
|
||||
<oneOrMore>
|
||||
<element name='Transform' ns="http://www.w3.org/2000/09/xmldsig#">
|
||||
<ref name='TransformType'/>
|
||||
</element>
|
||||
</oneOrMore>
|
||||
</element>
|
||||
<attribute name="URI">
|
||||
<data type="anyURI"/>
|
||||
</attribute>
|
||||
</element>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
|
||||
<define name="EncryptionPropertiesType">
|
||||
<element name="EncryptionProperty">
|
||||
<zeroOrMore>
|
||||
<element>
|
||||
<anyName/>
|
||||
<text/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<attribute name="Target">
|
||||
<data type="anyURI"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="Id">
|
||||
<data type="ID"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
|
||||
<optional>
|
||||
<attribute name="Id">
|
||||
<data type="ID"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<zeroOrMore>
|
||||
<attribute><nsName ns="http://www.w3.org/XML/1998/namespace"/></attribute>
|
||||
</zeroOrMore>
|
||||
</define>
|
||||
|
||||
</grammar>
|
@ -1,146 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN"
|
||||
"http://www.w3.org/2001/XMLSchema.dtd"
|
||||
[
|
||||
<!ATTLIST schema
|
||||
xmlns:xenc CDATA #FIXED 'http://www.w3.org/2001/04/xmlenc#'
|
||||
xmlns:ds CDATA #FIXED 'http://www.w3.org/2000/09/xmldsig#'>
|
||||
<!ENTITY xenc 'http://www.w3.org/2001/04/xmlenc#'>
|
||||
<!ENTITY % p ''>
|
||||
<!ENTITY % s ''>
|
||||
]>
|
||||
|
||||
<schema xmlns='http://www.w3.org/2001/XMLSchema' version='1.0'
|
||||
xmlns:xenc='http://www.w3.org/2001/04/xmlenc#'
|
||||
xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
|
||||
targetNamespace='http://www.w3.org/2001/04/xmlenc#'
|
||||
elementFormDefault='qualified'>
|
||||
|
||||
<import namespace='http://www.w3.org/2000/09/xmldsig#'
|
||||
schemaLocation='http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd'/>
|
||||
|
||||
<complexType name='EncryptedType' abstract='true'>
|
||||
<sequence>
|
||||
<element name='EncryptionMethod' type='xenc:EncryptionMethodType'
|
||||
minOccurs='0'/>
|
||||
<element ref='ds:KeyInfo' minOccurs='0'/>
|
||||
<element ref='xenc:CipherData'/>
|
||||
<element ref='xenc:EncryptionProperties' minOccurs='0'/>
|
||||
</sequence>
|
||||
<attribute name='Id' type='ID' use='optional'/>
|
||||
<attribute name='Type' type='anyURI' use='optional'/>
|
||||
<attribute name='MimeType' type='string' use='optional'/>
|
||||
<attribute name='Encoding' type='anyURI' use='optional'/>
|
||||
</complexType>
|
||||
|
||||
<complexType name='EncryptionMethodType' mixed='true'>
|
||||
<sequence>
|
||||
<element name='KeySize' minOccurs='0' type='xenc:KeySizeType'/>
|
||||
<element name='OAEPparams' minOccurs='0' type='base64Binary'/>
|
||||
<any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
|
||||
</sequence>
|
||||
<attribute name='Algorithm' type='anyURI' use='required'/>
|
||||
</complexType>
|
||||
|
||||
<simpleType name='KeySizeType'>
|
||||
<restriction base="integer"/>
|
||||
</simpleType>
|
||||
|
||||
<element name='CipherData' type='xenc:CipherDataType'/>
|
||||
<complexType name='CipherDataType'>
|
||||
<choice>
|
||||
<element name='CipherValue' type='base64Binary'/>
|
||||
<element ref='xenc:CipherReference'/>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<element name='CipherReference' type='xenc:CipherReferenceType'/>
|
||||
<complexType name='CipherReferenceType'>
|
||||
<choice>
|
||||
<element name='Transforms' type='xenc:TransformsType' minOccurs='0'/>
|
||||
</choice>
|
||||
<attribute name='URI' type='anyURI' use='required'/>
|
||||
</complexType>
|
||||
|
||||
<complexType name='TransformsType'>
|
||||
<sequence>
|
||||
<element ref='ds:Transform' maxOccurs='unbounded'/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
|
||||
<element name='EncryptedData' type='xenc:EncryptedDataType'/>
|
||||
<complexType name='EncryptedDataType'>
|
||||
<complexContent>
|
||||
<extension base='xenc:EncryptedType'>
|
||||
</extension>
|
||||
</complexContent>
|
||||
</complexType>
|
||||
|
||||
<!-- Children of ds:KeyInfo -->
|
||||
|
||||
<element name='EncryptedKey' type='xenc:EncryptedKeyType'/>
|
||||
<complexType name='EncryptedKeyType'>
|
||||
<complexContent>
|
||||
<extension base='xenc:EncryptedType'>
|
||||
<sequence>
|
||||
<element ref='xenc:ReferenceList' minOccurs='0'/>
|
||||
<element name='CarriedKeyName' type='string' minOccurs='0'/>
|
||||
</sequence>
|
||||
<attribute name='Recipient' type='string'
|
||||
use='optional'/>
|
||||
</extension>
|
||||
</complexContent>
|
||||
</complexType>
|
||||
|
||||
<element name="AgreementMethod" type="xenc:AgreementMethodType"/>
|
||||
<complexType name="AgreementMethodType" mixed="true">
|
||||
<sequence>
|
||||
<element name="KA-Nonce" minOccurs="0" type="base64Binary"/>
|
||||
<!-- <element ref="ds:DigestMethod" minOccurs="0"/> -->
|
||||
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="OriginatorKeyInfo" minOccurs="0" type="ds:KeyInfoType"/>
|
||||
<element name="RecipientKeyInfo" minOccurs="0" type="ds:KeyInfoType"/>
|
||||
</sequence>
|
||||
<attribute name="Algorithm" type="anyURI" use="required"/>
|
||||
</complexType>
|
||||
|
||||
<!-- End Children of ds:KeyInfo -->
|
||||
|
||||
<element name='ReferenceList'>
|
||||
<complexType>
|
||||
<choice minOccurs='1' maxOccurs='unbounded'>
|
||||
<element name='DataReference' type='xenc:ReferenceType'/>
|
||||
<element name='KeyReference' type='xenc:ReferenceType'/>
|
||||
</choice>
|
||||
</complexType>
|
||||
</element>
|
||||
|
||||
<complexType name='ReferenceType'>
|
||||
<sequence>
|
||||
<any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
|
||||
</sequence>
|
||||
<attribute name='URI' type='anyURI' use='required'/>
|
||||
</complexType>
|
||||
|
||||
|
||||
<element name='EncryptionProperties' type='xenc:EncryptionPropertiesType'/>
|
||||
<complexType name='EncryptionPropertiesType'>
|
||||
<sequence>
|
||||
<element ref='xenc:EncryptionProperty' maxOccurs='unbounded'/>
|
||||
</sequence>
|
||||
<attribute name='Id' type='ID' use='optional'/>
|
||||
</complexType>
|
||||
|
||||
<element name='EncryptionProperty' type='xenc:EncryptionPropertyType'/>
|
||||
<complexType name='EncryptionPropertyType' mixed='true'>
|
||||
<choice maxOccurs='unbounded'>
|
||||
<any namespace='##other' processContents='lax'/>
|
||||
</choice>
|
||||
<attribute name='Target' type='anyURI' use='optional'/>
|
||||
<attribute name='Id' type='ID' use='optional'/>
|
||||
<anyAttribute namespace="http://www.w3.org/XML/1998/namespace"/>
|
||||
</complexType>
|
||||
|
||||
</schema>
|
||||
|
@ -1,171 +0,0 @@
|
||||
<!-- DTD for XML Signatures
|
||||
http://www.w3.org/2000/09/xmldsig#
|
||||
Joseph Reagle $last changed 20001215$
|
||||
|
||||
http://www.w3.org/2000/09/xmldsig#
|
||||
$Revision: 1.6 $ on $Date: 2008/07/24 16:15:03 $ by $Author: mullan $
|
||||
|
||||
Copyright 2001 The Internet Society and W3C (Massachusetts Institute
|
||||
of Technology, Institut National de Recherche en Informatique et en
|
||||
Automatique, Keio University). All Rights Reserved.
|
||||
http://www.w3.org/Consortium/Legal/
|
||||
|
||||
This document is governed by the W3C Software License [1] as described
|
||||
in the FAQ [2].
|
||||
|
||||
[1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
|
||||
[2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
|
||||
-->
|
||||
|
||||
|
||||
<!--
|
||||
|
||||
The following entity declarations enable external/flexible content in
|
||||
the Signature content model.
|
||||
|
||||
#PCDATA emulates schema string; when combined with element types it
|
||||
emulates schema's mixed content type.
|
||||
|
||||
%foo.ANY permits the user to include their own element types from
|
||||
other namespaces, for example:
|
||||
<!ENTITY % KeyValue.ANY '| ecds:ECDSAKeyValue'>
|
||||
...
|
||||
<!ELEMENT ecds:ECDSAKeyValue (#PCDATA) >
|
||||
|
||||
-->
|
||||
|
||||
<!ENTITY % Object.ANY ''>
|
||||
<!ENTITY % Method.ANY ''>
|
||||
<!ENTITY % Transform.ANY ''>
|
||||
<!ENTITY % SignatureProperty.ANY ''>
|
||||
<!ENTITY % KeyInfo.ANY ''>
|
||||
<!ENTITY % KeyValue.ANY ''>
|
||||
<!ENTITY % PGPData.ANY ''>
|
||||
<!ENTITY % X509Data.ANY ''>
|
||||
<!ENTITY % SPKIData.ANY ''>
|
||||
|
||||
|
||||
|
||||
<!-- Start Core Signature declarations, these should NOT be altered -->
|
||||
|
||||
<!ELEMENT Signature (SignedInfo, SignatureValue, KeyInfo?, Object*) >
|
||||
<!ATTLIST Signature
|
||||
xmlns CDATA #FIXED 'http://www.w3.org/2000/09/xmldsig#'
|
||||
Id ID #IMPLIED >
|
||||
|
||||
<!ELEMENT SignatureValue (#PCDATA) >
|
||||
<!ATTLIST SignatureValue
|
||||
Id ID #IMPLIED>
|
||||
|
||||
<!ELEMENT SignedInfo (CanonicalizationMethod,
|
||||
SignatureMethod, Reference+) >
|
||||
<!ATTLIST SignedInfo
|
||||
Id ID #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT CanonicalizationMethod (#PCDATA %Method.ANY;)* >
|
||||
<!ATTLIST CanonicalizationMethod
|
||||
Algorithm CDATA #REQUIRED >
|
||||
|
||||
<!ELEMENT SignatureMethod (#PCDATA|HMACOutputLength %Method.ANY;)* >
|
||||
<!ATTLIST SignatureMethod
|
||||
Algorithm CDATA #REQUIRED >
|
||||
|
||||
<!ELEMENT Reference (Transforms?, DigestMethod, DigestValue) >
|
||||
<!ATTLIST Reference
|
||||
Id ID #IMPLIED
|
||||
URI CDATA #IMPLIED
|
||||
Type CDATA #IMPLIED>
|
||||
|
||||
|
||||
<!ELEMENT Transforms (Transform+)>
|
||||
|
||||
<!ELEMENT Transform (#PCDATA|XPath %Transform.ANY;)* >
|
||||
<!ATTLIST Transform
|
||||
Algorithm CDATA #REQUIRED >
|
||||
|
||||
<!ELEMENT XPath (#PCDATA) >
|
||||
|
||||
<!ELEMENT DigestMethod (#PCDATA %Method.ANY;)* >
|
||||
<!ATTLIST DigestMethod
|
||||
Algorithm CDATA #REQUIRED >
|
||||
|
||||
<!ELEMENT DigestValue (#PCDATA) >
|
||||
|
||||
<!ELEMENT KeyInfo (#PCDATA|KeyName|KeyValue|RetrievalMethod|
|
||||
X509Data|PGPData|SPKIData|MgmtData %KeyInfo.ANY;)* >
|
||||
<!ATTLIST KeyInfo
|
||||
Id ID #IMPLIED >
|
||||
|
||||
<!-- Key Information -->
|
||||
|
||||
<!ELEMENT KeyName (#PCDATA) >
|
||||
<!ELEMENT KeyValue (#PCDATA|DSAKeyValue|RSAKeyValue %KeyValue.ANY;)* >
|
||||
<!ELEMENT MgmtData (#PCDATA) >
|
||||
|
||||
<!ELEMENT RetrievalMethod (Transforms?) >
|
||||
<!ATTLIST RetrievalMethod
|
||||
URI CDATA #REQUIRED
|
||||
Type CDATA #IMPLIED >
|
||||
|
||||
<!-- X.509 Data -->
|
||||
|
||||
<!ELEMENT X509Data ((X509IssuerSerial | X509SKI | X509SubjectName |
|
||||
X509Certificate | X509CRL )+ %X509Data.ANY;)>
|
||||
<!ELEMENT X509IssuerSerial (X509IssuerName, X509SerialNumber) >
|
||||
<!ELEMENT X509IssuerName (#PCDATA) >
|
||||
<!ELEMENT X509SubjectName (#PCDATA) >
|
||||
<!ELEMENT X509SerialNumber (#PCDATA) >
|
||||
<!ELEMENT X509SKI (#PCDATA) >
|
||||
<!ELEMENT X509Certificate (#PCDATA) >
|
||||
<!ELEMENT X509CRL (#PCDATA) >
|
||||
|
||||
<!-- PGPData -->
|
||||
|
||||
<!ELEMENT PGPData ((PGPKeyID, PGPKeyPacket?) | (PGPKeyPacket) %PGPData.ANY;) >
|
||||
<!ELEMENT PGPKeyPacket (#PCDATA) >
|
||||
<!ELEMENT PGPKeyID (#PCDATA) >
|
||||
|
||||
<!-- SPKI Data -->
|
||||
|
||||
<!ELEMENT SPKIData (SPKISexp %SPKIData.ANY;) >
|
||||
<!ELEMENT SPKISexp (#PCDATA) >
|
||||
|
||||
<!-- Extensible Content -->
|
||||
|
||||
<!ELEMENT Object (#PCDATA|Signature|SignatureProperties|Manifest %Object.ANY;)* >
|
||||
<!ATTLIST Object
|
||||
Id ID #IMPLIED
|
||||
MimeType CDATA #IMPLIED
|
||||
Encoding CDATA #IMPLIED >
|
||||
|
||||
<!ELEMENT Manifest (Reference+) >
|
||||
<!ATTLIST Manifest
|
||||
Id ID #IMPLIED >
|
||||
|
||||
<!ELEMENT SignatureProperties (SignatureProperty+) >
|
||||
<!ATTLIST SignatureProperties
|
||||
Id ID #IMPLIED >
|
||||
|
||||
<!ELEMENT SignatureProperty (#PCDATA %SignatureProperty.ANY;)* >
|
||||
<!ATTLIST SignatureProperty
|
||||
Target CDATA #REQUIRED
|
||||
Id ID #IMPLIED >
|
||||
|
||||
<!-- Algorithm Parameters -->
|
||||
|
||||
<!ELEMENT HMACOutputLength (#PCDATA) >
|
||||
|
||||
<!ELEMENT DSAKeyValue ((P, Q)?, G?, Y, J?, (Seed, PgenCounter)?) >
|
||||
<!ELEMENT P (#PCDATA) >
|
||||
<!ELEMENT Q (#PCDATA) >
|
||||
<!ELEMENT G (#PCDATA) >
|
||||
<!ELEMENT Y (#PCDATA) >
|
||||
<!ELEMENT J (#PCDATA) >
|
||||
<!ELEMENT Seed (#PCDATA) >
|
||||
<!ELEMENT PgenCounter (#PCDATA) >
|
||||
|
||||
<!ELEMENT RSAKeyValue (Modulus, Exponent) >
|
||||
<!ELEMENT Modulus (#PCDATA) >
|
||||
<!ELEMENT Exponent (#PCDATA) >
|
||||
|
@ -1,339 +0,0 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!-- http://www.xml.com/lpt/a/2002/01/23/relaxng.html -->
|
||||
<!-- http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html -->
|
||||
<!-- http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_wildcards_st8.html -->
|
||||
<!-- http://lists.oasis-open.org/archives/relax-ng-comment/200206/maillist.html -->
|
||||
|
||||
<grammar xmlns='http://relaxng.org/ns/structure/1.0'
|
||||
xmlns:ds='http://www.w3.org/2000/09/xmldsig#'
|
||||
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
|
||||
ns='http://www.w3.org/2000/09/xmldsig#'
|
||||
datatypeLibrary='http://www.w3.org/2001/XMLSchema-datatypes'>
|
||||
|
||||
<start>
|
||||
<element name='Signature'><ref name='SignatureType'/></element>
|
||||
</start>
|
||||
|
||||
<define name='CryptoBinary'>
|
||||
<data type='base64Binary'/>
|
||||
</define>
|
||||
|
||||
<define name='SignatureType'>
|
||||
<element name='SignedInfo'><ref name='SignedInfoType'/></element>
|
||||
<element name='SignatureValue'><ref name='SignatureValueType'/></element>
|
||||
<optional><element name='KeyInfo'><ref name='KeyInfoType'/></element></optional>
|
||||
<zeroOrMore><element name='Object'><ref name='ObjectType'/></element></zeroOrMore>
|
||||
<optional><attribute name='Id'><data type='ID'/></attribute></optional>
|
||||
<optional><attribute name='xsi:schemaLocation'/></optional>
|
||||
</define>
|
||||
|
||||
<define name='SignatureValueType'>
|
||||
<data type='base64Binary'/>
|
||||
<optional><attribute name='Id'><data type='ID'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
<!-- Start SignedInfo -->
|
||||
|
||||
<define name='SignedInfoType'>
|
||||
<element name='CanonicalizationMethod'><ref name='CanonicalizationMethodType'/></element>
|
||||
<element name='SignatureMethod'><ref name='SignatureMethodType'/></element>
|
||||
<optional><element name='KeyInfo'><ref name='KeyInfoType'/></element></optional>
|
||||
<oneOrMore><element name='Reference'><ref name='ReferenceType'/></element></oneOrMore>
|
||||
<optional><attribute name='Id'><data type='ID'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
<define name='CanonicalizationMethodType'>
|
||||
<zeroOrMore><ref name='anyThing'/></zeroOrMore>
|
||||
<optional><attribute name='Algorithm'><data type='anyURI'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
|
||||
<define name='SignatureMethodType'>
|
||||
<optional><element name='HMACOutputLength'><data type='integer'/></element></optional>
|
||||
<zeroOrMore><ref name='anyThing'/></zeroOrMore>
|
||||
<optional><attribute name='Algorithm'><data type='anyURI'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
<!-- Start Reference -->
|
||||
|
||||
<define name='ReferenceType'>
|
||||
<optional><element name='Transforms'><ref name='TransformsType'/></element></optional>
|
||||
<element name='DigestMethod'><ref name='DigestMethodType'/></element>
|
||||
<element name='DigestValue'><ref name='DigestValueType'/></element>
|
||||
<optional><attribute name='Type'><data type='anyURI'/></attribute></optional>
|
||||
<optional><attribute name='URI'><data type='anyURI'/></attribute></optional>
|
||||
<optional><attribute name='Id'><data type='ID'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
<define name='TransformsType'>
|
||||
<oneOrMore><element name='Transform'><ref name='TransformType'/></element></oneOrMore>
|
||||
</define>
|
||||
|
||||
<define name='TransformType'>
|
||||
<optional><element name='XPath'><data type='string'/></element></optional>
|
||||
<zeroOrMore><ref name='anyThing'/></zeroOrMore>
|
||||
<attribute name='Algorithm'><data type='anyURI'/></attribute>
|
||||
</define>
|
||||
|
||||
<!-- End Reference -->
|
||||
|
||||
<define name='DigestMethodType'>
|
||||
<zeroOrMore><ref name='anyThing'/></zeroOrMore>
|
||||
<attribute name='Algorithm'><data type='anyURI'/></attribute>
|
||||
</define>
|
||||
|
||||
<define name='DigestValueType'>
|
||||
<data type='base64Binary'/>
|
||||
</define>
|
||||
|
||||
<!-- End SignedInfo -->
|
||||
|
||||
<!-- Start KeyInfo -->
|
||||
|
||||
<define name='KeyInfoType'>
|
||||
<oneOrMore>
|
||||
<choice>
|
||||
<element name='KeyName'><data type='string'/></element>
|
||||
<element name='KeyValue'><ref name='KeyValueType'/></element>
|
||||
<element name='RetrievalMethod'><ref name='RetrievalMethodType'/></element>
|
||||
<element name='X509Data'><ref name='X509DataType'/></element>
|
||||
<element name='PGPData'><ref name='PGPDataType'/></element>
|
||||
<element name='SPKIData'><ref name='SPKIDataType'/></element>
|
||||
<element name='MgmtData'><data type='string'/></element>
|
||||
<ref name='anyThing'/>
|
||||
</choice>
|
||||
</oneOrMore>
|
||||
<optional><attribute name='Id'><data type='ID'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
<define name='KeyValueType'>
|
||||
<choice>
|
||||
<text/>
|
||||
<element name='DSAKeyValue'><ref name='DSAKeyValueType'/></element>
|
||||
<element name='RSAKeyValue'><ref name='RSAKeyValueType'/></element>
|
||||
<ref name='anyThing'/>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name='RetrievalMethodType'>
|
||||
<optional><element name='Transforms'><ref name='TransformsType'/></element></optional>
|
||||
<optional><attribute name='Type'><data type='anyURI'/></attribute></optional>
|
||||
<optional><attribute name='URI'><data type='anyURI'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
<!-- Start X509Data -->
|
||||
|
||||
<define name='X509DataType'>
|
||||
<oneOrMore>
|
||||
<choice>
|
||||
<element name='X509IssuerSerial'>
|
||||
<element name='X509IssuerName'>
|
||||
<data type='string'/>
|
||||
</element>
|
||||
<element name='X509SerialNumber'>
|
||||
<data type='integer'/>
|
||||
</element>
|
||||
</element>
|
||||
<element name='X509SKI'>
|
||||
<data type='base64Binary'/>
|
||||
</element>
|
||||
<element name='X509SubjectName'>
|
||||
<data type='string'/>
|
||||
</element>
|
||||
<element name='X509Certificate'>
|
||||
<data type='base64Binary'/>
|
||||
</element>
|
||||
<element name='X509CRL'>
|
||||
<data type='base64Binary'/>
|
||||
</element>
|
||||
<ref name='anyThing'/>
|
||||
</choice>
|
||||
</oneOrMore>
|
||||
</define>
|
||||
|
||||
<!-- End X509Data -->
|
||||
|
||||
<!-- Begin PGPData -->
|
||||
|
||||
<define name='PGPDataType'>
|
||||
<choice>
|
||||
<group>
|
||||
<element name='PGPKeyID'>
|
||||
<data type='base64Binary'/>
|
||||
</element>
|
||||
<optional>
|
||||
<element name='PGPKeyPacket'>
|
||||
<data type='base64Binary'/>
|
||||
</element>
|
||||
</optional>
|
||||
<zeroOrMore>
|
||||
<ref name='anyThing'/>
|
||||
</zeroOrMore>
|
||||
</group>
|
||||
<group>
|
||||
<element name='PGPKeyPacket'>
|
||||
<data type='base64Binary'/>
|
||||
</element>
|
||||
<zeroOrMore>
|
||||
<ref name='anyThing'/>
|
||||
</zeroOrMore>
|
||||
</group>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<!-- End PGPData -->
|
||||
|
||||
<!-- Begin SPKIData -->
|
||||
|
||||
<define name='SPKIDataType'>
|
||||
<oneOrMore>
|
||||
<element name='SPKISexp'>
|
||||
<data type='base64Binary'/>
|
||||
</element>
|
||||
<optional>
|
||||
<ref name='anyThing'/>
|
||||
</optional>
|
||||
</oneOrMore>
|
||||
</define>
|
||||
|
||||
<!-- End SPKIData -->
|
||||
|
||||
<!-- End KeyInfo -->
|
||||
|
||||
|
||||
<!-- Start Object (Manifest, SignatureProperty) -->
|
||||
|
||||
<define name='ObjectType'>
|
||||
<zeroOrMore>
|
||||
<choice>
|
||||
<element name='Manifest'><ref name='ManifestType'/></element>
|
||||
<element name='SignatureProperties'><ref name='SignaturePropertiesType'/></element>
|
||||
<ref name='anyThing'/>
|
||||
</choice>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<attribute name='Encoding'>
|
||||
<data type='anyURI'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name='MimeType'>
|
||||
<data type='string'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name='Id'>
|
||||
<data type='ID'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='ManifestType'>
|
||||
<oneOrMore>
|
||||
<element name='Reference'><ref name='ReferenceType'/></element>
|
||||
</oneOrMore>
|
||||
<optional><attribute name='Id'><data type='ID'/></attribute></optional>
|
||||
</define>
|
||||
|
||||
<define name='SignaturePropertiesType'>
|
||||
<oneOrMore>
|
||||
<element name='SignatureProperty'><ref name='SignaturePropertyType'/></element>
|
||||
</oneOrMore>
|
||||
<optional>
|
||||
<attribute name='Id'>
|
||||
<data type='ID'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='SignaturePropertyType'>
|
||||
<oneOrMore><ref name='anyThing'/></oneOrMore>
|
||||
<optional>
|
||||
<attribute name='Id'>
|
||||
<data type='ID'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<attribute name='Target'>
|
||||
<data type='anyURI'/>
|
||||
</attribute>
|
||||
</define>
|
||||
|
||||
<!-- End Object (Manifest, SignatureProperty) -->
|
||||
|
||||
|
||||
<!-- Start KeyValue Element-types -->
|
||||
|
||||
<define name='DSAKeyValueType'>
|
||||
<optional>
|
||||
<element name='P'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
<element name='Q'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name='G'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
</optional>
|
||||
<element name='Y'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
<optional>
|
||||
<element name='J'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name='Seed'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
<element name='PgenCounter'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='RSAKeyValueType'>
|
||||
<element name='Modulus'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
<element name='Exponent'>
|
||||
<ref name='CryptoBinary'/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
|
||||
<!-- End KeyValue Element-types -->
|
||||
|
||||
<!-- End Signature -->
|
||||
|
||||
|
||||
<!-- This should emulate the ANY content model under lax validation -->
|
||||
<define name='anyThing'>
|
||||
<zeroOrMore>
|
||||
<choice>
|
||||
<text/>
|
||||
<element>
|
||||
<!-- "except" provided for DTD compatibility -->
|
||||
<!-- [1] ns='http://www.oasis-open.org/committees/relax-ng/compatibility.html#id' -->
|
||||
<anyName>
|
||||
<except>
|
||||
<nsName/>
|
||||
<!-- <nsName ns='http://www.w3.org/2001/04/xmlenc#'/> -->
|
||||
</except>
|
||||
</anyName>
|
||||
<ref name='anyThing'/>
|
||||
<zeroOrMore>
|
||||
<attribute>
|
||||
<anyName/>
|
||||
</attribute>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</choice>
|
||||
</zeroOrMore>
|
||||
</define>
|
||||
|
||||
|
||||
</grammar>
|
@ -1,318 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE schema
|
||||
PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"
|
||||
[
|
||||
<!ATTLIST schema
|
||||
xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#">
|
||||
<!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
|
||||
<!ENTITY % p ''>
|
||||
<!ENTITY % s ''>
|
||||
]>
|
||||
|
||||
<!-- Schema for XML Signatures
|
||||
http://www.w3.org/2000/09/xmldsig#
|
||||
$Revision: 1.6 $ on $Date: 2008/07/24 16:15:03 $ by $Author: mullan $
|
||||
|
||||
Copyright 2001 The Internet Society and W3C (Massachusetts Institute
|
||||
of Technology, Institut National de Recherche en Informatique et en
|
||||
Automatique, Keio University). All Rights Reserved.
|
||||
http://www.w3.org/Consortium/Legal/
|
||||
|
||||
This document is governed by the W3C Software License [1] as described
|
||||
in the FAQ [2].
|
||||
|
||||
[1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
|
||||
[2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
|
||||
-->
|
||||
|
||||
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
|
||||
targetNamespace="http://www.w3.org/2000/09/xmldsig#"
|
||||
version="0.1" elementFormDefault="qualified">
|
||||
|
||||
<!-- Basic Types Defined for Signatures -->
|
||||
|
||||
<simpleType name="CryptoBinary">
|
||||
<restriction base="base64Binary">
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!-- Start Signature -->
|
||||
|
||||
<element name="Signature" type="ds:SignatureType"/>
|
||||
<complexType name="SignatureType">
|
||||
<sequence>
|
||||
<element ref="ds:SignedInfo"/>
|
||||
<element ref="ds:SignatureValue"/>
|
||||
<element ref="ds:KeyInfo" minOccurs="0"/>
|
||||
<element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<element name="SignatureValue" type="ds:SignatureValueType"/>
|
||||
<complexType name="SignatureValueType">
|
||||
<simpleContent>
|
||||
<extension base="base64Binary">
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<!-- Start SignedInfo -->
|
||||
|
||||
<element name="SignedInfo" type="ds:SignedInfoType"/>
|
||||
<complexType name="SignedInfoType">
|
||||
<sequence>
|
||||
<element ref="ds:CanonicalizationMethod"/>
|
||||
<element ref="ds:SignatureMethod"/>
|
||||
<element ref="ds:Reference" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/>
|
||||
<complexType name="CanonicalizationMethodType" mixed="true">
|
||||
<sequence>
|
||||
<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<!-- (0,unbounded) elements from (1,1) namespace -->
|
||||
</sequence>
|
||||
<attribute name="Algorithm" type="anyURI" use="required"/>
|
||||
</complexType>
|
||||
|
||||
<element name="SignatureMethod" type="ds:SignatureMethodType"/>
|
||||
<complexType name="SignatureMethodType" mixed="true">
|
||||
<sequence>
|
||||
<element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
|
||||
<any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<!-- (0,unbounded) elements from (1,1) external namespace -->
|
||||
</sequence>
|
||||
<attribute name="Algorithm" type="anyURI" use="required"/>
|
||||
</complexType>
|
||||
|
||||
<!-- Start Reference -->
|
||||
|
||||
<element name="Reference" type="ds:ReferenceType"/>
|
||||
<complexType name="ReferenceType">
|
||||
<sequence>
|
||||
<element ref="ds:Transforms" minOccurs="0"/>
|
||||
<element ref="ds:DigestMethod"/>
|
||||
<element ref="ds:DigestValue"/>
|
||||
</sequence>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
<attribute name="URI" type="anyURI" use="optional"/>
|
||||
<attribute name="Type" type="anyURI" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<element name="Transforms" type="ds:TransformsType"/>
|
||||
<complexType name="TransformsType">
|
||||
<sequence>
|
||||
<element ref="ds:Transform" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<element name="Transform" type="ds:TransformType"/>
|
||||
<complexType name="TransformType" mixed="true">
|
||||
<choice minOccurs="0" maxOccurs="unbounded">
|
||||
<any namespace="##other" processContents="lax"/>
|
||||
<!-- (1,1) elements from (0,unbounded) namespaces -->
|
||||
<element name="XPath" type="string"/>
|
||||
</choice>
|
||||
<attribute name="Algorithm" type="anyURI" use="required"/>
|
||||
</complexType>
|
||||
|
||||
<!-- End Reference -->
|
||||
|
||||
<element name="DigestMethod" type="ds:DigestMethodType"/>
|
||||
<complexType name="DigestMethodType" mixed="true">
|
||||
<sequence>
|
||||
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
<attribute name="Algorithm" type="anyURI" use="required"/>
|
||||
</complexType>
|
||||
|
||||
<element name="DigestValue" type="ds:DigestValueType"/>
|
||||
<simpleType name="DigestValueType">
|
||||
<restriction base="base64Binary"/>
|
||||
</simpleType>
|
||||
|
||||
<!-- End SignedInfo -->
|
||||
|
||||
<!-- Start KeyInfo -->
|
||||
|
||||
<element name="KeyInfo" type="ds:KeyInfoType"/>
|
||||
<complexType name="KeyInfoType" mixed="true">
|
||||
<choice maxOccurs="unbounded">
|
||||
<element ref="ds:KeyName"/>
|
||||
<element ref="ds:KeyValue"/>
|
||||
<element ref="ds:RetrievalMethod"/>
|
||||
<element ref="ds:X509Data"/>
|
||||
<element ref="ds:PGPData"/>
|
||||
<element ref="ds:SPKIData"/>
|
||||
<element ref="ds:MgmtData"/>
|
||||
<any processContents="lax" namespace="##other"/>
|
||||
<!-- (1,1) elements from (0,unbounded) namespaces -->
|
||||
</choice>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<element name="KeyName" type="string"/>
|
||||
<element name="MgmtData" type="string"/>
|
||||
|
||||
<element name="KeyValue" type="ds:KeyValueType"/>
|
||||
<complexType name="KeyValueType" mixed="true">
|
||||
<choice>
|
||||
<element ref="ds:DSAKeyValue"/>
|
||||
<element ref="ds:RSAKeyValue"/>
|
||||
<any namespace="##other" processContents="lax"/>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<element name="RetrievalMethod" type="ds:RetrievalMethodType"/>
|
||||
<complexType name="RetrievalMethodType">
|
||||
<sequence>
|
||||
<element ref="ds:Transforms" minOccurs="0"/>
|
||||
</sequence>
|
||||
<attribute name="URI" type="anyURI"/>
|
||||
<attribute name="Type" type="anyURI" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<!-- Start X509Data -->
|
||||
|
||||
<element name="X509Data" type="ds:X509DataType"/>
|
||||
<complexType name="X509DataType">
|
||||
<sequence maxOccurs="unbounded">
|
||||
<choice>
|
||||
<element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
|
||||
<element name="X509SKI" type="base64Binary"/>
|
||||
<element name="X509SubjectName" type="string"/>
|
||||
<element name="X509Certificate" type="base64Binary"/>
|
||||
<element name="X509CRL" type="base64Binary"/>
|
||||
<any namespace="##other" processContents="lax"/>
|
||||
</choice>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="X509IssuerSerialType">
|
||||
<sequence>
|
||||
<element name="X509IssuerName" type="string"/>
|
||||
<element name="X509SerialNumber" type="integer"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!-- End X509Data -->
|
||||
|
||||
<!-- Begin PGPData -->
|
||||
|
||||
<element name="PGPData" type="ds:PGPDataType"/>
|
||||
<complexType name="PGPDataType">
|
||||
<choice>
|
||||
<sequence>
|
||||
<element name="PGPKeyID" type="base64Binary"/>
|
||||
<element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/>
|
||||
<any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
<sequence>
|
||||
<element name="PGPKeyPacket" type="base64Binary"/>
|
||||
<any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<!-- End PGPData -->
|
||||
|
||||
<!-- Begin SPKIData -->
|
||||
|
||||
<element name="SPKIData" type="ds:SPKIDataType"/>
|
||||
<complexType name="SPKIDataType">
|
||||
<sequence maxOccurs="unbounded">
|
||||
<element name="SPKISexp" type="base64Binary"/>
|
||||
<any namespace="##other" processContents="lax" minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!-- End SPKIData -->
|
||||
|
||||
<!-- End KeyInfo -->
|
||||
|
||||
<!-- Start Object (Manifest, SignatureProperty) -->
|
||||
|
||||
<element name="Object" type="ds:ObjectType"/>
|
||||
<complexType name="ObjectType" mixed="true">
|
||||
<sequence minOccurs="0" maxOccurs="unbounded">
|
||||
<any namespace="##any" processContents="lax"/>
|
||||
</sequence>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
<attribute name="MimeType" type="string" use="optional"/> <!-- add a grep facet -->
|
||||
<attribute name="Encoding" type="anyURI" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<element name="Manifest" type="ds:ManifestType"/>
|
||||
<complexType name="ManifestType">
|
||||
<sequence>
|
||||
<element ref="ds:Reference" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<element name="SignatureProperties" type="ds:SignaturePropertiesType"/>
|
||||
<complexType name="SignaturePropertiesType">
|
||||
<sequence>
|
||||
<element ref="ds:SignatureProperty" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<element name="SignatureProperty" type="ds:SignaturePropertyType"/>
|
||||
<complexType name="SignaturePropertyType" mixed="true">
|
||||
<choice maxOccurs="unbounded">
|
||||
<any namespace="##other" processContents="lax"/>
|
||||
<!-- (1,1) elements from (1,unbounded) namespaces -->
|
||||
</choice>
|
||||
<attribute name="Target" type="anyURI" use="required"/>
|
||||
<attribute name="Id" type="ID" use="optional"/>
|
||||
</complexType>
|
||||
|
||||
<!-- End Object (Manifest, SignatureProperty) -->
|
||||
|
||||
<!-- Start Algorithm Parameters -->
|
||||
|
||||
<simpleType name="HMACOutputLengthType">
|
||||
<restriction base="integer"/>
|
||||
</simpleType>
|
||||
|
||||
<!-- Start KeyValue Element-types -->
|
||||
|
||||
<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
|
||||
<complexType name="DSAKeyValueType">
|
||||
<sequence>
|
||||
<sequence minOccurs="0">
|
||||
<element name="P" type="ds:CryptoBinary"/>
|
||||
<element name="Q" type="ds:CryptoBinary"/>
|
||||
</sequence>
|
||||
<element name="G" type="ds:CryptoBinary" minOccurs="0"/>
|
||||
<element name="Y" type="ds:CryptoBinary"/>
|
||||
<element name="J" type="ds:CryptoBinary" minOccurs="0"/>
|
||||
<sequence minOccurs="0">
|
||||
<element name="Seed" type="ds:CryptoBinary"/>
|
||||
<element name="PgenCounter" type="ds:CryptoBinary"/>
|
||||
</sequence>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
|
||||
<complexType name="RSAKeyValueType">
|
||||
<sequence>
|
||||
<element name="Modulus" type="ds:CryptoBinary"/>
|
||||
<element name="Exponent" type="ds:CryptoBinary"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!-- End KeyValue Element-types -->
|
||||
|
||||
<!-- End Signature -->
|
||||
|
||||
</schema>
|
@ -303,7 +303,7 @@ public final class ExecOptionPermission extends Permission
|
||||
|
||||
offset = pname.length() - 1;
|
||||
|
||||
while ((last = pname.lastIndexOf(".", offset)) != -1) {
|
||||
while ((last = pname.lastIndexOf('.', offset)) != -1) {
|
||||
|
||||
pname = pname.substring(0, last+1) + "*";
|
||||
x = permissions.get(pname);
|
||||
@ -318,7 +318,7 @@ public final class ExecOptionPermission extends Permission
|
||||
pname = p.getName();
|
||||
offset = pname.length() - 1;
|
||||
|
||||
while ((last = pname.lastIndexOf("=", offset)) != -1) {
|
||||
while ((last = pname.lastIndexOf('=', offset)) != -1) {
|
||||
|
||||
pname = pname.substring(0, last+1) + "*";
|
||||
x = permissions.get(pname);
|
||||
|
@ -6831,7 +6831,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern
|
||||
// table name else isolate table name.
|
||||
|
||||
indexFrom = command.toLowerCase().indexOf("from");
|
||||
indexComma = command.indexOf(",", indexFrom);
|
||||
indexComma = command.indexOf(',', indexFrom);
|
||||
|
||||
if(indexComma == -1) {
|
||||
// implies only one table
|
||||
|
@ -910,7 +910,7 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
|
||||
|
||||
// now remove the last ","
|
||||
strWhereClause = strWhereClause.substring
|
||||
(0, strWhereClause.lastIndexOf(","));
|
||||
(0, strWhereClause.lastIndexOf(','));
|
||||
|
||||
// Add from clause
|
||||
strWhereClause = strWhereClause.concat(" from ");
|
||||
@ -920,7 +920,7 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
|
||||
|
||||
//Remove the last ","
|
||||
strWhereClause = strWhereClause.substring
|
||||
(0, strWhereClause.lastIndexOf(","));
|
||||
(0, strWhereClause.lastIndexOf(','));
|
||||
|
||||
// Add the where clause
|
||||
strWhereClause = strWhereClause.concat(" where ");
|
||||
|
@ -240,7 +240,7 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable {
|
||||
// Remove the string after "@xxxx"
|
||||
// before writing it to the xml file.
|
||||
String strProviderInstance = (caller.getSyncProvider()).toString();
|
||||
String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf("@"));
|
||||
String strProvider = strProviderInstance.substring(0, (caller.getSyncProvider()).toString().indexOf('@'));
|
||||
|
||||
propString("sync-provider-name", strProvider);
|
||||
propString("sync-provider-vendor", "Oracle Corporation");
|
||||
|
@ -1147,7 +1147,7 @@ public class XmlReaderContentHandler extends DefaultHandler {
|
||||
if (nullValue) {
|
||||
rs.setSyncProvider(null);
|
||||
} else {
|
||||
String str = s.substring(0,s.indexOf("@")+1);
|
||||
String str = s.substring(0,s.indexOf('@')+1);
|
||||
rs.setSyncProvider(str);
|
||||
}
|
||||
break;
|
||||
|
@ -39,7 +39,7 @@ import org.xml.sax.InputSource;
|
||||
public class XmlResolver implements EntityResolver {
|
||||
|
||||
public InputSource resolveEntity(String publicId, String systemId) {
|
||||
String schemaName = systemId.substring(systemId.lastIndexOf("/"));
|
||||
String schemaName = systemId.substring(systemId.lastIndexOf('/'));
|
||||
|
||||
if(systemId.startsWith("http://java.sun.com/xml/ns/jdbc")) {
|
||||
return new InputSource(this.getClass().getResourceAsStream(schemaName));
|
||||
|
@ -694,7 +694,7 @@ public class JndiLoginModule implements LoginModule {
|
||||
throw new LoginException("Error: no CallbackHandler available " +
|
||||
"to garner authentication information from the user");
|
||||
|
||||
String protocol = userProvider.substring(0, userProvider.indexOf(":"));
|
||||
String protocol = userProvider.substring(0, userProvider.indexOf(':'));
|
||||
|
||||
Callback[] callbacks = new Callback[2];
|
||||
callbacks[0] = new NameCallback(protocol + " "
|
||||
|
@ -400,7 +400,7 @@ public class LdapLoginModule implements LoginModule {
|
||||
|
||||
// Add any JNDI properties to the environment
|
||||
for (String key : options.keySet()) {
|
||||
if (key.indexOf(".") > -1) {
|
||||
if (key.indexOf('.') > -1) {
|
||||
ldapEnvironment.put(key, options.get(key));
|
||||
}
|
||||
}
|
||||
|
@ -857,7 +857,7 @@ public class CommandInterpreter {
|
||||
bpSpec = runtime.createClassLineBreakpoint(classId, lineNumber);
|
||||
} else {
|
||||
// Try stripping method from class.method token.
|
||||
int idot = token.lastIndexOf(".");
|
||||
int idot = token.lastIndexOf('.');
|
||||
if ( (idot <= 0) || /* No dot or dot in first char */
|
||||
(idot >= token.length() - 1) ) { /* dot in last char */
|
||||
return null;
|
||||
|
@ -1079,7 +1079,7 @@ class Commands {
|
||||
}
|
||||
} else {
|
||||
// Try stripping method from class.method token.
|
||||
int idot = token.lastIndexOf(".");
|
||||
int idot = token.lastIndexOf('.');
|
||||
if ( (idot <= 0) || /* No dot or dot in first char */
|
||||
(idot >= token.length() - 1) ) { /* dot in last char */
|
||||
printBreakpointCommandUsage(atForm, inForm);
|
||||
|
@ -67,7 +67,7 @@ class AllClassesQuery extends QueryHandler {
|
||||
continue;
|
||||
}
|
||||
String name = clazz.getName();
|
||||
int pos = name.lastIndexOf(".");
|
||||
int pos = name.lastIndexOf('.');
|
||||
String pkg;
|
||||
if (name.startsWith("[")) { // Only in ancient heap dumps
|
||||
pkg = "<Arrays>";
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1995, 2014, 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
|
||||
@ -86,6 +86,7 @@ public class Applet extends Panel {
|
||||
|
||||
/**
|
||||
* Read an applet from an object input stream.
|
||||
* @param s an object input stream.
|
||||
* @exception HeadlessException if
|
||||
* <code>GraphicsEnvironment.isHeadless()</code> returns
|
||||
* <code>true</code>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1995, 2014, 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
|
||||
@ -152,7 +152,7 @@ public interface AppletContext {
|
||||
* For security reasons, mapping of streams and keys exists for each
|
||||
* codebase. In other words, applet from one codebase cannot access
|
||||
* the streams created by an applet from a different codebase
|
||||
* <p>
|
||||
*
|
||||
* @param key key with which the specified value is to be associated.
|
||||
* @param stream stream to be associated with the specified key. If this
|
||||
* parameter is <code>null</code>, the specified key is removed
|
||||
@ -172,7 +172,7 @@ public interface AppletContext {
|
||||
* For security reasons, mapping of streams and keys exists for each
|
||||
* codebase. In other words, applet from one codebase cannot access
|
||||
* the streams created by an applet from a different codebase
|
||||
* <p>
|
||||
*
|
||||
* @return the stream to which this applet context maps the key
|
||||
* @param key key whose associated stream is to be returned.
|
||||
* @since 1.4
|
||||
@ -185,7 +185,7 @@ public interface AppletContext {
|
||||
* For security reasons, mapping of streams and keys exists for each
|
||||
* codebase. In other words, applet from one codebase cannot access
|
||||
* the streams created by an applet from a different codebase
|
||||
* <p>
|
||||
*
|
||||
* @return an Iterator of all the names of the streams in this applet
|
||||
* context.
|
||||
* @since 1.4
|
||||
|
@ -1926,9 +1926,9 @@ public abstract class Path2D implements Shape, Cloneable {
|
||||
* maintains, but it may contain no more precision either.
|
||||
* If the tradeoff of precision vs. storage size in the result is
|
||||
* important then the convenience constructors in the
|
||||
* {@link Path2D.Float#Path2D.Float(Shape, AffineTransform) Path2D.Float}
|
||||
* {@link Path2D.Float#Float(Shape, AffineTransform) Path2D.Float}
|
||||
* and
|
||||
* {@link Path2D.Double#Path2D.Double(Shape, AffineTransform) Path2D.Double}
|
||||
* {@link Path2D.Double#Double(Shape, AffineTransform) Path2D.Double}
|
||||
* subclasses should be used to make the choice explicit.
|
||||
*
|
||||
* @param at the {@code AffineTransform} used to transform a
|
||||
|
@ -1296,7 +1296,7 @@ public final class Class<T> implements java.io.Serializable,
|
||||
String simpleName = getSimpleBinaryName();
|
||||
if (simpleName == null) { // top level class
|
||||
simpleName = getName();
|
||||
return simpleName.substring(simpleName.lastIndexOf(".")+1); // strip the package name
|
||||
return simpleName.substring(simpleName.lastIndexOf('.')+1); // strip the package name
|
||||
}
|
||||
// According to JLS3 "Binary Compatibility" (13.1) the binary
|
||||
// name of non-package classes (not top level) is the binary
|
||||
|
@ -2133,7 +2133,7 @@ public abstract class ClassLoader {
|
||||
return result.booleanValue();
|
||||
|
||||
// Check for most specific package entry
|
||||
int dotIndex = className.lastIndexOf(".");
|
||||
int dotIndex = className.lastIndexOf('.');
|
||||
if (dotIndex < 0) { // default package
|
||||
result = packageAssertionStatus.get(null);
|
||||
if (result != null)
|
||||
@ -2144,7 +2144,7 @@ public abstract class ClassLoader {
|
||||
result = packageAssertionStatus.get(className);
|
||||
if (result != null)
|
||||
return result.booleanValue();
|
||||
dotIndex = className.lastIndexOf(".", dotIndex-1);
|
||||
dotIndex = className.lastIndexOf('.', dotIndex-1);
|
||||
}
|
||||
|
||||
// Return the classloader default
|
||||
|
@ -85,7 +85,7 @@ class InvokerBytecodeGenerator {
|
||||
private InvokerBytecodeGenerator(LambdaForm lambdaForm, int localsMapSize,
|
||||
String className, String invokerName, MethodType invokerType) {
|
||||
if (invokerName.contains(".")) {
|
||||
int p = invokerName.indexOf(".");
|
||||
int p = invokerName.indexOf('.');
|
||||
className = invokerName.substring(0, p);
|
||||
invokerName = invokerName.substring(p+1);
|
||||
}
|
||||
|
@ -607,7 +607,7 @@ class LambdaForm {
|
||||
assert(m.getName().equals("interpret" + sig.substring(sig.indexOf('_'))));
|
||||
LambdaForm form = new LambdaForm(sig);
|
||||
form.vmentry = m;
|
||||
mt.form().setCachedLambdaForm(MethodTypeForm.LF_COUNTER, form);
|
||||
form = mt.form().setCachedLambdaForm(MethodTypeForm.LF_COUNTER, form);
|
||||
// FIXME: get rid of PREPARED_FORMS; use MethodTypeForm cache only
|
||||
forms.put(sig, form);
|
||||
}
|
||||
|
@ -313,7 +313,8 @@ public class LambdaMetafactory {
|
||||
* reference expression</em> features of the Java Programming Language.
|
||||
*
|
||||
* <p>This is the general, more flexible metafactory; a streamlined version
|
||||
* is provided by {@link #altMetafactory(MethodHandles.Lookup, String, MethodType, Object...)}.
|
||||
* is provided by {@link #metafactory(java.lang.invoke.MethodHandles.Lookup,
|
||||
* String, MethodType, MethodType, MethodHandle, MethodType)}.
|
||||
* A general description of the behavior of this method is provided
|
||||
* {@link LambdaMetafactory above}.
|
||||
*
|
||||
|
@ -692,8 +692,7 @@ import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
|
||||
|
||||
lform = new LambdaForm("guardWithCatch", lambdaType.parameterCount(), names);
|
||||
|
||||
basicType.form().setCachedLambdaForm(MethodTypeForm.LF_GWC, lform);
|
||||
return lform;
|
||||
return basicType.form().setCachedLambdaForm(MethodTypeForm.LF_GWC, lform);
|
||||
}
|
||||
|
||||
static
|
||||
|
@ -91,8 +91,10 @@ final class MethodTypeForm {
|
||||
return lambdaForms[which];
|
||||
}
|
||||
|
||||
public LambdaForm setCachedLambdaForm(int which, LambdaForm form) {
|
||||
// Should we perform some sort of CAS, to avoid racy duplication?
|
||||
synchronized public LambdaForm setCachedLambdaForm(int which, LambdaForm form) {
|
||||
// Simulate a CAS, to avoid racy duplication of results.
|
||||
LambdaForm prev = lambdaForms[which];
|
||||
if (prev != null) return prev;
|
||||
return lambdaForms[which] = form;
|
||||
}
|
||||
|
||||
|
@ -633,7 +633,7 @@ public abstract class Executable extends AccessibleObject
|
||||
getConstantPool(getDeclaringClass()),
|
||||
this,
|
||||
getDeclaringClass(),
|
||||
getParameterTypes(),
|
||||
getGenericParameterTypes(),
|
||||
TypeAnnotation.TypeAnnotationTarget.METHOD_FORMAL_PARAMETER);
|
||||
}
|
||||
|
||||
|
@ -294,7 +294,7 @@ public class CookieManager extends CookieHandler
|
||||
// the path is the directory of the page/doc
|
||||
String path = uri.getPath();
|
||||
if (!path.endsWith("/")) {
|
||||
int i = path.lastIndexOf("/");
|
||||
int i = path.lastIndexOf('/');
|
||||
if (i > 0) {
|
||||
path = path.substring(0, i + 1);
|
||||
} else {
|
||||
@ -364,7 +364,7 @@ public class CookieManager extends CookieHandler
|
||||
|
||||
|
||||
static private boolean isInPortList(String lst, int port) {
|
||||
int i = lst.indexOf(",");
|
||||
int i = lst.indexOf(',');
|
||||
int val = -1;
|
||||
while (i > 0) {
|
||||
try {
|
||||
@ -375,7 +375,7 @@ public class CookieManager extends CookieHandler
|
||||
} catch (NumberFormatException numberFormatException) {
|
||||
}
|
||||
lst = lst.substring(i+1);
|
||||
i = lst.indexOf(",");
|
||||
i = lst.indexOf(',');
|
||||
}
|
||||
if (!lst.isEmpty()) {
|
||||
try {
|
||||
|
@ -1138,7 +1138,7 @@ class InetAddress implements java.io.Serializable {
|
||||
// This is supposed to be an IPv6 literal
|
||||
// Check if a numeric or string zone id is present
|
||||
int pos;
|
||||
if ((pos=host.indexOf ("%")) != -1) {
|
||||
if ((pos=host.indexOf ('%')) != -1) {
|
||||
numericZone = checkNumericZone (host);
|
||||
if (numericZone == -1) { /* remainder of string must be an ifname */
|
||||
ifname = host.substring (pos+1);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user