gecko-dev/build/unix/elfhack
Mike Hommey 29e5c3b9dd Bug 1505608 - Try to ensure the bss section of the elfhack testcase stays large enough. r=froydnj
In bug 1470701, we added a dummy global variable so that it ends up in
the bss section, making it large enough for two pointers. Unfortunately,
in some cases, the symbol is eliminated by the linker because it is
unused. So we try to ensure it stays there.

Differential Revision: https://phabricator.services.mozilla.com/D11257

--HG--
extra : moz-landing-system : lando
2018-11-08 14:50:22 +00:00
..
inject Bug 1484872 - Move LTO flags to python configure. r=froydnj 2018-08-21 08:40:26 +09:00
Makefile.in
README
dummy.c
elf.cpp Bug 1499915 - Remove support for the elfhack filler segment r=froydnj 2018-10-24 13:42:31 +00:00
elfhack.cpp Bug 1499915 - Support undoing elfhack when the elfhacked sections are in separate segments r=froydnj 2018-10-24 13:42:38 +00:00
elfxx.h Bug 1499915 - Remove support for the elfhack filler segment r=froydnj 2018-10-24 13:42:31 +00:00
inject.c
moz.build Bug 1484872 - Move LTO flags to python configure. r=froydnj 2018-08-21 08:40:26 +09:00
test-array.c
test-ctors.c
test.c Bug 1505608 - Try to ensure the bss section of the elfhack testcase stays large enough. r=froydnj 2018-11-08 14:50:22 +00:00

README

Elfhack is a program to optimize ELF binaries for size and cold startup
speed.

Presently, it is quite experimental, though it works well for the target
it was created for: Firefox's libxul.so.

Elfhack currently only does one thing: packing dynamic relocations ;
which ends up being a quite complex task, that can be summarized this
way:
- Remove RELATIVE relocations from the .rel.dyn/.rela.dyn section.
- Inject a small code able to apply relative relocations "by hand"
  after the .rel.dyn/.rela.dyn section.
- Inject a section containing relocative relocations in a different
  and more packed format, after the small code.
- Register the small code as DT_INIT function. Make the small code call
  what was initially the DT_INIT function, if there was one.
- Remove the hole between the new section containing relative
  relocations and the following sections, adjusting offsets and base
  addresses accordingly.
- Adjust PT_LOAD entries to fit new offsets, and add an additional
  PT_LOAD entry when that is necessary to handle the discrepancy between
  offsets and base addresses, meaning the section offsets may yet again
  need adjustments.
- Adjust various DT_* dynamic tags to fit the new ELF layout.
- Adjust section headers.
- Adjust ELF headers.

See http://glandium.org/blog/?p=1177#relocations for some figures.