194 int frame_complete_offset() const { return _frame_complete_offset; }
195
196 // CodeCache support: really only used by the nmethods, but in order to get
197 // asserts and certain bookkeeping to work in the CodeCache they are defined
198 // virtual here.
199 virtual bool is_zombie() const { return false; }
200 virtual bool is_locked_by_vm() const { return false; }
201
202 virtual bool is_unloaded() const { return false; }
203 virtual bool is_not_entrant() const { return false; }
204
205 // GC support
206 virtual bool is_alive() const = 0;
207
208 // OopMap for frame
209 ImmutableOopMapSet* oop_maps() const { return _oop_maps; }
210 void set_oop_maps(OopMapSet* p);
211 const ImmutableOopMap* oop_map_for_return_address(address return_address);
212 virtual void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) = 0;
213
214 // Frame support
215 int frame_size() const { return _frame_size; }
216 void set_frame_size(int size) { _frame_size = size; }
217
218 // Returns true, if the next frame is responsible for GC'ing oops passed as arguments
219 bool caller_must_gc_arguments(JavaThread* thread) const { return _caller_must_gc_arguments; }
220
221 // Naming
222 const char* name() const { return _name; }
223 void set_name(const char* name) { _name = name; }
224
225 // Debugging
226 virtual void verify() = 0;
227 virtual void print() const;
228 virtual void print_on(outputStream* st) const;
229 virtual void print_value_on(outputStream* st) const;
230 void dump_for_addr(address addr, outputStream* st, bool verbose) const;
231 void print_code();
232
233 // Print the comment associated with offset on stream, if there is one
234 virtual void print_block_comment(outputStream* stream, address block_begin) const {
235 intptr_t offset = (intptr_t)(block_begin - code_begin());
236 _strings.print_block_comment(stream, offset);
237 }
238
239 // Transfer ownership of comments to this CodeBlob
240 void set_strings(CodeStrings& strings) {
241 assert(!is_aot(), "invalid on aot");
242 _strings.assign(strings);
243 }
244
245 static ByteSize name_field_offset() {
246 return byte_offset_of(CodeBlob, _name);
247 }
248
249 static ByteSize oop_maps_field_offset() {
250 return byte_offset_of(CodeBlob, _oop_maps);
251 }
252 };
|
194 int frame_complete_offset() const { return _frame_complete_offset; }
195
196 // CodeCache support: really only used by the nmethods, but in order to get
197 // asserts and certain bookkeeping to work in the CodeCache they are defined
198 // virtual here.
199 virtual bool is_zombie() const { return false; }
200 virtual bool is_locked_by_vm() const { return false; }
201
202 virtual bool is_unloaded() const { return false; }
203 virtual bool is_not_entrant() const { return false; }
204
205 // GC support
206 virtual bool is_alive() const = 0;
207
208 // OopMap for frame
209 ImmutableOopMapSet* oop_maps() const { return _oop_maps; }
210 void set_oop_maps(OopMapSet* p);
211 const ImmutableOopMap* oop_map_for_return_address(address return_address);
212 virtual void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) = 0;
213
214 // Frame support. Sizes are in word units.
215 int frame_size() const { return _frame_size; }
216 void set_frame_size(int size) { _frame_size = size; }
217
218 // Returns true, if the next frame is responsible for GC'ing oops passed as arguments
219 bool caller_must_gc_arguments(JavaThread* thread) const { return _caller_must_gc_arguments; }
220
221 // Naming
222 const char* name() const { return _name; }
223 void set_name(const char* name) { _name = name; }
224
225 // Debugging
226 virtual void verify() = 0;
227 virtual void print() const;
228 virtual void print_on(outputStream* st) const;
229 virtual void print_value_on(outputStream* st) const;
230 void dump_for_addr(address addr, outputStream* st, bool verbose) const;
231 void print_code();
232
233 bool has_block_comment(address block_begin) const {
234 intptr_t offset = (intptr_t)(block_begin - code_begin());
235 return _strings.has_block_comment(offset);
236 }
237 // Print the comment associated with offset on stream, if there is one
238 virtual void print_block_comment(outputStream* stream, address block_begin) const {
239 intptr_t offset = (intptr_t)(block_begin - code_begin());
240 _strings.print_block_comment(stream, offset);
241 }
242
243 // Transfer ownership of comments to this CodeBlob
244 void set_strings(CodeStrings& strings) {
245 assert(!is_aot(), "invalid on aot");
246 _strings.assign(strings);
247 }
248
249 static ByteSize name_field_offset() {
250 return byte_offset_of(CodeBlob, _name);
251 }
252
253 static ByteSize oop_maps_field_offset() {
254 return byte_offset_of(CodeBlob, _oop_maps);
255 }
256 };
|