<table><tr><td style="">atanasyan created this revision.<br />atanasyan added reviewers: ruiu, psmith.<br />atanasyan added a subscriber: llvm-commits.<br />atanasyan set the repository for this revision to rL LLVM.<br />atanasyan added a project: lld.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://reviews.llvm.org/D25066" rel="noreferrer">View Revision</a></tr></table><br /><div><p>In case of relocatable object generation we do not update any relocation addends, but as a result of the merging section's size might change and so we get a relocation points to out of the section border. To prevent this do not merge sections.</p></div><br /><div><strong><strong>Repository:</strong></strong><div><div>rL LLVM</div></div></div><br /><div><a href="https://reviews.llvm.org/D25066" rel="noreferrer">https://reviews.llvm.org/D25066</a></div><br /><div><strong><strong>Files:</strong></strong><div><div>ELF/InputFiles.cpp<br />
test/ELF/merge.s</div></div></div><br /><div><div style="margin: 6px 0 12px 0;"><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><span style="color: #4b4d51; font-weight: bold;">test/ELF/merge.s</span></div><div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"><div style="padding: 0 8px; margin: 0 4px; "><span class="err">//</span> <span style="color: #a0a000">RUN:</span> <span style="color: #004012">llvm-objdump</span> <span class="p">-</span><span style="color: #000a65">d</span> <span style="color: #001294">%t</span> <span class="err">|</span> <span style="color: #000a65">FileCheck</span> <span class="p">--</span><span style="color: #000a65">check-prefix</span><span class="err">=</span><span style="color: #000a65">DISASM</span> <span style="color: #001294">%s</span>
</div><div style="padding: 0 8px; margin: 0 4px; ">
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">RUN:</span> <span style="color: #004012">ld.lld</span> <span style="color: #001294">%t.o</span> <span style="color: #001294">%t2.o</span> <span class="p">-</span><span style="color: #000a65">r</span> <span class="p">-</span><span style="color: #000a65">o</span> <span style="color: #001294">%t-rel</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">RUN:</span> <span style="color: #004012">llvm-readobj</span> <span class="p">-</span><span style="color: #000a65">s</span> <span class="p">-</span><span style="color: #000a65">section-data</span> <span style="color: #001294">%t-rel</span> <span class="err">|</span> <span style="color: #000a65">FileCheck</span> <span class="p">--</span><span style="color: #000a65">check-prefix</span><span class="err">=</span><span style="color: #000a65">REL</span> <span style="color: #001294">%s</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">
</div><div style="padding: 0 8px; margin: 0 4px; ">        <span style="color: #354bb3">.section</span>        <span style="color: #000a65">.mysec</span><span class="p">,</span><span style="color: #766510">"aM"</span><span class="p">,</span><span style="color: #354bb3">@progbits</span><span class="p">,</span><span style="color: #601200">4</span>
</div><div style="padding: 0 8px; margin: 0 4px; ">        <span style="color: #354bb3">.align</span>  <span style="color: #601200">4</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #F7F7F7; color: #74777D; border-style: dashed; border-color: #C7CCD9; border-width: 1px 0;">...</div><div style="padding: 0 8px; margin: 0 4px; "><span class="err">//</span> <span style="color: #004012">addr</span><span class="p">(</span><span style="color: #601200">0x42</span><span class="p">)</span> <span class="err">=</span> <span style="color: #601200">65828</span>
</div><div style="padding: 0 8px; margin: 0 4px; "><span class="err">//</span> <span style="color: #a0a000">DISASM-NEXT:</span>   <span style="color: #004012">movl</span>    <span style="color: #601200">65828</span><span class="p">,</span> <span style="color: #001294">%eax</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL:</span>      <span style="color: #a0a000">Name:</span> <span style="color: #354bb3">.mysec</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span> <span style="color: #a0a000">Type:</span> <span style="color: #004012">SHT_PROGBITS</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #004012">Flags</span> <span class="p">[</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>      <span style="color: #004012">SHF_ALLOC</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>      <span style="color: #004012">SHF_MERGE</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span class="err">]</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #a0a000">Address:</span> <span class="err">0</span><span style="color: #004012">x0</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #a0a000">Offset:</span> <span class="err">0</span><span style="color: #004012">x40</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #a0a000">Size:</span> <span class="err">20</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #a0a000">Link:</span> <span class="err">0</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #a0a000">Info:</span> <span class="err">0</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #a0a000">AddressAlignment:</span> <span class="err">4</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #a0a000">EntrySize:</span> <span class="err">0</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span style="color: #004012">SectionData</span> <span class="p">(</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>      <span class="err">0000:</span> <span class="err">10000000</span> <span class="err">42000000</span> <span class="err">42000000</span> <span class="err">42000000</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>      <span class="err">0010:</span> <span class="err">42000000</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;"><span class="err">//</span> <span style="color: #a0a000">REL-NEXT:</span>    <span class="err">)</span>
</div></div></div><br /><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><span style="color: #4b4d51; font-weight: bold;">ELF/InputFiles.cpp</span></div><div style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; white-space: pre-wrap; clear: both; padding: 4px 0; margin: 0;"><div style="padding: 0 8px; margin: 0 4px; ">    <span style="color: #aa4000">return</span> <span style="color: #304a96">false</span><span class="p">;</span>
</div><div style="padding: 0 8px; margin: 0 4px; ">
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">  <span style="color: #74777d">// In case of relocatable object generation we do not update any relocation</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">  <span style="color: #74777d">// addends, but as a result of the merging section's size might change</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">  <span style="color: #74777d">// and so we get a relocation points to out of the section border.</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">  <span style="color: #74777d">// To prevent this do not merge sections.</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">  <span style="color: #aa4000">if</span> <span class="p">(</span><span class="n">Config</span><span style="color: #aa2211">-></span><span class="n">Relocatable</span><span class="p">)</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">    <span style="color: #aa4000">return</span> <span style="color: #304a96">false</span><span class="p">;</span>
</div><div style="padding: 0 8px; margin: 0 4px; background: #d0ffd0;">
</div><div style="padding: 0 8px; margin: 0 4px; ">  <span style="color: #74777d">// A mergeable section with size 0 is useless because they don't have</span>
</div><div style="padding: 0 8px; margin: 0 4px; ">  <span style="color: #74777d">// any data to merge. A mergeable string section with size 0 can be</span>
</div></div></div></div></div><br />