mirror of
https://github.com/qemu/qemu.git
synced 2025-08-15 05:04:03 +00:00
linux-user/elfload: Unprotect regions before core dump
By unprotecting regions, we re-instate writability and unify regions that have been split, which may reduce the total number of regions. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
50e33f52fb
commit
41689bb30c
@ -3963,6 +3963,8 @@ int load_elf_binary(struct linux_binprm *bprm, struct image_info *info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_ELF_CORE_DUMP
|
#ifdef USE_ELF_CORE_DUMP
|
||||||
|
#include "exec/translate-all.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definitions to generate Intel SVR4-like core files.
|
* Definitions to generate Intel SVR4-like core files.
|
||||||
* These mostly have the same names as the SVR4 types with "target_elf_"
|
* These mostly have the same names as the SVR4 types with "target_elf_"
|
||||||
@ -4280,6 +4282,23 @@ static int dump_write(int fd, const void *ptr, size_t size)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wmr_page_unprotect_regions(void *opaque, target_ulong start,
|
||||||
|
target_ulong end, unsigned long flags)
|
||||||
|
{
|
||||||
|
if ((flags & (PAGE_WRITE | PAGE_WRITE_ORG)) == PAGE_WRITE_ORG) {
|
||||||
|
size_t step = MAX(TARGET_PAGE_SIZE, qemu_host_page_size);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
page_unprotect(start, 0);
|
||||||
|
if (end - start <= step) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
start += step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned count;
|
unsigned count;
|
||||||
size_t size;
|
size_t size;
|
||||||
@ -4401,6 +4420,9 @@ static int elf_core_dump(int signr, const CPUArchState *env)
|
|||||||
cpu_list_lock();
|
cpu_list_lock();
|
||||||
mmap_lock();
|
mmap_lock();
|
||||||
|
|
||||||
|
/* By unprotecting, we merge vmas that might be split. */
|
||||||
|
walk_memory_regions(NULL, wmr_page_unprotect_regions);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Walk through target process memory mappings and
|
* Walk through target process memory mappings and
|
||||||
* set up structure containing this information.
|
* set up structure containing this information.
|
||||||
|
Loading…
Reference in New Issue
Block a user