@@ -39,6 +39,7 @@ namespace TR { class CompilationInfo; }
39
39
#if defined(J9VM_OPT_JITSERVER)
40
40
namespace TR { class CompilationInfoPerThread ; }
41
41
namespace JITServer { class ServerStream ; }
42
+ class JITServerNoSCCAOTDeserializer ;
42
43
#endif
43
44
44
45
struct J9SharedClassConfig ;
@@ -106,6 +107,10 @@ class TR_J9SharedCache : public TR_SharedCache
106
107
* \brief Converts a shared cache offset, calculated from the end of the SCC, into the
107
108
* metadata section of the SCC into a pointer.
108
109
*
110
+ * The pointer returned from this function should be considered opaque by the consumers of this API,
111
+ * as some subclasses (like TR_J9DeserializerSharedCache) might not return, say, an actual (uintptr *) class chain
112
+ * given an offset that is ostensibly to such a chain.
113
+ *
109
114
* \param[in] offset The offset to convert.
110
115
* \return A pointer. Raises a fatal assertion before returning NULL if the offset is invalid.
111
116
*/
@@ -689,6 +694,80 @@ class TR_J9JITServerSharedCache : public TR_J9SharedCache
689
694
JITServer::ServerStream *_stream;
690
695
TR::CompilationInfoPerThread *_compInfoPT;
691
696
};
697
+
698
+ /* *
699
+ * \class TR_J9DeserializerSharedCache
700
+ * \brief Class used by a JITServer client for querying the deserializer during AOT cache loads
701
+ *
702
+ * This class is an extension of the TR_J9SharedCache class which overrides a number
703
+ * of TR_J9SharedCache's APIs. TR_J9DeserializerSharedCache is used by a client of a JITServer
704
+ * when relocating a method received from the JITServer's AOT cache. It ignores any local shared cache
705
+ * that may exist, and instead will query the JITServerNoSCCAOTDeserializer during relocation, fetching the
706
+ * deserializer's cached information.
707
+ *
708
+ * The offsets used by this class are different from those of the other TR_J9SharedCache classes and their derivatives;
709
+ * they are the idAndType of the AOTSerializationRecord records maintained by a JITServer's AOT cache, and don't
710
+ * correspond to any storage location of the entities that the offsets refer to.
711
+ */
712
+ class TR_J9DeserializerSharedCache : public TR_J9SharedCache
713
+ {
714
+ public:
715
+ TR_ALLOC (TR_Memory::SharedCache)
716
+
717
+ TR_J9DeserializerSharedCache (TR_J9VMBase *fe, JITServerNoSCCAOTDeserializer *deserializer);
718
+
719
+ virtual void *pointerFromOffsetInSharedCache (uintptr_t offset) override ;
720
+ virtual void *lookupClassLoaderAssociatedWithClassChain (void *chainData) override ;
721
+ virtual J9ROMClass *romClassFromOffsetInSharedCache (uintptr_t offset) override ;
722
+ virtual J9ROMMethod *romMethodFromOffsetInSharedCache (uintptr_t offset) override ;
723
+ virtual bool classMatchesCachedVersion (J9Class *clazz, UDATA *chainData=NULL ) override ;
724
+ virtual TR_OpaqueClassBlock *lookupClassFromChainAndLoader (uintptr_t *chainData, void *classLoader) override ;
725
+
726
+ virtual bool isHint (TR_ResolvedMethod *, TR_SharedCacheHint, uint16_t *dataField = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
727
+ virtual bool isHint (J9Method *, TR_SharedCacheHint, uint16_t *dataField = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
728
+ virtual uint16_t getAllEnabledHints (J9Method *method) override { TR_ASSERT_FATAL (false , " called" ); return 0 ; }
729
+ virtual void addHint (J9Method *, TR_SharedCacheHint) override { TR_ASSERT_FATAL (false , " called" ); }
730
+ virtual void addHint (TR_ResolvedMethod *, TR_SharedCacheHint) override { TR_ASSERT_FATAL (false , " called" ); }
731
+ virtual bool isMostlyFull () override { TR_ASSERT_FATAL (false , " called" ); return false ; }
732
+
733
+ virtual uintptr_t offsetInSharedCacheFromPointer (void *ptr) override { TR_ASSERT_FATAL (false , " called" ); return 0 ; }
734
+ virtual uintptr_t offsetInSharedCacheFromROMClass (J9ROMClass *romClass) override { TR_ASSERT_FATAL (false , " called" ); return 0 ; }
735
+ virtual uintptr_t offsetInSharedCacheFromROMMethod (J9ROMMethod *romMethod) override { TR_ASSERT_FATAL (false , " called" ); return 0 ; }
736
+ virtual void *ptrToROMClassesSectionFromOffsetInSharedCache (uintptr_t offset) override { TR_ASSERT_FATAL (false , " called" ); return NULL ; }
737
+ virtual uintptr_t offsetInSharedCacheFromPtrToROMClassesSection (void *ptr) override { TR_ASSERT_FATAL (false , " called" ); return 0 ; }
738
+
739
+ virtual void persistIprofileInfo (TR::ResolvedMethodSymbol *, TR::Compilation *comp) override { TR_ASSERT_FATAL (false , " called" ); }
740
+ virtual void persistIprofileInfo (TR::ResolvedMethodSymbol *, TR_ResolvedMethod*, TR::Compilation *comp) override { TR_ASSERT_FATAL (false , " called" ); }
741
+
742
+ virtual bool canRememberClass (TR_OpaqueClassBlock *classPtr) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
743
+ virtual uintptr_t rememberClass (TR_OpaqueClassBlock *classPtr,
744
+ const AOTCacheClassChainRecord **classChainRecord = NULL ) override
745
+ { TR_ASSERT_FATAL (false , " called" ); return TR_SharedCache::INVALID_CLASS_CHAIN_OFFSET; }
746
+
747
+ virtual uintptr_t rememberClass (J9Class *clazz, const AOTCacheClassChainRecord **classChainRecord = NULL ,
748
+ bool create = true ) override
749
+ { TR_ASSERT_FATAL (false , " called" ); return TR_SharedCache::INVALID_CLASS_CHAIN_OFFSET; }
750
+
751
+ virtual UDATA rememberDebugCounterName (const char *name) override { TR_ASSERT_FATAL (false , " called" ); return 0 ; }
752
+ virtual const char *getDebugCounterName (UDATA offset) override { TR_ASSERT_FATAL (false , " called" ); return NULL ; }
753
+
754
+ virtual bool isPointerInSharedCache (void *ptr, uintptr_t *cacheOffset = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
755
+ virtual bool isOffsetInSharedCache (uintptr_t encoded_offset, void *ptr = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
756
+ virtual bool isROMClassInSharedCache (J9ROMClass *romClass, uintptr_t *cacheOffset = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
757
+ virtual bool isROMClassOffsetInSharedCache (uintptr_t offset, J9ROMClass **romClassPtr = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
758
+ virtual bool isROMMethodInSharedCache (J9ROMMethod *romMethod, uintptr_t *cacheOffset = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
759
+ virtual bool isROMMethodOffsetInSharedCache (uintptr_t offset, J9ROMMethod **romMethodPtr = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
760
+ virtual bool isPtrToROMClassesSectionInSharedCache (void *ptr, uintptr_t *cacheOffset = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
761
+ virtual bool isOffsetOfPtrToROMClassesSectionInSharedCache (uintptr_t offset, void **ptr = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return false ; }
762
+ virtual uintptr_t getClassChainOffsetIdentifyingLoader (TR_OpaqueClassBlock *clazz, uintptr_t **classChain = NULL ) override { TR_ASSERT_FATAL (false , " called" ); return 0 ; }
763
+ virtual const void *storeSharedData (J9VMThread *vmThread, const char *key, const J9SharedDataDescriptor *descriptor) override { TR_ASSERT_FATAL (false , " called" ); return NULL ; }
764
+
765
+ virtual J9SharedClassCacheDescriptor *getCacheDescriptorList () override { TR_ASSERT_FATAL (false , " called" ); return NULL ; }
766
+
767
+ private:
768
+ JITServerNoSCCAOTDeserializer *_deserializer;
769
+ };
770
+
692
771
#endif /* defined(J9VM_OPT_JITSERVER) */
693
772
694
773
#endif
0 commit comments