375 // Deal with Disassembler, VTune, Forte, JvmtiExport, MemoryService. 376 static void trace_new_stub(RuntimeBlob* blob, const char* name1, const char* name2 = ""); 377 }; 378 379 class WhiteBox; 380 //---------------------------------------------------------------------------------------------------- 381 // BufferBlob: used to hold non-relocatable machine code such as the interpreter, stubroutines, etc. 382 383 class BufferBlob: public RuntimeBlob { 384 friend class VMStructs; 385 friend class AdapterBlob; 386 friend class VtableBlob; 387 friend class MethodHandlesAdapterBlob; 388 friend class BufferedValueTypeBlob; 389 friend class WhiteBox; 390 391 private: 392 // Creation support 393 BufferBlob(const char* name, int size); 394 BufferBlob(const char* name, int size, CodeBuffer* cb); 395 BufferBlob(const char* name, int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps); 396 397 void* operator new(size_t s, unsigned size) throw(); 398 399 public: 400 // Creation 401 static BufferBlob* create(const char* name, int buffer_size); 402 static BufferBlob* create(const char* name, CodeBuffer* cb); 403 404 static void free(BufferBlob* buf); 405 406 // Typing 407 virtual bool is_buffer_blob() const { return true; } 408 409 // GC/Verification support 410 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ } 411 bool is_alive() const { return true; } 412 413 void verify(); 414 void print_on(outputStream* st) const; 415 void print_value_on(outputStream* st) const; 416 }; 417 418 419 //---------------------------------------------------------------------------------------------------- 420 // AdapterBlob: used to hold C2I/I2C adapters 421 422 class AdapterBlob: public BufferBlob { 423 private: 424 AdapterBlob(int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps); 425 426 public: 427 // Creation 428 static AdapterBlob* create(CodeBuffer* cb, 429 int frame_complete, 430 int frame_size, 431 OopMapSet* oop_maps); 432 433 // Typing 434 virtual bool is_adapter_blob() const { return true; } 435 436 bool caller_must_gc_arguments(JavaThread* thread) const { return true; } 437 }; 438 439 //--------------------------------------------------------------------------------------------------- 440 class VtableBlob: public BufferBlob { 441 private: 442 VtableBlob(const char*, int); 443 444 public: 445 // Creation 446 static VtableBlob* create(const char* name, int buffer_size); 447 448 // Typing 449 virtual bool is_vtable_blob() const { return true; } 450 }; 451 | 375 // Deal with Disassembler, VTune, Forte, JvmtiExport, MemoryService. 376 static void trace_new_stub(RuntimeBlob* blob, const char* name1, const char* name2 = ""); 377 }; 378 379 class WhiteBox; 380 //---------------------------------------------------------------------------------------------------- 381 // BufferBlob: used to hold non-relocatable machine code such as the interpreter, stubroutines, etc. 382 383 class BufferBlob: public RuntimeBlob { 384 friend class VMStructs; 385 friend class AdapterBlob; 386 friend class VtableBlob; 387 friend class MethodHandlesAdapterBlob; 388 friend class BufferedValueTypeBlob; 389 friend class WhiteBox; 390 391 private: 392 // Creation support 393 BufferBlob(const char* name, int size); 394 BufferBlob(const char* name, int size, CodeBuffer* cb); 395 BufferBlob(const char* name, int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments = false); 396 397 void* operator new(size_t s, unsigned size) throw(); 398 399 public: 400 // Creation 401 static BufferBlob* create(const char* name, int buffer_size); 402 static BufferBlob* create(const char* name, CodeBuffer* cb); 403 404 static void free(BufferBlob* buf); 405 406 // Typing 407 virtual bool is_buffer_blob() const { return true; } 408 409 // GC/Verification support 410 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ } 411 bool is_alive() const { return true; } 412 413 void verify(); 414 void print_on(outputStream* st) const; 415 void print_value_on(outputStream* st) const; 416 }; 417 418 419 //---------------------------------------------------------------------------------------------------- 420 // AdapterBlob: used to hold C2I/I2C adapters 421 422 class AdapterBlob: public BufferBlob { 423 private: 424 AdapterBlob(int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments = false); 425 426 public: 427 // Creation 428 static AdapterBlob* create(CodeBuffer* cb, 429 int frame_complete, 430 int frame_size, 431 OopMapSet* oop_maps, 432 bool caller_must_gc_arguments = false); 433 434 // Typing 435 virtual bool is_adapter_blob() const { return true; } 436 437 bool caller_must_gc_arguments(JavaThread* thread) const { return true; } 438 }; 439 440 //--------------------------------------------------------------------------------------------------- 441 class VtableBlob: public BufferBlob { 442 private: 443 VtableBlob(const char*, int); 444 445 public: 446 // Creation 447 static VtableBlob* create(const char* name, int buffer_size); 448 449 // Typing 450 virtual bool is_vtable_blob() const { return true; } 451 }; 452 |