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->is64 ? 8 : 4, ".note.gnu.property") {} void GnuPropertySection::writeTo(uint8_t *buf) { uint32_t featureAndType = config->emachine == EM_AARCH64 Index: lld/test/ELF/aarch64-gnu-property-align.s =================================================================== --- /dev/null +++ lld/test/ELF/aarch64-gnu-property-align.s @@ -0,0 +1,42 @@ +# REQUIRES: aarch64 +# RUN: llvm-mc -filetype=obj -triple=aarch64-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: aarch64 feature: BTI, PAC + + +.section ".note.gnu.property", "a" +.balign 8 +.long 4 +.long 0x10 +.long 0x5 +.asciz "GNU" +.long 0xc0000000 // GNU_PROPERTY_AARCH64_FEATURE_1_AND +.long 4 +.long 3 // GNU_PROPERTY_AARCH64_FEATURE_1_BTI and PAC +.long 0 + + .text + .globl _start + .type _start, %function +_start: ret Index: lld/test/ELF/aarch64-pt-gnu-property.s =================================================================== --- lld/test/ELF/aarch64-pt-gnu-property.s +++ lld/test/ELF/aarch64-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