# HG changeset patch # User Yasumasa Suenaga # Date 1403103561 -32400 # Node ID b1930d079140b450949003e5e76028a88398ed69 # Parent c1b7b75d1930d865246cc5ae18c86bb6561f3ebe Bug 1683: HeapStats agent should be adapted to JDK-8027746 reviewed-by: ykubota diff -r c1b7b75d1930 -r b1930d079140 agent/ChangeLog --- a/agent/ChangeLog Tue Jun 17 23:20:20 2014 +0900 +++ b/agent/ChangeLog Wed Jun 18 23:59:21 2014 +0900 @@ -1,3 +1,7 @@ +2014-06-18 Yasumasa Suenaga + + * Bug 1683: HeapStats agent should be adapted to JDK-8027746 + 2014-06-17 Yasumasa Suenaga * Bug 1844: Agent should be adapted new HotSpot versioning: JDK-8030011 diff -r c1b7b75d1930 -r b1930d079140 agent/src/jvmInfo.hpp --- a/agent/src/jvmInfo.hpp Tue Jun 17 23:20:20 2014 +0900 +++ b/agent/src/jvmInfo.hpp Wed Jun 18 23:59:21 2014 +0900 @@ -413,6 +413,14 @@ } /*! + * \brief Decision for JDK-8027746: Remove do_gen_barrier template parameter in G1ParCopyClosure + */ + inline bool isAfterCR8027746(void){ + // jdk9-b03 (1.9.0-b03) + return (this->_hsVersion >= MAKE_HS_VERSION(26, 9, 0, 3)); + } + + /*! * \brief Get JVM name. * \return JVM name. */ diff -r c1b7b75d1930 -r b1930d079140 agent/src/oopUtil.cpp --- a/agent/src/oopUtil.cpp Tue Jun 17 23:20:20 2014 +0900 +++ b/agent/src/oopUtil.cpp Wed Jun 18 23:59:21 2014 +0900 @@ -136,6 +136,11 @@ DEFINE_OVERRIDE_FUNC_9(CR8000213_g1) /*! + * \brief Override function for instance object on G1GC for after CR8027746. + */ +DEFINE_OVERRIDE_FUNC_9(CR8027746_g1) + +/*! * \brief Override function for cleanup event on G1GC. */ DEFINE_OVERRIDE_FUNC_3(g1Event) @@ -163,7 +168,9 @@ /* Macro. */ #define SELECT_HOOK_FUNCS(result, prefix) \ - if(jvmInfo->isAfterCR8000213()) \ + if(jvmInfo->isAfterCR8027746()) \ + result = CR8027746_##prefix##_hook; \ + else if(jvmInfo->isAfterCR8000213()) \ result = CR8000213_##prefix##_hook; \ else if(jvmInfo->isAfterCR6964458()) \ result = CR6964458_##prefix##_hook; \ @@ -507,6 +514,12 @@ }; /*! + * \brief Pointer of hook information on parallelGC for after CR8027746. + * (no change) + */ +#define CR8027746_par_hook CR8000213_par_hook + +/*! * \brief Pointer of hook information on parallelOldGC. */ THookFunctionInfo parOld_hook[] = { @@ -576,6 +589,12 @@ }; /*! + * \brief Pointer of hook information on parallelOldGC for after CR8027746. + * (no change) + */ +#define CR8027746_parOld_hook CR8000213_parOld_hook + +/*! * \brief Pointer of hook information on CMSGC. */ THookFunctionInfo cms_sweep_hook[] = { @@ -655,6 +674,12 @@ }; /*! + * \brief Pointer of hook information on CMSGC for after CR8027746. + * (no change) + */ +#define CR8027746_cms_new_hook CR8000213_cms_new_hook + +/*! * \brief Pointer of hook information on G1GC. */ THookFunctionInfo g1_hook[] = { @@ -725,6 +750,41 @@ }; /*! + * \brief Pointer of hook information on G1GC for after CR8027746. + */ +THookFunctionInfo CR8027746_g1_hook[] = { + HOOK_FUNC("_ZTV16G1ParCopyClosureIL9G1Barrier0ELb1EE", + "_ZN16G1ParCopyClosureIL9G1Barrier0ELb1EE6do_oopEPP7oopDesc", + &CR8027746_g1_override_func_0, NULL), + HOOK_FUNC("_ZTV16G1ParCopyClosureIL9G1Barrier0ELb1EE", + "_ZN16G1ParCopyClosureIL9G1Barrier0ELb1EE6do_oopEPj", + &CR8027746_g1_override_func_1, NULL), + HOOK_FUNC("_ZTV13InstanceKlass", + "_ZN13InstanceKlass18oop_oop_iterate_nvEP7oopDescP23G1RootRegionScanClosure", + &CR8027746_g1_override_func_2, NULL), + HOOK_FUNC("_ZTV13ObjArrayKlass", + "_ZN13ObjArrayKlass18oop_oop_iterate_nvEP7oopDescP23G1RootRegionScanClosure", + &CR8027746_g1_override_func_3, NULL), + HOOK_FUNC("_ZTV16InstanceRefKlass", + "_ZN16InstanceRefKlass18oop_oop_iterate_nvEP7oopDescP23G1RootRegionScanClosure", + &CR8027746_g1_override_func_4, NULL), + + HOOK_FUNC("_ZTV13InstanceKlass", + "_ZN13InstanceKlass18oop_oop_iterate_nvEP7oopDescP14G1CMOopClosure", + &CR8027746_g1_override_func_5, NULL), + HOOK_FUNC("_ZTV13ObjArrayKlass", + "_ZN13ObjArrayKlass18oop_oop_iterate_nvEP7oopDescP14G1CMOopClosure", + &CR8027746_g1_override_func_6, NULL), + HOOK_FUNC("_ZTV14TypeArrayKlass", + "_ZN14TypeArrayKlass15oop_oop_iterateEP7oopDescP18ExtendedOopClosure", + &CR8027746_g1_override_func_7, NULL), + HOOK_FUNC("_ZTV16InstanceRefKlass", + "_ZN16InstanceRefKlass18oop_oop_iterate_nvEP7oopDescP14G1CMOopClosure", + &CR8027746_g1_override_func_8, NULL), + HOOK_FUNC_END +}; + +/*! * \brief Pointer of hook information on G1GC for after CR8000213. */ THookFunctionInfo CR8000213_g1_hook[] = { diff -r c1b7b75d1930 -r b1930d079140 agent/src/oopUtil.hpp --- a/agent/src/oopUtil.hpp Tue Jun 17 23:20:20 2014 +0900 +++ b/agent/src/oopUtil.hpp Wed Jun 18 23:59:21 2014 +0900 @@ -297,6 +297,11 @@ extern "C" THookFunctionInfo CR8000213_g1_hook[]; /*! + * \brief Pointer of hook information on G1GC after CR8027746. + */ +extern "C" THookFunctionInfo CR8027746_g1_hook[]; + +/*! * \brief Pointer of hook information on G1GC event. */ extern "C" THookFunctionInfo g1Event_hook[]; diff -r c1b7b75d1930 -r b1930d079140 agent/src/overrideFunc.S --- a/agent/src/overrideFunc.S Tue Jun 17 23:20:20 2014 +0900 +++ b/agent/src/overrideFunc.S Wed Jun 18 23:59:21 2014 +0900 @@ -1,7 +1,7 @@ /*! * \file overrideFunc.S * \brief This file is used to override JVM inner function.
- * Copyright (C) 2011-2013 Nippon Telegraph and Telephone Corporation + * Copyright (C) 2011-2014 Nippon Telegraph and Telephone Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -659,6 +659,34 @@ /* InstanceRefKlass::oop_oop_iterate_nv(oopDesc*, G1CMOopClosure*) */ OVERRIDE_OOP_OOP_ITERATE(CR8000213_g1, 8) +/* For G1 (CR8027746). */ + +/* initial-mark */ +/* G1ParScanAndMarkExtRootClosure::do_oop(oopDesc**) */ +/* G1ParCopyClosure::do_oop(oopDesc**) */ +OVERRIDE_CALLBACK_DEFINE(CR8027746_g1, 0, callbackForDoOop); +/* G1ParScanAndMarkExtRootClosure::do_oop(unsigned int*) */ +/* G1ParCopyClosure::do_oop(unsigned int*) */ +OVERRIDE_CALLBACK_DEFINE(CR8027746_g1, 1, callbackForDoNarrowOop); + +/* concurrent-root-region-scan */ +/* InstanceKlass::oop_oop_iterate_nv(oopDesc*, G1RootRegionScanClosure*) */ +OVERRIDE_OOP_OOP_ITERATE(CR8027746_g1, 2) +/* objArrayKlass::oop_oop_iterate_nv(oopDesc*, G1RootRegionScanClosure*) */ +OVERRIDE_OOP_OOP_ITERATE(CR8027746_g1, 3) +/* InstanceRefKlass::oop_oop_iterate_nv(oopDesc*, G1RootRegionScanClosure*) */ +OVERRIDE_OOP_OOP_ITERATE(CR8027746_g1, 4) + +/* concurrent-mark / remark */ +/* InstanceKlass::oop_oop_iterate_nv(oopDesc*, G1CMOopClosure*) */ +OVERRIDE_OOP_OOP_ITERATE(CR8027746_g1, 5) +/* ObjArrayKlass::oop_oop_iterate_nv(oopDesc*, G1CMOopClosure*) */ +OVERRIDE_OOP_OOP_ITERATE(CR8027746_g1, 6) +/* TypeArrayKlass::oop_oop_iterate(oopDesc*, ExtendedOopClosure*) */ +OVERRIDE_OOP_OOP_ITERATE_WITH_CALLER_CHECK(CR8027746_g1, 7, VTableForTypeArrayOopClosure) +/* InstanceRefKlass::oop_oop_iterate_nv(oopDesc*, G1CMOopClosure*) */ +OVERRIDE_OOP_OOP_ITERATE(CR8027746_g1, 8) + /* G1 events */ /* CMCleanUp::do_void() */