Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -561,6 +561,10 @@ if (!Sec) return; + // Handle align (e.g. ".foo : ALIGN(16) { ... }"). + if (Cmd->AlignExpr) + Sec->updateAlignment(Cmd->AlignExpr(0)); + // Try and find an appropriate memory region to assign offsets in. CurMemRegion = findMemoryRegion(Cmd, Sec); if (CurMemRegion) Index: test/ELF/linkerscript/section-align.s =================================================================== --- /dev/null +++ test/ELF/linkerscript/section-align.s @@ -0,0 +1,62 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t + +# RUN: echo "SECTIONS { \ +# RUN: .aaa : ALIGN(4096) { *(.aaa) } \ +# RUN: .bbb : ALIGN(4096 * 4) { *(.bbb) } \ +# RUN: .ccc : ALIGN(4096 * 8) { *(.ccc) } \ +# RUN: }" > %t.script +# RUN: ld.lld -o %t1 --script %t.script %t +# RUN: llvm-readobj -sections %t1 | FileCheck %s + +.global _start +_start: + nop + +// CHECK: Name: .aaa +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: 8 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 4096 +// CHECK-NEXT: EntrySize: + +.section .aaa, "a" +.quad 0 + +// CHECK: Name: .bbb +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: 8 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 16384 +// CHECK-NEXT: EntrySize: + +.section .bbb, "a" +.quad 0 + +// CHECK: Name: .ccc +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: ] +// CHECK-NEXT: Address: +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: 8 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 32768 +// CHECK-NEXT: EntrySize: + +.section .ccc, "a" +.quad 0