mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 20:29:53 +00:00
27276437ae
The .personalityindex directive is equivalent to the .personality directive with the ARM EABI personality with the specific index (0, 1, 2). Both of these directives indicate personality routines, so enhance the personality directive handling to take into account personalityindex. Bonus fix: flush the UnwindContext at the beginning of a new function. Thanks to Logan Chien for additional tests! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199706 91177308-0d34-0410-b5e6-96231b3b80d8
203 lines
3.9 KiB
ArmAsm
203 lines
3.9 KiB
ArmAsm
@ RUN: llvm-mc -triple armv7-linux-eabi -filetype obj -o - %s \
|
|
@ RUN: | llvm-readobj -s -sd -sr | FileCheck %s
|
|
|
|
.syntax unified
|
|
.thumb
|
|
|
|
|
|
.section .pr0
|
|
|
|
.global pr0
|
|
.type pr0,%function
|
|
.thumb_func
|
|
pr0:
|
|
.fnstart
|
|
.personalityindex 0
|
|
bx lr
|
|
.fnend
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.exidx.pr0
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: 00000000 B0B0B080
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .rel.ARM.exidx.pr0
|
|
@ CHECK: Relocations [
|
|
@ CHECK: 0x0 R_ARM_PREL31 .pr0 0x0
|
|
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr0 0x0
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|
|
.section .pr0.nontrivial
|
|
|
|
.global pr0_nontrivial
|
|
.type pr0_nontrivial,%function
|
|
.thumb_func
|
|
pr0_nontrivial:
|
|
.fnstart
|
|
.personalityindex 0
|
|
.pad #0x10
|
|
sub sp, sp, #0x10
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.fnend
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.exidx.pr0.nontrivial
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: 00000000 B0B00380
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .rel.ARM.exidx.pr0.nontrivial
|
|
@ CHECK: Relocations [
|
|
@ CHECK: 0x0 R_ARM_PREL31 .pr0.nontrivial 0x0
|
|
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr0 0x0
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|
|
.section .pr1
|
|
|
|
.global pr1
|
|
.type pr1,%function
|
|
.thumb_func
|
|
pr1:
|
|
.fnstart
|
|
.personalityindex 1
|
|
bx lr
|
|
.fnend
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.extab.pr1
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: B0B00081 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.exidx.pr1
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: 00000000 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .rel.ARM.exidx.pr1
|
|
@ CHECK: Relocations [
|
|
@ CHECK: 0x0 R_ARM_PREL31 .pr1 0x0
|
|
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr1 0x0
|
|
@ CHECK: 0x4 R_ARM_PREL31 .ARM.extab.pr1 0x0
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|
|
.section .pr1.nontrivial
|
|
|
|
.global pr1_nontrivial
|
|
.type pr1_nontrivial,%function
|
|
.thumb_func
|
|
pr1_nontrivial:
|
|
.fnstart
|
|
.personalityindex 1
|
|
.pad #0x10
|
|
sub sp, sp, #0x10
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.fnend
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.extab.pr1.nontrivial
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: B0030081 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.exidx.pr1.nontrivial
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: 00000000 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .rel.ARM.exidx.pr1.nontrivial
|
|
@ CHECK: Relocations [
|
|
@ CHECK: 0x0 R_ARM_PREL31 .pr1.nontrivial 0x0
|
|
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr1 0x0
|
|
@ CHECK: 0x4 R_ARM_PREL31 .ARM.extab.pr1.nontrivial 0x0
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|
|
.section .pr2
|
|
|
|
.global pr2
|
|
.type pr2,%function
|
|
.thumb_func
|
|
pr2:
|
|
.fnstart
|
|
.personalityindex 2
|
|
bx lr
|
|
.fnend
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.extab.pr2
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: B0B00082 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.exidx.pr2
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: 00000000 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .rel.ARM.exidx.pr2
|
|
@ CHECK: Relocations [
|
|
@ CHECK: 0x0 R_ARM_PREL31 .pr2 0x0
|
|
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr2 0x0
|
|
@ CHECK: 0x4 R_ARM_PREL31 .ARM.extab.pr2 0x0
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|
|
.section .pr2.nontrivial
|
|
.type pr2_nontrivial,%function
|
|
.thumb_func
|
|
pr2_nontrivial:
|
|
.fnstart
|
|
.personalityindex 2
|
|
.pad #0x10
|
|
sub sp, sp, #0x10
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.fnend
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.extab.pr2.nontrivial
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: B0030082 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .ARM.exidx.pr2.nontrivial
|
|
@ CHECK: SectionData (
|
|
@ CHECK: 0000: 00000000 00000000
|
|
@ CHECK: )
|
|
@ CHECK: }
|
|
|
|
@ CHECK: Section {
|
|
@ CHECK: Name: .rel.ARM.exidx.pr2.nontrivial
|
|
@ CHECK: Relocations [
|
|
@ CHECK: 0x0 R_ARM_PREL31 .pr2.nontrivial 0x0
|
|
@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr2 0x0
|
|
@ CHECK: 0x4 R_ARM_PREL31 .ARM.extab.pr2.nontrivial 0x0
|
|
@ CHECK: ]
|
|
@ CHECK: }
|
|
|