<div dir="ltr"><div>Then how about enable these flags for -O2? I want to hear from other people cc'ed, and I may be too cautious, but I'd hesitate to define a new ELF section if there's other mean already available to achieve the same thing.</div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jul 25, 2013 at 2:12 PM, Shankar Easwaran <span dir="ltr"><<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Not all users compile their code with -ffunction-sections and -fdata-sections.<br>
<br>
This is to handle usecases when libraries use a mix of object files too.<div><div class="h5"><br>
<br>
<br>
On 7/25/2013 4:10 PM, Rui Ueyama wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Is there any reason -ffunction-sections and -fdata-sections wouldn't work?<br>
If it'll work, it may be be better to say "if you want to get a better<br>
linker output use these options", rather than defining new ELF section.<br>
<br>
<br>
On Thu, Jul 25, 2013 at 2:01 PM, Shankar Easwaran<br>
<<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>><u></u>wrote:<br>
<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
On 7/25/2013 3:56 PM, Rui Ueyama wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think I share the goal with you to make the foundation for better<br>
dead-strip, so thank you for suggesting. I'm not sure if marking a section<br>
as a whole as "safe" or "unsafe" is the best approach, though. Some<br>
comments.<br>
<br>
   - If the compiler generated code is always "safe", and if we can<br>
distinguish it from hand-written assembly code by checking if there's a<br>
gap<br>
between symbols, can we just assume a section with no gap is always<br>
"safe"?<br>
<br>
</blockquote>
Gaps could just be caused due to alignment, but the code may be safe,<br>
which the compiler knows very well.<br>
<br>
<br>
    - "Safeness" is not an attribute of the section but of the symbol, I<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
think. The symbol is "safe" if there's no direct reference to the symbol<br>
data. All references should go through relocations. A section may contain<br>
both "safe" and "unsafe" symbols.<br>
<br>
</blockquote>
Sections contain symbols. In the context of ELF, marking sections as<br>
safe/not is more desirable because of the switches (-ffunction-sections and<br>
-fdata-sections available already).<br>
<br>
<br>
    - How about making the compiler to create a new section for each "safe"<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
atom, as it does for inline functions?<br>
<br>
</blockquote>
You already have a switch called -ffunction-sections and -fdata-sections<br>
to put function and data in seperate sections.<br>
<br>
<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
On Thu, Jul 25, 2013 at 10:54 AM, Shankar Easwaran<br></div></div>
<<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>>**<u></u>wrote:<div><div class="h5"><br>
<br>
    Hi,<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Currently lld ties up all atoms in a section for ELF together. This<br>
proposal just breaks it by handling it differently.<br>
<br>
*This requires **NO ELF ABI changes.<br>
<br>
**Definitions :-*<br>
<br>
<br>
A section is not considered safe if there is some code that appears to be<br>
present between function boundaries (or) optimizes sections to place data<br>
at the end or beginning of a section (that contains no symbol).<br>
<br>
A section is considered safe if symbols contained within the section have<br>
been associated with their appropriate sizes and there is no data present<br>
between function boundaries.<br>
<br>
Examples of safe sections are, code generated by compilers.<br>
<br>
Examples of unsafe sections are, hand written assembly code.<br>
<br>
*Changes Needed :-*<br>
<br>
<br>
The change that I am trying to propose is the compiler emits a section,<br>
called (*.safe_sections) *that contains section indices on what sections<br>
<br>
are safe.<br>
<br>
The section would have a SHF_EXCLUDE flag, to prevent other linkers from<br>
consuming this section and making it to the output file.<br>
<br>
Data structure for this :-<br>
<br>
.safe_sections<br>
<total size><br>
<section index> <boolean flag -- safe/unsafe><br>
...<br>
...<br>
<br>
<br>
*Advantages<br>
*There are advantages that the atoms within a safe section could just be<br>
<br>
allocated in the output file which means better output file layout, and<br>
Better performance!<br>
<br>
This would also result in more atoms getting gc'ed.<br>
<br>
a) looking at profile information<br>
b) taking a order file<br>
<br>
*Changes needed in the assembler<br>
<br>
*a) add an additional flag in the section for people writing assembly<br>
<br>
code, to mark a section safe or unsafe.<br>
*<br>
**Changes needed in lld<br>
<br>
*a) Read the safe section if its present in the object file<br>
<br>
b) Tie atoms together within a section if the section is not safe<br>
*<br>
*Thanks<br>
<br>
Shankar Easwaran*<br>
<br>
*<br>
<br>
--<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,<br>
hosted by the Linux Foundation<br>
<br>
<br>
<br>
</blockquote></div></div></blockquote><div><div class="h5">
--<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted<br>
by the Linux Foundation<br>
<br>
<br>
</div></div></blockquote></blockquote><div class="HOEnZb"><div class="h5">
<br>
<br>
-- <br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation<br>
<br>
</div></div></blockquote></div><br></div>