diff mbox series

[v3,2/3] This patch adds helper functions to the drcov plugin.

Message ID 163491883461.304355.8210754161847179432.stgit@pc-System-Product-Name
State New
Headers show
Series plugins: add a drcov plugin | expand

Commit Message

NDNF Oct. 22, 2021, 4:07 p.m. UTC
Which provide information about:
- start_code.
- end_code.
- entry.
- path to the executable binary.

Signed-off-by: Ivanov Arkady <arkadiy.ivanov@ispras.ru>
---
 include/qemu/qemu-plugin.h   |   17 ++++++++++++++++
 plugins/api.c                |   44 ++++++++++++++++++++++++++++++++++++++++++
 plugins/qemu-plugins.symbols |    4 ++++
 3 files changed, 65 insertions(+)
diff mbox series

Patch

diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h
index 5775e82c4e..68af67acf2 100644
--- a/include/qemu/qemu-plugin.h
+++ b/include/qemu/qemu-plugin.h
@@ -405,4 +405,21 @@  int qemu_plugin_n_max_vcpus(void);
  */
 void qemu_plugin_outs(const char *string);
 
+/**
+ * qemu_plugin_path_to_binary() - returns path to binary file being executed
+ */
+QEMU_PLUGIN_EXPORT const char *qemu_plugin_path_to_binary(void);
+/**
+ * qemu_plugin_start_code() - returns start of text segment
+ */
+QEMU_PLUGIN_EXPORT uint64_t qemu_plugin_start_code(void);
+/**
+ * qemu_plugin_end_code() - returns end of text segment
+ */
+QEMU_PLUGIN_EXPORT uint64_t qemu_plugin_end_code(void);
+/**
+ * qemu_plugin_entry_code() - returns start address for module
+ */
+QEMU_PLUGIN_EXPORT uint64_t qemu_plugin_entry_code(void);
+
 #endif /* QEMU_PLUGIN_API_H */
diff --git a/plugins/api.c b/plugins/api.c
index bbdc5a4eb4..064eebacd1 100644
--- a/plugins/api.c
+++ b/plugins/api.c
@@ -48,6 +48,10 @@ 
 #endif
 #include "trace/mem.h"
 
+#ifdef CONFIG_USER_ONLY
+#include "qemu.h"
+#endif
+
 /* Uninstall and Reset handlers */
 
 void qemu_plugin_uninstall(qemu_plugin_id_t id, qemu_plugin_simple_cb_t cb)
@@ -340,3 +344,43 @@  void qemu_plugin_outs(const char *string)
 {
     qemu_log_mask(CPU_LOG_PLUGIN, "%s", string);
 }
+
+const char *qemu_plugin_path_to_binary(void)
+{
+#ifdef CONFIG_USER_ONLY
+    TaskState *ts = (TaskState *) current_cpu->opaque;
+    return ts->bprm->filename;
+#else
+    return "path";
+#endif
+}
+
+uint64_t qemu_plugin_start_code(void)
+{
+#ifdef CONFIG_USER_ONLY
+    TaskState *ts = (TaskState *) current_cpu->opaque;
+    return ts->info->start_code;
+#else
+    return 0;
+#endif
+}
+
+uint64_t qemu_plugin_end_code(void)
+{
+#ifdef CONFIG_USER_ONLY
+    TaskState *ts = (TaskState *) current_cpu->opaque;
+    return ts->info->end_code;
+#else
+    return 0xFFFFFFFF;
+#endif
+}
+
+uint64_t qemu_plugin_entry_code(void)
+{
+#ifdef CONFIG_USER_ONLY
+    TaskState *ts = (TaskState *) current_cpu->opaque;
+    return ts->info->entry;
+#else
+    return 0;
+#endif
+}
diff --git a/plugins/qemu-plugins.symbols b/plugins/qemu-plugins.symbols
index 688db92773..d956888f67 100644
--- a/plugins/qemu-plugins.symbols
+++ b/plugins/qemu-plugins.symbols
@@ -1,4 +1,6 @@ 
 {
+  qemu_plugin_end_code;
+  qemu_plugin_entry_code;
   qemu_plugin_get_hwaddr;
   qemu_plugin_hwaddr_is_io;
   qemu_plugin_hwaddr_to_raddr;
@@ -14,6 +16,7 @@ 
   qemu_plugin_n_max_vcpus;
   qemu_plugin_n_vcpus;
   qemu_plugin_outs;
+  qemu_plugin_path_to_binary;
   qemu_plugin_ram_addr_from_host;
   qemu_plugin_register_atexit_cb;
   qemu_plugin_register_flush_cb;
@@ -32,6 +35,7 @@ 
   qemu_plugin_register_vcpu_tb_exec_inline;
   qemu_plugin_register_vcpu_tb_trans_cb;
   qemu_plugin_reset;
+  qemu_plugin_start_code;
   qemu_plugin_tb_get_insn;
   qemu_plugin_tb_n_insns;
   qemu_plugin_tb_vaddr;