search for: elf_machine_relrz_rel

Displaying 4 results from an estimated 4 matches for "elf_machine_relrz_rel".

2017 Dec 09
2
Reducing code size of Position Independent Executables (PIE) by shrinking the size of dynamic relocations section
...if (jump == 0) > { > ++relative; > offset = relative->r_data; > } > ElfW(Addr) r_offset = offset; > for (; bits != 0; bits >>= 1) > { > if ((bits&1) != 0) > elf_machine_relrz_relative (l_addr, (void *) (l_addr + r_offset)); > r_offset += sizeof(ElfW(Addr)); > } > } > } > #endif That data-dependent “if ((bits&1) != 0)” branch looks a bit nasty. Have you investigated whether some sort of RLE-style encoding would be beneficial...
2017 May 08
4
Reducing code size of Position Independent Executables (PIE) by shrinking the size of dynamic relocations section
+llvm-dev Discussion here: https://sourceware.org/ml/gnu-gabi/2017-q2/msg00000.html On Tue, May 2, 2017 at 10:17 AM, Suprateeka R Hegde <hegdesmailbox at gmail.com> wrote: > On 02-May-2017 12:05 AM, Florian Weimer wrote: >> On 05/01/2017 08:28 PM, Suprateeka R Hegde wrote: >>> So the ratio shows ~96% is RELATIVE reloc. And only ~4% others. This is >>> not the
2017 Dec 07
0
Reducing code size of Position Independent Executables (PIE) by shrinking the size of dynamic relocations section
...offset += jump * sizeof(ElfW(Addr)); if (jump == 0) { ++relative; offset = relative->r_data; } ElfW(Addr) r_offset = offset; for (; bits != 0; bits >>= 1) { if ((bits&1) != 0) elf_machine_relrz_relative (l_addr, (void *) (l_addr + r_offset)); r_offset += sizeof(ElfW(Addr)); } } } #endif Note that the 8-bit 'jump' encodes the number of _words_ since last offset. The case where jump would not fit in 8-bits is handled by setting jump to 0, and emitting the...
2017 Dec 11
2
Reducing code size of Position Independent Executables (PIE) by shrinking the size of dynamic relocations section
...++relative; >>> offset = relative->r_data; >>> } >>> ElfW(Addr) r_offset = offset; >>> for (; bits != 0; bits >>= 1) >>> { >>> if ((bits&1) != 0) >>> elf_machine_relrz_relative (l_addr, (void *) (l_addr + r_offset)); >>> r_offset += sizeof(ElfW(Addr)); >>> } >>> } >>> } >>> #endif >> >> That data-dependent “if ((bits&1) != 0)” branch looks a bit nasty. >> >> Have yo...