зеркало из https://github.com/mozilla/gecko-dev.git
a15c6351cb
Since bug 635961, building with relro makes elfhack try to use the bss data for a temporary function pointer. If there is not enough space for a pointer in the bss, elfhack will complain it couldn't find the bss. In normal circumstances, this is most likely fine. Libraries with a bss so small that it can't fit a pointer are already too small to be elfhacked anyways. In Firefox, the two libraries with the smallest bss have enough space for two pointers, and aren't elfhacked (libmozgtk.so and libplds4.so). However, the testcase that is used during the build to validate that elfhack works doesn't have a large enough bss on x86-64, making elfhack bail out, and the build fail as a consequence. This, in turn, is due to the only non-thread-local zeroed data being an int, which is not enough to fit a pointer on x86-64. We thus make it a size_t. --HG-- extra : rebase_source : bca2ddbf9d4a5e8786881fc524d642c38d610227 |
||
---|---|---|
.. | ||
inject | ||
Makefile.in | ||
README | ||
dummy.c | ||
elf.cpp | ||
elfhack.cpp | ||
elfxx.h | ||
inject.c | ||
moz.build | ||
test-array.c | ||
test-ctors.c | ||
test.c |
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.