[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/60] linux-user/elfload: Stack allocate struct mm_struct
From: |
Richard Henderson |
Subject: |
[PATCH 04/60] linux-user/elfload: Stack allocate struct mm_struct |
Date: |
Fri, 1 Mar 2024 13:05:23 -1000 |
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
- [PATCH 00/60] linux-user and tcg patch queue, Richard Henderson, 2024/03/01
- [PATCH 01/60] linux-user/elfload: Disable core dump if getrlimit fails, Richard Henderson, 2024/03/01
- [PATCH 02/60] linux-user/elfload: Merge init_note_info and fill_note_info, Richard Henderson, 2024/03/01
- [PATCH 03/60] linux-user/elfload: Tidy fill_note_info and struct elf_note_info, Richard Henderson, 2024/03/01
- [PATCH 04/60] linux-user/elfload: Stack allocate struct mm_struct,
Richard Henderson <=
- [PATCH 05/60] linux-user/elfload: Latch errno before cleanup in elf_core_dump, Richard Henderson, 2024/03/01
- [PATCH 08/60] linux-user/elfload: Lock cpu list and mmap during elf_core_dump, Richard Henderson, 2024/03/01
- [PATCH 11/60] linux-user/elfload: Write process memory to core file in larger chunks, Richard Henderson, 2024/03/01
- [PATCH 13/60] linux-user/elfload: Rely on walk_memory_regions for vmas, Richard Henderson, 2024/03/01
- [PATCH 15/60] tcg/aarch64: Apple does not align __int128_t in even registers, Richard Henderson, 2024/03/01
- [PATCH 16/60] accel/tcg: Set can_do_io at at start of lookup_tb_ptr helper, Richard Henderson, 2024/03/01
- [PATCH 06/60] linux-user/elfload: Open core file after vma_init, Richard Henderson, 2024/03/01
- [PATCH 09/60] linux-user/elfload: Size corefile before opening, Richard Henderson, 2024/03/01
- [PATCH 14/60] linux-user/elfload: Unprotect regions before core dump, Richard Henderson, 2024/03/01
- [PATCH 25/60] linux-user: Remove qemu_host_page_size from elf_core_dump, Richard Henderson, 2024/03/01