This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Safe Identical Code Folding for X86-64.


John Reiser <jreiser@bitwagon.com> writes:

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

That is all true but irrelevant to the way that gold implements code
folding, which is to fold separate sections.  The compiler can not use
direct PC-relative addressing between functions in different sections.
The kind of folding you describe would be far less efficient at link
time.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]