Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -368,6 +368,13 @@ // Add input sections to an output section. for (InputSectionBase *S : V) addSection(Factory, S, Cmd->Name); + + if (Cmd->AlignExpr) { + uint32_t Align = Cmd->AlignExpr(0); + for (OutputSectionBase *S : *OutputSections) + if (S->getName() == Cmd->Name) + S->updateAlignment(Align); + } } } } 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