gecko-dev/build/unix/elfhack
Mike Hommey eaca1f3dd4 Bug 1820947 - Use "new style" sysroot on Android. r=firefox-build-system-reviewers,andi
For a few NDK releases now, the situation has been simplified wrt
headers and libraries, and while we're currently still using things here
and there because we never changed our ways, we can simplify things a
lot by using the new simplified things. This involves:
- Using a --target that contains the Android version, making clang set
  __ANDROID_API__ itself, and makes it look in $sysroot/usr/lib/$target/$ver
  when linking.
- Using the sysroot that is under toolchains/llvm/prebuilt/*.
- Removing the hacks around libstdc++/libc++.

This ends up emptying stlport compiler flags, which allows to remove a
bunch of things.

Differential Revision: https://phabricator.services.mozilla.com/D172039
2023-03-15 20:44:02 +00:00
..
inject Bug 1820947 - Use "new style" sysroot on Android. r=firefox-build-system-reviewers,andi 2023-03-15 20:44:02 +00:00
dummy.c
elf.cpp Bug 1747783 - Use unsigned chars for fields that can have values > 127. r=gsvelto 2021-12-30 20:52:55 +00:00
elfhack.cpp Bug 1142667 - [elfhack] Leak of |relhack| in |do_relocation_section|. r=firefox-build-system-reviewers,glandium 2022-05-20 07:01:54 +00:00
elfxx.h Bug 1747783 - Use unsigned chars for fields that can have values > 127. r=gsvelto 2021-12-30 20:52:55 +00:00
inject.c Bug 1747782 - Use a more compact representation of relocations in elfhack. r=gsvelto 2021-12-31 01:32:52 +00:00
Makefile.in Bug 1747778 - Test what we can test of elfhack when cross-building. r=firefox-build-system-reviewers,mhentges 2021-12-30 00:50:56 +00:00
moz.build Bug 1747778 - Test what we can test of elfhack when cross-building. r=firefox-build-system-reviewers,mhentges 2021-12-30 00:50:56 +00:00
README
test-array.c
test-ctors.c
test.c Bug 1519636 - Reformat recent changes to the Google coding style. r=glandium 2023-02-13 15:02:07 +00:00

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.