All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: alex.bennee@linaro.org
Subject: [PATCH 04/14] linux-user/elfload: Stack allocate struct mm_struct
Date: Tue, 27 Feb 2024 08:48:23 -1000	[thread overview]
Message-ID: <20240227184833.193836-5-richard.henderson@linaro.org> (raw)
In-Reply-To: <20240227184833.193836-1-richard.henderson@linaro.org>

Ignoring the fact that g_malloc cannot fail, the structure
is quite small and might as well be allocated locally.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/elfload.c | 28 +++++++++-------------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index cc43487a37..98b82b1a49 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -4099,7 +4099,7 @@ struct mm_struct {
     int mm_count;           /* number of mappings */
 };
 
-static struct mm_struct *vma_init(void);
+static void vma_init(struct mm_struct *);
 static void vma_delete(struct mm_struct *);
 static int vma_add_mapping(struct mm_struct *, target_ulong,
                            target_ulong, abi_ulong);
@@ -4174,17 +4174,10 @@ static inline void bswap_note(struct elf_note *en) { }
  * thread that received the signal is stopped.
  */
 
-static struct mm_struct *vma_init(void)
+static void vma_init(struct mm_struct *mm)
 {
-    struct mm_struct *mm;
-
-    if ((mm = g_malloc(sizeof (*mm))) == NULL)
-        return (NULL);
-
     mm->mm_count = 0;
     QTAILQ_INIT(&mm->mm_mmap);
-
-    return (mm);
 }
 
 static void vma_delete(struct mm_struct *mm)
@@ -4195,7 +4188,6 @@ static void vma_delete(struct mm_struct *mm)
         QTAILQ_REMOVE(&mm->mm_mmap, vma, vma_link);
         g_free(vma);
     }
-    g_free(mm);
 }
 
 static int vma_add_mapping(struct mm_struct *mm, target_ulong start,
@@ -4638,7 +4630,7 @@ static int elf_core_dump(int signr, const CPUArchState *env)
     struct elfhdr elf;
     struct elf_phdr phdr;
     struct rlimit dumpsize;
-    struct mm_struct *mm = NULL;
+    struct mm_struct mm;
     off_t offset = 0, data_offset = 0;
     int segs = 0;
     int fd = -1;
@@ -4664,11 +4656,10 @@ static int elf_core_dump(int signr, const CPUArchState *env)
      * set up structure containing this information.  After
      * this point vma_xxx functions can be used.
      */
-    if ((mm = vma_init()) == NULL)
-        goto out;
+    vma_init(&mm);
 
-    walk_memory_regions(mm, vma_walker);
-    segs = vma_get_mapping_count(mm);
+    walk_memory_regions(&mm, vma_walker);
+    segs = vma_get_mapping_count(&mm);
 
     /*
      * Construct valid coredump ELF header.  We also
@@ -4701,7 +4692,7 @@ static int elf_core_dump(int signr, const CPUArchState *env)
      * Write program headers for memory regions mapped in
      * the target process.
      */
-    for (vma = vma_first(mm); vma != NULL; vma = vma_next(vma)) {
+    for (vma = vma_first(&mm); vma != NULL; vma = vma_next(vma)) {
         (void) memset(&phdr, 0, sizeof (phdr));
 
         phdr.p_type = PT_LOAD;
@@ -4738,7 +4729,7 @@ static int elf_core_dump(int signr, const CPUArchState *env)
     /*
      * Finally we can dump process memory into corefile as well.
      */
-    for (vma = vma_first(mm); vma != NULL; vma = vma_next(vma)) {
+    for (vma = vma_first(&mm); vma != NULL; vma = vma_next(vma)) {
         abi_ulong addr;
         abi_ulong end;
 
@@ -4767,8 +4758,7 @@ static int elf_core_dump(int signr, const CPUArchState *env)
 
  out:
     free_note_info(&info);
-    if (mm != NULL)
-        vma_delete(mm);
+    vma_delete(&mm);
     (void) close(fd);
 
     if (errno != 0)
-- 
2.34.1



  parent reply	other threads:[~2024-02-27 18:51 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-27 18:48 [PATCH 00/14] linux-user: Rewrite core dump Richard Henderson
2024-02-27 18:48 ` [PATCH 01/14] linux-user/elfload: Disable core dump if getrlimit fails Richard Henderson
2024-02-27 19:40   ` Alex Bennée
2024-02-27 18:48 ` [PATCH 02/14] linux-user/elfload: Merge init_note_info and fill_note_info Richard Henderson
2024-02-27 19:42   ` Alex Bennée
2024-02-27 18:48 ` [PATCH 03/14] linux-user/elfload: Tidy fill_note_info and struct elf_note_info Richard Henderson
2024-02-27 18:48 ` Richard Henderson [this message]
2024-02-27 18:48 ` [PATCH 05/14] linux-user/elfload: Latch errno before cleanup in elf_core_dump Richard Henderson
2024-02-27 18:48 ` [PATCH 06/14] linux-user/elfload: Open core file after vma_init Richard Henderson
2024-02-27 18:48 ` [PATCH 07/14] linux-user/elfload: Truncate core file on open Richard Henderson
2024-02-27 18:48 ` [PATCH 08/14] linux-user/elfload: Lock cpu list and mmap during elf_core_dump Richard Henderson
2024-02-27 21:06   ` Alex Bennée
2024-02-27 18:48 ` [PATCH 09/14] linux-user/elfload: Size corefile before opening Richard Henderson
2024-02-27 18:48 ` [PATCH 10/14] linux-user/elfload: Write corefile elf header in one block Richard Henderson
2024-02-27 18:48 ` [PATCH 11/14] linux-user/elfload: Write process memory to core file in larger chunks Richard Henderson
2024-02-27 18:48 ` [PATCH 12/14] linux-user/elfload: Simplify vma_dump_size Richard Henderson
2024-02-27 18:48 ` [PATCH 13/14] linux-user/elfload: Rely on walk_memory_regions for vmas Richard Henderson
2024-02-27 18:48 ` [PATCH 14/14] linux-user/elfload: Unprotect regions before core dump Richard Henderson

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=20240227184833.193836-5-richard.henderson@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 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.