From 66269eabe918dad480e57f7962400747c5713c2b Mon Sep 17 00:00:00 2001 From: John Reiser Date: Sat, 8 Jun 2013 08:39:08 -0700 Subject: [PATCH] ARM Try a hole so that kernel does not extend brk(0) --- src/p_lx_elf.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index 972a03b8..70981ee0 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -2567,8 +2567,6 @@ int PackLinuxElf32::ARM_is_QNX(void) void PackLinuxElf32::ARM_defineSymbols(Filter const * /*ft*/) { - unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info); - lsize = /*getLoaderSize()*/ 4 * 1024; // upper bound; avoid circularity unsigned lo_va_user = ~0u; // infinity for (int j= e_phnum; --j>=0; ) { @@ -2582,9 +2580,8 @@ void PackLinuxElf32::ARM_defineSymbols(Filter const * /*ft*/) unsigned lo_va_stub = get_te32(&elfout.phdr[0].p_vaddr); unsigned adrc; unsigned adrm; - unsigned adrx; - bool const is_big = true; + bool const is_big = true; // kernel disallows mapping below 0x8000. if (is_big) { set_te32( &elfout.ehdr.e_entry, linker->getSymbolOffset("_start") + get_te32(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub); @@ -2593,16 +2590,15 @@ void PackLinuxElf32::ARM_defineSymbols(Filter const * /*ft*/) lo_va_stub = lo_va_user; adrc = lo_va_stub; adrm = getbrk(phdri, e_phnum); - adrx = hlen + (page_mask & (~page_mask + adrm)); // round up to page boundary } - adrm = page_mask & (~page_mask + adrm); // round up to page boundary adrc = page_mask & (~page_mask + adrc); // round up to page boundary + adrm = page_mask & (~page_mask + adrm); // round up to page boundary + adrm += page_size; // Try: hole so that kernel does not extend the brk(0) + linker->defineSymbol("ADRM", adrm); // addr for map linker->defineSymbol("CPR0", 4+ linker->getSymbolOffset("cpr0")); linker->defineSymbol("LENF", 4+ linker->getSymbolOffset("end_decompress")); - linker->defineSymbol("ADRM", adrm); // addr for map - #define MAP_PRIVATE 2 /* UNIX standard */ #define MAP_FIXED 0x10 /* UNIX standard */ #define MAP_ANONYMOUS 0x20 /* UNIX standard */ @@ -2611,8 +2607,6 @@ void PackLinuxElf32::ARM_defineSymbols(Filter const * /*ft*/) if (ARM_is_QNX()) mflg = MAP_PRIVANON; linker->defineSymbol("MFLG", mflg); - - ACC_UNUSED(adrx); } void PackLinuxElf32armLe::defineSymbols(Filter const *ft)