diff --git a/include/exec/page-protection.h b/include/exec/page-protection.h index 3e0a8a0333..a9578a51a2 100644 --- a/include/exec/page-protection.h +++ b/include/exec/page-protection.h @@ -38,6 +38,12 @@ */ #define PAGE_PASSTHROUGH 0x0800 +/* + * For linux-user, indicates that the page should not be included in a core + * dump. + */ +#define PAGE_DONTDUMP 0x1000 + #ifdef CONFIG_USER_ONLY void TSA_NO_TSA mmap_lock(void); diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 096620eecb..43631e16bc 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -4068,6 +4068,10 @@ static size_t vma_dump_size(target_ulong start, target_ulong end, return 0; } + if (flags & PAGE_DONTDUMP) { + return 0; + } + /* * Usually we don't dump executable pages as they contain * non-writable code that debugger can read directly from diff --git a/linux-user/mmap.c b/linux-user/mmap.c index d1f36e6f16..36ba0489df 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -1246,6 +1246,11 @@ abi_long target_madvise(abi_ulong start, abi_ulong len_in, int advice) */ mmap_lock(); switch (advice) { + case MADV_DONTDUMP: + if (len > 0) { + page_set_flags(start, start + len - 1, PAGE_DONTDUMP); + } + break; case MADV_WIPEONFORK: case MADV_KEEPONFORK: ret = -EINVAL;