[llvm] [llvm-c] Expose debug object registration in Orc C-API bindings (PR #73257)
Stefan Gränitz via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 29 15:00:38 PST 2023
================
@@ -494,6 +494,70 @@ TEST_F(OrcCAPITestBase, AddObjectBuffer) {
ASSERT_TRUE(!!SumAddr);
}
+// This must be kept in sync with gdb/gdb/jit.h .
+extern "C" {
+
+typedef enum {
+ JIT_NOACTION = 0,
+ JIT_REGISTER_FN,
+ JIT_UNREGISTER_FN
+} jit_actions_t;
+
+struct jit_code_entry {
+ struct jit_code_entry *next_entry;
+ struct jit_code_entry *prev_entry;
+ const char *symfile_addr;
+ uint64_t symfile_size;
+};
+
+struct jit_descriptor {
+ uint32_t version;
+ // This should be jit_actions_t, but we want to be specific about the
+ // bit-width.
+ uint32_t action_flag;
+ struct jit_code_entry *relevant_entry;
+ struct jit_code_entry *first_entry;
+};
+
+// We put information about the JITed function in this global, which the
+// debugger reads. Make sure to specify the version statically, because the
+// debugger checks the version before we can set it during runtime.
+struct jit_descriptor __jit_debug_descriptor;
+
+static void *findLastDebugDescriptorEntryPtr() {
+ struct jit_code_entry *Last = __jit_debug_descriptor.first_entry;
+ while (Last && Last->next_entry)
+ Last = Last->next_entry;
+ return Last;
+}
+}
+
+#if defined(_AIX) or not defined(__ELF__)
----------------
weliveindetail wrote:
Right now the test doesn't pass for MachO, because the `sum()` example has no debug info and it's a hard-coded requirement in the MachO plugin:
https://github.com/llvm/llvm-project/blob/0424546ed4a75708/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupportPlugin.cpp#L401
@lhames For the reasons described above, it might be interesting to expose the `RequireDebugSections` flag in the C-API. What do you think? Would you wire it up in the MachO plugin?
https://github.com/llvm/llvm-project/pull/73257
More information about the llvm-commits
mailing list