qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: "Alex Bennée" <alex.bennee@linaro.org>, qemu-devel@nongnu.org
Subject: Re: [PATCH v2 10/12] gdbstub: refactor get_feature_xml
Date: Thu, 24 Aug 2023 12:25:35 -0700	[thread overview]
Message-ID: <38e847ca-03e2-6afe-dd3d-1e877f55794d@linaro.org> (raw)
In-Reply-To: <20230824163910.1737079-11-alex.bennee@linaro.org>

On 8/24/23 09:39, Alex Bennée wrote:
> Try to bring up the code to more modern standards by:
> 
>    - use dynamic GString built xml over a fixed buffer
>    - use autofree to save on explicit g_free() calls
>    - don't hand hack strstr to find the delimiter
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> 
> ---
> v2
>    - avoid needless g_strndup for copy of annex
> ---
>   gdbstub/internals.h |  2 +-
>   gdbstub/gdbstub.c   | 63 +++++++++++++++++++++------------------------
>   2 files changed, 31 insertions(+), 34 deletions(-)
> 
> diff --git a/gdbstub/internals.h b/gdbstub/internals.h
> index f2b46cce41..4876ebd74f 100644
> --- a/gdbstub/internals.h
> +++ b/gdbstub/internals.h
> @@ -33,7 +33,7 @@ typedef struct GDBProcess {
>       uint32_t pid;
>       bool attached;
>   
> -    char target_xml[1024];
> +    char *target_xml;
>   } GDBProcess;
>   
>   enum RSState {
> diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
> index 8e9bc17e07..31a2451f27 100644
> --- a/gdbstub/gdbstub.c
> +++ b/gdbstub/gdbstub.c
> @@ -354,54 +354,51 @@ static CPUState *gdb_get_cpu(uint32_t pid, uint32_t tid)
>   static const char *get_feature_xml(const char *p, const char **newp,
>                                      GDBProcess *process)
>   {
> -    size_t len;
>       int i;
>       const char *name;
>       CPUState *cpu = gdb_get_first_cpu_in_process(process);
>       CPUClass *cc = CPU_GET_CLASS(cpu);
>   
> -    len = 0;
> -    while (p[len] && p[len] != ':')
> -        len++;
> -    *newp = p + len;
> +    /* ‘qXfer:features:read:annex:offset,length' */

This is misleading, because "...:read:" has already been consumed.

> +    char *term = g_strstr_len(p, -1, ":");

This is strchr(p, ':').

> +    g_autofree char *annex = g_strndup(p, len);
> +    /* leave newp at offset,length for the rest of the params */
> +    *newp = term + 1;
>   
> -    name = NULL;
> -    if (strncmp(p, "target.xml", len) == 0) {
> -        char *buf = process->target_xml;
> -        const size_t buf_sz = sizeof(process->target_xml);
>   
> -        /* Generate the XML description for this CPU.  */
> -        if (!buf[0]) {
> +    name = NULL;
> +    if (g_strcmp0(annex, "target.xml") == 0) {

Why the change to g_strcmp0?  There's no null pointer to be handled.
If you keep the strncmp, you don't have to allocate memory early.

>       if (cc->gdb_get_dynamic_xml) {
> -        char *xmlname = g_strndup(p, len);
> -        const char *xml = cc->gdb_get_dynamic_xml(cpu, xmlname);
> -
> -        g_free(xmlname);
> +        const char *xml = cc->gdb_get_dynamic_xml(cpu, annex);

You can leave the g_strndup (and autofree) to here.



r~


  reply	other threads:[~2023-08-24 19:26 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-24 16:38 [PATCH v2 00/12] gdbstub and testing fixes for 8.2 Alex Bennée
2023-08-24 16:38 ` [PATCH v2 01/12] gitlab: enable ccache for many build jobs Alex Bennée
2023-08-25  7:38   ` Philippe Mathieu-Daudé
2023-08-25  7:46   ` Michael Tokarev
2023-08-25  8:11     ` Daniel P. Berrangé
2023-08-25  8:34     ` Philippe Mathieu-Daudé
2023-08-25  8:43       ` Thomas Huth
2023-08-25  9:13       ` Michael Tokarev
2023-08-24 16:39 ` [PATCH v2 02/12] tests/docker: cleanup non-verbose output Alex Bennée
2023-08-24 16:39 ` [PATCH v2 03/12] tests/tcg: remove quoting for info output Alex Bennée
2023-08-24 16:39 ` [PATCH v2 04/12] docs/style: permit inline loop variables Alex Bennée
2023-08-24 16:39 ` [PATCH v2 05/12] .gitlab-ci.d/cirrus.yml: Update FreeBSD to v13.2 Alex Bennée
2023-08-24 16:39 ` [PATCH v2 06/12] tests: remove test-gdbstub.py Alex Bennée
2023-08-24 16:39 ` [PATCH v2 07/12] tests/tcg: clean-up gdb confirm/pagination settings Alex Bennée
2023-08-24 16:39 ` [PATCH v2 08/12] gdbstub: fixes cases where wrong threads were reported to GDB on SIGINT Alex Bennée
2023-08-24 16:39 ` [PATCH v2 09/12] gdbstub: remove unused user_ctx field Alex Bennée
2023-08-25  7:31   ` Philippe Mathieu-Daudé
2023-08-24 16:39 ` [PATCH v2 10/12] gdbstub: refactor get_feature_xml Alex Bennée
2023-08-24 19:25   ` Richard Henderson [this message]
2023-08-29 12:04     ` Alex Bennée
2023-08-24 16:39 ` [PATCH v2 11/12] gdbstub: replace global gdb_has_xml with a function Alex Bennée
2023-08-24 19:27   ` Richard Henderson
2023-08-25  7:33   ` Philippe Mathieu-Daudé
2023-08-24 16:39 ` [PATCH v2 12/12] gdbstub: move comment for gdb_register_coprocessor Alex Bennée
2023-08-24 19:29   ` Richard Henderson
2023-08-25  7:34   ` Philippe Mathieu-Daudé

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=38e847ca-03e2-6afe-dd3d-1e877f55794d@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).