108
109 // Deletion
110 virtual void flush();
111
112 // Typing
113 virtual bool is_buffer_blob() const { return false; }
114 virtual bool is_nmethod() const { return false; }
115 virtual bool is_runtime_stub() const { return false; }
116 virtual bool is_deoptimization_stub() const { return false; }
117 virtual bool is_uncommon_trap_stub() const { return false; }
118 virtual bool is_exception_stub() const { return false; }
119 virtual bool is_safepoint_stub() const { return false; }
120 virtual bool is_adapter_blob() const { return false; }
121 virtual bool is_method_handles_adapter_blob() const { return false; }
122 virtual bool is_aot() const { return false; }
123 virtual bool is_compiled() const { return false; }
124
125 inline bool is_compiled_by_c1() const { return _type == compiler_c1; };
126 inline bool is_compiled_by_c2() const { return _type == compiler_c2; };
127 inline bool is_compiled_by_jvmci() const { return _type == compiler_jvmci; };
128 inline bool is_compiled_by_shark() const { return _type == compiler_shark; };
129 const char* compiler_name() const;
130
131 // Casting
132 nmethod* as_nmethod_or_null() { return is_nmethod() ? (nmethod*) this : NULL; }
133 nmethod* as_nmethod() { assert(is_nmethod(), "must be nmethod"); return (nmethod*) this; }
134 CompiledMethod* as_compiled_method_or_null() { return is_compiled() ? (CompiledMethod*) this : NULL; }
135 CompiledMethod* as_compiled_method() { assert(is_compiled(), "must be compiled"); return (CompiledMethod*) this; }
136 CodeBlob* as_codeblob_or_null() const { return (CodeBlob*) this; }
137
138 // Boundaries
139 address header_begin() const { return (address) this; }
140 relocInfo* relocation_begin() const { return (relocInfo*) _relocation_begin; };
141 relocInfo* relocation_end() const { return (relocInfo*) _relocation_end; }
142 address content_begin() const { return _content_begin; }
143 address content_end() const { return _code_end; } // _code_end == _content_end is true for all types of blobs for now, it is also checked in the constructor
144 address code_begin() const { return _code_begin; }
145 address code_end() const { return _code_end; }
146 address data_end() const { return _data_end; }
147
148 // This field holds the beginning of the const section in the old code buffer.
|
108
109 // Deletion
110 virtual void flush();
111
112 // Typing
113 virtual bool is_buffer_blob() const { return false; }
114 virtual bool is_nmethod() const { return false; }
115 virtual bool is_runtime_stub() const { return false; }
116 virtual bool is_deoptimization_stub() const { return false; }
117 virtual bool is_uncommon_trap_stub() const { return false; }
118 virtual bool is_exception_stub() const { return false; }
119 virtual bool is_safepoint_stub() const { return false; }
120 virtual bool is_adapter_blob() const { return false; }
121 virtual bool is_method_handles_adapter_blob() const { return false; }
122 virtual bool is_aot() const { return false; }
123 virtual bool is_compiled() const { return false; }
124
125 inline bool is_compiled_by_c1() const { return _type == compiler_c1; };
126 inline bool is_compiled_by_c2() const { return _type == compiler_c2; };
127 inline bool is_compiled_by_jvmci() const { return _type == compiler_jvmci; };
128 const char* compiler_name() const;
129
130 // Casting
131 nmethod* as_nmethod_or_null() { return is_nmethod() ? (nmethod*) this : NULL; }
132 nmethod* as_nmethod() { assert(is_nmethod(), "must be nmethod"); return (nmethod*) this; }
133 CompiledMethod* as_compiled_method_or_null() { return is_compiled() ? (CompiledMethod*) this : NULL; }
134 CompiledMethod* as_compiled_method() { assert(is_compiled(), "must be compiled"); return (CompiledMethod*) this; }
135 CodeBlob* as_codeblob_or_null() const { return (CodeBlob*) this; }
136
137 // Boundaries
138 address header_begin() const { return (address) this; }
139 relocInfo* relocation_begin() const { return (relocInfo*) _relocation_begin; };
140 relocInfo* relocation_end() const { return (relocInfo*) _relocation_end; }
141 address content_begin() const { return _content_begin; }
142 address content_end() const { return _code_end; } // _code_end == _content_end is true for all types of blobs for now, it is also checked in the constructor
143 address code_begin() const { return _code_begin; }
144 address code_end() const { return _code_end; }
145 address data_end() const { return _data_end; }
146
147 // This field holds the beginning of the const section in the old code buffer.
|