[lld] r356428 - [ELF] Allow sh_entsize to be unrelated to sh_addralign and not a power of 2

Fāng-ruì Sòng via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 23 18:47:27 PDT 2019


Replied in that thread
https://bugs.chromium.org/p/chromium/issues/detail?id=953815 likely an
underalignment of some variable in the source that happened to work before.

On Tue, Apr 23, 2019 at 10:57 PM Hans Wennborg <hans at chromium.org> wrote:

> This seems to have caused new link errors for Chromium targeting
> AArch64: https://bugs.chromium.org/p/chromium/issues/detail?id=953815
>
> Can you take a look?
>
> On Tue, Mar 19, 2019 at 12:48 AM Fangrui Song via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> >
> > Author: maskray
> > Date: Mon Mar 18 16:49:18 2019
> > New Revision: 356428
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=356428&view=rev
> > Log:
> > [ELF] Allow sh_entsize to be unrelated to sh_addralign and not a power
> of 2
> >
> > Summary:
> > This implements Rui Ueyama's idea in PR39044.
> > I've checked that ld.bfd and gold do not have the power-of-2 requirement
> > and do not require sh_entsize to be a multiple of sh_align.
> >
> > Now on the updated test merge-entsize.s, all the 3 linkers happily
> > create .rodata that is not 3-byte aligned.
> >
> > This has a use case in Linux arch/x86/crypto/sha512-avx2-asm.S
> > It uses sh_entsize of 640, which is not a power of 2.
> > See https://github.com/ClangBuiltLinux/linux/issues/417
> >
> > Reviewers: ruiu, espindola
> >
> > Reviewed By: ruiu
> >
> > Subscribers: nickdesaulniers, E5ten, emaste, arichardson, llvm-commits
> >
> > Tags: #llvm
> >
> > Differential Revision: https://reviews.llvm.org/D59478
> >
> > Modified:
> >     lld/trunk/ELF/SyntheticSections.cpp
> >     lld/trunk/test/ELF/icf-merged-sections.s
> >     lld/trunk/test/ELF/merge-entsize.s
> >     lld/trunk/test/ELF/merge-gc-piece.s
> >     lld/trunk/test/ELF/merge-reloc-O0.s
> >     lld/trunk/test/ELF/merge-sym.s
> >
> > Modified: lld/trunk/ELF/SyntheticSections.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.cpp?rev=356428&r1=356427&r2=356428&view=diff
> >
> ==============================================================================
> > --- lld/trunk/ELF/SyntheticSections.cpp (original)
> > +++ lld/trunk/ELF/SyntheticSections.cpp Mon Mar 18 16:49:18 2019
> > @@ -3016,7 +3016,6 @@ void elf::mergeSections() {
> >      }
> >
> >      StringRef OutsecName = getOutputSectionName(MS);
> > -    uint32_t Alignment = std::max<uint32_t>(MS->Alignment, MS->Entsize);
> >
> >      auto I = llvm::find_if(MergeSections, [=](MergeSyntheticSection
> *Sec) {
> >        // While we could create a single synthetic section for two
> different
> > @@ -3028,11 +3027,11 @@ void elf::mergeSections() {
> >        // Using Entsize in here also allows us to propagate it to the
> synthetic
> >        // section.
> >        return Sec->Name == OutsecName && Sec->Flags == MS->Flags &&
> > -             Sec->Entsize == MS->Entsize && Sec->Alignment == Alignment;
> > +             Sec->Entsize == MS->Entsize && Sec->Alignment ==
> MS->Alignment;
> >      });
> >      if (I == MergeSections.end()) {
> >        MergeSyntheticSection *Syn =
> > -          createMergeSynthetic(OutsecName, MS->Type, MS->Flags,
> Alignment);
> > +          createMergeSynthetic(OutsecName, MS->Type, MS->Flags,
> MS->Alignment);
> >        MergeSections.push_back(Syn);
> >        I = std::prev(MergeSections.end());
> >        S = Syn;
> >
> > Modified: lld/trunk/test/ELF/icf-merged-sections.s
> > URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/icf-merged-sections.s?rev=356428&r1=356427&r2=356428&view=diff
> >
> ==============================================================================
> > --- lld/trunk/test/ELF/icf-merged-sections.s (original)
> > +++ lld/trunk/test/ELF/icf-merged-sections.s Mon Mar 18 16:49:18 2019
> > @@ -19,7 +19,7 @@
> >  # CHECK-NEXT: Size: 16
> >  # CHECK-NEXT: Link:
> >  # CHECK-NEXT: Info:
> > -# CHECK-NEXT: AddressAlignment: 8
> > +# CHECK-NEXT: AddressAlignment: 1
> >  # CHECK-NEXT: EntrySize: 0
> >  # CHECK-NEXT: SectionData (
> >  # CHECK-NEXT:   0000: 67452301 10325476 67452301 10325476
> >
> > Modified: lld/trunk/test/ELF/merge-entsize.s
> > URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/merge-entsize.s?rev=356428&r1=356427&r2=356428&view=diff
> >
> ==============================================================================
> > --- lld/trunk/test/ELF/merge-entsize.s (original)
> > +++ lld/trunk/test/ELF/merge-entsize.s Mon Mar 18 16:49:18 2019
> > @@ -4,10 +4,15 @@
> >  // RUN: llvm-readobj -s %t | FileCheck %s
> >
> >          .section  .rodata.1,"aM", at progbits,1
> > +        .p2align 2
> >          .byte 0x42
> >
> > -        .section  .rodata.2,"aM", at progbits,2
> > +// sh_addralign = 4 while sh_entsize = 3.
> > +// sh_entsize is not necessarily a power of 2 and it can be unrelated
> to sh_addralign.
> > +        .section  .rodata.2,"aM", at progbits,3
> > +        .p2align 2
> >          .short 0x42
> > +        .byte 0
> >
> >  // Since the output section has both .rodata.1 and .rodata.2, it
> >  // contains elements of different sizes and we use an entsize of 0.
> > @@ -23,5 +28,5 @@
> >  // CHECK-NEXT: Size:
> >  // CHECK-NEXT: Link:
> >  // CHECK-NEXT: Info:
> > -// CHECK-NEXT: AddressAlignment:
> > +// CHECK-NEXT: AddressAlignment: 4
> >  // CHECK-NEXT: EntrySize: 0
> >
> > Modified: lld/trunk/test/ELF/merge-gc-piece.s
> > URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/merge-gc-piece.s?rev=356428&r1=356427&r2=356428&view=diff
> >
> ==============================================================================
> > --- lld/trunk/test/ELF/merge-gc-piece.s (original)
> > +++ lld/trunk/test/ELF/merge-gc-piece.s Mon Mar 18 16:49:18 2019
> > @@ -10,7 +10,7 @@
> >  # CHECK-NEXT:   SHF_ALLOC
> >  # CHECK-NEXT:   SHF_MERGE
> >  # CHECK-NEXT: ]
> > -# CHECK-NEXT: Address: 0x200
> > +# CHECK-NEXT: Address: 0x1FD
> >
> >  # CHECK:      Name: .bar
> >  # CHECK-NEXT: Type: SHT_PROGBITS
> > @@ -24,7 +24,7 @@
> >  # CHECK-NEXT: AddressAlignment:
> >  # CHECK-NEXT: EntrySize:
> >  # CHECK-NEXT: SectionData (
> > -# CHECK-NEXT:   0000: 01020000 00000000 02020000 00000000
> > +# CHECK-NEXT:   0000: FE010000 00000000 FF010000 00000000
> >  # CHECK-NEXT: )
> >
> >          .section .foo,"aM", at progbits,8
> >
> > Modified: lld/trunk/test/ELF/merge-reloc-O0.s
> > URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/merge-reloc-O0.s?rev=356428&r1=356427&r2=356428&view=diff
> >
> ==============================================================================
> > --- lld/trunk/test/ELF/merge-reloc-O0.s (original)
> > +++ lld/trunk/test/ELF/merge-reloc-O0.s Mon Mar 18 16:49:18 2019
> > @@ -16,7 +16,7 @@
> >  # CHECK-NEXT: Size: 16
> >  # CHECK-NEXT: Link:
> >  # CHECK-NEXT: Info:
> > -# CHECK-NEXT: AddressAlignment: 8
> > +# CHECK-NEXT: AddressAlignment: 1
> >  # CHECK-NEXT: EntrySize: 8
> >  # CHECK-NEXT: SectionData (
> >  # CHECK-NEXT:   0000: 41000000 00000000 42000000 00000000
> > @@ -33,7 +33,7 @@
> >  # CHECK-NEXT: Size: 8
> >  # CHECK-NEXT: Link:
> >  # CHECK-NEXT: Info:
> > -# CHECK-NEXT: AddressAlignment: 4
> > +# CHECK-NEXT: AddressAlignment: 1
> >  # CHECK-NEXT: EntrySize: 4
> >  # CHECK-NEXT: SectionData (
> >  # CHECK-NEXT:   0000: 41000000 42000000
> >
> > Modified: lld/trunk/test/ELF/merge-sym.s
> > URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/merge-sym.s?rev=356428&r1=356427&r2=356428&view=diff
> >
> ==============================================================================
> > --- lld/trunk/test/ELF/merge-sym.s (original)
> > +++ lld/trunk/test/ELF/merge-sym.s Mon Mar 18 16:49:18 2019
> > @@ -15,7 +15,7 @@ foo:
> >  // CHECK-NEXT:   SHF_ALLOC
> >  // CHECK-NEXT:   SHF_MERGE
> >  // CHECK-NEXT: ]
> > -// CHECK-NEXT: Address: 0x210
> > +// CHECK-NEXT: Address: 0x20D
> >
> >  // CHECK:      Name: foo
> > -// CHECK-NEXT: Value: 0x212
> > +// CHECK-NEXT: Value: 0x20F
> >
> >
> > _______________________________________________
> > 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/20190424/4bf13cac/attachment.html>


More information about the llvm-commits mailing list