Index: lld/ELF/SyntheticSections.cpp =================================================================== --- lld/ELF/SyntheticSections.cpp +++ lld/ELF/SyntheticSections.cpp @@ -298,8 +298,8 @@ // sets is empty, or some input files didn't have .note.gnu.property sections), // we don't create this section. GnuPropertySection::GnuPropertySection() - : SyntheticSection(llvm::ELF::SHF_ALLOC, llvm::ELF::SHT_NOTE, 4, - ".note.gnu.property") {} + : SyntheticSection(llvm::ELF::SHF_ALLOC, llvm::ELF::SHT_NOTE, + config->wordsize, ".note.gnu.property") {} void GnuPropertySection::writeTo(uint8_t *buf) { uint32_t featureAndType = config->emachine == EM_AARCH64 Index: lld/test/ELF/gnu-property-align-32.s =================================================================== --- /dev/null +++ lld/test/ELF/gnu-property-align-32.s @@ -0,0 +1,40 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=i686-linux-gnu %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-readobj --sections -n %t | FileCheck %s + +## Check that .note.gnu.property has alignment 4 and is readable by llvm-readobj + +# CHECK: Name: .note.gnu.property +# CHECK-NEXT: Type: SHT_NOTE (0x7) +# CHECK-NEXT: Flags [ (0x2) +# CHECK-NEXT: SHF_ALLOC (0x2) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x4000F4 +# CHECK-NEXT: Offset: 0xF4 +# CHECK-NEXT: Size: 28 +# CHECK-NEXT: Link: 0 +# CHECK-NEXT: Info: 0 +# CHECK-NEXT: AddressAlignment: 4 + +# CHECK: Note { +# CHECK-NEXT: Owner: GNU +# CHECK-NEXT: Data size: 0xC +# CHECK-NEXT: Type: NT_GNU_PROPERTY_TYPE_0 (property note) +# CHECK-NEXT: Property [ +# CHECK-NEXT: x86 feature: IBT + +.section ".note.gnu.property", "a" +.p2align 2 +.long 4 +.long 0xc +.long 0x5 +.asciz "GNU" +.p2align 2 +.long 0xc0000002 # GNU_PROPERTY_X86_FEATURE_1_AND +.long 4 +.long 1 # GNU_PROPERTY_X86_FEATURE_1_IBT + +.text +.globl _start + ret Index: lld/test/ELF/gnu-property-align.s =================================================================== --- /dev/null +++ lld/test/ELF/gnu-property-align.s @@ -0,0 +1,42 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-linux-gnu %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-readobj --sections -n %t | FileCheck %s + +## Check that .note.gnu.property has alignment 8 and is readable by llvm-readobj + +# CHECK: Name: .note.gnu.property +# CHECK-NEXT: Type: SHT_NOTE (0x7) +# CHECK-NEXT: Flags [ (0x2) +# CHECK-NEXT: SHF_ALLOC (0x2) +# CHECK-NEXT: ] +# CHECK-NEXT: Address: 0x200190 +# CHECK-NEXT: Offset: 0x190 +# CHECK-NEXT: Size: 32 +# CHECK-NEXT: Link: 0 +# CHECK-NEXT: Info: 0 +# CHECK-NEXT: AddressAlignment: 8 + +# CHECK: Note { +# CHECK-NEXT: Owner: GNU +# CHECK-NEXT: Data size: 0x10 +# CHECK-NEXT: Type: NT_GNU_PROPERTY_TYPE_0 (property note) +# CHECK-NEXT: Property [ +# CHECK-NEXT: x86 feature: IBT + + +.section ".note.gnu.property", "a" +.long 4 +.long 0x10 +.long 0x5 +.asciz "GNU" + +.long 0xc0000002 # GNU_PROPERTY_X86_FEATURE_1_AND +.long 4 +.long 1 # GNU_PROPERTY_X86_FEATURE_1_IBT +.long 0 + + .text + .globl _start + .type _start, %function +_start: ret Index: lld/test/ELF/pt-gnu-property.s =================================================================== --- lld/test/ELF/pt-gnu-property.s +++ lld/test/ELF/pt-gnu-property.s @@ -16,7 +16,7 @@ # CHECK-NEXT: Size: 32 # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 -# CHECK-NEXT: AddressAlignment: 4 +# CHECK-NEXT: AddressAlignment: 8 # CHECK: Type: PT_GNU_PROPERTY (0x6474E553) # CHECK-NEXT: Offset: 0x190 @@ -27,7 +27,7 @@ # CHECK-NEXT: Flags [ (0x4) # CHECK-NEXT: PF_R (0x4) # CHECK-NEXT: ] -# CHECK-NEXT: Alignment: 4 +# CHECK-NEXT: Alignment: 8 .section ".note.gnu.property", "a" .long 4