Mercurial > hg > release > heapstats-1.1
changeset 2:567b17d89a33
Bug 1568: Crash on Java8 EA
reviewed-by: ykubota
author | Yasumasa Suenaga <yasu@ysfactory.dip.jp> |
---|---|
date | Mon, 07 Oct 2013 22:03:23 +0900 |
parents | c8755f1dc153 |
children | 22ac65b59e18 |
files | agent/ChangeLog agent/src/oopUtil.cpp |
diffstat | 2 files changed, 58 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/agent/ChangeLog Mon Sep 09 00:00:00 2013 +0900 +++ b/agent/ChangeLog Mon Oct 07 22:03:23 2013 +0900 @@ -1,3 +1,7 @@ +2013-10-07 Yasumasa Suenaga <suenaga.yasumasa@lab.ntt.co.jp> + + * Bug 1568: Crash on Java8 EA + 2013-09-09 Yasumasa Suenaga <suenaga.yasumasa@lab.ntt.co.jp> * Initial Release
--- a/agent/src/oopUtil.cpp Mon Sep 09 00:00:00 2013 +0900 +++ b/agent/src/oopUtil.cpp Mon Oct 07 22:03:23 2013 +0900 @@ -391,6 +391,16 @@ int *narrowOffsetShift = &dummyZeroInt; /*! +* \brief Pointer of Klass COOP base address. + */ +ptrdiff_t narrowKlassOffsetBase = 0; + +/*! +* \brief Pointer of Klass COOP shift bits. + */ +int *narrowKlassOffsetShift = &dummyZeroInt; + +/*! * \brief Lock bit mask.<br> * Value of "markOopDesc" class's "lock_mask_in_place" constant value. */ @@ -1066,6 +1076,15 @@ */ bool enableCR8004883 = false; +/*! + * \brief Flag of JVM is applyed CR#8003424.<br> + * Decision for CR8003424: + * 8003424: Enable Class Data Sharing for CompressedOops + * \sa http://bugs.sun.com/view_bug.do?bug_id=8003424 + * \sa http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/740e263c80c6 + */ +bool enableCR8003424 = false; + /* Variable for hotspot version. */ /*! @@ -1196,6 +1215,23 @@ } /*! + * \brief Convert COOP(narrowKlass) to wide Klass(normally Klass). + * \param narrowKlass [in] Java Klass object(compressed Klass pointer). + * \return Wide Klass object. + */ +inline void *getWideKlass(unsigned int narrowKlass) { + + /* + * narrowKlass decoding is defined in + * inline Klass* Klass::decode_klass_not_null(narrowKlass v) + * hotspot/src/share/vm/oops/klass.inline.hpp + */ + + return (void*)(narrowKlassOffsetBase + + ((ptrdiff_t)narrowKlass << (*narrowKlassOffsetShift))); +} + +/*! * \brief Getting oop's class information(It's "Klass", not "KlassOop"). * \param klassOop [in] Java heap object(Inner "KlassOop" class). * \return Class information object(Inner "Klass" class). @@ -1230,7 +1266,7 @@ if (likely(testAddr != NULL)) { /* Decode COOP. */ - tempAddr = getWideOop(*testAddr); + tempAddr = getWideKlass(*testAddr); } } else { /* Get oop's klassOop from "_klass" field. */ @@ -2055,6 +2091,10 @@ NULL, (void **)&narrowOffsetBase}, {"Universe", "_narrow_oop._shift", NULL, (void **)&narrowOffsetShift}, + {"Universe", "_narrow_klass._base", + NULL, (void **)&narrowKlassOffsetBase}, + {"Universe", "_narrow_klass._shift", + NULL, (void **)&narrowKlassOffsetShift}, {"oopDesc", "_metadata._klass", &ofsKlassAtOop, NULL}, {"oopDesc", "_metadata._compressed_klass", @@ -2111,6 +2151,11 @@ " info:Common from:VMStructs"); return false; } + + if(!enableCR8003424){ + narrowKlassOffsetBase = narrowOffsetBase; + narrowKlassOffsetShift = narrowOffsetShift; + } /* List of common class size. */ TTypeSizeMap typeMap[] = { @@ -2779,6 +2824,13 @@ const unsigned int afterCR8004883 = 25 << 24 | 14; enableCR8004883 = (hotSpotVersion >= afterCR8004883); + /* + * See CR8003424: + * 8003424: Enable Class Data Sharing for CompressedOops + */ + const unsigned int afterCR8003424 = 25 << 24 | 46; + enableCR8003424 = (hotSpotVersion >= afterCR8003424); + /* Search flag symbol in libjvm. */ searchCommonFlags(); @@ -2873,6 +2925,7 @@ /* Get object. */ collectedHeap = (*(void**)collectedHeap); narrowOffsetBase = (ptrdiff_t)*(void**)narrowOffsetBase; + narrowKlassOffsetBase = (ptrdiff_t)*(void**)narrowKlassOffsetBase; /* Setup for WatcherThread. */ if(unlikely(!setupOverrideFunction(watcherThread_hook))){