// REQUIRES: arm
// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi --arm-add-build-attributes %s -o %t
// RUN: ld.lld %t --no-merge-exidx-entries -o %t2
// RUN: llvm-objdump -s %t2 | FileCheck %s
// RUN: ld.lld %t -o %t3
// RUN: llvm-objdump -s %t3 | FileCheck %s --check-prefix=CHECK-MERGE

/// The ARM.exidx section is a table of 8-byte entries of the form:
/// | PREL31 Relocation to start of function | Unwinding information |
/// The range of addresses covered by the table entry is terminated by the
/// next table entry. This means that an executable section without a .ARM.exidx
/// section does not terminate the range of addresses. To fix this the linker
/// synthesises an EXIDX_CANTUNWIND entry for each section without a .ARM.exidx
/// section.

        .syntax unified

        /// Expect inline unwind instructions
        .section .text.01, "ax", %progbits
        .global f1
f1:
        .fnstart
        bx lr
        .save {r7, lr}
        .setfp r7, sp, #0
        .fnend

        /// Expect no unwind information from assembler. The linker must
        /// synthesise an EXIDX_CANTUNWIND entry to prevent an exception
        /// thrown through f2 from matching against the unwind instructions
        /// for f1.
        .section .text.02, "ax", %progbits
        .global f2
f2:
        bx lr


        /// Expect 1 EXIDX_CANTUNWIND entry that can be merged into the linker
        /// generated EXIDX_CANTUNWIND as if the assembler had generated it.
        .section .text.03, "ax",%progbits
        .global f3
f3:
        .fnstart
        bx lr
        .cantunwind
        .fnend

        /// Dummy implementation of personality routines to satisfy reference
        /// from exception tables, linker will generate EXIDX_CANTUNWIND.
        .section .text.__aeabi_unwind_cpp_pr0, "ax", %progbits
        .global __aeabi_unwind_cpp_pr0
__aeabi_unwind_cpp_pr0:
        bx lr

/// f1, f2
// CHECK:      100d4 28000100 08849780 24000100 01000000
/// f3, __aeabi_unwind_cpp_pr0
// CHECK-NEXT: 100e4 20000100 01000000 1c000100 01000000
/// sentinel
// CHECK-NEXT: 100f4 18000100 01000000

/// f1, (f2, f3, __aeabi_unwind_cpp_pr0)
// CHECK-MERGE:      100d4 18000100 08849780 14000100 01000000
/// sentinel
// CHECK-MERGE-NEXT: 100e4 18000100 01000000

