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;