summaryrefslogtreecommitdiff
path: root/linker/linker_allocator.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2017-09-15 16:09:22 -0700
committerElliott Hughes <enh@google.com>2017-09-15 16:18:49 -0700
commit7b0af7ad82fcf88e800d1a553d81fda29dc064bd (patch)
tree4cf982c55c48b49864bcb4f986c7400d640930e0 /linker/linker_allocator.cpp
parent3b64f8ecb3db49574cc5b7c6030be98c159be4d4 (diff)
Always log errno when aborting.
(Where errno is relevant.) Also consistently use -1 as the fd for anonymous mmaps. (It doesn't matter, but it's more common, and potentially more intention-revealing.) Bug: http://b/65608572 Test: ran tests Change-Id: Ie9a207632d8242f42086ba3ca862519014c3c102
Diffstat (limited to 'linker/linker_allocator.cpp')
-rw-r--r--linker/linker_allocator.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/linker/linker_allocator.cpp b/linker/linker_allocator.cpp
index fd6f4964b..a37e910b5 100644
--- a/linker/linker_allocator.cpp
+++ b/linker/linker_allocator.cpp
@@ -200,12 +200,10 @@ void LinkerSmallObjectAllocator::create_page_record(void* page_addr, size_t free
}
void LinkerSmallObjectAllocator::alloc_page() {
- static_assert(sizeof(page_info) % 16 == 0,
- "sizeof(page_info) is not multiple of 16");
- void* map_ptr = mmap(nullptr, PAGE_SIZE,
- PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
+ static_assert(sizeof(page_info) % 16 == 0, "sizeof(page_info) is not multiple of 16");
+ void* map_ptr = mmap(nullptr, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (map_ptr == MAP_FAILED) {
- async_safe_fatal("mmap failed");
+ async_safe_fatal("mmap failed: %s", strerror(errno));
}
prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, map_ptr, PAGE_SIZE, "linker_alloc_small_objects");
@@ -246,11 +244,11 @@ void LinkerMemoryAllocator::initialize_allocators() {
void* LinkerMemoryAllocator::alloc_mmap(size_t size) {
size_t allocated_size = PAGE_END(size + sizeof(page_info));
- void* map_ptr = mmap(nullptr, allocated_size,
- PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
+ void* map_ptr = mmap(nullptr, allocated_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
+ -1, 0);
if (map_ptr == MAP_FAILED) {
- async_safe_fatal("mmap failed");
+ async_safe_fatal("mmap failed: %s", strerror(errno));
}
prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, map_ptr, allocated_size, "linker_alloc_lob");