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...