[lld] r371013 - Align output segments correctly

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 6 06:29:17 PDT 2019


Thanks!

On Fri, Sep 6, 2019 at 8:18 PM Hans Wennborg <hans at chromium.org> wrote:

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


More information about the llvm-commits mailing list