<div dir="ltr">Thanks!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 6, 2019 at 8:18 PM Hans Wennborg <<a href="mailto:hans@chromium.org">hans@chromium.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Merged to release_90 in r371197.<br>
<br>
On Thu, Sep 5, 2019 at 7:28 AM Rui Ueyama via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
> Author: ruiu<br>
> Date: Wed Sep  4 22:30:24 2019<br>
> New Revision: 371013<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=371013&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=371013&view=rev</a><br>
> Log:<br>
> Align output segments correctly<br>
><br>
> Previously, segments were aligned according to their first section's<br>
> alignment requirements. That was not correct, but segments are also<br>
> aligned to a page boundary, and a page boundary is usually much larger<br>
> than a section alignment requirement, so no one noticed this bug before.<br>
><br>
> Now, lld has --nmagic option which sets maxPageSize to 1 to effectively<br>
> disable page alignment, which reveals the issue.<br>
><br>
> Fixes <a href="https://bugs.llvm.org/show_bug.cgi?id=43212" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=43212</a><br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D67152" rel="noreferrer" target="_blank">https://reviews.llvm.org/D67152</a><br>
><br>
> Added:<br>
>     lld/trunk/test/ELF/nmagic.s<br>
> Modified:<br>
>     lld/trunk/ELF/Writer.cpp<br>
><br>
> Modified: lld/trunk/ELF/Writer.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=371013&r1=371012&r2=371013&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=371013&r1=371012&r2=371013&view=diff</a><br>
> ==============================================================================<br>
> --- lld/trunk/ELF/Writer.cpp (original)<br>
> +++ lld/trunk/ELF/Writer.cpp Wed Sep  4 22:30:24 2019<br>
> @@ -2272,7 +2272,8 @@ static uint64_t computeFileOffset(Output<br>
>    // The first section in a PT_LOAD has to have congruent offset and address<br>
>    // module the page size.<br>
>    if (os->ptLoad && os->ptLoad->firstSec == os) {<br>
> -    uint64_t alignment = std::max<uint64_t>(os->alignment, config->maxPageSize);<br>
> +    uint64_t alignment =<br>
> +        std::max<uint64_t>(os->ptLoad->p_align, config->maxPageSize);<br>
>      return alignTo(off, alignment, os->addr);<br>
>    }<br>
><br>
><br>
> Added: lld/trunk/test/ELF/nmagic.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/nmagic.s?rev=371013&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/nmagic.s?rev=371013&view=auto</a><br>
> ==============================================================================<br>
> --- lld/trunk/test/ELF/nmagic.s (added)<br>
> +++ lld/trunk/test/ELF/nmagic.s Wed Sep  4 22:30:24 2019<br>
> @@ -0,0 +1,23 @@<br>
> +# REQUIRES: x86<br>
> +# Verify that .rodata is aligned to a 8 byte boundary.<br>
> +<br>
> +# RUN: llvm-mc -filetype=obj -triple=i386 %s -o %t.o<br>
> +# RUN: ld.lld %t.o -o %t.exe -n -Ttext 0<br>
> +# RUN: llvm-readelf --section-headers %t.exe | FileCheck %s<br>
> +<br>
> +# CHECK: [ 0]           NULL     00000000 000000 000000 00      0   0  0<br>
> +# CHECK: [ 1] .text     PROGBITS 00000000 0000d4 000001 00  AX  0   0  4<br>
> +# CHECK: [ 2] .rodata   PROGBITS 00000008 0000d8 000008 00   A  0   0  8<br>
> +# CHECK: [ 3] .comment  PROGBITS 00000000 0000e0 000008 01  MS  0   0  1<br>
> +# CHECK: [ 4] .symtab   SYMTAB   00000000 0000e8 000020 10      6   1  4<br>
> +# CHECK: [ 5] .shstrtab STRTAB   00000000 000108 000032 00      0   0  1<br>
> +# CHECK: [ 6] .strtab   STRTAB   00000000 00013a 000008 00      0   0  1<br>
> +<br>
> +.globl _start<br>
> +.text<br>
> +_start:<br>
> +  ret<br>
> +<br>
> +.rodata<br>
> +.align 8<br>
> +.quad 42<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>