604 }
605 }
606 break;
607 default:
608 // Unknown thread state
609 trace->num_frames = ticks_unknown_state; // -7
610 break;
611 }
612 }
613
614
615 #ifndef _WINDOWS
616 // Support for the Forte(TM) Peformance Tools collector.
617 //
618 // The method prototype is derived from libcollector.h. For more
619 // information, please see the libcollect man page.
620
621 // Method to let libcollector know about a dynamically loaded function.
622 // Because it is weakly bound, the calls become NOP's when the library
623 // isn't present.
624 void collector_func_load(char* name,
625 void* null_argument_1,
626 void* null_argument_2,
627 void *vaddr,
628 int size,
629 int zero_argument,
630 void* null_argument_3);
631 #pragma weak collector_func_load
632 #define collector_func_load(x0,x1,x2,x3,x4,x5,x6) \
633 ( collector_func_load ? collector_func_load(x0,x1,x2,x3,x4,x5,x6),0 : 0 )
634 #endif // !_WINDOWS
635
636 } // end extern "C"
637 #endif // !IA64
638
639 void Forte::register_stub(const char* name, address start, address end) {
640 #if !defined(_WINDOWS) && !defined(IA64)
641 assert(pointer_delta(end, start, sizeof(jbyte)) < INT_MAX,
642 "Code size exceeds maximum range");
643
644 collector_func_load((char*)name, NULL, NULL, start,
645 pointer_delta(end, start, sizeof(jbyte)), 0, NULL);
646 #endif // !_WINDOWS && !IA64
647 }
|
604 }
605 }
606 break;
607 default:
608 // Unknown thread state
609 trace->num_frames = ticks_unknown_state; // -7
610 break;
611 }
612 }
613
614
615 #ifndef _WINDOWS
616 // Support for the Forte(TM) Peformance Tools collector.
617 //
618 // The method prototype is derived from libcollector.h. For more
619 // information, please see the libcollect man page.
620
621 // Method to let libcollector know about a dynamically loaded function.
622 // Because it is weakly bound, the calls become NOP's when the library
623 // isn't present.
624 #ifdef __APPLE__
625 // XXXDARWIN: Link errors occur even when __attribute__((weak_import))
626 // is added
627 #define collector_func_load(x0,x1,x2,x3,x4,x5,x6) (0)
628 #else
629 void collector_func_load(char* name,
630 void* null_argument_1,
631 void* null_argument_2,
632 void *vaddr,
633 int size,
634 int zero_argument,
635 void* null_argument_3);
636 #pragma weak collector_func_load
637 #define collector_func_load(x0,x1,x2,x3,x4,x5,x6) \
638 ( collector_func_load ? collector_func_load(x0,x1,x2,x3,x4,x5,x6),0 : 0 )
639 #endif // __APPLE__
640 #endif // !_WINDOWS
641
642 } // end extern "C"
643 #endif // !IA64
644
645 void Forte::register_stub(const char* name, address start, address end) {
646 #if !defined(_WINDOWS) && !defined(IA64)
647 assert(pointer_delta(end, start, sizeof(jbyte)) < INT_MAX,
648 "Code size exceeds maximum range");
649
650 collector_func_load((char*)name, NULL, NULL, start,
651 pointer_delta(end, start, sizeof(jbyte)), 0, NULL);
652 #endif // !_WINDOWS && !IA64
653 }
|