All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhao Liu <zhao1.liu@intel.com>
To: "Alex Bennée" <alex.bennee@linaro.org>
Cc: qemu-devel@nongnu.org,
	Pierrick Bouvier <pierrick.bouvier@linaro.org>,
	Akihiko Odaki <akihiko.odaki@daynix.com>,
	Alexandre Iooss <erdnaxe@crans.org>,
	Mahmoud Mandour <ma.mandourr@gmail.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PULL 26/29] contrib/plugins: extend execlog to track register changes
Date: Fri, 1 Mar 2024 23:54:51 +0800	[thread overview]
Message-ID: <ZeH6S02g5n/2TzaN@intel.com> (raw)
In-Reply-To: <87msri5k1b.fsf@draig.linaro.org>

On Fri, Mar 01, 2024 at 10:22:08AM +0000, Alex Bennée wrote:
> Date: Fri, 01 Mar 2024 10:22:08 +0000
> From: Alex Bennée <alex.bennee@linaro.org>
> Subject: Re: [PULL 26/29] contrib/plugins: extend execlog to track register
>  changes
> 
> Zhao Liu <zhao1.liu@intel.com> writes:
> 
> > Hi Alex,
> >
> > I hit the following warnings (with "./configure --enable-werror"):
> >
> > /qemu/contrib/plugins/execlog.c: In function ‘registers_init’:
> > /qemu/contrib/plugins/execlog.c:330:17: warning: ‘g_pattern_match_string’ is deprecated: Use 'g_pattern_spec_match_string' instead [-Wdeprecated-declarations]
> >   330 |                 if (g_pattern_match_string(pat, rd->name) ||
> >       |                 ^~
> > In file included from /usr/include/glib-2.0/glib.h:65,
> >                  from /qemu/contrib/plugins/execlog.c:9:
> > /usr/include/glib-2.0/glib/gpattern.h:55:15: note: declared here
> >    55 | gboolean      g_pattern_match_string   (GPatternSpec *pspec,
> >       |               ^~~~~~~~~~~~~~~~~~~~~~
> > /qemu/contrib/plugins/execlog.c:331:21: warning: ‘g_pattern_match_string’ is deprecated: Use 'g_pattern_spec_match_string' instead [-Wdeprecated-declarations]
> >   331 |                     g_pattern_match_string(pat, rd_lower)) {
> >       |                     ^~~~~~~~~~~~~~~~~~~~~~
> > In file included from /usr/include/glib-2.0/glib.h:65,
> >                  from /qemu/contrib/plugins/execlog.c:9:
> > /usr/include/glib-2.0/glib/gpattern.h:55:15: note: declared here
> >    55 | gboolean      g_pattern_match_string   (GPatternSpec *pspec,
> >       |               ^~~~~~~~~~~~~~~~~~~~~~
> > /qemu/contrib/plugins/execlog.c:339:63: warning: passing argument 2 of ‘g_ptr_array_add’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
> >   339 |                             g_ptr_array_add(all_reg_names,
> > reg->name);
> 
> Hmm I missed that. Not sure what the neatest solution is in this case -
> g_ptr_array_new() doesn't have a destroy func so we shouldn't ever
> attempt to free it. We can manually re-add the const qualifier at the
> other end for completeness and I guess comment and cast?

I find other palces use 2 ways:
  * Use g_strdup() to create a copy (e.g., net/net.c,
    add_nic_model_help()). But I'm not sure if this is OK since you said
    we shouldn't attempt to free it. May I ask if the free issue you
    mentioned will affect the use of g_strdup() here?
  * Another way is the forced conversion to gpointer (also e.g., in
    net/net.c, qemu_get_nic_models()).

Which way do you like? ;-)

> 
> 
> >       |                                                            ~~~^~~~~~
> > In file included from /usr/include/glib-2.0/glib.h:31,
> >                  from /qemu/contrib/plugins/execlog.c:9:
> > /usr/include/glib-2.0/glib/garray.h:192:62: note: expected ‘gpointer’ {aka ‘void *’} but argument is of type ‘const char *’
> >   192 |                                            gpointer          data);
> >       |                                            ~~~~~~~~~~~~~~~~~~^~~~
> >
> > In addition, I checked my glic version:
> >
> > $ldd --version
> > ldd (Ubuntu GLIBC 2.35-0ubuntu3.5) 2.35
> >
> > I think it's v2.35. Are these three warning reports valid?
> 
> It's the glib (not glibc) version that matters here.
> g_pattern_match_string was deprecated in 2.70 when the suggested
> alternative was added. However our baseline for glib is still:
> 
>   # When bumping glib minimum version, please check also whether to increase
>   # the _WIN32_WINNT setting in osdep.h according to the value from glib
>   glib_req_ver = '>=2.56.0'
>   glib_pc = dependency('glib-2.0', version: glib_req_ver, required: true,
>                       method: 'pkg-config')
> 
> The usual solution for this is to throw in a compat wrapper in
> glib-compat.h:
> 
> --8<---------------cut here---------------start------------->8---
> modified   include/glib-compat.h
> @@ -105,6 +105,24 @@ static inline gpointer g_memdup2_qemu(gconstpointer mem, gsize byte_size)
>  }
>  #define g_memdup2(m, s) g_memdup2_qemu(m, s)
>  
> +/*
> + * g_pattern_match_string has been deprecated in Glib since 2.70 and
> + * will complain about it if you try to use it. Fortunately the
> + * signature of both functions is the same making it easy to work
> + * around.
> + */
> +static inline
> +gboolean g_pattern_spec_match_string_qemu(GPatternSpec *pspec,
> +                                          const gchar *string)
> +{
> +#if GLIB_CHECK_VERSION(2, 70, 0)
> +    return g_pattern_spec_match_string(pspec, string);
> +#else
> +    return g_pattern_match_string(pspec, string);
> +#endif
> +};
> +#define g_pattern_spec_match_string(p, s) g_pattern_spec_match_string_qemu(p, s)
> +
>  #if defined(G_OS_UNIX)
>  /*
>   * Note: The fallback implementation is not MT-safe, and it returns a copy of
> modified   contrib/plugins/execlog.c
> @@ -334,8 +334,8 @@ static void registers_init(int vcpu_index)
>              for (int p = 0; p < rmatches->len; p++) {
>                  g_autoptr(GPatternSpec) pat = g_pattern_spec_new(rmatches->pdata[p]);
>                  g_autofree gchar *rd_lower = g_utf8_strdown(rd->name, -1);
> -                if (g_pattern_match_string(pat, rd->name) ||
> -                    g_pattern_match_string(pat, rd_lower)) {
> +                if (g_pattern_spec_match_string(pat, rd->name) ||
> +                    g_pattern_spec_match_string(pat, rd_lower)) {
>                      Register *reg = init_vcpu_register(vcpu_index, rd);
>                      g_ptr_array_add(registers, reg);
> --8<---------------cut here---------------end--------------->8---
> 
> but I hesitated to add it for this case as plugins shouldn't assume they
> have access to QEMU's internals. Maybe the glib-compat.h header could be
> treated as a special case.

Thanks! This works on my side!

I support to fix the compatibility as the above, after all it's always
confusing when we allow users to use newer glib and see warnings at
compile time!

> >
> > I also noticed in target/arm/helper.c, there's another
> > g_pattern_match_string() but I haven't met the warning.
> 
> Hmm that's weird. I suspect glib suppresses the warnings with:
> 
>   /* Ask for warnings for anything that was marked deprecated in
>    * the defined version, or before. It is a candidate for rewrite.
>    */
>   #define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_56
>

I'm not too familiar with the QEMU build framework, but based on this, a
natural question is, can this rule be applied to plugins code as well?
If so, this would also avoid warning.

Thanks,
Zhao



  reply	other threads:[~2024-03-01 15:42 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-28 11:56 [PULL 00/29] testing, gdbstub and plugin updates Alex Bennée
2024-02-28 11:56 ` [PULL 01/29] tests/tcg: update licenses to GPLv2 as intended Alex Bennée
2024-02-28 11:56 ` [PULL 02/29] tests/tcg: bump TCG test timeout to 120s Alex Bennée
2024-02-28 11:56 ` [PULL 03/29] tests/vm: avoid re-building the VM images all the time Alex Bennée
2024-02-28 11:56 ` [PULL 04/29] tests/vm: update openbsd image to 7.4 Alex Bennée
2024-02-28 11:56 ` [PULL 05/29] target/arm: Use GDBFeature for dynamic XML Alex Bennée
2024-02-28 11:56 ` [PULL 06/29] target/ppc: " Alex Bennée
2024-02-28 11:56 ` [PULL 07/29] target/riscv: " Alex Bennée
2024-02-28 11:56 ` [PULL 08/29] gdbstub: Use GDBFeature for gdb_register_coprocessor Alex Bennée
2024-02-28 11:56 ` [PULL 09/29] gdbstub: Use GDBFeature for GDBRegisterState Alex Bennée
2024-02-28 11:56 ` [PULL 10/29] gdbstub: Change gdb_get_reg_cb and gdb_set_reg_cb Alex Bennée
2024-02-28 11:56 ` [PULL 11/29] gdbstub: Simplify XML lookup Alex Bennée
2024-02-28 11:56 ` [PULL 12/29] gdbstub: Infer number of core registers from XML Alex Bennée
2024-02-28 11:56 ` [PULL 13/29] hw/core/cpu: Remove gdb_get_dynamic_xml member Alex Bennée
2024-02-28 11:56 ` [PULL 14/29] gdbstub: Add members to identify registers to GDBFeature Alex Bennée
2024-02-28 11:56 ` [PULL 15/29] plugins: remove previous n_vcpus functions from API Alex Bennée
2024-02-28 11:56 ` [PULL 16/29] plugins: add qemu_plugin_num_vcpus function Alex Bennée
2024-02-28 11:56 ` [PULL 17/29] plugins: fix order of init/idle/resume callback Alex Bennée
2024-02-28 11:56 ` [PULL 18/29] linux-user: ensure nios2 processes queued work Alex Bennée
2024-02-28 11:56 ` [PULL 19/29] cpu: call plugin init hook asynchronously Alex Bennée
2024-02-28 11:56 ` [PULL 20/29] plugins: Use different helpers when reading registers Alex Bennée
2024-02-28 11:56 ` [PULL 21/29] gdbstub: expose api to find registers Alex Bennée
2024-02-28 11:56 ` [PULL 22/29] plugins: create CPUPluginState and migrate plugin_mask Alex Bennée
2024-02-28 11:56 ` [PULL 23/29] plugins: add an API to read registers Alex Bennée
2024-02-28 11:56 ` [PULL 24/29] tests/tcg: expand insn test case to exercise register API Alex Bennée
2024-02-28 11:56 ` [PULL 25/29] contrib/plugins: fix imatch Alex Bennée
2024-02-28 11:56 ` [PULL 26/29] contrib/plugins: extend execlog to track register changes Alex Bennée
2024-03-01  7:19   ` Zhao Liu
2024-03-01 10:22     ` Alex Bennée
2024-03-01 15:54       ` Zhao Liu [this message]
2024-03-01 16:30         ` Alex Bennée
2024-03-02  7:02           ` Zhao Liu
2024-03-08 13:21   ` Peter Maydell
2024-02-28 11:56 ` [PULL 27/29] docs/devel: lift example and plugin API sections up Alex Bennée
2024-02-28 11:57 ` [PULL 28/29] docs/devel: document some plugin assumptions Alex Bennée
2024-02-28 11:57 ` [PULL 29/29] docs/devel: plugins can trigger a tb flush Alex Bennée
2024-02-28 17:26 ` [PULL 00/29] testing, gdbstub and plugin updates Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZeH6S02g5n/2TzaN@intel.com \
    --to=zhao1.liu@intel.com \
    --cc=akihiko.odaki@daynix.com \
    --cc=alex.bennee@linaro.org \
    --cc=erdnaxe@crans.org \
    --cc=ma.mandourr@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.