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