diff options
-rw-r--r-- | lld/ELF/Writer.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/arm-exidx-output.s | 50 |
2 files changed, 51 insertions, 1 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index a8c6f824198..d927ee3a376 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -90,7 +90,7 @@ StringRef elf::getOutputSectionName(InputSectionBase<ELFT> *S) { StringRef Name = S->getSectionName(); for (StringRef V : {".text.", ".rodata.", ".data.rel.ro.", ".data.", ".bss.", ".init_array.", ".fini_array.", ".ctors.", ".dtors.", - ".tbss.", ".gcc_except_table.", ".tdata."}) + ".tbss.", ".gcc_except_table.", ".tdata.", ".ARM.exidx."}) if (Name.startswith(V)) return V.drop_back(); return Name; diff --git a/lld/test/ELF/arm-exidx-output.s b/lld/test/ELF/arm-exidx-output.s new file mode 100644 index 00000000000..c91be828554 --- /dev/null +++ b/lld/test/ELF/arm-exidx-output.s @@ -0,0 +1,50 @@ +// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t +// RUN: ld.lld %t -o %t2 2>&1 +// RUN: llvm-readobj -sections %t2 | FileCheck %s +// REQUIRES: arm + +// Check that only a single .ARM.exidx output section is created when +// there are input sections of the form .ARM.exidx.<section-name>. The +// assembler creates the .ARM.exidx input sections with the .cantunwind +// directive + .syntax unified + .section .text, "ax",%progbits + .globl _start + .align 2 + .type _start,%function +_start: + .fnstart + bx lr + .cantunwind + .fnend + + .section .text.f1, "ax", %progbits + .globl f1 + .align 2 + .type f1,%function +f1: + .fnstart + bx lr + .cantunwind + .fnend + + .section .text.f2, "ax", %progbits + .globl f2 + .align 2 + .type f2,%function +f2: + .fnstart + bx lr + .cantunwind + .fnend + +// CHECK: Section { +// CHECK: Name: .ARM.exidx +// CHECK-NEXT: Type: SHT_ARM_EXIDX (0x70000001) +// CHECK-NEXT: Flags [ (0x82) +// CHECK-NEXT: SHF_ALLOC (0x2) +// CHECK-NEXT: SHF_LINK_ORDER (0x80) +// CHECK-NEXT: ] + +// CHECK-NOT: Name: .ARM.exidx.text.f1 +// CHECK-NOT: Name: .ARM.exidx.text.f2 |