mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-09-09 00:07:57 -06:00
linux-user/elfload: Stack allocate struct mm_struct
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>
This commit is contained in:
parent
6a20294435
commit
0af22a6abf
1 changed files with 9 additions and 19 deletions
|
@ -4099,7 +4099,7 @@ struct mm_struct {
|
||||||
int mm_count; /* number of mappings */
|
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 void vma_delete(struct mm_struct *);
|
||||||
static int vma_add_mapping(struct mm_struct *, target_ulong,
|
static int vma_add_mapping(struct mm_struct *, target_ulong,
|
||||||
target_ulong, abi_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.
|
* 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;
|
mm->mm_count = 0;
|
||||||
QTAILQ_INIT(&mm->mm_mmap);
|
QTAILQ_INIT(&mm->mm_mmap);
|
||||||
|
|
||||||
return (mm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vma_delete(struct mm_struct *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);
|
QTAILQ_REMOVE(&mm->mm_mmap, vma, vma_link);
|
||||||
g_free(vma);
|
g_free(vma);
|
||||||
}
|
}
|
||||||
g_free(mm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vma_add_mapping(struct mm_struct *mm, target_ulong start,
|
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 elfhdr elf;
|
||||||
struct elf_phdr phdr;
|
struct elf_phdr phdr;
|
||||||
struct rlimit dumpsize;
|
struct rlimit dumpsize;
|
||||||
struct mm_struct *mm = NULL;
|
struct mm_struct mm;
|
||||||
off_t offset = 0, data_offset = 0;
|
off_t offset = 0, data_offset = 0;
|
||||||
int segs = 0;
|
int segs = 0;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
@ -4664,11 +4656,10 @@ static int elf_core_dump(int signr, const CPUArchState *env)
|
||||||
* set up structure containing this information. After
|
* set up structure containing this information. After
|
||||||
* this point vma_xxx functions can be used.
|
* this point vma_xxx functions can be used.
|
||||||
*/
|
*/
|
||||||
if ((mm = vma_init()) == NULL)
|
vma_init(&mm);
|
||||||
goto out;
|
|
||||||
|
|
||||||
walk_memory_regions(mm, vma_walker);
|
walk_memory_regions(&mm, vma_walker);
|
||||||
segs = vma_get_mapping_count(mm);
|
segs = vma_get_mapping_count(&mm);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Construct valid coredump ELF header. We also
|
* 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
|
* Write program headers for memory regions mapped in
|
||||||
* the target process.
|
* 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));
|
(void) memset(&phdr, 0, sizeof (phdr));
|
||||||
|
|
||||||
phdr.p_type = PT_LOAD;
|
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.
|
* 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 addr;
|
||||||
abi_ulong end;
|
abi_ulong end;
|
||||||
|
|
||||||
|
@ -4767,8 +4758,7 @@ static int elf_core_dump(int signr, const CPUArchState *env)
|
||||||
|
|
||||||
out:
|
out:
|
||||||
free_note_info(&info);
|
free_note_info(&info);
|
||||||
if (mm != NULL)
|
vma_delete(&mm);
|
||||||
vma_delete(mm);
|
|
||||||
(void) close(fd);
|
(void) close(fd);
|
||||||
|
|
||||||
if (errno != 0)
|
if (errno != 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue