110 lines
3.3 KiB
ArmAsm
110 lines
3.3 KiB
ArmAsm
# RUN: %{cxx} %{flags} %s %{link_flags} -no-pie -o %t.exe
|
|
# RUN: %{exec} %t.exe
|
|
|
|
# REQUIRES: linux && target={{x86_64-.+}}
|
|
# UNSUPPORTED: target={{.+-android.*}}
|
|
# UNSUPPORTED: no-exceptions
|
|
|
|
## Check that libc++abi works correctly when LPStart address is explicitly set
|
|
## to zero.
|
|
|
|
## This file is generated from the following C++ source code.
|
|
##
|
|
## ```
|
|
## int main() {
|
|
## try {
|
|
## throw 42;
|
|
## } catch (...) {
|
|
## return 0;
|
|
## }
|
|
## return 1;
|
|
## }
|
|
## ```
|
|
## The exception table is modified to use udata4 encoding for LPStart and
|
|
## sdata4 encoding for call sites.
|
|
|
|
.text
|
|
.globl main # -- Begin function main
|
|
.p2align 4, 0x90
|
|
.type main,@function
|
|
main: # @main
|
|
.Lfunc_begin0:
|
|
.cfi_startproc
|
|
.globl __gxx_personality_v0
|
|
.cfi_personality 3, __gxx_personality_v0
|
|
.cfi_lsda 27, .Lexception0
|
|
# %bb.0: # %entry
|
|
pushq %rbp
|
|
.cfi_def_cfa_offset 16
|
|
.cfi_offset %rbp, -16
|
|
movq %rsp, %rbp
|
|
.cfi_def_cfa_register %rbp
|
|
subq $32, %rsp
|
|
movl $0, -4(%rbp)
|
|
movl $4, %edi
|
|
callq __cxa_allocate_exception@PLT
|
|
movq %rax, %rdi
|
|
movl $42, (%rdi)
|
|
.Ltmp0:
|
|
movq _ZTIi@GOTPCREL(%rip), %rsi
|
|
xorl %eax, %eax
|
|
movl %eax, %edx
|
|
callq __cxa_throw@PLT
|
|
.Ltmp1:
|
|
jmp .LBB0_4
|
|
.LBB0_1: # %lpad
|
|
.Ltmp2:
|
|
movq %rax, %rcx
|
|
movl %edx, %eax
|
|
movq %rcx, -16(%rbp)
|
|
movl %eax, -20(%rbp)
|
|
# %bb.2: # %catch
|
|
movq -16(%rbp), %rdi
|
|
callq __cxa_begin_catch@PLT
|
|
movl $0, -4(%rbp)
|
|
callq __cxa_end_catch@PLT
|
|
# %bb.3: # %return
|
|
movl -4(%rbp), %eax
|
|
addq $32, %rsp
|
|
popq %rbp
|
|
.cfi_def_cfa %rsp, 8
|
|
retq
|
|
.LBB0_4: # %unreachable
|
|
.Lfunc_end0:
|
|
.size main, .Lfunc_end0-main
|
|
.cfi_endproc
|
|
|
|
.section .gcc_except_table,"a",@progbits
|
|
.p2align 2, 0x0
|
|
GCC_except_table0:
|
|
.Lexception0:
|
|
.byte 3 # @LPStart Encoding = udata4
|
|
.long 0
|
|
.byte 155 # @TType Encoding = indirect pcrel sdata4
|
|
.uleb128 .Lttbase0-.Lttbaseref0
|
|
.Lttbaseref0:
|
|
.byte 11 # Call site Encoding = sdata4
|
|
.uleb128 .Lcst_end0-.Lcst_begin0
|
|
.Lcst_begin0:
|
|
.long .Lfunc_begin0-.Lfunc_begin0 # >> Call Site 1 <<
|
|
.long .Ltmp0-.Lfunc_begin0 # Call between .Lfunc_begin0 and .Ltmp0
|
|
.long 0 # has no landing pad
|
|
.byte 0 # On action: cleanup
|
|
.long .Ltmp0-.Lfunc_begin0 # >> Call Site 2 <<
|
|
.long .Ltmp1-.Ltmp0 # Call between .Ltmp0 and .Ltmp1
|
|
.long .Ltmp2
|
|
.byte 1 # On action: 1
|
|
.long .Ltmp1-.Lfunc_begin0 # >> Call Site 3 <<
|
|
.long .Lfunc_end0-.Ltmp1 # Call between .Ltmp1 and .Lfunc_end0
|
|
.long 0 # has no landing pad
|
|
.byte 0 # On action: cleanup
|
|
.Lcst_end0:
|
|
.byte 1 # >> Action Record 1 <<
|
|
# Catch TypeInfo 1
|
|
.byte 0 # No further actions
|
|
.p2align 2, 0x0
|
|
# >> Catch TypeInfos <<
|
|
.long 0 # TypeInfo 1
|
|
.Lttbase0:
|
|
.p2align 2, 0x0
|
|
# -- End function
|