about summary refs log tree commit diff stats
path: root/gdbjit/reader.c
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2024-12-18 05:01:33 +0800
committerGitHub <noreply@github.com>2024-12-17 22:01:33 +0100
commit6e0f32f4ca4b35bda036caa6ad3abcae4ae64cdc (patch)
tree39a144624b528deba4421d7b71098db69d99eb80 /gdbjit/reader.c
parent62eca11beef3f211a93235b18d556332fafc74de (diff)
downloadbox64-6e0f32f4ca4b35bda036caa6ad3abcae4ae64cdc.tar.gz
box64-6e0f32f4ca4b35bda036caa6ad3abcae4ae64cdc.zip
Added initial GDBJIT support (#2162)
* Added GDBJIT support

* fix

* fix
Diffstat (limited to 'gdbjit/reader.c')
-rw-r--r--gdbjit/reader.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/gdbjit/reader.c b/gdbjit/reader.c
new file mode 100644
index 00000000..024e88ea
--- /dev/null
+++ b/gdbjit/reader.c
@@ -0,0 +1,41 @@
+#include "gdbjit.h"
+
+static enum gdb_status read_debug_info(struct gdb_reader_funcs* self, struct gdb_symbol_callbacks* cbs, void* memory, long memory_sz)
+{
+    gdbjit_block_t* block = (gdbjit_block_t*)memory;
+
+    struct gdb_object* object = cbs->object_open(cbs);
+    struct gdb_symtab* symtab = cbs->symtab_open(cbs, object, block->filename);
+    cbs->block_open(cbs, symtab, NULL, block->start, block->end, "(block)");
+
+    cbs->line_mapping_add(cbs, symtab, block->nlines, block->lines);
+
+    cbs->symtab_close(cbs, symtab);
+    cbs->object_close(cbs, object);
+
+    return GDB_SUCCESS;
+}
+
+enum gdb_status unwind_frame(struct gdb_reader_funcs* self, struct gdb_unwind_callbacks* cbs)
+{
+  return GDB_SUCCESS;
+}
+
+struct gdb_frame_id get_frame_id(struct gdb_reader_funcs* self, struct gdb_unwind_callbacks* cbs)
+{
+  struct gdb_frame_id frame = {0xdeadbeef, 0};
+  return frame;
+}
+
+void destroy_reader(struct gdb_reader_funcs* self) {}
+
+__attribute__((visibility("default"))) struct gdb_reader_funcs* gdb_init_reader(void)
+{
+  static struct gdb_reader_funcs funcs = {GDB_READER_INTERFACE_VERSION, NULL, read_debug_info, unwind_frame, get_frame_id, destroy_reader};
+  return &funcs;
+}
+
+__attribute__((visibility("default"))) int plugin_is_GPL_compatible (void)
+{
+    return 0;
+}
\ No newline at end of file