#ifndef LLVM_EXECUTION_ENGINE_JIT_EVENTLISTENER_H
#define LLVM_EXECUTION_ENGINE_JIT_EVENTLISTENER_H
-#include "llvm/Support/DataTypes.h"
+#include "llvm/System/DataTypes.h"
+#include "llvm/Support/DebugLoc.h"
+
+#include <vector>
namespace llvm {
class Function;
+class MachineFunction;
/// Empty for now, but this object will contain all details about the
/// generated machine code that a Listener might care about.
struct JITEvent_EmittedFunctionDetails {
+ const MachineFunction *MF;
+
+ struct LineStart {
+ // The address at which the current line changes.
+ uintptr_t Address;
+ // The new location information. These can be translated to
+ // DebugLocTuples using MF->getDebugLocTuple().
+ DebugLoc Loc;
+ };
+ // This holds line boundary information sorted by address.
+ std::vector<LineStart> LineStarts;
};
/// JITEventListener - This interface is used by the JIT to notify clients about
/// NotifyFreeingMachineCode - This is called inside of
/// 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.
- virtual void NotifyFreeingMachineCode(const Function &F, void *OldPtr) {}
+ /// 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 *OldPtr) {}
};
-// These return NULL if support isn't available.
-JITEventListener *createMacOSJITEventListener();
+// This returns NULL if support isn't available.
JITEventListener *createOProfileJITEventListener();
} // end namespace llvm.