< prev index next > src/hotspot/share/code/codeBlob.hpp
Print this page
// RuntimeBlob : Non-compiled method code; generated glue code
// BufferBlob : Used for non-relocatable code such as interpreter, stubroutines, etc.
// AdapterBlob : Used to hold C2I/I2C adapters
// VtableBlob : Used for holding vtable chunks
// MethodHandlesAdapterBlob : Used to hold MethodHandles adapters
+ // BufferedInlineTypeBlob : used for pack/unpack handlers
// RuntimeStub : Call to VM runtime methods
// SingletonBlob : Super-class for all blobs that exist in only one instance
// DeoptimizationBlob : Used for deoptimization
// ExceptionBlob : Used for stack unrolling
// SafepointBlob : Used to handle illegal instruction exceptions
Nmethod,
Buffer,
Adapter,
Vtable,
MH_Adapter,
+ BufferedInlineType,
Runtime_Stub,
Deoptimization,
Exception,
Safepoint,
Uncommon_Trap,
bool is_exception_stub() const { return _kind == CodeBlobKind::Exception; }
bool is_safepoint_stub() const { return _kind == CodeBlobKind::Safepoint; }
bool is_adapter_blob() const { return _kind == CodeBlobKind::Adapter; }
bool is_vtable_blob() const { return _kind == CodeBlobKind::Vtable; }
bool is_method_handles_adapter_blob() const { return _kind == CodeBlobKind::MH_Adapter; }
+ bool is_buffered_inline_type_blob() const { return _kind == CodeBlobKind::BufferedInlineType; }
bool is_upcall_stub() const { return _kind == CodeBlobKind::Upcall; }
// Casting
nmethod* as_nmethod_or_null() { return is_nmethod() ? (nmethod*) this : nullptr; }
nmethod* as_nmethod() { assert(is_nmethod(), "must be nmethod"); return (nmethod*) this; }
class BufferBlob: public RuntimeBlob {
friend class VMStructs;
friend class AdapterBlob;
friend class VtableBlob;
friend class MethodHandlesAdapterBlob;
friend class UpcallStub;
friend class WhiteBox;
private:
// Creation support
BufferBlob(const char* name, CodeBlobKind kind, int size);
! BufferBlob(const char* name, CodeBlobKind kind, CodeBuffer* cb, int size);
void* operator new(size_t s, unsigned size) throw();
public:
// Creation
class BufferBlob: public RuntimeBlob {
friend class VMStructs;
friend class AdapterBlob;
friend class VtableBlob;
friend class MethodHandlesAdapterBlob;
+ friend class BufferedInlineTypeBlob;
friend class UpcallStub;
friend class WhiteBox;
private:
// Creation support
BufferBlob(const char* name, CodeBlobKind kind, int size);
! BufferBlob(const char* name, CodeBlobKind kind, CodeBuffer* cb, int size, int header_size);
+ BufferBlob(const char* name, CodeBlobKind kind, CodeBuffer* cb, int size, int frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments = false);
void* operator new(size_t s, unsigned size) throw();
public:
// Creation
//----------------------------------------------------------------------------------------------------
// AdapterBlob: used to hold C2I/I2C adapters
class AdapterBlob: public BufferBlob {
private:
! AdapterBlob(int size, CodeBuffer* cb);
public:
// Creation
! static AdapterBlob* create(CodeBuffer* cb);
};
//---------------------------------------------------------------------------------------------------
class VtableBlob: public BufferBlob {
private:
//----------------------------------------------------------------------------------------------------
// AdapterBlob: used to hold C2I/I2C adapters
class AdapterBlob: public BufferBlob {
private:
! AdapterBlob(int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments = false);
public:
// Creation
! static AdapterBlob* create(CodeBuffer* cb,
+ int frame_complete,
+ int frame_size,
+ OopMapSet* oop_maps,
+ bool caller_must_gc_arguments = false);
+
+ bool caller_must_gc_arguments(JavaThread* thread) const { return true; }
};
//---------------------------------------------------------------------------------------------------
class VtableBlob: public BufferBlob {
private:
public:
// Creation
static MethodHandlesAdapterBlob* create(int buffer_size);
};
+ //----------------------------------------------------------------------------------------------------
+ // BufferedInlineTypeBlob : used for pack/unpack handlers
+
+ class BufferedInlineTypeBlob: public BufferBlob {
+ private:
+ const int _pack_fields_off;
+ const int _pack_fields_jobject_off;
+ const int _unpack_fields_off;
+
+ BufferedInlineTypeBlob(int size, CodeBuffer* cb, int pack_fields_off, int pack_fields_jobject_off, int unpack_fields_off);
+
+ public:
+ // Creation
+ static BufferedInlineTypeBlob* create(CodeBuffer* cb, int pack_fields_off, int pack_fields_jobject_off, int unpack_fields_off);
+
+ address pack_fields() const { return code_begin() + _pack_fields_off; }
+ address pack_fields_jobject() const { return code_begin() + _pack_fields_jobject_off; }
+ address unpack_fields() const { return code_begin() + _unpack_fields_off; }
+ };
//----------------------------------------------------------------------------------------------------
// RuntimeStub: describes stubs used by compiled code to call a (static) C++ runtime routine
class RuntimeStub: public RuntimeBlob {
< prev index next >