218
219 static ByteSize oop_maps_field_offset() {
220 return byte_offset_of(CodeBlob, _oop_maps);
221 }
222 };
223
224 class WhiteBox;
225 //----------------------------------------------------------------------------------------------------
226 // BufferBlob: used to hold non-relocatable machine code such as the interpreter, stubroutines, etc.
227
228 class BufferBlob: public CodeBlob {
229 friend class VMStructs;
230 friend class AdapterBlob;
231 friend class MethodHandlesAdapterBlob;
232 friend class WhiteBox;
233
234 private:
235 // Creation support
236 BufferBlob(const char* name, int size);
237 BufferBlob(const char* name, int size, CodeBuffer* cb);
238
239 void* operator new(size_t s, unsigned size) throw();
240
241 public:
242 // Creation
243 static BufferBlob* create(const char* name, int buffer_size);
244 static BufferBlob* create(const char* name, CodeBuffer* cb);
245
246 static void free(BufferBlob* buf);
247
248 // Typing
249 virtual bool is_buffer_blob() const { return true; }
250
251 // GC/Verification support
252 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
253 bool is_alive() const { return true; }
254
255 void verify();
256 void print_on(outputStream* st) const;
257 void print_value_on(outputStream* st) const;
258 };
259
260
261 //----------------------------------------------------------------------------------------------------
262 // AdapterBlob: used to hold C2I/I2C adapters
263
264 class AdapterBlob: public BufferBlob {
265 private:
266 AdapterBlob(int size, CodeBuffer* cb);
267
268 public:
269 // Creation
270 static AdapterBlob* create(CodeBuffer* cb);
271
272 // Typing
273 virtual bool is_adapter_blob() const { return true; }
274 };
275
276
277 //----------------------------------------------------------------------------------------------------
278 // MethodHandlesAdapterBlob: used to hold MethodHandles adapters
279
280 class MethodHandlesAdapterBlob: public BufferBlob {
281 private:
282 MethodHandlesAdapterBlob(int size) : BufferBlob("MethodHandles adapters", size) {}
283
284 public:
285 // Creation
286 static MethodHandlesAdapterBlob* create(int buffer_size);
287
288 // Typing
289 virtual bool is_method_handles_adapter_blob() const { return true; }
290 };
291
292
293 //----------------------------------------------------------------------------------------------------
|
218
219 static ByteSize oop_maps_field_offset() {
220 return byte_offset_of(CodeBlob, _oop_maps);
221 }
222 };
223
224 class WhiteBox;
225 //----------------------------------------------------------------------------------------------------
226 // BufferBlob: used to hold non-relocatable machine code such as the interpreter, stubroutines, etc.
227
228 class BufferBlob: public CodeBlob {
229 friend class VMStructs;
230 friend class AdapterBlob;
231 friend class MethodHandlesAdapterBlob;
232 friend class WhiteBox;
233
234 private:
235 // Creation support
236 BufferBlob(const char* name, int size);
237 BufferBlob(const char* name, int size, CodeBuffer* cb);
238 BufferBlob(const char* name, int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps);
239
240 void* operator new(size_t s, unsigned size) throw();
241
242 public:
243 // Creation
244 static BufferBlob* create(const char* name, int buffer_size);
245 static BufferBlob* create(const char* name, CodeBuffer* cb);
246
247 static void free(BufferBlob* buf);
248
249 // Typing
250 virtual bool is_buffer_blob() const { return true; }
251
252 // GC/Verification support
253 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
254 bool is_alive() const { return true; }
255
256 void verify();
257 void print_on(outputStream* st) const;
258 void print_value_on(outputStream* st) const;
259 };
260
261
262 //----------------------------------------------------------------------------------------------------
263 // AdapterBlob: used to hold C2I/I2C adapters
264
265 class AdapterBlob: public BufferBlob {
266 private:
267 AdapterBlob(int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps);
268
269 public:
270 // Creation
271 static AdapterBlob* create(CodeBuffer* cb,
272 int frame_complete,
273 int frame_size,
274 OopMapSet* oop_maps);
275
276 // Typing
277 virtual bool is_adapter_blob() const { return true; }
278
279 bool caller_must_gc_arguments(JavaThread* thread) const { return true; }
280 };
281
282
283 //----------------------------------------------------------------------------------------------------
284 // MethodHandlesAdapterBlob: used to hold MethodHandles adapters
285
286 class MethodHandlesAdapterBlob: public BufferBlob {
287 private:
288 MethodHandlesAdapterBlob(int size) : BufferBlob("MethodHandles adapters", size) {}
289
290 public:
291 // Creation
292 static MethodHandlesAdapterBlob* create(int buffer_size);
293
294 // Typing
295 virtual bool is_method_handles_adapter_blob() const { return true; }
296 };
297
298
299 //----------------------------------------------------------------------------------------------------
|