[lld] r371013 - Align output segments correctly
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 6 04:18:42 PDT 2019
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
More information about the llvm-commits
mailing list