qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 06/22] plugins: Create TCGHelperInfo for all out-of-line call


From: Pierrick Bouvier
Subject: Re: [PATCH 06/22] plugins: Create TCGHelperInfo for all out-of-line callbacks
Date: Wed, 20 Mar 2024 09:22:20 +0400
User-agent: Mozilla Thunderbird

On 3/19/24 23:51, Richard Henderson wrote:
On 3/19/24 03:12, Pierrick Bouvier wrote:
On 3/16/24 05:57, Richard Henderson wrote:
TCGHelperInfo includes the ABI for every function call.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
   include/qemu/plugin.h |  1 +
   plugins/core.c        | 51 ++++++++++++++++++++++++++++++++++++++-----
   2 files changed, 46 insertions(+), 6 deletions(-)

diff --git a/include/qemu/plugin.h b/include/qemu/plugin.h
index 143262dca8..793c44f1f2 100644
--- a/include/qemu/plugin.h
+++ b/include/qemu/plugin.h
@@ -92,6 +92,7 @@ struct qemu_plugin_dyn_cb {
       union {
           struct {
               union qemu_plugin_cb_sig f;
+            TCGHelperInfo *info;
           } regular;
           struct {
               qemu_plugin_u64 entry;
diff --git a/plugins/core.c b/plugins/core.c
index 837c373690..b0a2e80874 100644
--- a/plugins/core.c
+++ b/plugins/core.c
@@ -338,12 +338,26 @@ void plugin_register_dyn_cb__udata(GArray **arr,
                                      enum qemu_plugin_cb_flags flags,
                                      void *udata)
   {
-    struct qemu_plugin_dyn_cb *dyn_cb = plugin_get_dyn_cb(arr);
+    static TCGHelperInfo info[3] = {
+        [QEMU_PLUGIN_CB_NO_REGS].flags = TCG_CALL_NO_RWG | TCG_CALL_PLUGIN,
+        [QEMU_PLUGIN_CB_R_REGS].flags = TCG_CALL_NO_WG | TCG_CALL_PLUGIN,
+        [QEMU_PLUGIN_CB_RW_REGS].flags = TCG_CALL_PLUGIN,
+        /*
+         * Match qemu_plugin_vcpu_udata_cb_t:
+         *   void (*)(uint32_t, void *)
+

Any chance we could have a static assert ensuring this?
I know it's possible in C11, but I don't know if glib offers something for this.

I don't see how.  While you could ask questions about the pointer type
qemu_plugin_vcpu_udata_cb_t, you can't ask questions about the function 
arguments.


I was thinking about something similar to:
static_assert(typeof(qemu_plugin_vcpu_udata_cb_t) == void (*)(uint32_t, void *));

But I don't think it's possible to express this in C standard before 11.


r~

reply via email to

[Prev in Thread] Current Thread [Next in Thread]