72 struct RegisteredObjectInfo {
73 RegisteredObjectInfo() {}
86 RegisteredObjectBufferMap;
95 RegisteredObjectBufferMap ObjectBufferMap;
99 GDBJITRegistrationListener() : ObjectBufferMap() {}
103 ~GDBJITRegistrationListener()
override;
108 void notifyObjectLoaded(ObjectKey K,
const ObjectFile &Obj,
114 void notifyFreeingObject(ObjectKey K)
override;
120 void deregisterObjectInternal(RegisteredObjectBufferMap::iterator
I);
143 GDBJITRegistrationListener::~GDBJITRegistrationListener() {
145 std::lock_guard<llvm::sys::Mutex> locked(*
JITDebugLock);
146 for (RegisteredObjectBufferMap::iterator
I = ObjectBufferMap.begin(),
147 E = ObjectBufferMap.end();
151 deregisterObjectInternal(
I);
153 ObjectBufferMap.clear();
156 void GDBJITRegistrationListener::notifyObjectLoaded(
169 std::lock_guard<llvm::sys::Mutex> locked(*
JITDebugLock);
170 assert(ObjectBufferMap.find(K) == ObjectBufferMap.end() &&
171 "Second attempt to perform debug registration.");
176 "Allocation failed when registering a JIT entry!\n");
182 RegisteredObjectInfo(
Size, JITCodeEntry,
std::move(DebugObj));
183 NotifyDebugger(JITCodeEntry);
187 void GDBJITRegistrationListener::notifyFreeingObject(ObjectKey K) {
188 std::lock_guard<llvm::sys::Mutex> locked(*
JITDebugLock);
189 RegisteredObjectBufferMap::iterator
I = ObjectBufferMap.find(K);
191 if (
I != ObjectBufferMap.end()) {
192 deregisterObjectInternal(
I);
193 ObjectBufferMap.erase(
I);
197 void GDBJITRegistrationListener::deregisterObjectInternal(
198 RegisteredObjectBufferMap::iterator
I) {
227 JITCodeEntry =
nullptr;
237 return &*GDBRegListener;