This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Safe Identical Code Folding for X86-64.
On 01/21/2010 05:42 PM, Sriraman Tallam wrote:
If bar calls foo and does not use a relocation for foo and uses a
displacement instead, it is somehow guaranteed that foo and bar will
be linked with that displacement.
Correct. The compiler translates directly from source (.c or .cc, etc.)
to object (.o), without going through any text-based assembly language.
The compiler says, "If I can see a suitable target for a CALL, then I
will address the target directly via pc-relative addressing with a
numerical constant displacement and no relocation record."
That, in effect, rules out any kind of folding, not just safe, right ?
Folding still is possible. However it requires an analysis that understands
the meaning of compiled instructions, and not just 'join' operations over
tables of Elf64_Rela, Elf64_Sym, etc. Inter-linking of code compiled
by different compilers can be an adventure, too. The specifications
such as an ABI (Application Binary Interface) often do not mention
all of the properties that a simple implementation of code folding
might want to assume.
--