JITEventListener() {}
virtual ~JITEventListener();
- /// NotifyFreeingMachineCode - Called from freeMachineCodeForFunction(), after
- /// the global mapping is removed, but before the machine code is returned to
- /// the allocator.
- ///
- /// OldPtr is the address of the machine code and will be the same as the Code
- /// parameter to a previous NotifyFunctionEmitted call. The Function passed
- /// to NotifyFunctionEmitted may have been destroyed by the time of the
- /// matching NotifyFreeingMachineCode call.
- virtual void NotifyFreeingMachineCode(void *) {}
-
/// NotifyObjectEmitted - Called after an object has been successfully
/// emitted to memory. NotifyFunctionEmitted will not be called for
/// individual functions in the object.
~IntelJITEventListener() {
}
- virtual void NotifyFreeingMachineCode(void *OldPtr);
-
virtual void NotifyObjectEmitted(const ObjectImage &Obj);
virtual void NotifyFreeingObject(const ObjectImage &Obj);
return Result;
}
-void IntelJITEventListener::NotifyFreeingMachineCode(void *FnStart) {
- MethodIDMap::iterator I = MethodIDs.find(FnStart);
- if (I != MethodIDs.end()) {
- Wrapper->iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_UNLOAD_START, &I->second);
- MethodIDs.erase(I);
- }
-}
-
void IntelJITEventListener::NotifyObjectEmitted(const ObjectImage &Obj) {
// Get the address of the object image for use as a unique identifier
const void* ObjData = Obj.getData().data();
~OProfileJITEventListener();
- virtual void NotifyFreeingMachineCode(void *OldPtr);
-
virtual void NotifyObjectEmitted(const ObjectImage &Obj);
virtual void NotifyFreeingObject(const ObjectImage &Obj);
}
}
-// Removes the being-deleted function from the symbol table.
-void OProfileJITEventListener::NotifyFreeingMachineCode(void *FnStart) {
- assert(FnStart && "Invalid function pointer");
- if (Wrapper.op_unload_native_code(reinterpret_cast<uint64_t>(FnStart)) == -1) {
- DEBUG(dbgs()
- << "Failed to tell OProfile about unload of native function at "
- << FnStart << "\n");
- }
-}
-
void OProfileJITEventListener::NotifyObjectEmitted(const ObjectImage &Obj) {
if (!Wrapper.isAgentAvailable()) {
return;