comparison src/share/vm/code/relocInfo.cpp @ 2455:479b4b4b6950

6777083: assert(target != __null,"must not be null") Reviewed-by: iveresov, kvn
author never
date Tue, 05 Apr 2011 00:31:09 -0700
parents d673ef06fe96
children 6c97c830fb6f
comparison
equal deleted inserted replaced
2452:fb37e3eabfd0 2455:479b4b4b6950
470 itr.set_current(ri); 470 itr.set_current(ri);
471 itr.reloc(); 471 itr.reloc();
472 return itr._rh; 472 return itr._rh;
473 } 473 }
474 474
475
476 static inline bool is_index(intptr_t index) {
477 return 0 < index && index < os::vm_page_size();
478 }
479
480
481 int32_t Relocation::runtime_address_to_index(address runtime_address) { 475 int32_t Relocation::runtime_address_to_index(address runtime_address) {
482 assert(!is_index((intptr_t)runtime_address), "must not look like an index"); 476 assert(!is_reloc_index((intptr_t)runtime_address), "must not look like an index");
483 477
484 if (runtime_address == NULL) return 0; 478 if (runtime_address == NULL) return 0;
485 479
486 StubCodeDesc* p = StubCodeDesc::desc_for(runtime_address); 480 StubCodeDesc* p = StubCodeDesc::desc_for(runtime_address);
487 if (p != NULL && p->begin() == runtime_address) { 481 if (p != NULL && p->begin() == runtime_address) {
488 assert(is_index(p->index()), "there must not be too many stubs"); 482 assert(is_reloc_index(p->index()), "there must not be too many stubs");
489 return (int32_t)p->index(); 483 return (int32_t)p->index();
490 } else { 484 } else {
491 // Known "miscellaneous" non-stub pointers: 485 // Known "miscellaneous" non-stub pointers:
492 // os::get_polling_page(), SafepointSynchronize::address_of_state() 486 // os::get_polling_page(), SafepointSynchronize::address_of_state()
493 if (PrintRelocations) { 487 if (PrintRelocations) {
504 498
505 499
506 address Relocation::index_to_runtime_address(int32_t index) { 500 address Relocation::index_to_runtime_address(int32_t index) {
507 if (index == 0) return NULL; 501 if (index == 0) return NULL;
508 502
509 if (is_index(index)) { 503 if (is_reloc_index(index)) {
510 StubCodeDesc* p = StubCodeDesc::desc_for_index(index); 504 StubCodeDesc* p = StubCodeDesc::desc_for_index(index);
511 assert(p != NULL, "there must be a stub for this index"); 505 assert(p != NULL, "there must be a stub for this index");
512 return p->begin(); 506 return p->begin();
513 } else { 507 } else {
514 #ifndef _LP64 508 #ifndef _LP64
632 short* p = (short*) dest->locs_end(); 626 short* p = (short*) dest->locs_end();
633 int32_t index = runtime_address_to_index(_target); 627 int32_t index = runtime_address_to_index(_target);
634 #ifndef _LP64 628 #ifndef _LP64
635 p = pack_1_int_to(p, index); 629 p = pack_1_int_to(p, index);
636 #else 630 #else
637 if (is_index(index)) { 631 if (is_reloc_index(index)) {
638 p = pack_2_ints_to(p, index, 0); 632 p = pack_2_ints_to(p, index, 0);
639 } else { 633 } else {
640 jlong t = (jlong) _target; 634 jlong t = (jlong) _target;
641 int32_t lo = low(t); 635 int32_t lo = low(t);
642 int32_t hi = high(t); 636 int32_t hi = high(t);
643 p = pack_2_ints_to(p, lo, hi); 637 p = pack_2_ints_to(p, lo, hi);
644 DEBUG_ONLY(jlong t1 = jlong_from(hi, lo)); 638 DEBUG_ONLY(jlong t1 = jlong_from(hi, lo));
645 assert(!is_index(t1) && (address) t1 == _target, "not symmetric"); 639 assert(!is_reloc_index(t1) && (address) t1 == _target, "not symmetric");
646 } 640 }
647 #endif /* _LP64 */ 641 #endif /* _LP64 */
648 dest->set_locs_end((relocInfo*) p); 642 dest->set_locs_end((relocInfo*) p);
649 } 643 }
650 644
654 _target = index_to_runtime_address(unpack_1_int()); 648 _target = index_to_runtime_address(unpack_1_int());
655 #else 649 #else
656 int32_t lo, hi; 650 int32_t lo, hi;
657 unpack_2_ints(lo, hi); 651 unpack_2_ints(lo, hi);
658 jlong t = jlong_from(hi, lo);; 652 jlong t = jlong_from(hi, lo);;
659 if (is_index(t)) { 653 if (is_reloc_index(t)) {
660 _target = index_to_runtime_address(t); 654 _target = index_to_runtime_address(t);
661 } else { 655 } else {
662 _target = (address) t; 656 _target = (address) t;
663 } 657 }
664 #endif /* _LP64 */ 658 #endif /* _LP64 */