Merge
authorlana
Fri, 12 Oct 2012 14:52:24 -0700
changeset 14180 66f6161a0bcb
parent 14179 4681260d262a (diff)
parent 14066 cdaa6122185f (current diff)
child 14181 f723098d438c
Merge
hotspot/agent/make/ClosureFinder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/TestDebugger.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/AbstractInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/Address.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/Arithmetic.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ArithmeticInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/BaseIndexScaleDispAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/BranchInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/CPUHelper.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/CallInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/DirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/Immediate.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/IndirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/Instruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/LoadInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/LogicInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/MemoryInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/MoveInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/PCRelativeAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/RTLDataTypes.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/RTLOperations.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ReturnInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ShiftInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/StoreInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/amd64/AMD64FloatRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/amd64/AMD64Helper.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/amd64/AMD64Register.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/amd64/AMD64Registers.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ia64/IA64FloatRegister.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ia64/IA64FloatRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ia64/IA64Helper.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ia64/IA64Register.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/ia64/IA64Registers.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/AlternateSpaceLdstubDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/AlternateSpaceLoadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/AlternateSpaceStoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/AlternateSpaceSwapDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/ArithmeticDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/BranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/CallDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/CoprocessorBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/CoprocessorDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/FP2RegisterDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/FPArithmeticDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/FPMoveDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/FPopDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/FloatBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/FloatDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/FlushDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/Format3ADecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/IllegalInstructionDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/InstructionDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/IntegerBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/JmplDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/LdstubDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/LoadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/LogicDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/MemoryInstructionDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/ReadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/ReadWriteDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/RegisterDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/RestoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/RettDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCArithmeticInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCAtomicLoadStoreInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCBranchInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCCallInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCDisassembler.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCFP2RegisterInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCFPArithmeticInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCFPMoveInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCFloatRegister.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCFloatRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCFlushInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCFormat3AInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCHelper.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCIllegalInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCIndirectCallInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCInstructionFactory.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCInstructionFactoryImpl.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCJmplInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCLdstubInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCLoadInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCLogicInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCMemoryInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCMoveInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCNoopInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCOpcodes.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCReadInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCRegisterIndirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCRestoreInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCRettInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCReturnInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCSaveInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCSethiInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCShiftInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCSpecialLoadInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCSpecialRegisterInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCSpecialRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCSpecialStoreInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCStbarInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCStoreInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCSwapInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCTrapInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCUnimpInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV8Disassembler.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9BranchInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9CasInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9ConditionFlags.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9Disassembler.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9DoneInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9FMOVccInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9FMOVrInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9FlushwInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9IlltrapInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9ImpdepInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9Instruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9InstructionFactory.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9InstructionFactoryImpl.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9MOVccInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9MOVrInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9MembarInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9Opcodes.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9PopcInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9PrefetchInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9PrivilegedRegisterInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9PrivilegedRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9RdprInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9ReadInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9RegisterBranchInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9RegisterIndirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9RestoredInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9RetryInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9ReturnInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9SavedInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9SirInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9SpecialRegisterInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9SpecialRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9WriteInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCV9WrprInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SPARCWriteInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SaveDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SethiDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/ShiftDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SpecialLoadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SpecialLoadStoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SpecialStoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/StoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/SwapDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/TrapDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/UnimpDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V8FPop1Decoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V8FPop2Decoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9AlternateSpaceDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9AlternateSpaceLdstubDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9AlternateSpaceLoadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9AlternateSpacePrefetchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9AlternateSpaceStoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9AlternateSpaceSwapDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9BranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9CCBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9CMoveDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9CasDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9DoneRetryDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9FMOVccDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9FMOVrDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9FPop1Decoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9FPop2Decoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9FloatBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9FlushwDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9InstructionDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9IntRegisterBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9IntegerBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9MOVccDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9MOVrDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9PopcDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9PrefetchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9PrivilegedReadWriteDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9RdprDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9ReadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9RegisterBranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9SavedRestoredDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9ShiftDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9SpecialLoadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9SpecialStoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9WriteDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/V9WrprDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/sparc/WriteDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/ArithmeticDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/BranchDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/CallDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/ConditionalJmpDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/FPArithmeticDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/FPInstructionDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/FPLoadDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/FPStoreDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/FloatDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/FloatGRPDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/GRPDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/InstructionDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/JmpDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/LogicalDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/MoveDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/RotateDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/SSEArithmeticDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/SSEInstructionDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/SSELogicalDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/SSEMoveDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/SSEShiftDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/ShiftDecoder.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86ArithmeticInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86BranchInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86CallInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86CondJmpInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86DirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86Disassembler.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86FPArithmeticInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86FPInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86FPLoadInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86FPStoreInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86FloatRegister.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86FloatRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86GeneralInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86Helper.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86IllegalInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86Instruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86InstructionFactory.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86InstructionFactoryImpl.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86JmpInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86LogicInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86MMXRegister.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86MMXRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86MemoryIndirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86MemoryInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86MoveInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86MoveLoadInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86MoveStoreInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86Opcodes.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86PCRelativeAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86Register.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86RegisterDirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86RegisterIndirectAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86RegisterPart.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86Registers.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86RotateInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86SegmentRegister.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86SegmentRegisterAddress.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86SegmentRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86ShiftInstruction.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86XMMRegister.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/asm/x86/X86XMMRegisters.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/IA64CurrentFrameGuess.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/IA64Frame.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/IA64JavaCallWrapper.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/IA64RegisterMap.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/cInterpreter.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/linux_ia64/LinuxIA64JavaThreadPDAccess.java
hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/win32_ia64/Win32IA64JavaThreadPDAccess.java
hotspot/src/share/tools/ProjectCreator/DirectoryTree.java
hotspot/src/share/tools/ProjectCreator/DirectoryTreeNode.java
hotspot/src/share/tools/ProjectCreator/FileFormatException.java
hotspot/src/share/tools/ProjectCreator/WinGammaPlatformVC6.java
--- a/jdk/make/java/java/Makefile	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/make/java/java/Makefile	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1997, 2012, 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
@@ -64,13 +64,11 @@
 include Exportedfiles.gmk
 
 ifeq ($(PLATFORM),windows)
-FILES_java += 	java/io/Win32FileSystem.java \
-		java/io/WinNTFileSystem.java \
+FILES_java += 	java/io/WinNTFileSystem.java \
 		java/util/prefs/WindowsPreferences.java \
                 java/util/prefs/WindowsPreferencesFactory.java
 
 FILES_c    +=   ProcessImpl_md.c \
-		Win32FileSystem_md.c \
 		WinNTFileSystem_md.c \
 		canonicalize_md.c \
 		dirent_md.c \
--- a/jdk/make/jprt.properties	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/make/jprt.properties	Fri Oct 12 14:52:24 2012 -0700
@@ -77,20 +77,18 @@
     ${jprt.my.test.target.set:TESTNAME=jdk_util},               \
     ${jprt.my.test.target.set:TESTNAME=jdk_io},                 \
     ${jprt.my.test.target.set:TESTNAME=jdk_net},                \
-    ${jprt.my.test.target.set:TESTNAME=jdk_nio1},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_nio2},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_nio3},               \
+    ${jprt.my.test.target.set:TESTNAME=jdk_nio},                \
     ${jprt.my.test.target.set:TESTNAME=jdk_security1},          \
     ${jprt.my.test.target.set:TESTNAME=jdk_security2},          \
     ${jprt.my.test.target.set:TESTNAME=jdk_security3},          \
     ${jprt.my.test.target.set:TESTNAME=jdk_rmi},                \
-    ${jprt.my.test.target.set:TESTNAME=jdk_management1},        \
-    ${jprt.my.test.target.set:TESTNAME=jdk_management2},        \
+    ${jprt.my.test.target.set:TESTNAME=jdk_management},         \
+    ${jprt.my.test.target.set:TESTNAME=jdk_jmx},                \
     ${jprt.my.test.target.set:TESTNAME=jdk_text},               \
-    ${jprt.my.test.target.set:TESTNAME=jdk_tools1},             \
-    ${jprt.my.test.target.set:TESTNAME=jdk_tools2},             \
+    ${jprt.my.test.target.set:TESTNAME=jdk_tools},              \
+    ${jprt.my.test.target.set:TESTNAME=jdk_jdi},                \
     ${jprt.my.test.target.set:TESTNAME=jdk_jfr},                \
-    ${jprt.my.test.target.set:TESTNAME=jdk_misc}
+    ${jprt.my.test.target.set:TESTNAME=jdk_other}
 
 # All vm test targets (testset=all)
 jprt.vm.all.test.targets=                                       \
--- a/jdk/makefiles/CompileNativeLibraries.gmk	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/makefiles/CompileNativeLibraries.gmk	Fri Oct 12 14:52:24 2012 -0700
@@ -209,7 +209,6 @@
 else
 	LIBJAVA_EXCLUDE_FILES += \
 		ProcessImpl_md.c \
-		Win32FileSystem_md.c \
 		WinNTFileSystem_md.c \
 		dirent_md.c \
 		WindowsPreferences.c \
--- a/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, 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
@@ -1746,12 +1746,7 @@
 
         // convert to a Double and compare to zero
         try {
-            Double d = new Double(value.toString());
-            if (d.compareTo(new Double((double)0)) == 0) {
-                return false;
-            } else {
-                return true;
-            }
+            return Double.compare(Double.parseDouble(value.toString()), 0) != 0;
         } catch (NumberFormatException ex) {
             throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.boolfail").toString(),
                   new Object[] {value.toString().trim(), columnIndex}));
@@ -2039,6 +2034,7 @@
      *            the cursor is not on a valid row, or this method fails
      * @deprecated
      */
+    @Deprecated
     public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
         Object value;
         BigDecimal bDecimal, retVal;
@@ -2374,6 +2370,7 @@
      * @throws SQLException if an error occurs
      * @deprecated
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
         // always free an old stream
         unicodeStream = null;
@@ -2643,6 +2640,7 @@
      * @deprecated Use the <code>getBigDecimal(String columnName)</code>
      *             method instead
      */
+    @Deprecated
     public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
         return getBigDecimal(getColIdxByName(columnName), scale);
     }
@@ -2774,6 +2772,7 @@
      *            this rowset's rows or its insert row
      * @deprecated use the method <code>getCharacterStream</code> instead
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
         return getUnicodeStream(getColIdxByName(columnName));
     }
@@ -4428,7 +4427,7 @@
         // make sure the cursor is on a valid row
         checkCursor();
 
-        Object obj = convertNumeric(new Float(x),
+        Object obj = convertNumeric(Float.valueOf(x),
         java.sql.Types.REAL,
         RowSetMD.getColumnType(columnIndex));
 
@@ -4463,7 +4462,7 @@
         checkIndex(columnIndex);
         // make sure the cursor is on a valid row
         checkCursor();
-        Object obj = convertNumeric(new Double(x),
+        Object obj = convertNumeric(Double.valueOf(x),
         java.sql.Types.DOUBLE,
         RowSetMD.getColumnType(columnIndex));
 
--- a/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, 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
@@ -839,7 +839,7 @@
 
       if(onInsertRow) {
          if(p != null) {
-            bool = p.evaluate(new Float(x) , columnIndex);
+            bool = p.evaluate(Float.valueOf(x), columnIndex);
 
             if(!bool) {
                throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
@@ -906,7 +906,7 @@
 
       if(onInsertRow) {
          if(p != null) {
-            bool = p.evaluate(new Double(x) , columnIndex);
+            bool = p.evaluate(Double.valueOf(x) , columnIndex);
 
             if(!bool) {
                throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
--- a/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1016,6 +1016,7 @@
      *            prepared statement, and result set
      * @deprecated
      */
+    @Deprecated
     public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
         checkState();
 
@@ -1154,6 +1155,7 @@
      * @deprecated use <code>getCharacterStream</code> in place of
      *              <code>getUnicodeStream</code>
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
         checkState();
 
@@ -1336,6 +1338,7 @@
      *            prepared statement, and result set
      * @deprecated
      */
+    @Deprecated
     public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
         return getBigDecimal(findColumn(columnName), scale);
     }
@@ -1461,6 +1464,7 @@
      *            prepared statement, and result set
      * @deprecated
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
         return getUnicodeStream(findColumn(columnName));
     }
--- a/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1153,6 +1153,7 @@
      *            the cursor is not on a valid row, or this method fails
      * @deprecated
      */
+    @Deprecated
     public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
         return crsInternal.getBigDecimal(columnIndex);
     }
@@ -1264,6 +1265,7 @@
      * @throws SQLException if an error occurs
      * @deprecated
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
         return crsInternal.getUnicodeStream(columnIndex);
     }
@@ -1436,6 +1438,7 @@
      * @deprecated use the method <code>getBigDecimal(String columnName)</code>
      *             instead
      */
+    @Deprecated
     public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
         return crsInternal.getBigDecimal(columnName);
     }
@@ -1552,6 +1555,7 @@
      *            this rowset's rows or its insert row
      * @deprecated use the method <code>getCharacterStream</code> instead
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
         return crsInternal.getUnicodeStream(columnName);
     }
--- a/jdk/src/share/classes/com/sun/rowset/internal/SyncResolverImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/com/sun/rowset/internal/SyncResolverImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1288,6 +1288,7 @@
      *            the cursor is not on a valid row, or this method fails
      * @deprecated
      */
+    @Deprecated
     public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
        throw new UnsupportedOperationException();
     }
@@ -1424,6 +1425,7 @@
      * @throws SQLException if an error occurs
      * @deprecated
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
        throw new UnsupportedOperationException();
     }
@@ -1653,6 +1655,7 @@
      * @deprecated Use the <code>getBigDecimal(String columnName)</code>
      *             method instead
      */
+    @Deprecated
     public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
         throw new UnsupportedOperationException();
     }
@@ -1784,6 +1787,7 @@
      *            this rowset's rows or its insert row
      * @deprecated use the method <code>getCharacterStream</code> instead
      */
+    @Deprecated
     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
         throw new UnsupportedOperationException();
     }
--- a/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -52,6 +52,7 @@
     private boolean shut_wr = false;
 
     private SocketInputStream socketInputStream = null;
+    private SocketOutputStream socketOutputStream = null;
 
     /* number of threads using the FileDescriptor */
     protected int fdUseCount = 0;
@@ -436,7 +437,10 @@
         if (shut_wr) {
             throw new IOException("Socket output is shutdown");
         }
-        return new SocketOutputStream(this);
+        if (socketOutputStream == null) {
+            socketOutputStream = new SocketOutputStream(this);
+        }
+        return socketOutputStream;
     }
 
     void setFileDescriptor(FileDescriptor fd) {
--- a/jdk/src/share/classes/java/sql/CallableStatement.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/sql/CallableStatement.java	Fri Oct 12 14:52:24 2012 -0700
@@ -295,6 +295,7 @@
      *             or <code>getBigDecimal(String parameterName)</code>
      * @see #setBigDecimal
      */
+    @Deprecated
     BigDecimal getBigDecimal(int parameterIndex, int scale)
         throws SQLException;
 
--- a/jdk/src/share/classes/java/sql/Date.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/sql/Date.java	Fri Oct 12 14:52:24 2012 -0700
@@ -51,6 +51,7 @@
      * @param day 1 to 31
      * @deprecated instead use the constructor <code>Date(long date)</code>
      */
+    @Deprecated
     public Date(int year, int month, int day) {
         super(year, month, day);
     }
@@ -179,6 +180,7 @@
     * @exception java.lang.IllegalArgumentException if this method is invoked
     * @see #setHours
     */
+    @Deprecated
     public int getHours() {
         throw new java.lang.IllegalArgumentException();
     }
@@ -191,6 +193,7 @@
     * @exception java.lang.IllegalArgumentException if this method is invoked
     * @see #setMinutes
     */
+    @Deprecated
     public int getMinutes() {
         throw new java.lang.IllegalArgumentException();
     }
@@ -203,6 +206,7 @@
     * @exception java.lang.IllegalArgumentException if this method is invoked
     * @see #setSeconds
     */
+    @Deprecated
     public int getSeconds() {
         throw new java.lang.IllegalArgumentException();
     }
@@ -215,6 +219,7 @@
     * @exception java.lang.IllegalArgumentException if this method is invoked
     * @see #getHours
     */
+    @Deprecated
     public void setHours(int i) {
         throw new java.lang.IllegalArgumentException();
     }
@@ -227,6 +232,7 @@
     * @exception java.lang.IllegalArgumentException if this method is invoked
     * @see #getMinutes
     */
+    @Deprecated
     public void setMinutes(int i) {
         throw new java.lang.IllegalArgumentException();
     }
@@ -239,6 +245,7 @@
     * @exception java.lang.IllegalArgumentException if this method is invoked
     * @see #getSeconds
     */
+    @Deprecated
     public void setSeconds(int i) {
         throw new java.lang.IllegalArgumentException();
     }
--- a/jdk/src/share/classes/java/sql/DriverManager.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/sql/DriverManager.java	Fri Oct 12 14:52:24 2012 -0700
@@ -412,13 +412,14 @@
      * method throws a <code>java.lang.SecurityException</code>.
      *
      * @param out the new logging/tracing PrintStream; to disable, set to <code>null</code>
-     * @deprecated
+     * @deprecated Use {@code setLogWriter}
      * @throws SecurityException if a security manager exists and its
      *    <code>checkPermission</code> method denies setting the log stream
      *
      * @see SecurityManager#checkPermission
      * @see #getLogStream
      */
+    @Deprecated
     public static void setLogStream(java.io.PrintStream out) {
 
         SecurityManager sec = System.getSecurityManager();
@@ -438,9 +439,10 @@
      * and all drivers.
      *
      * @return the logging/tracing PrintStream; if disabled, is <code>null</code>
-     * @deprecated
+     * @deprecated  Use {@code getLogWriter}
      * @see #setLogStream
      */
+    @Deprecated
     public static java.io.PrintStream getLogStream() {
         return logStream;
     }
--- a/jdk/src/share/classes/java/sql/PreparedStatement.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/sql/PreparedStatement.java	Fri Oct 12 14:52:24 2012 -0700
@@ -342,8 +342,9 @@
      * this method is called on a closed <code>PreparedStatement</code>
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
-     * @deprecated
+     * @deprecated Use {@code setCharacterStream}
      */
+    @Deprecated
     void setUnicodeStream(int parameterIndex, java.io.InputStream x,
                           int length) throws SQLException;
 
--- a/jdk/src/share/classes/java/sql/ResultSet.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/sql/ResultSet.java	Fri Oct 12 14:52:24 2012 -0700
@@ -356,8 +356,10 @@
      *            called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
-     * @deprecated
+     * @deprecated Use {@code getBigDecimal(int columnIndex)}
+     *             or {@code getBigDecimal(String columnLabel)}
      */
+    @Deprecated
     BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException;
 
     /**
@@ -477,6 +479,7 @@
      * @deprecated use <code>getCharacterStream</code> in place of
      *              <code>getUnicodeStream</code>
      */
+    @Deprecated
     java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException;
 
     /**
@@ -641,8 +644,10 @@
      *            called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
      * this method
-     * @deprecated
+     * @deprecated Use {@code getBigDecimal(int columnIndex)}
+     *             or {@code getBigDecimal(String columnLabel)}
      */
+    @Deprecated
     BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException;
 
     /**
@@ -760,6 +765,7 @@
      * this method
      * @deprecated use <code>getCharacterStream</code> instead
      */
+    @Deprecated
     java.io.InputStream getUnicodeStream(String columnLabel) throws SQLException;
 
     /**
--- a/jdk/src/share/classes/java/text/DateFormatSymbols.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/text/DateFormatSymbols.java	Fri Oct 12 14:52:24 2012 -0700
@@ -45,6 +45,7 @@
 import java.text.spi.DateFormatSymbolsProvider;
 import java.util.Arrays;
 import java.util.Locale;
+import java.util.Objects;
 import java.util.ResourceBundle;
 import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
@@ -366,6 +367,7 @@
      */
     public void setEras(String[] newEras) {
         eras = Arrays.copyOf(newEras, newEras.length);
+        cachedHashCode = 0;
     }
 
     /**
@@ -393,6 +395,7 @@
      */
     public void setMonths(String[] newMonths) {
         months = Arrays.copyOf(newMonths, newMonths.length);
+        cachedHashCode = 0;
     }
 
     /**
@@ -420,6 +423,7 @@
      */
     public void setShortMonths(String[] newShortMonths) {
         shortMonths = Arrays.copyOf(newShortMonths, newShortMonths.length);
+        cachedHashCode = 0;
     }
 
     /**
@@ -439,6 +443,7 @@
      */
     public void setWeekdays(String[] newWeekdays) {
         weekdays = Arrays.copyOf(newWeekdays, newWeekdays.length);
+        cachedHashCode = 0;
     }
 
     /**
@@ -458,6 +463,7 @@
      */
     public void setShortWeekdays(String[] newShortWeekdays) {
         shortWeekdays = Arrays.copyOf(newShortWeekdays, newShortWeekdays.length);
+        cachedHashCode = 0;
     }
 
     /**
@@ -474,6 +480,7 @@
      */
     public void setAmPmStrings(String[] newAmpms) {
         ampms = Arrays.copyOf(newAmpms, newAmpms.length);
+        cachedHashCode = 0;
     }
 
     /**
@@ -558,6 +565,7 @@
         }
         zoneStrings = aCopy;
         isZoneStringsSet = true;
+        cachedHashCode = 0;
     }
 
     /**
@@ -576,6 +584,7 @@
     public void setLocalPatternChars(String newLocalPatternChars) {
         // Call toString() to throw an NPE in case the argument is null
         localPatternChars = newLocalPatternChars.toString();
+        cachedHashCode = 0;
     }
 
     /**
@@ -597,12 +606,23 @@
      * Override hashCode.
      * Generates a hash code for the DateFormatSymbols object.
      */
+    @Override
     public int hashCode() {
-        int hashcode = 0;
-        String[][] zoneStrings = getZoneStringsWrapper();
-        for (int index = 0; index < zoneStrings[0].length; ++index)
-            hashcode ^= zoneStrings[0][index].hashCode();
-        return hashcode;
+        int hashCode = cachedHashCode;
+        if (hashCode == 0) {
+            hashCode = 5;
+            hashCode = 11 * hashCode + Arrays.hashCode(eras);
+            hashCode = 11 * hashCode + Arrays.hashCode(months);
+            hashCode = 11 * hashCode + Arrays.hashCode(shortMonths);
+            hashCode = 11 * hashCode + Arrays.hashCode(weekdays);
+            hashCode = 11 * hashCode + Arrays.hashCode(shortWeekdays);
+            hashCode = 11 * hashCode + Arrays.hashCode(ampms);
+            hashCode = 11 * hashCode + Arrays.deepHashCode(getZoneStringsWrapper());
+            hashCode = 11 * hashCode + Objects.hashCode(localPatternChars);
+            cachedHashCode = hashCode;
+        }
+
+        return hashCode;
     }
 
     /**
@@ -641,6 +661,11 @@
 
     private transient int lastZoneIndex = 0;
 
+    /**
+     * Cached hash code
+     */
+    transient volatile int cachedHashCode = 0;
+
     private void initializeData(Locale desiredLocale) {
         locale = desiredLocale;
 
@@ -782,6 +807,7 @@
             dst.zoneStrings = null;
         }
         dst.localPatternChars = src.localPatternChars;
+        dst.cachedHashCode = 0;
     }
 
     /**
--- a/jdk/src/share/classes/java/util/TimeZone.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/util/TimeZone.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2012, 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
@@ -719,15 +719,16 @@
      * Returns the default TimeZone in an AppContext if any AppContext
      * has ever used. null is returned if any AppContext hasn't been
      * used or if the AppContext doesn't have the default TimeZone.
+     *
+     * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't
+     * been loaded. If so, it implies that AWTSecurityManager is not our
+     * SecurityManager and we can use a local static variable.
+     * This works around a build time issue.
      */
-    private synchronized static TimeZone getDefaultInAppContext() {
+    private static TimeZone getDefaultInAppContext() {
         // JavaAWTAccess provides access implementation-private methods without using reflection.
         JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
 
-        // Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't
-        // been loaded. If so, it implies that AWTSecurityManager is not our
-        // SecurityManager and we can use a local static variable.
-        // This works around a build time issue.
         if (javaAWTAccess == null) {
             return mainAppContextDefault;
         } else {
@@ -749,15 +750,16 @@
      * tz. null is handled special: do nothing if any AppContext
      * hasn't been used, remove the default TimeZone in the
      * AppContext otherwise.
+     *
+     * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't
+     * been loaded. If so, it implies that AWTSecurityManager is not our
+     * SecurityManager and we can use a local static variable.
+     * This works around a build time issue.
      */
-    private synchronized static void setDefaultInAppContext(TimeZone tz) {
+    private static void setDefaultInAppContext(TimeZone tz) {
         // JavaAWTAccess provides access implementation-private methods without using reflection.
         JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
 
-        // Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't
-        // been loaded. If so, it implies that AWTSecurityManager is not our
-        // SecurityManager and we can use a local static variable.
-        // This works around a build time issue.
         if (javaAWTAccess == null) {
             mainAppContextDefault = tz;
         } else {
@@ -822,7 +824,7 @@
     private static final int    GMT_ID_LENGTH = 3;
 
     // a static TimeZone we can reference if no AppContext is in place
-    private static TimeZone mainAppContextDefault;
+    private static volatile TimeZone mainAppContextDefault;
 
     /**
      * Parses a custom time zone identifier and returns a corresponding zone.
--- a/jdk/src/share/classes/java/util/logging/LogManager.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/java/util/logging/LogManager.java	Fri Oct 12 14:52:24 2012 -0700
@@ -311,7 +311,14 @@
      * @exception  SecurityException  if a security manager exists and if
      *             the caller does not have LoggingPermission("control").
      * @exception NullPointerException if the PropertyChangeListener is null.
+     * @deprecated The dependency on {@code PropertyChangeListener} creates a
+     *             significant impediment to future modularization of the Java
+     *             platform. This method will be removed in a future release.
+     *             The global {@code LogManager} can detect changes to the
+     *             logging configuration by overridding the {@link
+     *             #readConfiguration readConfiguration} method.
      */
+    @Deprecated
     public void addPropertyChangeListener(PropertyChangeListener l) throws SecurityException {
         PropertyChangeListener listener = Objects.requireNonNull(l);
         checkAccess();
@@ -336,7 +343,14 @@
      * @param l  event listener (can be null)
      * @exception  SecurityException  if a security manager exists and if
      *             the caller does not have LoggingPermission("control").
+     * @deprecated The dependency on {@code PropertyChangeListener} creates a
+     *             significant impediment to future modularization of the Java
+     *             platform. This method will be removed in a future release.
+     *             The global {@code LogManager} can detect changes to the
+     *             logging configuration by overridding the {@link
+     *             #readConfiguration readConfiguration} method.
      */
+    @Deprecated
     public void removePropertyChangeListener(PropertyChangeListener l) throws SecurityException {
         checkAccess();
         if (l != null) {
--- a/jdk/src/share/classes/javax/sql/rowset/BaseRowSet.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/javax/sql/rowset/BaseRowSet.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, 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
@@ -1850,7 +1850,7 @@
         if(params == null){
              throw new SQLException("Set initParams() before setFloat");
         }
-        params.put(Integer.valueOf(parameterIndex - 1), new Float(x));
+        params.put(Integer.valueOf(parameterIndex - 1), Float.valueOf(x));
     }
 
     /**
@@ -1882,7 +1882,7 @@
         if(params == null){
              throw new SQLException("Set initParams() before setDouble");
         }
-        params.put(Integer.valueOf(parameterIndex - 1), new Double(x));
+        params.put(Integer.valueOf(parameterIndex - 1), Double.valueOf(x));
     }
 
     /**
@@ -2389,7 +2389,7 @@
      * @deprecated getCharacterStream should be used in its place
      * @see #getParams
      */
-
+    @Deprecated
     public void setUnicodeStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException {
         Object unicodeStream[];
         checkParamIndex(parameterIndex);
--- a/jdk/src/share/classes/javax/sql/rowset/serial/SQLOutputImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/javax/sql/rowset/serial/SQLOutputImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -215,7 +215,7 @@
      */
     @SuppressWarnings("unchecked")
     public void writeFloat(float x) throws SQLException {
-        attribs.add(new Float(x));
+        attribs.add(Float.valueOf(x));
     }
 
     /**
@@ -230,7 +230,7 @@
      */
     @SuppressWarnings("unchecked")
     public void writeDouble(double x) throws SQLException{
-        attribs.add(new Double(x));
+        attribs.add(Double.valueOf(x));
     }
 
     /**
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, 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
@@ -229,11 +229,7 @@
      * The standard resource file name.
      */
     private static String ROWSET_PROPERTIES = "rowset.properties";
-    /**
-     * The RI Optimistic Provider.
-     */
-    private static String default_provider =
-            "com.sun.rowset.providers.RIOptimisticProvider";
+
     /**
      *  Permission required to invoke setJNDIContext and setLogger
      */
@@ -248,24 +244,13 @@
      * The <code>Logger</code> object to be used by the <code>SyncFactory</code>.
      */
     private static volatile Logger rsLogger;
-    /**
-     *
-     */
-    private static Level rsLevel;
+
     /**
      * The registry of available <code>SyncProvider</code> implementations.
      * See section 2.0 of the class comment for <code>SyncFactory</code> for an
      * explanation of how a provider can be added to this registry.
      */
     private static Hashtable<String, SyncProvider> implementations;
-    /**
-     * Internal sync object used to maintain the SPI as a singleton
-     */
-    private static Object logSync = new Object();
-    /**
-     * Internal PrintWriter field for logging facility
-     */
-    private static java.io.PrintWriter logWriter = null;
 
     /**
      * Adds the the given synchronization provider to the factory register. Guidelines
--- a/jdk/src/windows/classes/java/io/Win32FileSystem.java	Wed Jul 05 18:26:11 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,608 +0,0 @@
-/*
- * Copyright (c) 1998, 2010, 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.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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.
- */
-
-package java.io;
-
-import java.security.AccessController;
-import java.util.Locale;
-import sun.security.action.GetPropertyAction;
-
-
-class Win32FileSystem extends FileSystem {
-
-    private final char slash;
-    private final char altSlash;
-    private final char semicolon;
-
-    public Win32FileSystem() {
-        slash = AccessController.doPrivileged(
-            new GetPropertyAction("file.separator")).charAt(0);
-        semicolon = AccessController.doPrivileged(
-            new GetPropertyAction("path.separator")).charAt(0);
-        altSlash = (this.slash == '\\') ? '/' : '\\';
-    }
-
-    private boolean isSlash(char c) {
-        return (c == '\\') || (c == '/');
-    }
-
-    private boolean isLetter(char c) {
-        return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
-    }
-
-    private String slashify(String p) {
-        if ((p.length() > 0) && (p.charAt(0) != slash)) return slash + p;
-        else return p;
-    }
-
-
-    /* -- Normalization and construction -- */
-
-    public char getSeparator() {
-        return slash;
-    }
-
-    public char getPathSeparator() {
-        return semicolon;
-    }
-
-    /* A normal Win32 pathname contains no duplicate slashes, except possibly
-       for a UNC prefix, and does not end with a slash.  It may be the empty
-       string.  Normalized Win32 pathnames have the convenient property that
-       the length of the prefix almost uniquely identifies the type of the path
-       and whether it is absolute or relative:
-
-           0  relative to both drive and directory
-           1  drive-relative (begins with '\\')
-           2  absolute UNC (if first char is '\\'),
-                else directory-relative (has form "z:foo")
-           3  absolute local pathname (begins with "z:\\")
-     */
-
-    private int normalizePrefix(String path, int len, StringBuffer sb) {
-        int src = 0;
-        while ((src < len) && isSlash(path.charAt(src))) src++;
-        char c;
-        if ((len - src >= 2)
-            && isLetter(c = path.charAt(src))
-            && path.charAt(src + 1) == ':') {
-            /* Remove leading slashes if followed by drive specifier.
-               This hack is necessary to support file URLs containing drive
-               specifiers (e.g., "file://c:/path").  As a side effect,
-               "/c:/path" can be used as an alternative to "c:/path". */
-            sb.append(c);
-            sb.append(':');
-            src += 2;
-        } else {
-            src = 0;
-            if ((len >= 2)
-                && isSlash(path.charAt(0))
-                && isSlash(path.charAt(1))) {
-                /* UNC pathname: Retain first slash; leave src pointed at
-                   second slash so that further slashes will be collapsed
-                   into the second slash.  The result will be a pathname
-                   beginning with "\\\\" followed (most likely) by a host
-                   name. */
-                src = 1;
-                sb.append(slash);
-            }
-        }
-        return src;
-    }
-
-    /* Normalize the given pathname, whose length is len, starting at the given
-       offset; everything before this offset is already normal. */
-    private String normalize(String path, int len, int off) {
-        if (len == 0) return path;
-        if (off < 3) off = 0;   /* Avoid fencepost cases with UNC pathnames */
-        int src;
-        char slash = this.slash;
-        StringBuffer sb = new StringBuffer(len);
-
-        if (off == 0) {
-            /* Complete normalization, including prefix */
-            src = normalizePrefix(path, len, sb);
-        } else {
-            /* Partial normalization */
-            src = off;
-            sb.append(path.substring(0, off));
-        }
-
-        /* Remove redundant slashes from the remainder of the path, forcing all
-           slashes into the preferred slash */
-        while (src < len) {
-            char c = path.charAt(src++);
-            if (isSlash(c)) {
-                while ((src < len) && isSlash(path.charAt(src))) src++;
-                if (src == len) {
-                    /* Check for trailing separator */
-                    int sn = sb.length();
-                    if ((sn == 2) && (sb.charAt(1) == ':')) {
-                        /* "z:\\" */
-                        sb.append(slash);
-                        break;
-                    }
-                    if (sn == 0) {
-                        /* "\\" */
-                        sb.append(slash);
-                        break;
-                    }
-                    if ((sn == 1) && (isSlash(sb.charAt(0)))) {
-                        /* "\\\\" is not collapsed to "\\" because "\\\\" marks
-                           the beginning of a UNC pathname.  Even though it is
-                           not, by itself, a valid UNC pathname, we leave it as
-                           is in order to be consistent with the win32 APIs,
-                           which treat this case as an invalid UNC pathname
-                           rather than as an alias for the root directory of
-                           the current drive. */
-                        sb.append(slash);
-                        break;
-                    }
-                    /* Path does not denote a root directory, so do not append
-                       trailing slash */
-                    break;
-                } else {
-                    sb.append(slash);
-                }
-            } else {
-                sb.append(c);
-            }
-        }
-
-        String rv = sb.toString();
-        return rv;
-    }
-
-    /* Check that the given pathname is normal.  If not, invoke the real
-       normalizer on the part of the pathname that requires normalization.
-       This way we iterate through the whole pathname string only once. */
-    public String normalize(String path) {
-        int n = path.length();
-        char slash = this.slash;
-        char altSlash = this.altSlash;
-        char prev = 0;
-        for (int i = 0; i < n; i++) {
-            char c = path.charAt(i);
-            if (c == altSlash)
-                return normalize(path, n, (prev == slash) ? i - 1 : i);
-            if ((c == slash) && (prev == slash) && (i > 1))
-                return normalize(path, n, i - 1);
-            if ((c == ':') && (i > 1))
-                return normalize(path, n, 0);
-            prev = c;
-        }
-        if (prev == slash) return normalize(path, n, n - 1);
-        return path;
-    }
-
-    public int prefixLength(String path) {
-        char slash = this.slash;
-        int n = path.length();
-        if (n == 0) return 0;
-        char c0 = path.charAt(0);
-        char c1 = (n > 1) ? path.charAt(1) : 0;
-        if (c0 == slash) {
-            if (c1 == slash) return 2;  /* Absolute UNC pathname "\\\\foo" */
-            return 1;                   /* Drive-relative "\\foo" */
-        }
-        if (isLetter(c0) && (c1 == ':')) {
-            if ((n > 2) && (path.charAt(2) == slash))
-                return 3;               /* Absolute local pathname "z:\\foo" */
-            return 2;                   /* Directory-relative "z:foo" */
-        }
-        return 0;                       /* Completely relative */
-    }
-
-    public String resolve(String parent, String child) {
-        int pn = parent.length();
-        if (pn == 0) return child;
-        int cn = child.length();
-        if (cn == 0) return parent;
-
-        String c = child;
-        int childStart = 0;
-        int parentEnd = pn;
-
-        if ((cn > 1) && (c.charAt(0) == slash)) {
-            if (c.charAt(1) == slash) {
-                /* Drop prefix when child is a UNC pathname */
-                childStart = 2;
-            } else {
-                /* Drop prefix when child is drive-relative */
-                childStart = 1;
-
-            }
-            if (cn == childStart) { // Child is double slash
-                if (parent.charAt(pn - 1) == slash)
-                    return parent.substring(0, pn - 1);
-                return parent;
-            }
-        }
-
-        if (parent.charAt(pn - 1) == slash)
-            parentEnd--;
-
-        int strlen = parentEnd + cn - childStart;
-        char[] theChars = null;
-        if (child.charAt(childStart) == slash) {
-            theChars = new char[strlen];
-            parent.getChars(0, parentEnd, theChars, 0);
-            child.getChars(childStart, cn, theChars, parentEnd);
-        } else {
-            theChars = new char[strlen + 1];
-            parent.getChars(0, parentEnd, theChars, 0);
-            theChars[parentEnd] = slash;
-            child.getChars(childStart, cn, theChars, parentEnd + 1);
-        }
-        return new String(theChars);
-    }
-
-    public String getDefaultParent() {
-        return ("" + slash);
-    }
-
-    public String fromURIPath(String path) {
-        String p = path;
-        if ((p.length() > 2) && (p.charAt(2) == ':')) {
-            // "/c:/foo" --> "c:/foo"
-            p = p.substring(1);
-            // "c:/foo/" --> "c:/foo", but "c:/" --> "c:/"
-            if ((p.length() > 3) && p.endsWith("/"))
-                p = p.substring(0, p.length() - 1);
-        } else if ((p.length() > 1) && p.endsWith("/")) {
-            // "/foo/" --> "/foo"
-            p = p.substring(0, p.length() - 1);
-        }
-        return p;
-    }
-
-
-
-    /* -- Path operations -- */
-
-    public boolean isAbsolute(File f) {
-        int pl = f.getPrefixLength();
-        return (((pl == 2) && (f.getPath().charAt(0) == slash))
-                || (pl == 3));
-    }
-
-    protected native String getDriveDirectory(int drive);
-
-    private static String[] driveDirCache = new String[26];
-
-    private static int driveIndex(char d) {
-        if ((d >= 'a') && (d <= 'z')) return d - 'a';
-        if ((d >= 'A') && (d <= 'Z')) return d - 'A';
-        return -1;
-    }
-
-    private String getDriveDirectory(char drive) {
-        int i = driveIndex(drive);
-        if (i < 0) return null;
-        String s = driveDirCache[i];
-        if (s != null) return s;
-        s = getDriveDirectory(i + 1);
-        driveDirCache[i] = s;
-        return s;
-    }
-
-    private String getUserPath() {
-        /* For both compatibility and security,
-           we must look this up every time */
-        return normalize(System.getProperty("user.dir"));
-    }
-
-    private String getDrive(String path) {
-        int pl = prefixLength(path);
-        return (pl == 3) ? path.substring(0, 2) : null;
-    }
-
-    public String resolve(File f) {
-        String path = f.getPath();
-        int pl = f.getPrefixLength();
-        if ((pl == 2) && (path.charAt(0) == slash))
-            return path;                        /* UNC */
-        if (pl == 3)
-            return path;                        /* Absolute local */
-        if (pl == 0)
-            return getUserPath() + slashify(path); /* Completely relative */
-        if (pl == 1) {                          /* Drive-relative */
-            String up = getUserPath();
-            String ud = getDrive(up);
-            if (ud != null) return ud + path;
-            return up + path;                   /* User dir is a UNC path */
-        }
-        if (pl == 2) {                          /* Directory-relative */
-            String up = getUserPath();
-            String ud = getDrive(up);
-            if ((ud != null) && path.startsWith(ud))
-                return up + slashify(path.substring(2));
-            char drive = path.charAt(0);
-            String dir = getDriveDirectory(drive);
-            String np;
-            if (dir != null) {
-                /* When resolving a directory-relative path that refers to a
-                   drive other than the current drive, insist that the caller
-                   have read permission on the result */
-                String p = drive + (':' + dir + slashify(path.substring(2)));
-                SecurityManager security = System.getSecurityManager();
-                try {
-                    if (security != null) security.checkRead(p);
-                } catch (SecurityException x) {
-                    /* Don't disclose the drive's directory in the exception */
-                    throw new SecurityException("Cannot resolve path " + path);
-                }
-                return p;
-            }
-            return drive + ":" + slashify(path.substring(2)); /* fake it */
-        }
-        throw new InternalError("Unresolvable path: " + path);
-    }
-
-    // Caches for canonicalization results to improve startup performance.
-    // The first cache handles repeated canonicalizations of the same path
-    // name. The prefix cache handles repeated canonicalizations within the
-    // same directory, and must not create results differing from the true
-    // canonicalization algorithm in canonicalize_md.c. For this reason the
-    // prefix cache is conservative and is not used for complex path names.
-    private ExpiringCache cache       = new ExpiringCache();
-    private ExpiringCache prefixCache = new ExpiringCache();
-
-    public String canonicalize(String path) throws IOException {
-        // If path is a drive letter only then skip canonicalization
-        int len = path.length();
-        if ((len == 2) &&
-            (isLetter(path.charAt(0))) &&
-            (path.charAt(1) == ':')) {
-            char c = path.charAt(0);
-            if ((c >= 'A') && (c <= 'Z'))
-                return path;
-            return "" + ((char) (c-32)) + ':';
-        } else if ((len == 3) &&
-                   (isLetter(path.charAt(0))) &&
-                   (path.charAt(1) == ':') &&
-                   (path.charAt(2) == '\\')) {
-            char c = path.charAt(0);
-            if ((c >= 'A') && (c <= 'Z'))
-                return path;
-            return "" + ((char) (c-32)) + ':' + '\\';
-        }
-        if (!useCanonCaches) {
-            return canonicalize0(path);
-        } else {
-            String res = cache.get(path);
-            if (res == null) {
-                String dir = null;
-                String resDir = null;
-                if (useCanonPrefixCache) {
-                    dir = parentOrNull(path);
-                    if (dir != null) {
-                        resDir = prefixCache.get(dir);
-                        if (resDir != null) {
-                            // Hit only in prefix cache; full path is canonical,
-                            // but we need to get the canonical name of the file
-                            // in this directory to get the appropriate capitalization
-                            String filename = path.substring(1 + dir.length());
-                            res = canonicalizeWithPrefix(resDir, filename);
-                            cache.put(dir + File.separatorChar + filename, res);
-                        }
-                    }
-                }
-                if (res == null) {
-                    res = canonicalize0(path);
-                    cache.put(path, res);
-                    if (useCanonPrefixCache && dir != null) {
-                        resDir = parentOrNull(res);
-                        if (resDir != null) {
-                            File f = new File(res);
-                            if (f.exists() && !f.isDirectory()) {
-                                prefixCache.put(dir, resDir);
-                            }
-                        }
-                    }
-                }
-            }
-            return res;
-        }
-    }
-
-    protected native String canonicalize0(String path)
-                                                throws IOException;
-    protected String canonicalizeWithPrefix(String canonicalPrefix,
-                                            String filename) throws IOException
-    {
-        return canonicalizeWithPrefix0(canonicalPrefix,
-                                       canonicalPrefix + File.separatorChar + filename);
-    }
-    // Run the canonicalization operation assuming that the prefix
-    // (everything up to the last filename) is canonical; just gets
-    // the canonical name of the last element of the path
-    protected native String canonicalizeWithPrefix0(String canonicalPrefix,
-                                                    String pathWithCanonicalPrefix)
-                                                throws IOException;
-    // Best-effort attempt to get parent of this path; used for
-    // optimization of filename canonicalization. This must return null for
-    // any cases where the code in canonicalize_md.c would throw an
-    // exception or otherwise deal with non-simple pathnames like handling
-    // of "." and "..". It may conservatively return null in other
-    // situations as well. Returning null will cause the underlying
-    // (expensive) canonicalization routine to be called.
-    static String parentOrNull(String path) {
-        if (path == null) return null;
-        char sep = File.separatorChar;
-        char altSep = '/';
-        int last = path.length() - 1;
-        int idx = last;
-        int adjacentDots = 0;
-        int nonDotCount = 0;
-        while (idx > 0) {
-            char c = path.charAt(idx);
-            if (c == '.') {
-                if (++adjacentDots >= 2) {
-                    // Punt on pathnames containing . and ..
-                    return null;
-                }
-                if (nonDotCount == 0) {
-                    // Punt on pathnames ending in a .
-                    return null;
-                }
-            } else if (c == sep) {
-                if (adjacentDots == 1 && nonDotCount == 0) {
-                    // Punt on pathnames containing . and ..
-                    return null;
-                }
-                if (idx == 0 ||
-                    idx >= last - 1 ||
-                    path.charAt(idx - 1) == sep ||
-                    path.charAt(idx - 1) == altSep) {
-                    // Punt on pathnames containing adjacent slashes
-                    // toward the end
-                    return null;
-                }
-                return path.substring(0, idx);
-            } else if (c == altSep) {
-                // Punt on pathnames containing both backward and
-                // forward slashes
-                return null;
-            } else if (c == '*' || c == '?') {
-                // Punt on pathnames containing wildcards
-                return null;
-            } else {
-                ++nonDotCount;
-                adjacentDots = 0;
-            }
-            --idx;
-        }
-        return null;
-    }
-
-
-    /* -- Attribute accessors -- */
-
-    public native int getBooleanAttributes(File f);
-    public native boolean checkAccess(File f, int access);
-    public native long getLastModifiedTime(File f);
-    public native long getLength(File f);
-    public native boolean setPermission(File f, int access, boolean enable, boolean owneronly);
-
-    /* -- File operations -- */
-
-    public native boolean createFileExclusively(String path)
-        throws IOException;
-    public boolean delete(File f) {
-        // Keep canonicalization caches in sync after file deletion
-        // and renaming operations. Could be more clever than this
-        // (i.e., only remove/update affected entries) but probably
-        // not worth it since these entries expire after 30 seconds
-        // anyway.
-        cache.clear();
-        prefixCache.clear();
-        return delete0(f);
-    }
-    protected native boolean delete0(File f);
-    public native String[] list(File f);
-    public native boolean createDirectory(File f);
-    public boolean rename(File f1, File f2) {
-        // Keep canonicalization caches in sync after file deletion
-        // and renaming operations. Could be more clever than this
-        // (i.e., only remove/update affected entries) but probably
-        // not worth it since these entries expire after 30 seconds
-        // anyway.
-        cache.clear();
-        prefixCache.clear();
-        return rename0(f1, f2);
-    }
-    protected native boolean rename0(File f1, File f2);
-    public native boolean setLastModifiedTime(File f, long time);
-    public native boolean setReadOnly(File f);
-
-
-    /* -- Filesystem interface -- */
-
-    private boolean access(String path) {
-        try {
-            SecurityManager security = System.getSecurityManager();
-            if (security != null) security.checkRead(path);
-            return true;
-        } catch (SecurityException x) {
-            return false;
-        }
-    }
-
-    private static native int listRoots0();
-
-    public File[] listRoots() {
-        int ds = listRoots0();
-        int n = 0;
-        for (int i = 0; i < 26; i++) {
-            if (((ds >> i) & 1) != 0) {
-                if (!access((char)('A' + i) + ":" + slash))
-                    ds &= ~(1 << i);
-                else
-                    n++;
-            }
-        }
-        File[] fs = new File[n];
-        int j = 0;
-        char slash = this.slash;
-        for (int i = 0; i < 26; i++) {
-            if (((ds >> i) & 1) != 0)
-                fs[j++] = new File((char)('A' + i) + ":" + slash);
-        }
-        return fs;
-    }
-
-
-    /* -- Disk usage -- */
-    public long getSpace(File f, int t) {
-        if (f.exists()) {
-            File file = (f.isDirectory() ? f : f.getParentFile());
-            return getSpace0(file, t);
-        }
-        return 0;
-    }
-
-    private native long getSpace0(File f, int t);
-
-
-    /* -- Basic infrastructure -- */
-
-    public int compare(File f1, File f2) {
-        return f1.getPath().compareToIgnoreCase(f2.getPath());
-    }
-
-    public int hashCode(File f) {
-        /* Could make this more efficient: String.hashCodeIgnoreCase */
-        return f.getPath().toLowerCase(Locale.ENGLISH).hashCode() ^ 1234321;
-    }
-
-
-    private static native void initIDs();
-
-    static {
-        initIDs();
-    }
-
-}
--- a/jdk/src/windows/classes/java/io/WinNTFileSystem.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/windows/classes/java/io/WinNTFileSystem.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, 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
@@ -23,10 +23,11 @@
  * questions.
  */
 
-/*
- */
+package java.io;
 
-package java.io;
+import java.security.AccessController;
+import java.util.Locale;
+import sun.security.action.GetPropertyAction;
 
 /**
  * Unicode-aware FileSystem for Windows NT/2000.
@@ -34,23 +35,589 @@
  * @author Konstantin Kladko
  * @since 1.4
  */
-class WinNTFileSystem extends Win32FileSystem {
+class WinNTFileSystem extends FileSystem {
+
+    private final char slash;
+    private final char altSlash;
+    private final char semicolon;
+
+    public WinNTFileSystem() {
+        slash = AccessController.doPrivileged(
+            new GetPropertyAction("file.separator")).charAt(0);
+        semicolon = AccessController.doPrivileged(
+            new GetPropertyAction("path.separator")).charAt(0);
+        altSlash = (this.slash == '\\') ? '/' : '\\';
+    }
+
+    private boolean isSlash(char c) {
+        return (c == '\\') || (c == '/');
+    }
+
+    private boolean isLetter(char c) {
+        return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
+    }
+
+    private String slashify(String p) {
+        if ((p.length() > 0) && (p.charAt(0) != slash)) return slash + p;
+        else return p;
+    }
+
+    /* -- Normalization and construction -- */
+
+    @Override
+    public char getSeparator() {
+        return slash;
+    }
+
+    @Override
+    public char getPathSeparator() {
+        return semicolon;
+    }
+
+    /* Check that the given pathname is normal.  If not, invoke the real
+       normalizer on the part of the pathname that requires normalization.
+       This way we iterate through the whole pathname string only once. */
+    @Override
+    public String normalize(String path) {
+        int n = path.length();
+        char slash = this.slash;
+        char altSlash = this.altSlash;
+        char prev = 0;
+        for (int i = 0; i < n; i++) {
+            char c = path.charAt(i);
+            if (c == altSlash)
+                return normalize(path, n, (prev == slash) ? i - 1 : i);
+            if ((c == slash) && (prev == slash) && (i > 1))
+                return normalize(path, n, i - 1);
+            if ((c == ':') && (i > 1))
+                return normalize(path, n, 0);
+            prev = c;
+        }
+        if (prev == slash) return normalize(path, n, n - 1);
+        return path;
+    }
+
+    /* Normalize the given pathname, whose length is len, starting at the given
+       offset; everything before this offset is already normal. */
+    private String normalize(String path, int len, int off) {
+        if (len == 0) return path;
+        if (off < 3) off = 0;   /* Avoid fencepost cases with UNC pathnames */
+        int src;
+        char slash = this.slash;
+        StringBuffer sb = new StringBuffer(len);
+
+        if (off == 0) {
+            /* Complete normalization, including prefix */
+            src = normalizePrefix(path, len, sb);
+        } else {
+            /* Partial normalization */
+            src = off;
+            sb.append(path.substring(0, off));
+        }
+
+        /* Remove redundant slashes from the remainder of the path, forcing all
+           slashes into the preferred slash */
+        while (src < len) {
+            char c = path.charAt(src++);
+            if (isSlash(c)) {
+                while ((src < len) && isSlash(path.charAt(src))) src++;
+                if (src == len) {
+                    /* Check for trailing separator */
+                    int sn = sb.length();
+                    if ((sn == 2) && (sb.charAt(1) == ':')) {
+                        /* "z:\\" */
+                        sb.append(slash);
+                        break;
+                    }
+                    if (sn == 0) {
+                        /* "\\" */
+                        sb.append(slash);
+                        break;
+                    }
+                    if ((sn == 1) && (isSlash(sb.charAt(0)))) {
+                        /* "\\\\" is not collapsed to "\\" because "\\\\" marks
+                           the beginning of a UNC pathname.  Even though it is
+                           not, by itself, a valid UNC pathname, we leave it as
+                           is in order to be consistent with the win32 APIs,
+                           which treat this case as an invalid UNC pathname
+                           rather than as an alias for the root directory of
+                           the current drive. */
+                        sb.append(slash);
+                        break;
+                    }
+                    /* Path does not denote a root directory, so do not append
+                       trailing slash */
+                    break;
+                } else {
+                    sb.append(slash);
+                }
+            } else {
+                sb.append(c);
+            }
+        }
+
+        String rv = sb.toString();
+        return rv;
+    }
+
+    /* A normal Win32 pathname contains no duplicate slashes, except possibly
+       for a UNC prefix, and does not end with a slash.  It may be the empty
+       string.  Normalized Win32 pathnames have the convenient property that
+       the length of the prefix almost uniquely identifies the type of the path
+       and whether it is absolute or relative:
+
+           0  relative to both drive and directory
+           1  drive-relative (begins with '\\')
+           2  absolute UNC (if first char is '\\'),
+                else directory-relative (has form "z:foo")
+           3  absolute local pathname (begins with "z:\\")
+     */
+    private int normalizePrefix(String path, int len, StringBuffer sb) {
+        int src = 0;
+        while ((src < len) && isSlash(path.charAt(src))) src++;
+        char c;
+        if ((len - src >= 2)
+            && isLetter(c = path.charAt(src))
+            && path.charAt(src + 1) == ':') {
+            /* Remove leading slashes if followed by drive specifier.
+               This hack is necessary to support file URLs containing drive
+               specifiers (e.g., "file://c:/path").  As a side effect,
+               "/c:/path" can be used as an alternative to "c:/path". */
+            sb.append(c);
+            sb.append(':');
+            src += 2;
+        } else {
+            src = 0;
+            if ((len >= 2)
+                && isSlash(path.charAt(0))
+                && isSlash(path.charAt(1))) {
+                /* UNC pathname: Retain first slash; leave src pointed at
+                   second slash so that further slashes will be collapsed
+                   into the second slash.  The result will be a pathname
+                   beginning with "\\\\" followed (most likely) by a host
+                   name. */
+                src = 1;
+                sb.append(slash);
+            }
+        }
+        return src;
+    }
+
+    @Override
+    public int prefixLength(String path) {
+        char slash = this.slash;
+        int n = path.length();
+        if (n == 0) return 0;
+        char c0 = path.charAt(0);
+        char c1 = (n > 1) ? path.charAt(1) : 0;
+        if (c0 == slash) {
+            if (c1 == slash) return 2;  /* Absolute UNC pathname "\\\\foo" */
+            return 1;                   /* Drive-relative "\\foo" */
+        }
+        if (isLetter(c0) && (c1 == ':')) {
+            if ((n > 2) && (path.charAt(2) == slash))
+                return 3;               /* Absolute local pathname "z:\\foo" */
+            return 2;                   /* Directory-relative "z:foo" */
+        }
+        return 0;                       /* Completely relative */
+    }
+
+    @Override
+    public String resolve(String parent, String child) {
+        int pn = parent.length();
+        if (pn == 0) return child;
+        int cn = child.length();
+        if (cn == 0) return parent;
+
+        String c = child;
+        int childStart = 0;
+        int parentEnd = pn;
+
+        if ((cn > 1) && (c.charAt(0) == slash)) {
+            if (c.charAt(1) == slash) {
+                /* Drop prefix when child is a UNC pathname */
+                childStart = 2;
+            } else {
+                /* Drop prefix when child is drive-relative */
+                childStart = 1;
+
+            }
+            if (cn == childStart) { // Child is double slash
+                if (parent.charAt(pn - 1) == slash)
+                    return parent.substring(0, pn - 1);
+                return parent;
+            }
+        }
+
+        if (parent.charAt(pn - 1) == slash)
+            parentEnd--;
+
+        int strlen = parentEnd + cn - childStart;
+        char[] theChars = null;
+        if (child.charAt(childStart) == slash) {
+            theChars = new char[strlen];
+            parent.getChars(0, parentEnd, theChars, 0);
+            child.getChars(childStart, cn, theChars, parentEnd);
+        } else {
+            theChars = new char[strlen + 1];
+            parent.getChars(0, parentEnd, theChars, 0);
+            theChars[parentEnd] = slash;
+            child.getChars(childStart, cn, theChars, parentEnd + 1);
+        }
+        return new String(theChars);
+    }
+
+    @Override
+    public String getDefaultParent() {
+        return ("" + slash);
+    }
 
-    protected native String canonicalize0(String path)
-                                                throws IOException;
-    protected native String canonicalizeWithPrefix0(String canonicalPrefix,
-                                                    String pathWithCanonicalPrefix)
-                                                throws IOException;
+    @Override
+    public String fromURIPath(String path) {
+        String p = path;
+        if ((p.length() > 2) && (p.charAt(2) == ':')) {
+            // "/c:/foo" --> "c:/foo"
+            p = p.substring(1);
+            // "c:/foo/" --> "c:/foo", but "c:/" --> "c:/"
+            if ((p.length() > 3) && p.endsWith("/"))
+                p = p.substring(0, p.length() - 1);
+        } else if ((p.length() > 1) && p.endsWith("/")) {
+            // "/foo/" --> "/foo"
+            p = p.substring(0, p.length() - 1);
+        }
+        return p;
+    }
+
+    /* -- Path operations -- */
+
+    @Override
+    public boolean isAbsolute(File f) {
+        int pl = f.getPrefixLength();
+        return (((pl == 2) && (f.getPath().charAt(0) == slash))
+                || (pl == 3));
+    }
+
+    @Override
+    public String resolve(File f) {
+        String path = f.getPath();
+        int pl = f.getPrefixLength();
+        if ((pl == 2) && (path.charAt(0) == slash))
+            return path;                        /* UNC */
+        if (pl == 3)
+            return path;                        /* Absolute local */
+        if (pl == 0)
+            return getUserPath() + slashify(path); /* Completely relative */
+        if (pl == 1) {                          /* Drive-relative */
+            String up = getUserPath();
+            String ud = getDrive(up);
+            if (ud != null) return ud + path;
+            return up + path;                   /* User dir is a UNC path */
+        }
+        if (pl == 2) {                          /* Directory-relative */
+            String up = getUserPath();
+            String ud = getDrive(up);
+            if ((ud != null) && path.startsWith(ud))
+                return up + slashify(path.substring(2));
+            char drive = path.charAt(0);
+            String dir = getDriveDirectory(drive);
+            String np;
+            if (dir != null) {
+                /* When resolving a directory-relative path that refers to a
+                   drive other than the current drive, insist that the caller
+                   have read permission on the result */
+                String p = drive + (':' + dir + slashify(path.substring(2)));
+                SecurityManager security = System.getSecurityManager();
+                try {
+                    if (security != null) security.checkRead(p);
+                } catch (SecurityException x) {
+                    /* Don't disclose the drive's directory in the exception */
+                    throw new SecurityException("Cannot resolve path " + path);
+                }
+                return p;
+            }
+            return drive + ":" + slashify(path.substring(2)); /* fake it */
+        }
+        throw new InternalError("Unresolvable path: " + path);
+    }
+
+    private String getUserPath() {
+        /* For both compatibility and security,
+           we must look this up every time */
+        return normalize(System.getProperty("user.dir"));
+    }
+
+    private String getDrive(String path) {
+        int pl = prefixLength(path);
+        return (pl == 3) ? path.substring(0, 2) : null;
+    }
+
+    private static String[] driveDirCache = new String[26];
+
+    private static int driveIndex(char d) {
+        if ((d >= 'a') && (d <= 'z')) return d - 'a';
+        if ((d >= 'A') && (d <= 'Z')) return d - 'A';
+        return -1;
+    }
+
+    private native String getDriveDirectory(int drive);
+
+    private String getDriveDirectory(char drive) {
+        int i = driveIndex(drive);
+        if (i < 0) return null;
+        String s = driveDirCache[i];
+        if (s != null) return s;
+        s = getDriveDirectory(i + 1);
+        driveDirCache[i] = s;
+        return s;
+    }
+
+    // Caches for canonicalization results to improve startup performance.
+    // The first cache handles repeated canonicalizations of the same path
+    // name. The prefix cache handles repeated canonicalizations within the
+    // same directory, and must not create results differing from the true
+    // canonicalization algorithm in canonicalize_md.c. For this reason the
+    // prefix cache is conservative and is not used for complex path names.
+    private ExpiringCache cache       = new ExpiringCache();
+    private ExpiringCache prefixCache = new ExpiringCache();
+
+    @Override
+    public String canonicalize(String path) throws IOException {
+        // If path is a drive letter only then skip canonicalization
+        int len = path.length();
+        if ((len == 2) &&
+            (isLetter(path.charAt(0))) &&
+            (path.charAt(1) == ':')) {
+            char c = path.charAt(0);
+            if ((c >= 'A') && (c <= 'Z'))
+                return path;
+            return "" + ((char) (c-32)) + ':';
+        } else if ((len == 3) &&
+                   (isLetter(path.charAt(0))) &&
+                   (path.charAt(1) == ':') &&
+                   (path.charAt(2) == '\\')) {
+            char c = path.charAt(0);
+            if ((c >= 'A') && (c <= 'Z'))
+                return path;
+            return "" + ((char) (c-32)) + ':' + '\\';
+        }
+        if (!useCanonCaches) {
+            return canonicalize0(path);
+        } else {
+            String res = cache.get(path);
+            if (res == null) {
+                String dir = null;
+                String resDir = null;
+                if (useCanonPrefixCache) {
+                    dir = parentOrNull(path);
+                    if (dir != null) {
+                        resDir = prefixCache.get(dir);
+                        if (resDir != null) {
+                            /*
+                             * Hit only in prefix cache; full path is canonical,
+                             * but we need to get the canonical name of the file
+                             * in this directory to get the appropriate
+                             * capitalization
+                             */
+                            String filename = path.substring(1 + dir.length());
+                            res = canonicalizeWithPrefix(resDir, filename);
+                            cache.put(dir + File.separatorChar + filename, res);
+                        }
+                    }
+                }
+                if (res == null) {
+                    res = canonicalize0(path);
+                    cache.put(path, res);
+                    if (useCanonPrefixCache && dir != null) {
+                        resDir = parentOrNull(res);
+                        if (resDir != null) {
+                            File f = new File(res);
+                            if (f.exists() && !f.isDirectory()) {
+                                prefixCache.put(dir, resDir);
+                            }
+                        }
+                    }
+                }
+            }
+            return res;
+        }
+    }
+
+    private native String canonicalize0(String path)
+            throws IOException;
+
+    private String canonicalizeWithPrefix(String canonicalPrefix,
+            String filename) throws IOException
+    {
+        return canonicalizeWithPrefix0(canonicalPrefix,
+                canonicalPrefix + File.separatorChar + filename);
+    }
+
+    // Run the canonicalization operation assuming that the prefix
+    // (everything up to the last filename) is canonical; just gets
+    // the canonical name of the last element of the path
+    private native String canonicalizeWithPrefix0(String canonicalPrefix,
+            String pathWithCanonicalPrefix)
+            throws IOException;
+
+    // Best-effort attempt to get parent of this path; used for
+    // optimization of filename canonicalization. This must return null for
+    // any cases where the code in canonicalize_md.c would throw an
+    // exception or otherwise deal with non-simple pathnames like handling
+    // of "." and "..". It may conservatively return null in other
+    // situations as well. Returning null will cause the underlying
+    // (expensive) canonicalization routine to be called.
+    private static String parentOrNull(String path) {
+        if (path == null) return null;
+        char sep = File.separatorChar;
+        char altSep = '/';
+        int last = path.length() - 1;
+        int idx = last;
+        int adjacentDots = 0;
+        int nonDotCount = 0;
+        while (idx > 0) {
+            char c = path.charAt(idx);
+            if (c == '.') {
+                if (++adjacentDots >= 2) {
+                    // Punt on pathnames containing . and ..
+                    return null;
+                }
+                if (nonDotCount == 0) {
+                    // Punt on pathnames ending in a .
+                    return null;
+                }
+            } else if (c == sep) {
+                if (adjacentDots == 1 && nonDotCount == 0) {
+                    // Punt on pathnames containing . and ..
+                    return null;
+                }
+                if (idx == 0 ||
+                    idx >= last - 1 ||
+                    path.charAt(idx - 1) == sep ||
+                    path.charAt(idx - 1) == altSep) {
+                    // Punt on pathnames containing adjacent slashes
+                    // toward the end
+                    return null;
+                }
+                return path.substring(0, idx);
+            } else if (c == altSep) {
+                // Punt on pathnames containing both backward and
+                // forward slashes
+                return null;
+            } else if (c == '*' || c == '?') {
+                // Punt on pathnames containing wildcards
+                return null;
+            } else {
+                ++nonDotCount;
+                adjacentDots = 0;
+            }
+            --idx;
+        }
+        return null;
+    }
 
     /* -- Attribute accessors -- */
 
+    @Override
     public native int getBooleanAttributes(File f);
+
+    @Override
     public native boolean checkAccess(File f, int access);
+
+    @Override
     public native long getLastModifiedTime(File f);
+
+    @Override
     public native long getLength(File f);
-    public native boolean setPermission(File f, int access, boolean enable, boolean owneronly);
+
+    @Override
+    public native boolean setPermission(File f, int access, boolean enable,
+            boolean owneronly);
+
+    /* -- File operations -- */
+
+    @Override
+    public native boolean createFileExclusively(String path)
+            throws IOException;
+
+    @Override
+    public native String[] list(File f);
+
+    @Override
+    public native boolean createDirectory(File f);
+
+    @Override
+    public native boolean setLastModifiedTime(File f, long time);
+
+    @Override
+    public native boolean setReadOnly(File f);
+
+    @Override
+    public boolean delete(File f) {
+        // Keep canonicalization caches in sync after file deletion
+        // and renaming operations. Could be more clever than this
+        // (i.e., only remove/update affected entries) but probably
+        // not worth it since these entries expire after 30 seconds
+        // anyway.
+        cache.clear();
+        prefixCache.clear();
+        return delete0(f);
+    }
+
+    private native boolean delete0(File f);
 
+    @Override
+    public boolean rename(File f1, File f2) {
+        // Keep canonicalization caches in sync after file deletion
+        // and renaming operations. Could be more clever than this
+        // (i.e., only remove/update affected entries) but probably
+        // not worth it since these entries expire after 30 seconds
+        // anyway.
+        cache.clear();
+        prefixCache.clear();
+        return rename0(f1, f2);
+    }
 
+    private native boolean rename0(File f1, File f2);
+
+    /* -- Filesystem interface -- */
+
+    @Override
+    public File[] listRoots() {
+        int ds = listRoots0();
+        int n = 0;
+        for (int i = 0; i < 26; i++) {
+            if (((ds >> i) & 1) != 0) {
+                if (!access((char)('A' + i) + ":" + slash))
+                    ds &= ~(1 << i);
+                else
+                    n++;
+            }
+        }
+        File[] fs = new File[n];
+        int j = 0;
+        char slash = this.slash;
+        for (int i = 0; i < 26; i++) {
+            if (((ds >> i) & 1) != 0)
+                fs[j++] = new File((char)('A' + i) + ":" + slash);
+        }
+        return fs;
+    }
+
+    private static native int listRoots0();
+
+    private boolean access(String path) {
+        try {
+            SecurityManager security = System.getSecurityManager();
+            if (security != null) security.checkRead(path);
+            return true;
+        } catch (SecurityException x) {
+            return false;
+        }
+    }
+
+    /* -- Disk usage -- */
+
+    @Override
     public long getSpace(File f, int t) {
         if (f.exists()) {
             return getSpace0(f, t);
@@ -60,20 +627,22 @@
 
     private native long getSpace0(File f, int t);
 
-    /* -- File operations -- */
+    /* -- Basic infrastructure -- */
+
+    @Override
+    public int compare(File f1, File f2) {
+        return f1.getPath().compareToIgnoreCase(f2.getPath());
+    }
 
-    public native boolean createFileExclusively(String path)
-                                               throws IOException;
-    protected native boolean delete0(File f);
-    public native String[] list(File f);
-    public native boolean createDirectory(File f);
-    protected native boolean rename0(File f1, File f2);
-    public native boolean setLastModifiedTime(File f, long time);
-    public native boolean setReadOnly(File f);
-    protected native String getDriveDirectory(int drive);
+    @Override
+    public int hashCode(File f) {
+        /* Could make this more efficient: String.hashCodeIgnoreCase */
+        return f.getPath().toLowerCase(Locale.ENGLISH).hashCode() ^ 1234321;
+    }
+
     private static native void initIDs();
 
     static {
-            initIDs();
+        initIDs();
     }
 }
--- a/jdk/src/windows/native/java/io/FileSystem_md.c	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/windows/native/java/io/FileSystem_md.c	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, 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
@@ -27,16 +27,8 @@
 #include "jni.h"
 #include "jni_util.h"
 
-extern jboolean onNT;
-extern void initializeWindowsVersion();
-
 JNIEXPORT jobject JNICALL
 Java_java_io_FileSystem_getFileSystem(JNIEnv *env, jclass ignored)
 {
-    initializeWindowsVersion();
-    if (onNT) {
-        return JNU_NewObjectByName(env, "java/io/WinNTFileSystem", "()V");
-    } else {
-        return JNU_NewObjectByName(env, "java/io/Win32FileSystem", "()V");
-    }
+    return JNU_NewObjectByName(env, "java/io/WinNTFileSystem", "()V");
 }
--- a/jdk/src/windows/native/java/io/Win32FileSystem_md.c	Wed Jul 05 18:26:11 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,509 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <direct.h>
-#include <windows.h>
-#include <io.h>
-
-#include "jvm.h"
-#include "jni.h"
-#include "jni_util.h"
-#include "jlong.h"
-#include "io_util.h"
-#include "dirent_md.h"
-#include "java_io_FileSystem.h"
-
-/* This macro relies upon the fact that JNU_GetStringPlatformChars always makes
-   a copy of the string */
-
-#define WITH_NATIVE_PATH(env, object, id, var)                                \
-    WITH_FIELD_PLATFORM_STRING(env, object, id, var)                          \
-        JVM_NativePath((char *)var);
-
-#define END_NATIVE_PATH(env, var)    END_PLATFORM_STRING(env, var)
-
-
-static struct {
-    jfieldID path;
-} ids;
-
-JNIEXPORT void JNICALL
-Java_java_io_Win32FileSystem_initIDs(JNIEnv *env, jclass cls)
-{
-    jclass fileClass = (*env)->FindClass(env, "java/io/File");
-    if (!fileClass) return;
-    ids.path = (*env)->GetFieldID(env, fileClass,
-                                  "path", "Ljava/lang/String;");
-}
-
-
-/* -- Path operations -- */
-
-
-extern int canonicalize(char *path, const char *out, int len);
-extern int canonicalizeWithPrefix(const char* canonicalPrefix, const char *pathWithCanonicalPrefix, char *out, int len);
-
-JNIEXPORT jstring JNICALL
-Java_java_io_Win32FileSystem_canonicalize0(JNIEnv *env, jobject this,
-                                           jstring pathname)
-{
-    jstring rv = NULL;
-
-    WITH_PLATFORM_STRING(env, pathname, path) {
-        char canonicalPath[JVM_MAXPATHLEN];
-        if (canonicalize(JVM_NativePath((char *)path),
-                         canonicalPath, JVM_MAXPATHLEN) < 0) {
-            JNU_ThrowIOExceptionWithLastError(env, "Bad pathname");
-        } else {
-            rv = JNU_NewStringPlatform(env, canonicalPath);
-        }
-    } END_PLATFORM_STRING(env, path);
-    return rv;
-}
-
-
-JNIEXPORT jstring JNICALL
-Java_java_io_Win32FileSystem_canonicalizeWithPrefix0(JNIEnv *env, jobject this,
-                                                     jstring canonicalPrefixString,
-                                                     jstring pathWithCanonicalPrefixString)
-{
-    jstring rv = NULL;
-    char canonicalPath[JVM_MAXPATHLEN];
-
-    WITH_PLATFORM_STRING(env, canonicalPrefixString, canonicalPrefix) {
-        WITH_PLATFORM_STRING(env, pathWithCanonicalPrefixString, pathWithCanonicalPrefix) {
-            if (canonicalizeWithPrefix(canonicalPrefix,
-                                       pathWithCanonicalPrefix,
-                                       canonicalPath, JVM_MAXPATHLEN) < 0) {
-                JNU_ThrowIOExceptionWithLastError(env, "Bad pathname");
-            } else {
-                rv = JNU_NewStringPlatform(env, canonicalPath);
-            }
-        } END_PLATFORM_STRING(env, pathWithCanonicalPrefix);
-    } END_PLATFORM_STRING(env, canonicalPrefix);
-    return rv;
-}
-
-
-
-/* -- Attribute accessors -- */
-
-/* Check whether or not the file name in "path" is a Windows reserved
-   device name (CON, PRN, AUX, NUL, COM[1-9], LPT[1-9]) based on the
-   returned result from GetFullPathName. If the file name in the path
-   is indeed a reserved device name GetFuulPathName returns
-   "\\.\[ReservedDeviceName]".
- */
-BOOL isReservedDeviceName(const char* path) {
-#define BUFSIZE 9
-    char buf[BUFSIZE];
-    char *lpf = NULL;
-    DWORD retLen = GetFullPathName(path,
-                                   BUFSIZE,
-                                   buf,
-                                   &lpf);
-    if ((retLen == BUFSIZE - 1 || retLen == BUFSIZE - 2) &&
-        buf[0] == '\\' && buf[1] == '\\' &&
-        buf[2] == '.' && buf[3] == '\\') {
-        char* dname = _strupr(buf + 4);
-        if (strcmp(dname, "CON") == 0 ||
-            strcmp(dname, "PRN") == 0 ||
-            strcmp(dname, "AUX") == 0 ||
-            strcmp(dname, "NUL") == 0)
-            return TRUE;
-        if ((strncmp(dname, "COM", 3) == 0 ||
-             strncmp(dname, "LPT", 3) == 0) &&
-            dname[3] - '0' > 0 &&
-            dname[3] - '0' <= 9)
-            return TRUE;
-    }
-    return FALSE;
-}
-
-JNIEXPORT jint JNICALL
-Java_java_io_Win32FileSystem_getBooleanAttributes(JNIEnv *env, jobject this,
-                                                  jobject file)
-{
-    jint rv = 0;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        WIN32_FILE_ATTRIBUTE_DATA wfad;
-        if (!isReservedDeviceName(path) &&
-            GetFileAttributesEx(path, GetFileExInfoStandard, &wfad)) {
-            rv = (java_io_FileSystem_BA_EXISTS
-                  | ((wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-                     ? java_io_FileSystem_BA_DIRECTORY
-                     : java_io_FileSystem_BA_REGULAR)
-                  | ((wfad.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
-                     ? java_io_FileSystem_BA_HIDDEN : 0));
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_checkAccess(JNIEnv *env, jobject this,
-                                         jobject file, jint a)
-{
-    jboolean rv = JNI_FALSE;
-    int mode;
-    switch (a) {
-    case java_io_FileSystem_ACCESS_READ:
-    case java_io_FileSystem_ACCESS_EXECUTE:
-        mode = 4;
-        break;
-    case java_io_FileSystem_ACCESS_WRITE:
-        mode = 2;
-        break;
-    default: assert(0);
-    }
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        if (access(path, mode) == 0) {
-            rv = JNI_TRUE;
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_setPermission(JNIEnv *env, jobject this,
-                                           jobject file,
-                                           jint access,
-                                           jboolean enable,
-                                           jboolean owneronly)
-{
-    jboolean rv = JNI_FALSE;
-    if (access == java_io_FileSystem_ACCESS_READ ||
-        access == java_io_FileSystem_ACCESS_EXECUTE) {
-        return enable;
-    }
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        DWORD a;
-        a = GetFileAttributes(path);
-        if (a != INVALID_FILE_ATTRIBUTES) {
-            if (enable)
-                a =  a & ~FILE_ATTRIBUTE_READONLY;
-            else
-                a =  a | FILE_ATTRIBUTE_READONLY;
-            if (SetFileAttributes(path, a))
-                rv = JNI_TRUE;
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-JNIEXPORT jlong JNICALL
-Java_java_io_Win32FileSystem_getLastModifiedTime(JNIEnv *env, jobject this,
-                                                 jobject file)
-{
-    jlong rv = 0;
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-    /* Win95, Win98, WinME */
-    WIN32_FIND_DATA fd;
-    jlong temp = 0;
-    LARGE_INTEGER modTime;
-    HANDLE h = FindFirstFile(path, &fd);
-    if (h != INVALID_HANDLE_VALUE) {
-        FindClose(h);
-        modTime.LowPart = (DWORD) fd.ftLastWriteTime.dwLowDateTime;
-        modTime.HighPart = (LONG) fd.ftLastWriteTime.dwHighDateTime;
-        rv = modTime.QuadPart / 10000;
-        rv -= 11644473600000;
-    }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-JNIEXPORT jlong JNICALL
-Java_java_io_Win32FileSystem_getLength(JNIEnv *env, jobject this,
-                                       jobject file)
-{
-    jlong rv = 0;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        struct _stati64 sb;
-        if (_stati64(path, &sb) == 0) {
-            rv = sb.st_size;
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-
-/* -- File operations -- */
-
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_createFileExclusively(JNIEnv *env, jclass cls,
-                                                   jstring pathname)
-{
-    jboolean rv = JNI_FALSE;
-    DWORD a;
-
-    WITH_PLATFORM_STRING(env, pathname, path) {
-        int orv;
-        int error;
-        JVM_NativePath((char *)path);
-        orv = JVM_Open(path, JVM_O_RDWR | JVM_O_CREAT | JVM_O_EXCL, 0666);
-        if (orv < 0) {
-            if (orv != JVM_EEXIST) {
-                error = GetLastError();
-
-                // If a directory by the named path already exists,
-                // return false (behavior of solaris and linux) instead of
-                // throwing an exception
-                a = GetFileAttributes(path);
-
-                if ((a == INVALID_FILE_ATTRIBUTES) ||
-                        !(a & FILE_ATTRIBUTE_DIRECTORY)) {
-                    SetLastError(error);
-                    JNU_ThrowIOExceptionWithLastError(env, path);
-                }
-            }
-        } else {
-            JVM_Close(orv);
-            rv = JNI_TRUE;
-        }
-    } END_PLATFORM_STRING(env, path);
-    return rv;
-}
-
-
-static int
-removeFileOrDirectory(const char *path) /* Returns 0 on success */
-{
-    DWORD a;
-
-    SetFileAttributes(path, 0);
-    a = GetFileAttributes(path);
-    if (a == INVALID_FILE_ATTRIBUTES) {
-        return 1;
-    } else if (a & FILE_ATTRIBUTE_DIRECTORY) {
-        return !RemoveDirectory(path);
-    } else {
-        return !DeleteFile(path);
-    }
-}
-
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_delete0(JNIEnv *env, jobject this,
-                                     jobject file)
-{
-    jboolean rv = JNI_FALSE;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        if (removeFileOrDirectory(path) == 0) {
-            rv = JNI_TRUE;
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-
-/* ## Clean this up to use direct Win32 calls */
-
-JNIEXPORT jobjectArray JNICALL
-Java_java_io_Win32FileSystem_list(JNIEnv *env, jobject this,
-                                  jobject file)
-{
-    DIR *dir;
-    struct dirent *ptr;
-    int len, maxlen;
-    jobjectArray rv, old;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        dir = opendir(path);
-    } END_NATIVE_PATH(env, path);
-    if (dir == NULL) return NULL;
-
-    /* Allocate an initial String array */
-    len = 0;
-    maxlen = 16;
-    rv = (*env)->NewObjectArray(env, maxlen, JNU_ClassString(env), NULL);
-    if (rv == NULL) goto error;
-
-    /* Scan the directory */
-    while ((ptr = readdir(dir)) != NULL) {
-        jstring name;
-        if (!strcmp(ptr->d_name, ".") || !strcmp(ptr->d_name, ".."))
-            continue;
-        if (len == maxlen) {
-            old = rv;
-            rv = (*env)->NewObjectArray(env, maxlen <<= 1,
-                                        JNU_ClassString(env), NULL);
-            if (rv == NULL) goto error;
-            if (JNU_CopyObjectArray(env, rv, old, len) < 0) goto error;
-            (*env)->DeleteLocalRef(env, old);
-        }
-        name = JNU_NewStringPlatform(env, ptr->d_name);
-        if (name == NULL) goto error;
-        (*env)->SetObjectArrayElement(env, rv, len++, name);
-        (*env)->DeleteLocalRef(env, name);
-    }
-    closedir(dir);
-
-    /* Copy the final results into an appropriately-sized array */
-    old = rv;
-    rv = (*env)->NewObjectArray(env, len, JNU_ClassString(env), NULL);
-    if (rv == NULL) goto error;
-    if (JNU_CopyObjectArray(env, rv, old, len) < 0) goto error;
-    return rv;
-
- error:
-    closedir(dir);
-    return NULL;
-}
-
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_createDirectory(JNIEnv *env, jobject this,
-                                             jobject file)
-{
-    jboolean rv = JNI_FALSE;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        if (mkdir(path) == 0) {
-            rv = JNI_TRUE;
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_rename0(JNIEnv *env, jobject this,
-                                     jobject from, jobject to)
-{
-    jboolean rv = JNI_FALSE;
-
-    WITH_NATIVE_PATH(env, from, ids.path, fromPath) {
-        WITH_NATIVE_PATH(env, to, ids.path, toPath) {
-            if (rename(fromPath, toPath) == 0) {
-                rv = JNI_TRUE;
-            }
-        } END_NATIVE_PATH(env, toPath);
-    } END_NATIVE_PATH(env, fromPath);
-    return rv;
-}
-
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_setLastModifiedTime(JNIEnv *env, jobject this,
-                                                 jobject file, jlong time)
-{
-    jboolean rv = JNI_FALSE;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        HANDLE h;
-        h = CreateFile(path, GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
-                       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, 0);
-        if (h != INVALID_HANDLE_VALUE) {
-            LARGE_INTEGER modTime;
-            FILETIME t;
-            modTime.QuadPart = (time + 11644473600000L) * 10000L;
-            t.dwLowDateTime = (DWORD)modTime.LowPart;
-            t.dwHighDateTime = (DWORD)modTime.HighPart;
-            if (SetFileTime(h, NULL, NULL, &t)) {
-                rv = JNI_TRUE;
-            }
-            CloseHandle(h);
-        }
-    } END_NATIVE_PATH(env, path);
-
-    return rv;
-}
-
-
-JNIEXPORT jboolean JNICALL
-Java_java_io_Win32FileSystem_setReadOnly(JNIEnv *env, jobject this,
-                                         jobject file)
-{
-    jboolean rv = JNI_FALSE;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        DWORD a;
-        a = GetFileAttributes(path);
-        if (a != INVALID_FILE_ATTRIBUTES) {
-            if (SetFileAttributes(path, a | FILE_ATTRIBUTE_READONLY))
-                rv = JNI_TRUE;
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
-
-
-/* -- Filesystem interface -- */
-
-
-JNIEXPORT jobject JNICALL
-Java_java_io_Win32FileSystem_getDriveDirectory(JNIEnv *env, jclass ignored,
-                                               jint drive)
-{
-    char buf[_MAX_PATH];
-    char *p = _getdcwd(drive, buf, sizeof(buf));
-    if (p == NULL) return NULL;
-    if (isalpha(*p) && (p[1] == ':')) p += 2;
-    return JNU_NewStringPlatform(env, p);
-}
-
-
-JNIEXPORT jint JNICALL
-Java_java_io_Win32FileSystem_listRoots0(JNIEnv *env, jclass ignored)
-{
-    return GetLogicalDrives();
-}
-
-JNIEXPORT jlong JNICALL
-Java_java_io_Win32FileSystem_getSpace0(JNIEnv *env, jobject this,
-                                       jobject file, jint t)
-{
-    jlong rv = 0L;
-
-    WITH_NATIVE_PATH(env, file, ids.path, path) {
-        ULARGE_INTEGER totalSpace, freeSpace, usableSpace;
-        if (GetDiskFreeSpaceEx(path, &usableSpace, &totalSpace, &freeSpace)) {
-            switch(t) {
-            case java_io_FileSystem_SPACE_TOTAL:
-                rv = long_to_jlong(totalSpace.QuadPart);
-                break;
-            case java_io_FileSystem_SPACE_FREE:
-                rv = long_to_jlong(freeSpace.QuadPart);
-                break;
-            case java_io_FileSystem_SPACE_USABLE:
-                rv = long_to_jlong(usableSpace.QuadPart);
-                break;
-            default:
-                assert(0);
-            }
-        }
-    } END_NATIVE_PATH(env, path);
-    return rv;
-}
--- a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c	Fri Oct 12 14:52:24 2012 -0700
@@ -828,6 +828,12 @@
     return ret;
 }
 
+JNIEXPORT jint JNICALL
+Java_java_io_WinNTFileSystem_listRoots0(JNIEnv *env, jclass ignored)
+{
+    return GetLogicalDrives();
+}
+
 JNIEXPORT jlong JNICALL
 Java_java_io_WinNTFileSystem_getSpace0(JNIEnv *env, jobject this,
                                        jobject file, jint t)
--- a/jdk/src/windows/native/java/io/io_util_md.c	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/windows/native/java/io/io_util_md.c	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, 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
@@ -40,22 +40,8 @@
 #include <limits.h>
 #include <wincon.h>
 
-extern jboolean onNT = JNI_FALSE;
-
 static DWORD MAX_INPUT_EVENTS = 2000;
 
-void
-initializeWindowsVersion() {
-    OSVERSIONINFO ver;
-    ver.dwOSVersionInfoSize = sizeof(ver);
-    GetVersionEx(&ver);
-    if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
-        onNT = JNI_TRUE;
-    } else {
-        onNT = JNI_FALSE;
-    }
-}
-
 /* If this returns NULL then an exception is pending */
 WCHAR*
 fileToNTPath(JNIEnv *env, jobject file, jfieldID id) {
@@ -247,27 +233,21 @@
     const DWORD flagsAndAttributes = maybeWriteThrough | maybeDeleteOnClose;
     HANDLE h = NULL;
 
-    if (onNT) {
-        WCHAR *pathbuf = pathToNTPath(env, path, JNI_TRUE);
-        if (pathbuf == NULL) {
-            /* Exception already pending */
-            return -1;
-        }
-        h = CreateFileW(
-            pathbuf,            /* Wide char path name */
-            access,             /* Read and/or write permission */
-            sharing,            /* File sharing flags */
-            NULL,               /* Security attributes */
-            disposition,        /* creation disposition */
-            flagsAndAttributes, /* flags and attributes */
-            NULL);
-        free(pathbuf);
-    } else {
-        WITH_PLATFORM_STRING(env, path, _ps) {
-            h = CreateFile(_ps, access, sharing, NULL, disposition,
-                           flagsAndAttributes, NULL);
-        } END_PLATFORM_STRING(env, _ps);
+    WCHAR *pathbuf = pathToNTPath(env, path, JNI_TRUE);
+    if (pathbuf == NULL) {
+        /* Exception already pending */
+        return -1;
     }
+    h = CreateFileW(
+        pathbuf,            /* Wide char path name */
+        access,             /* Read and/or write permission */
+        sharing,            /* File sharing flags */
+        NULL,               /* Security attributes */
+        disposition,        /* creation disposition */
+        flagsAndAttributes, /* flags and attributes */
+        NULL);
+    free(pathbuf);
+
     if (h == INVALID_HANDLE_VALUE) {
         int error = GetLastError();
         if (error == ERROR_TOO_MANY_OPEN_FILES) {
--- a/jdk/src/windows/native/java/lang/ProcessImpl_md.c	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/windows/native/java/lang/ProcessImpl_md.c	Fri Oct 12 14:52:24 2012 -0700
@@ -40,72 +40,6 @@
  */
 #define PIPE_SIZE (4096+24)
 
-char *
-extractExecutablePath(JNIEnv *env, char *source)
-{
-    char *p, *r;
-
-    /* If no spaces, then use entire thing */
-    if ((p = strchr(source, ' ')) == NULL)
-        return source;
-
-    /* If no quotes, or quotes after space, return up to space */
-    if (((r = strchr(source, '"')) == NULL) || (r > p)) {
-        *p = 0;
-        return source;
-    }
-
-    /* Quotes before space, return up to space after next quotes */
-    p = strchr(r, '"');
-    if ((p = strchr(p, ' ')) == NULL)
-        return source;
-    *p = 0;
-    return source;
-}
-
-DWORD
-selectProcessFlag(JNIEnv *env, jstring cmd0)
-{
-    char buf[MAX_PATH];
-    DWORD newFlag = 0;
-    char *exe, *p, *name;
-    unsigned char buffer[2];
-    long headerLoc = 0;
-    int fd = 0;
-
-    exe = (char *)JNU_GetStringPlatformChars(env, cmd0, 0);
-    exe = extractExecutablePath(env, exe);
-
-    if (exe != NULL) {
-        if ((p = strchr(exe, '\\')) == NULL) {
-            SearchPath(NULL, exe, ".exe", MAX_PATH, buf, &name);
-        } else {
-            p = strrchr(exe, '\\');
-            *p = 0;
-            p++;
-            SearchPath(exe, p, ".exe", MAX_PATH, buf, &name);
-        }
-    }
-
-    fd = _open(buf, _O_RDONLY);
-    if (fd > 0) {
-        _read(fd, buffer, 2);
-        if (buffer[0] == 'M' && buffer[1] == 'Z') {
-            _lseek(fd, 60L, SEEK_SET);
-            _read(fd, buffer, 2);
-            headerLoc = (long)buffer[1] << 8 | (long)buffer[0];
-            _lseek(fd, headerLoc, SEEK_SET);
-            _read(fd, buffer, 2);
-            if (buffer[0] == 'P' && buffer[1] == 'E') {
-                newFlag = DETACHED_PROCESS;
-            }
-        }
-        _close(fd);
-    }
-    JNU_ReleaseStringPlatformChars(env, cmd0, exe);
-    return newFlag;
-}
-
 static void
 win32Error(JNIEnv *env, const char *functionName)
 {
@@ -151,15 +85,8 @@
     const jchar*  penvBlock = NULL;
     jlong  *handles = NULL;
     jlong ret = 0;
-    OSVERSIONINFO ver;
-    jboolean onNT = JNI_FALSE;
     DWORD processFlag;
 
-    ver.dwOSVersionInfoSize = sizeof(ver);
-    GetVersionEx(&ver);
-    if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-        onNT = JNI_TRUE;
-
     assert(cmd != NULL);
     pcmd = (*env)->GetStringChars(env, cmd, NULL);
     if (pcmd == NULL) goto Catch;
@@ -229,10 +156,7 @@
     }
     SetHandleInformation(si.hStdError, HANDLE_FLAG_INHERIT, TRUE);
 
-    if (onNT)
-        processFlag = CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT;
-    else
-        processFlag = selectProcessFlag(env, cmd) | CREATE_UNICODE_ENVIRONMENT;
+    processFlag = CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT;
     ret = CreateProcessW(0,                /* executable name */
                          (LPWSTR)pcmd,     /* command line */
                          0,                /* process security attribute */
--- a/jdk/src/windows/native/java/util/TimeZone_md.c	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/src/windows/native/java/util/TimeZone_md.c	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, 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
@@ -65,8 +65,6 @@
 #define STANDARD_NAME           0
 #define STD_NAME                2
 
-static int isNT = FALSE;        /* TRUE if it is NT. */
-
 /*
  * Calls RegQueryValueEx() to get the value for the specified key. If
  * the platform is NT, 2000 or XP, it calls the Unicode
@@ -95,12 +93,10 @@
     int len;
 
     *typePtr = 0;
-    if (isNT) {
-        ret = RegQueryValueExW(hKey, (WCHAR *) keyNames[keyIndex], NULL,
-                               typePtr, buf, bufLengthPtr);
-        if (ret == ERROR_SUCCESS && *typePtr == REG_SZ) {
-            return ret;
-        }
+    ret = RegQueryValueExW(hKey, (WCHAR *) keyNames[keyIndex], NULL,
+                           typePtr, buf, bufLengthPtr);
+    if (ret == ERROR_SUCCESS && *typePtr == REG_SZ) {
+        return ret;
     }
 
     valSize = sizeof(val);
@@ -180,8 +176,7 @@
      */
     ver.dwOSVersionInfoSize = sizeof(ver);
     GetVersionEx(&ver);
-    isNT = ver.dwPlatformId == VER_PLATFORM_WIN32_NT;
-    isVista = isNT && ver.dwMajorVersion >= 6;
+    isVista = ver.dwMajorVersion >= 6;
 
     ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_CURRENT_TZ_KEY, 0,
                        KEY_READ, (PHKEY)&hKey);
--- a/jdk/test/Makefile	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/test/Makefile	Fri Oct 12 14:52:24 2012 -0700
@@ -477,25 +477,21 @@
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_lang
 JDK_DEFAULT_TARGETS += jdk_lang
-jdk_lang: $(call TestDirs, java/lang)
+jdk_lang: $(call TestDirs, java/lang sun/invoke sun/misc vm)
 	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using agentvm has serious problems with these tests
-JDK_ALL_TARGETS += jdk_management1
-jdk_management1: $(call TestDirs, javax/management)
+JDK_ALL_TARGETS += jdk_jmx
+jdk_jmx: $(call TestDirs, javax/management com/sun/jmx)
 	$(call RunOthervmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using agentvm has serious problems with these tests
-JDK_ALL_TARGETS += jdk_management2
-jdk_management2: $(call TestDirs, com/sun/jmx com/sun/management sun/management)
+JDK_ALL_TARGETS += jdk_management
+jdk_management: $(call TestDirs, com/sun/management sun/management)
 	$(call RunOthervmBatch)
 
-# All management tests
-jdk_management: jdk_management1 jdk_management2
-	@$(SummaryInfo)
-
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_math
 JDK_DEFAULT_TARGETS += jdk_math
@@ -503,52 +499,41 @@
 	$(call RunAgentvmBatch)
 
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
-JDK_ALL_TARGETS += jdk_misc
-JDK_DEFAULT_TARGETS += jdk_misc
-jdk_misc: $(call TestDirs, \
-          demo/jvmti demo/zipfs javax/naming javax/script \
-          javax/smartcardio com/sun/jndi com/sun/xml \
-          com/sun/corba sun/misc)
+JDK_ALL_TARGETS += jdk_other
+JDK_DEFAULT_TARGETS += jdk_other
+jdk_other: $(call TestDirs, \
+          demo/jvmti demo/zipfs sample \
+          javax/naming com/sun/jndi \
+          javax/script \
+	  javax/sql \
+          javax/smartcardio \
+	  javax/xml/ws com/sun/internal/ws \
+	  com/sun/org/apache/xerces \
+          com/sun/corba \
+	  com/sun/servicetag \
+	  com/sun/tracing \
+	  sun/usagetracker)
 	$(call RunAgentvmBatch)
 
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
 JDK_ALL_TARGETS += jdk_net
 JDK_DEFAULT_TARGETS += jdk_net
-jdk_net: $(call TestDirs, com/sun/net java/net sun/net)
-	$(call RunAgentvmBatch)
-
-# Stable agentvm testruns (minus items from PROBLEM_LIST)
-JDK_ALL_TARGETS += jdk_nio1
-JDK_DEFAULT_TARGETS += jdk_nio1
-jdk_nio1: $(call TestDirs, java/nio/file)
+jdk_net: $(call TestDirs, com/sun/net java/net sun/net com/oracle/net)
 	$(call RunAgentvmBatch)
 
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
-JDK_ALL_TARGETS += jdk_nio2
-JDK_DEFAULT_TARGETS += jdk_nio2
-jdk_nio2: $(call TestDirs, java/nio/Buffer java/nio/ByteOrder \
-          java/nio/channels java/nio/MappedByteBuffer sun/nio/ch)
+jdk_nio: $(call TestDirs, java/nio sun/nio com/oracle/nio)
 	$(call SharedLibraryPermissions,java/nio/channels)
 	$(call RunAgentvmBatch)
 
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
-JDK_ALL_TARGETS += jdk_nio3
-JDK_DEFAULT_TARGETS += jdk_nio3
-jdk_nio3: $(call TestDirs, java/nio/charset sun/nio/cs)
-	$(call RunAgentvmBatch)
-
-# All nio tests
-jdk_nio: jdk_nio1 jdk_nio2 jdk_nio3
-	@$(SummaryInfo)
-
-# Stable agentvm testruns (minus items from PROBLEM_LIST)
 jdk_sctp: $(call TestDirs, com/sun/nio/sctp)
 	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using agentvm has serious problems with these tests
 JDK_ALL_TARGETS += jdk_rmi
-jdk_rmi: $(call TestDirs, java/rmi javax/rmi sun/rmi)
+jdk_rmi: $(call TestDirs, java/rmi sun/rmi javax/rmi/ssl)
 	$(call RunOthervmBatch)
 
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
@@ -566,7 +551,7 @@
 JDK_ALL_TARGETS += jdk_security3
 jdk_security3: $(call TestDirs, com/sun/security lib/security javax/security \
         sun/security com/sun/org/apache/xml/internal/security \
-        com/oracle/security/ucrypto)
+        com/oracle/security)
 	$(call SharedLibraryPermissions,sun/security)
 	$(call RunAgentvmBatch)
 
@@ -593,23 +578,17 @@
 	$(call RunAgentvmBatch)
 
 # Stable agentvm testruns (minus items from PROBLEM_LIST)
-JDK_ALL_TARGETS += jdk_tools1
-jdk_tools1: $(call TestDirs, com/sun/jdi)
+JDK_ALL_TARGETS += jdk_jdi
+jdk_jdi: $(call TestDirs, com/sun/jdi)
 	$(call RunAgentvmBatch)
 
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using agentvm has serious problems with these tests
-JDK_ALL_TARGETS += jdk_tools2
-jdk_tools2: $(call TestDirs, \
-            com/sun/tools sun/jvmstat sun/tools tools vm \
-            com/sun/servicetag com/sun/tracing)
+JDK_ALL_TARGETS += jdk_tools
+jdk_tools: $(call TestDirs, com/sun/tools sun/jvmstat sun/tools tools)
 	$(call SharedLibraryPermissions,tools/launcher)
 	$(call RunAgentvmBatch)
 
-# All tools tests
-jdk_tools: jdk_tools1 jdk_tools2
-	@$(SummaryInfo)
-
 # Stable othervm testruns (minus items from PROBLEM_LIST)
 #   Using agentvm has serious problems with these tests
 ifdef OPENJDK
--- a/jdk/test/ProblemList.txt	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/test/ProblemList.txt	Fri Oct 12 14:52:24 2012 -0700
@@ -147,6 +147,10 @@
 
 # jdk_management
 
+############################################################################
+
+# jdk_jmx
+
 # 6959636
 javax/management/loading/LibraryLoader/LibraryLoaderTest.java	windows-all
 
@@ -162,7 +166,7 @@
 
 ############################################################################
 
-# jdk_misc
+# jdk_other
 
 # 6988950
 demo/jvmti/compiledMethodLoad/CompiledMethodLoadTest.java	generic-all
@@ -324,6 +328,7 @@
 
 # 7196199
 java/text/Bidi/Bug6665028.java                                  generic-all
+
 ############################################################################
 
 # jdk_tools
@@ -331,6 +336,24 @@
 # 6461635
 com/sun/tools/attach/BasicTests.sh                              generic-all
 
+# 7172176
+sun/tools/jconsole/ResourceCheckTest.sh                         generic-all
+sun/tools/jconsole/ImmutableResourceTest.sh                     generic-all
+
+# 7132203
+sun/jvmstat/monitor/MonitoredVm/CR6672135.java                  generic-all
+
+# Tests take too long, see 7143279
+tools/pack200/CommandLineTests.java                             generic-all
+tools/pack200/Pack200Test.java                                  generic-all
+
+# 7150569
+tools/launcher/UnicodeTest.java                                 macosx-all
+
+############################################################################
+
+# jdk_jdi
+
 # Filed 6952105
 com/sun/jdi/SuspendThreadTest.java                              generic-all
 
@@ -346,20 +369,6 @@
 # Filed 6402201
 com/sun/jdi/ProcessAttachTest.sh                                generic-all
 
-# Filed 7172176
-sun/tools/jconsole/ResourceCheckTest.sh                         generic-all
-sun/tools/jconsole/ImmutableResourceTest.sh			generic-all
-
-# 7132203
-sun/jvmstat/monitor/MonitoredVm/CR6672135.java			generic-all
-
-# Tests take too long, see 7143279
-tools/pack200/CommandLineTests.java                         	generic-all
-tools/pack200/Pack200Test.java                              	generic-all
-
-# 7150569
-tools/launcher/UnicodeTest.java                                 macosx-all
-
 ############################################################################
 
 # jdk_util
--- a/jdk/test/java/io/pathNames/win32/bug6344646.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/test/java/io/pathNames/win32/bug6344646.java	Fri Oct 12 14:52:24 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2012, 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
@@ -23,7 +23,7 @@
 
 /* @test
  * @bug 6344646
- * @summary tests that Win32FileSystem.hashCode() uses
+ * @summary tests that WinNTFileSystem.hashCode() uses
  *    locale independent case mapping.
  */
 
--- a/jdk/test/java/lang/ProcessBuilder/Basic.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/test/java/lang/ProcessBuilder/Basic.java	Fri Oct 12 14:52:24 2012 -0700
@@ -36,6 +36,7 @@
 import static java.lang.ProcessBuilder.Redirect.*;
 
 import java.io.*;
+import java.lang.reflect.Field;
 import java.util.*;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -1938,24 +1939,52 @@
                 final byte[] bytes = new byte[10];
                 final Process p = new ProcessBuilder(childArgs).start();
                 final CountDownLatch latch = new CountDownLatch(1);
+                final InputStream s;
+                switch (action & 0x1) {
+                    case 0: s = p.getInputStream(); break;
+                    case 1: s = p.getErrorStream(); break;
+                    default: throw new Error();
+                }
                 final Thread thread = new Thread() {
                     public void run() {
                         try {
+                            int r;
                             latch.countDown();
-                            int r;
-                            switch (action) {
-                            case 0: r = p.getInputStream().read(); break;
-                            case 1: r = p.getErrorStream().read(); break;
-                            case 2: r = p.getInputStream().read(bytes); break;
-                            case 3: r = p.getErrorStream().read(bytes); break;
-                            default: throw new Error();
+                            switch (action & 0x2) {
+                                case 0: r = s.read(); break;
+                                case 2: r = s.read(bytes); break;
+                                default: throw new Error();
                             }
                             equal(-1, r);
                         } catch (Throwable t) { unexpected(t); }}};
 
                 thread.start();
                 latch.await();
-                Thread.sleep(10);
+
+                String os = System.getProperty("os.name");
+                if (os.equalsIgnoreCase("Solaris") ||
+                    os.equalsIgnoreCase("SunOS"))
+                {
+                    final Object deferred;
+                    Class<?> c = s.getClass();
+                    if (c.getName().equals(
+                        "java.lang.UNIXProcess$DeferredCloseInputStream"))
+                    {
+                        deferred = s;
+                    } else {
+                        Field deferredField = p.getClass().
+                            getDeclaredField("stdout_inner_stream");
+                        deferredField.setAccessible(true);
+                        deferred = deferredField.get(p);
+                    }
+                    Field useCountField = deferred.getClass().
+                        getDeclaredField("useCount");
+                    useCountField.setAccessible(true);
+
+                    while (useCountField.getInt(deferred) <= 0) {
+                        Thread.yield();
+                    }
+                }
                 p.destroy();
                 thread.join();
             }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/Socket/SocketGrowth.java	Fri Oct 12 14:52:24 2012 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2012, 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
+ * @bug 7181793
+ * @summary getOutputStream create streams that cannot be GC'ed until Socket is closed
+ * @run main/othervm -Xmx32m SocketGrowth
+ */
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class SocketGrowth {
+
+    public static void main(String[] args) throws IOException {
+
+        try (ServerSocket ss = new ServerSocket(0)) {
+            try (Socket s = new Socket("localhost", ss.getLocalPort());
+                    Socket peer = ss.accept()) {
+                for (int i=0; i<1000000; i++) {
+                    // buggy JDK will run out of memory in this loop
+                    s.getOutputStream();
+                    // test InputStream also while we're here
+                    s.getInputStream();
+                    if (i % 100000 == 0) System.out.println(i);
+                }
+            }
+        }
+    }
+}
--- a/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.java	Fri Oct 12 14:52:24 2012 -0700
@@ -44,6 +44,7 @@
     DateFormatSymbolsProviderTest() {
         availableLocalesTest();
         objectValidityTest();
+        hashCodeTest();
     }
 
     void availableLocalesTest() {
@@ -124,4 +125,17 @@
             }
         }
     }
+
+    // Bug 7200341.
+    void hashCodeTest() {
+        for (Locale target: availloc) {
+            // look for provider's object
+            DateFormatSymbols dfs = DateFormatSymbols.getInstance(target);
+            if (dfs.getClass().getSimpleName().equals("FooDateFormatSymbols")) {
+                // call its hashCode(). success if no ArrayIndexOutOfBoundsException is thrown.
+                dfs.hashCode();
+                break;
+            }
+        }
+    }
 }
--- a/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.sh	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/test/java/util/PluggableLocale/DateFormatSymbolsProviderTest.sh	Fri Oct 12 14:52:24 2012 -0700
@@ -23,6 +23,6 @@
 #!/bin/sh
 #
 # @test
-# @bug 4052440
+# @bug 4052440 7200341
 # @summary DateFormatSymbolsProvider tests
 # @run shell ExecTest.sh foo DateFormatSymbolsProviderTest true
Binary file jdk/test/java/util/PluggableLocale/fooprovider.jar has changed
--- a/jdk/test/java/util/PluggableLocale/providersrc/DateFormatSymbolsProviderImpl.java	Wed Jul 05 18:26:11 2017 +0200
+++ b/jdk/test/java/util/PluggableLocale/providersrc/DateFormatSymbolsProviderImpl.java	Fri Oct 12 14:52:24 2012 -0700
@@ -221,5 +221,10 @@
         public void setAmPmStrings(String[] newAmpms) {
             ampms = newAmpms;
         }
+
+        @Override
+        public String[][] getZoneStrings() {
+            return new String[0][0];
+        }
     }
 }