464 address get_c2i_unverified_entry(); 465 AdapterHandlerEntry* adapter() const { 466 return constMethod()->adapter(); 467 } 468 // setup entry points 469 void link_method(const methodHandle& method, TRAPS); 470 // clear entry points. Used by sharing code during dump time 471 void unlink_method() NOT_CDS_RETURN; 472 473 // vtable index 474 enum VtableIndexFlag { 475 // Valid vtable indexes are non-negative (>= 0). 476 // These few negative values are used as sentinels. 477 itable_index_max = -10, // first itable index, growing downward 478 pending_itable_index = -9, // itable index will be assigned 479 invalid_vtable_index = -4, // distinct from any valid vtable index 480 garbage_vtable_index = -3, // not yet linked; no vtable layout yet 481 nonvirtual_vtable_index = -2 // there is no need for vtable dispatch 482 // 6330203 Note: Do not use -1, which was overloaded with many meanings. 483 }; 484 DEBUG_ONLY(bool valid_vtable_index() const { return _vtable_index >= nonvirtual_vtable_index; }) 485 bool has_vtable_index() const { return _vtable_index >= 0; } 486 int vtable_index() const { return _vtable_index; } 487 void set_vtable_index(int index); 488 DEBUG_ONLY(bool valid_itable_index() const { return _vtable_index <= pending_itable_index; }) 489 bool has_itable_index() const { return _vtable_index <= itable_index_max; } 490 int itable_index() const { assert(valid_itable_index(), ""); 491 return itable_index_max - _vtable_index; } 492 void set_itable_index(int index); 493 494 // interpreter entry 495 address interpreter_entry() const { return _i2i_entry; } 496 // Only used when first initialize so we can set _i2i_entry and _from_interpreted_entry 497 void set_interpreter_entry(address entry) { 498 assert(!is_shared(), "shared method's interpreter entry should not be changed at run time"); 499 if (_i2i_entry != entry) { 500 _i2i_entry = entry; 501 } 502 if (_from_interpreted_entry != entry) { 503 _from_interpreted_entry = entry; 504 } 505 } 506 507 // native function (used for native methods only) 508 enum { | 464 address get_c2i_unverified_entry(); 465 AdapterHandlerEntry* adapter() const { 466 return constMethod()->adapter(); 467 } 468 // setup entry points 469 void link_method(const methodHandle& method, TRAPS); 470 // clear entry points. Used by sharing code during dump time 471 void unlink_method() NOT_CDS_RETURN; 472 473 // vtable index 474 enum VtableIndexFlag { 475 // Valid vtable indexes are non-negative (>= 0). 476 // These few negative values are used as sentinels. 477 itable_index_max = -10, // first itable index, growing downward 478 pending_itable_index = -9, // itable index will be assigned 479 invalid_vtable_index = -4, // distinct from any valid vtable index 480 garbage_vtable_index = -3, // not yet linked; no vtable layout yet 481 nonvirtual_vtable_index = -2 // there is no need for vtable dispatch 482 // 6330203 Note: Do not use -1, which was overloaded with many meanings. 483 }; 484 NOT_PRODUCT(bool valid_vtable_index() const { return _vtable_index >= nonvirtual_vtable_index; }) 485 bool has_vtable_index() const { return _vtable_index >= 0; } 486 int vtable_index() const { return _vtable_index; } 487 void set_vtable_index(int index); 488 NOT_PRODUCT(bool valid_itable_index() const { return _vtable_index <= pending_itable_index; }) 489 bool has_itable_index() const { return _vtable_index <= itable_index_max; } 490 int itable_index() const { assert(valid_itable_index(), ""); 491 return itable_index_max - _vtable_index; } 492 void set_itable_index(int index); 493 494 // interpreter entry 495 address interpreter_entry() const { return _i2i_entry; } 496 // Only used when first initialize so we can set _i2i_entry and _from_interpreted_entry 497 void set_interpreter_entry(address entry) { 498 assert(!is_shared(), "shared method's interpreter entry should not be changed at run time"); 499 if (_i2i_entry != entry) { 500 _i2i_entry = entry; 501 } 502 if (_from_interpreted_entry != entry) { 503 _from_interpreted_entry = entry; 504 } 505 } 506 507 // native function (used for native methods only) 508 enum { |