<div dir="ltr">I think we should switch back to not aligning them. I measured the median run time of 100 links of Chromium's base_unittests on Linux with lld-link and on Windows with link.exe with both aligned and unaligned sections. On Linux I didn't see a measurable performance difference, and on Windows the link was slightly faster with unaligned sections (presumably because on Windows the bottleneck is I/O). Also, the sections created by cl.exe are unaligned.<div><div><br></div><div>Peter</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Aug 22, 2018 at 5:59 PM David Majnemer <<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Microsoft's documentation says (<a href="https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format#section-table-section-headers" target="_blank">https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format#section-table-section-headers</a>):<div>"For object files, the value should be aligned on a 4-byte boundary for best performance."</div><div><br></div><div>It should be legal to relax this IIRC.</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Aug 22, 2018 at 5:37 PM Peter Collingbourne <<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi David,</div><div><br></div><div>Do you remember why you made this change?</div><div><br></div><div>Peter</div><div><br></div><div>> Author: majnemer</div><div>> Date: Wed Feb 11 16:22:30 2015</div><div>> New Revision: 228879</div><div>> </div><div>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=228879&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=228879&view=rev</a></div><div>> Log:</div><div>> MC, COFF: Align section contents to a four byte boundary</div><div>> </div><div>> Modified:</div><div>>     llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp</div><div>>     llvm/trunk/test/MC/COFF/directive-section-characteristics.ll</div><div>> </div><div>> Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp</div><div>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=228879&r1=228878&r2=228879&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=228879&r1=228878&r2=228879&view=diff</a></div><div>> ==============================================================================</div><div>> --- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)</div><div>> +++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Wed Feb 11 16:22:30 2015</div><div>> @@ -939,7 +939,8 @@ void WinCOFFObjectWriter::WriteObject(MC</div><div>>      Sec->Header.SizeOfRawData = Layout.getSectionAddressSize(&Section);</div><div>>  </div><div>>      if (IsPhysicalSection(Sec)) {</div><div>> -      Sec->Header.PointerToRawData = offset;</div><div>> +      // Align the section data to a four byte boundary.</div><div>> +      Sec->Header.PointerToRawData = RoundUpToAlignment(offset, 4);</div><div>>  </div><div>>        offset += Sec->Header.SizeOfRawData;</div><div>>      }</div><div>> @@ -1009,9 +1010,15 @@ void WinCOFFObjectWriter::WriteObject(MC</div><div>>          continue;</div><div>>  </div><div>>        if ((*i)->Header.PointerToRawData != 0) {</div><div>> -        assert(OS.tell() == (*i)->Header.PointerToRawData &&</div><div>> +        assert(OS.tell() <= (*i)->Header.PointerToRawData &&</div><div>>                 "Section::PointerToRawData is insane!");</div><div>>  </div><div>> +        unsigned SectionDataPadding = (*i)->Header.PointerToRawData - OS.tell();</div><div>> +        assert(SectionDataPadding < 4 &&</div><div>> +               "Should only need at most three bytes of padding!");</div><div>> +</div><div>> +        WriteZeros(SectionDataPadding);</div><div>> +</div><div>>          Asm.writeSectionData(j, Layout);</div><div>>        }</div><div>>  </div><div>> </div><div>> Modified: llvm/trunk/test/MC/COFF/directive-section-characteristics.ll</div><div>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/directive-section-characteristics.ll?rev=228879&r1=228878&r2=228879&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/directive-section-characteristics.ll?rev=228879&r1=228878&r2=228879&view=diff</a></div><div>> ==============================================================================</div><div>> --- llvm/trunk/test/MC/COFF/directive-section-characteristics.ll (original)</div><div>> +++ llvm/trunk/test/MC/COFF/directive-section-characteristics.ll Wed Feb 11 16:22:30 2015</div><div>> @@ -7,7 +7,13 @@ entry:</div><div>>  }</div><div>>  </div><div>>  ; CHECK: Section {</div><div>> +; CHECK:   Name: .text</div><div>> +; CHECK:   PointerToRawData: 0xB4</div><div>> +; CHECK: }</div><div>> +</div><div>> +; CHECK: Section {</div><div>>  ; CHECK:   Name: .drectve</div><div>> +; CHECK:   PointerToRawData: 0xB8</div><div>>  ; CHECK:   Characteristics [</div><div>>  ; CHECK:     IMAGE_SCN_ALIGN_1BYTES</div><div>>  ; CHECK:     IMAGE_SCN_LNK_INFO</div><div><br></div>-- <br><div dir="ltr" class="m_-3231150739919407906m_-8788017575771593627m_-1473149183780413716gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_-3231150739919407906gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>