diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index 33e3fdbe6f14..40cc92faf7bb 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -3164,12 +3164,10 @@ static bool isValidExidxSectionDep(InputSection *isec) { bool ARMExidxSyntheticSection::addSection(InputSection *isec) { if (isec->type == SHT_ARM_EXIDX) { - if (InputSection* dep = isec->getLinkOrderDep()) - if (isValidExidxSectionDep(dep)) { + if (InputSection *dep = isec->getLinkOrderDep()) + if (isValidExidxSectionDep(dep)) exidxSections.push_back(isec); - return true; - } - return false; + return true; } if (isValidExidxSectionDep(isec)) { diff --git a/lld/test/ELF/arm-exidx-empty-fn.s b/lld/test/ELF/arm-exidx-empty-fn.s new file mode 100644 index 000000000000..6cf9870155e6 --- /dev/null +++ b/lld/test/ELF/arm-exidx-empty-fn.s @@ -0,0 +1,41 @@ +// REQUIRES: arm +// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o +// RUN: ld.lld %t.o -o %t -shared + +// RUN: llvm-readelf --unwind %t | FileCheck %s + +// Check that any exidx sections for empty functions are discarded. + +// CHECK: Entries [ +// CHECK-NEXT: Entry { +// CHECK-NEXT: FunctionAddress: +// CHECK-NEXT: Model: CantUnwind +// CHECK-NEXT: } +// CHECK-NEXT: Entry { +// CHECK-NEXT: FunctionAddress: +// CHECK-NEXT: Model: CantUnwind +// CHECK-NEXT: } +// CHECK-NEXT: ] + +.section .text.f0,"ax",%progbits +.globl f0 +f0: +.fnstart +bx lr +.cantunwind +.fnend + +.section .text.f1,"ax",%progbits +.globl f1 +f1: +.fnstart +.cantunwind +.fnend + +.section .text.f2,"ax",%progbits +.globl f2 +f2: +.fnstart +bx lr +.cantunwind +.fnend