58 std::pair<std::size_t, jit_code_entry*> >
59 RegisteredObjectBufferMap;
68 RegisteredObjectBufferMap ObjectBufferMap;
72 GDBJITRegistrar() : ObjectBufferMap() {}
76 virtual ~GDBJITRegistrar();
92 void deregisterObjectInternal(RegisteredObjectBufferMap::iterator
I);
108 if (NextEntry != NULL) {
116 GDBJITRegistrar::~GDBJITRegistrar() {
118 for (RegisteredObjectBufferMap::iterator
I = ObjectBufferMap.begin(), E = ObjectBufferMap.end();
122 deregisterObjectInternal(
I);
124 ObjectBufferMap.clear();
127 void GDBJITRegistrar::registerObject(
const ObjectBuffer &Object) {
132 assert(Buffer &&
"Attempt to register a null object with a debugger.");
133 assert(ObjectBufferMap.find(Buffer) == ObjectBufferMap.end() &&
134 "Second attempt to perform debug registration.");
137 if (JITCodeEntry == 0) {
139 "Allocation failed when registering a JIT entry!\n");
142 JITCodeEntry->symfile_addr = Buffer;
143 JITCodeEntry->symfile_size = Size;
145 ObjectBufferMap[Buffer] = std::make_pair(Size, JITCodeEntry);
146 NotifyDebugger(JITCodeEntry);
150 bool GDBJITRegistrar::deregisterObject(
const ObjectBuffer& Object) {
152 RegisteredObjectBufferMap::iterator
I = ObjectBufferMap.find(Buffer);
154 if (I != ObjectBufferMap.end()) {
155 deregisterObjectInternal(I);
156 ObjectBufferMap.erase(I);
162 void GDBJITRegistrar::deregisterObjectInternal(
163 RegisteredObjectBufferMap::iterator I) {
201 static GDBJITRegistrar* sRegistrar = NULL;
202 if (sRegistrar == NULL) {
207 if (sRegistrar == NULL) {
208 sRegistrar =
new GDBJITRegistrar;
size_t getBufferSize() const
struct jit_descriptor __jit_debug_descriptor
Global access point for the JIT debugging interface.
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(const char *reason, bool gen_crash_diag=true)
const char * symfile_addr
const char * getBufferStart() const
struct jit_code_entry * first_entry
Guard a section of code with a Mutex.
static JITRegistrar & getGDBRegistrar()
Returns a reference to a GDB JIT registrar singleton.
#define LLVM_ATTRIBUTE_NOINLINE
struct jit_code_entry * prev_entry
struct jit_code_entry * next_entry
struct jit_code_entry * relevant_entry
LLVM_ATTRIBUTE_NOINLINE void __jit_debug_register_code()