llvm-6502/test/MC/ARM/eh-directive-handlerdata.s
Logan Chien c24a374331 Implement AsmParser for ARM unwind directives.
This commit implements the AsmParser for fnstart, fnend,
cantunwind, personality, handlerdata, pad, setfp, save, and
vsave directives.

This commit fixes some minor issue in the ARMELFStreamer:

* The switch back to corresponding section after the .fnend
  directive.

* Emit the unwind opcode while processing .fnend directive
  if there is no .handlerdata directive.

* Emit the unwind opcode to .ARM.extab while processing
  .handlerdata even if .personality directive does not exist.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181603 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-10 16:17:24 +00:00

109 lines
3.1 KiB
ArmAsm

@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
@ RUN: | llvm-readobj -s -sd -sr | FileCheck %s
@ Check the .handlerdata directive (without .personality directive)
.syntax unified
@-------------------------------------------------------------------------------
@ TEST1
@-------------------------------------------------------------------------------
.section .TEST1
.globl func1
.align 2
.type func1,%function
.fnstart
func1:
bx lr
.handlerdata
.fnend
@ CHECK:Section {
@ CHECK: Name: .TEST1
@ CHECK: SectionData (
@ CHECK: 0000: 1EFF2FE1 |../.|
@ CHECK: )
@ CHECK:}
@ CHECK:Section {
@ CHECK: Name: .ARM.extab.TEST1
@ CHECK: SectionData (
@ CHECK: 0000: B0B0B080 |....|
@ CHECK: )
@ CHECK:}
@ CHECK:Section {
@ CHECK: Name: .ARM.exidx.TEST1
@-------------------------------------------------------------------------------
@ We should see a relocation entry to __aeabi_unwind_cpp_pr0, so that the
@ linker can keep __aeabi_unwind_cpp_pr0.
@-------------------------------------------------------------------------------
@ CHECK: Relocations [
@ CHECK: 0x0 R_ARM_PREL31 .TEST1 0x0
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr0 0x0
@ CHECK: 0x4 R_ARM_PREL31 .ARM.extab.TEST1 0x0
@ CHECK: ]
@ CHECK: SectionData (
@ CHECK: 0000: 00000000 00000000 |........|
@ CHECK: )
@ CHECK:}
@-------------------------------------------------------------------------------
@ TEST2
@-------------------------------------------------------------------------------
.section .TEST2
.globl func2
.align 2
.type func2,%function
.fnstart
func2:
@-------------------------------------------------------------------------------
@ Use a lot of unwind opcdes to get __aeabi_unwind_cpp_pr1.
@-------------------------------------------------------------------------------
.save {r4, r5, r6, r7, r8, r9, r10, r11, r12}
push {r4, r5, r6, r7, r8, r9, r10, r11, r12}
pop {r4, r5, r6, r7, r8, r9, r10, r11, r12}
.pad #0x240
sub sp, sp, #0x240
add sp, sp, #0x240
bx lr
.handlerdata
.fnend
@ CHECK:Section {
@ CHECK: Name: .TEST2
@ CHECK: SectionData (
@ CHECK: 0000: F01F2DE9 F01FBDE8 09DD4DE2 09DD8DE2 |..-.......M.....|
@ CHECK: 0010: 1EFF2FE1 |../.|
@ CHECK: )
@ CHECK:}
@ CHECK:Section {
@ CHECK: Name: .ARM.extab.TEST2
@ CHECK: SectionData (
@ CHECK: 0000: 0FB20181 B0B0FF81 |........|
@ CHECK: )
@ CHECK:}
@ CHECK:Section {
@ CHECK: Name: .ARM.exidx.TEST2
@-------------------------------------------------------------------------------
@ We should see a relocation entry to __aeabi_unwind_cpp_pr0, so that the
@ linker can keep __aeabi_unwind_cpp_pr0.
@-------------------------------------------------------------------------------
@ CHECK: Relocations [
@ CHECK: 0x0 R_ARM_PREL31 .TEST2 0x0
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr1 0x0
@ CHECK: 0x4 R_ARM_PREL31 .ARM.extab.TEST2 0x0
@ CHECK: ]
@ CHECK: SectionData (
@ CHECK: 0000: 00000000 00000000 |........|
@ CHECK: )
@ CHECK:}