summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/SyntheticSections.cpp8
-rw-r--r--lld/test/ELF/arm-exidx-empty-fn.s41
2 files changed, 44 insertions, 5 deletions
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp
index 33e3fdbe6f1..40cc92faf7b 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 00000000000..6cf9870155e
--- /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
OpenPOWER on IntegriCloud