diff options
author | Dmitriy Ivanov <dimitry@google.com> | 2015-03-10 15:43:50 -0700 |
---|---|---|
committer | Dmitriy Ivanov <dimitry@google.com> | 2015-03-10 15:43:50 -0700 |
commit | 600bc3cb9342fbb1dc16ea25f5b676ce072e3e1b (patch) | |
tree | 5892626ab8bfc8648476ba15f71d20e03e90da11 /linker | |
parent | c9ce70d7838b6aae074fc3615cdf04e5c9ac612a (diff) | |
download | bionic-600bc3cb9342fbb1dc16ea25f5b676ce072e3e1b.zip bionic-600bc3cb9342fbb1dc16ea25f5b676ce072e3e1b.tar.gz bionic-600bc3cb9342fbb1dc16ea25f5b676ce072e3e1b.tar.bz2 |
Rename LinkerAllocator and LinkerAllocatorPage
Change-Id: I87d80fbcd4ec26c0ee4f601b9c4c64f600418dd9
Diffstat (limited to 'linker')
-rw-r--r-- | linker/linker.cpp | 4 | ||||
-rw-r--r-- | linker/linker_block_allocator.cpp | 21 | ||||
-rw-r--r-- | linker/linker_block_allocator.h | 13 | ||||
-rw-r--r-- | linker/tests/linker_block_allocator_test.cpp | 8 |
4 files changed, 24 insertions, 22 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp index 493b035..ea7d637 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -92,8 +92,8 @@ static const char* get_base_name(const char* name) { static ElfW(Addr) get_elf_exec_load_bias(const ElfW(Ehdr)* elf); -static LinkerAllocator<soinfo> g_soinfo_allocator; -static LinkerAllocator<LinkedListEntry<soinfo>> g_soinfo_links_allocator; +static LinkerTypeAllocator<soinfo> g_soinfo_allocator; +static LinkerTypeAllocator<LinkedListEntry<soinfo>> g_soinfo_links_allocator; static soinfo* solist; static soinfo* sonext; diff --git a/linker/linker_block_allocator.cpp b/linker/linker_block_allocator.cpp index 4545c4a..fc9a75b 100644 --- a/linker/linker_block_allocator.cpp +++ b/linker/linker_block_allocator.cpp @@ -22,9 +22,9 @@ #include "private/bionic_prctl.h" -struct LinkerAllocatorPage { - LinkerAllocatorPage* next; - uint8_t bytes[PAGE_SIZE-sizeof(LinkerAllocatorPage*)]; +struct LinkerBlockAllocatorPage { + LinkerBlockAllocatorPage* next; + uint8_t bytes[PAGE_SIZE-sizeof(LinkerBlockAllocatorPage*)]; }; struct FreeBlockInfo { @@ -64,7 +64,7 @@ void LinkerBlockAllocator::free(void* block) { return; } - LinkerAllocatorPage* page = find_page(block); + LinkerBlockAllocatorPage* page = find_page(block); if (page == nullptr) { abort(); @@ -87,7 +87,7 @@ void LinkerBlockAllocator::free(void* block) { } void LinkerBlockAllocator::protect_all(int prot) { - for (LinkerAllocatorPage* page = page_list_; page != nullptr; page = page->next) { + for (LinkerBlockAllocatorPage* page = page_list_; page != nullptr; page = page->next) { if (mprotect(page, PAGE_SIZE, prot) == -1) { abort(); } @@ -95,8 +95,9 @@ void LinkerBlockAllocator::protect_all(int prot) { } void LinkerBlockAllocator::create_new_page() { - LinkerAllocatorPage* page = reinterpret_cast<LinkerAllocatorPage*>(mmap(nullptr, PAGE_SIZE, - PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0)); + LinkerBlockAllocatorPage* page = reinterpret_cast<LinkerBlockAllocatorPage*>( + mmap(nullptr, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0)); + if (page == MAP_FAILED) { abort(); // oom } @@ -107,7 +108,7 @@ void LinkerBlockAllocator::create_new_page() { FreeBlockInfo* first_block = reinterpret_cast<FreeBlockInfo*>(page->bytes); first_block->next_block = free_block_list_; - first_block->num_free_blocks = (PAGE_SIZE - sizeof(LinkerAllocatorPage*))/block_size_; + first_block->num_free_blocks = (PAGE_SIZE - sizeof(LinkerBlockAllocatorPage*))/block_size_; free_block_list_ = first_block; @@ -115,12 +116,12 @@ void LinkerBlockAllocator::create_new_page() { page_list_ = page; } -LinkerAllocatorPage* LinkerBlockAllocator::find_page(void* block) { +LinkerBlockAllocatorPage* LinkerBlockAllocator::find_page(void* block) { if (block == nullptr) { abort(); } - LinkerAllocatorPage* page = page_list_; + LinkerBlockAllocatorPage* page = page_list_; while (page != nullptr) { const uint8_t* page_ptr = reinterpret_cast<const uint8_t*>(page); if (block >= (page_ptr + sizeof(page->next)) && block < (page_ptr + PAGE_SIZE)) { diff --git a/linker/linker_block_allocator.h b/linker/linker_block_allocator.h index 5d3563f..1d41806 100644 --- a/linker/linker_block_allocator.h +++ b/linker/linker_block_allocator.h @@ -21,7 +21,7 @@ #include <limits.h> #include "private/bionic_macros.h" -struct LinkerAllocatorPage; +struct LinkerBlockAllocatorPage; /* * This class is a non-template version of the LinkerAllocator @@ -40,10 +40,10 @@ class LinkerBlockAllocator { private: void create_new_page(); - LinkerAllocatorPage* find_page(void* block); + LinkerBlockAllocatorPage* find_page(void* block); size_t block_size_; - LinkerAllocatorPage* page_list_; + LinkerBlockAllocatorPage* page_list_; void* free_block_list_; DISALLOW_COPY_AND_ASSIGN(LinkerBlockAllocator); @@ -57,14 +57,15 @@ class LinkerBlockAllocator { * anonymous mmaps. */ template<typename T> -class LinkerAllocator { +class LinkerTypeAllocator { public: - LinkerAllocator() : block_allocator_(sizeof(T)) {} + LinkerTypeAllocator() : block_allocator_(sizeof(T)) {} T* alloc() { return reinterpret_cast<T*>(block_allocator_.alloc()); } void free(T* t) { block_allocator_.free(t); } void protect_all(int prot) { block_allocator_.protect_all(prot); } private: LinkerBlockAllocator block_allocator_; - DISALLOW_COPY_AND_ASSIGN(LinkerAllocator); + DISALLOW_COPY_AND_ASSIGN(LinkerTypeAllocator); }; + #endif // __LINKER_ALLOCATOR_H diff --git a/linker/tests/linker_block_allocator_test.cpp b/linker/tests/linker_block_allocator_test.cpp index 6674881..3ef0f36 100644 --- a/linker/tests/linker_block_allocator_test.cpp +++ b/linker/tests/linker_block_allocator_test.cpp @@ -49,7 +49,7 @@ static size_t kPageSize = sysconf(_SC_PAGE_SIZE); }; TEST(linker_allocator, test_nominal) { - LinkerAllocator<test_struct_nominal> allocator; + LinkerTypeAllocator<test_struct_nominal> allocator; test_struct_nominal* ptr1 = allocator.alloc(); ASSERT_TRUE(ptr1 != nullptr); @@ -65,7 +65,7 @@ TEST(linker_allocator, test_nominal) { } TEST(linker_allocator, test_small) { - LinkerAllocator<test_struct_small> allocator; + LinkerTypeAllocator<test_struct_small> allocator; char* ptr1 = reinterpret_cast<char*>(allocator.alloc()); char* ptr2 = reinterpret_cast<char*>(allocator.alloc()); @@ -76,7 +76,7 @@ TEST(linker_allocator, test_small) { } TEST(linker_allocator, test_larger) { - LinkerAllocator<test_struct_larger> allocator; + LinkerTypeAllocator<test_struct_larger> allocator; test_struct_larger* ptr1 = allocator.alloc(); test_struct_larger* ptr2 = allocator.alloc(); @@ -99,7 +99,7 @@ TEST(linker_allocator, test_larger) { } static void protect_all() { - LinkerAllocator<test_struct_larger> allocator; + LinkerTypeAllocator<test_struct_larger> allocator; // number of allocs to reach the end of first page size_t n = kPageSize/sizeof(test_struct_larger) - 1; |