linker: mark library .bss pages with anon:.bss
Bug: http://b/26778774
Change-Id: Ie2cdd841b7238de50ef389a897d79f915229616b
diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp
index e81e325..136e432 100644
--- a/linker/linker_phdr.cpp
+++ b/linker/linker_phdr.cpp
@@ -39,6 +39,8 @@
#include "linker_debug.h"
#include "linker_utils.h"
+#include "private/bionic_prctl.h"
+
static int GetTargetElfMachine() {
#if defined(__arm__)
return EM_ARM;
@@ -540,8 +542,9 @@
// between them. This is done by using a private anonymous
// map for all extra pages.
if (seg_page_end > seg_file_end) {
+ size_t zeromap_size = seg_page_end - seg_file_end;
void* zeromap = mmap(reinterpret_cast<void*>(seg_file_end),
- seg_page_end - seg_file_end,
+ zeromap_size,
PFLAGS_TO_PROT(phdr->p_flags),
MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE,
-1,
@@ -550,6 +553,8 @@
DL_ERR("couldn't zero fill \"%s\" gap: %s", name_.c_str(), strerror(errno));
return false;
}
+
+ prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, zeromap, zeromap_size, ".bss");
}
}
return true;