diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 16943c484d96b..d43de8ce6dfef 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -639,6 +639,13 @@ template void ObjFile::parse(bool ignoreComdats) { } break; case EM_AARCH64: + // FIXME: BuildAttributes have been implemented in llvm, but not yet in + // lld. Remove the section so that it does not accumulate in the output + // file. When support is implemented we expect not to output a build + // attributes section in files of type ET_EXEC or ET_SHARED, but ld -r + // ouptut will need a single merged attributes section. + if (sec.sh_type == SHT_AARCH64_ATTRIBUTES) + sections[i] = &InputSection::discarded; // Producing a static binary with MTE globals is not currently supported, // remove all SHT_AARCH64_MEMTAG_GLOBALS_STATIC sections as they're unused // medatada, and we don't want them to end up in the output file for diff --git a/lld/test/ELF/aarch64-build-attributes.s b/lld/test/ELF/aarch64-build-attributes.s new file mode 100644 index 0000000000000..24e15f94e3d4a --- /dev/null +++ b/lld/test/ELF/aarch64-build-attributes.s @@ -0,0 +1,26 @@ +// REQUIRES: aarch64 +// RUN: llvm-mc -triple=aarch64 %s -filetype=obj -o %t.o +// RUN: ld.lld %t.o --shared -o %t.so +// RUN: llvm-readelf --sections %t.so | FileCheck %s +// RUN: ld.lld %t.o -o %t +// RUN: llvm-readelf --sections %t | FileCheck %s +// RUN: ld.lld -r %t.o -o %t2.o +// RUN: llvm-readelf --sections %t2.o | FileCheck %s + +/// File has a Build attributes section. This should not appear in +/// ET_EXEC or ET_SHARED files as there is no requirement for it to +/// do so. FIXME, the ld -r (relocatable link) should output a single +/// merged build attributes section. When full support is added in +/// ld.lld this test should be updated. + +// CHECK-NOT: .ARM.attributes + +.aeabi_subsection aeabi_feature_and_bits, optional, uleb128 +.aeabi_attribute Tag_Feature_BTI, 1 +.aeabi_attribute Tag_Feature_PAC, 1 +.aeabi_attribute Tag_Feature_GCS, 1 + +.global _start +.type _start, %function +_start: +ret