linux-user/elfload: Open core file after vma_init
Swap the ordering of vma_init and open. This will be necessary for further changes, and adjusts the error cleanup path. Narrow the scope of corefile, as the variable can be freed immediately after use in open(). Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
ccb6f3eee0
commit
106f8da664
@ -4625,7 +4625,6 @@ static int elf_core_dump(int signr, const CPUArchState *env)
|
|||||||
const CPUState *cpu = env_cpu((CPUArchState *)env);
|
const CPUState *cpu = env_cpu((CPUArchState *)env);
|
||||||
const TaskState *ts = (const TaskState *)cpu->opaque;
|
const TaskState *ts = (const TaskState *)cpu->opaque;
|
||||||
struct vm_area_struct *vma = NULL;
|
struct vm_area_struct *vma = NULL;
|
||||||
g_autofree char *corefile = NULL;
|
|
||||||
struct elf_note_info info;
|
struct elf_note_info info;
|
||||||
struct elfhdr elf;
|
struct elfhdr elf;
|
||||||
struct elf_phdr phdr;
|
struct elf_phdr phdr;
|
||||||
@ -4644,12 +4643,6 @@ static int elf_core_dump(int signr, const CPUArchState *env)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
corefile = core_dump_filename(ts);
|
|
||||||
|
|
||||||
if ((fd = open(corefile, O_WRONLY | O_CREAT,
|
|
||||||
S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0)
|
|
||||||
return (-errno);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Walk through target process memory mappings and
|
* Walk through target process memory mappings and
|
||||||
* set up structure containing this information. After
|
* set up structure containing this information. After
|
||||||
@ -4657,6 +4650,15 @@ static int elf_core_dump(int signr, const CPUArchState *env)
|
|||||||
*/
|
*/
|
||||||
vma_init(&mm);
|
vma_init(&mm);
|
||||||
|
|
||||||
|
{
|
||||||
|
g_autofree char *corefile = core_dump_filename(ts);
|
||||||
|
fd = open(corefile, O_WRONLY | O_CREAT,
|
||||||
|
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
||||||
|
}
|
||||||
|
if (fd < 0) {
|
||||||
|
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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user