195 lines
4.2 KiB
ArmAsm
195 lines
4.2 KiB
ArmAsm
.cfi_sections .eh_frame
|
|
.text
|
|
.macro PROLOGUE
|
|
pushq %rbp
|
|
.cfi_def_cfa_offset 16
|
|
.cfi_offset %rbp, -16
|
|
movq %rsp, %rbp
|
|
.cfi_def_cfa_register %rbp
|
|
subq $16, %rsp
|
|
.endm
|
|
.macro WHAT
|
|
movq %rax, %rdi
|
|
movq (%rax), %r11
|
|
xorl %ecx, %ecx
|
|
call *16(%r11)
|
|
movq %rax, %rdi
|
|
call FixtureCheckWhat
|
|
.endm
|
|
.globl GuestThrow
|
|
GuestThrow:
|
|
.cfi_startproc
|
|
PROLOGUE
|
|
movl $16, %edi
|
|
call __cxa_allocate_exception_nid_postfix
|
|
movq %rax, FixtureLastObject(%rip)
|
|
leaq FixtureVtable+16(%rip), %rdx
|
|
movq %rdx, (%rax)
|
|
leaq FixtureMessage(%rip), %rdx
|
|
movq %rdx, 8(%rax)
|
|
movq %rax, %rdi
|
|
leaq FixtureErrorType(%rip), %rsi
|
|
leaq FixtureDestroy(%rip), %rdx
|
|
call __cxa_throw_nid_postfix
|
|
ud2
|
|
.cfi_endproc
|
|
|
|
.globl GuestInner
|
|
GuestInner:
|
|
.cfi_startproc
|
|
.cfi_personality 0x00, __gxx_personality_v0_nid_postfix
|
|
.cfi_lsda 0x00, .Linner_lsda
|
|
PROLOGUE
|
|
.Linner_call:
|
|
call GuestThrow
|
|
.Linner_call_end:
|
|
ud2
|
|
.Linner_catch:
|
|
cmpq $1, %rdx
|
|
jne .Linner_bad
|
|
movq %rax, %rdi
|
|
call __cxa_begin_catch_nid_postfix
|
|
incl FixtureCaught(%rip)
|
|
WHAT
|
|
.Linner_rethrow:
|
|
call __cxa_rethrow_nid_postfix
|
|
.Linner_rethrow_end:
|
|
ud2
|
|
.Linner_cleanup:
|
|
movq %rax, -8(%rbp)
|
|
call __cxa_end_catch_nid_postfix
|
|
incl FixtureGuardDestroyed(%rip)
|
|
movq -8(%rbp), %rdi
|
|
call _Unwind_Resume_nid_postfix
|
|
ud2
|
|
.Linner_bad:
|
|
movl $31, %edi
|
|
call FixtureFail
|
|
ud2
|
|
.cfi_endproc
|
|
|
|
.globl GuestOuter
|
|
GuestOuter:
|
|
.cfi_startproc
|
|
.cfi_personality 0x00, __gxx_personality_v0_nid_postfix
|
|
.cfi_lsda 0x00, .Louter_lsda
|
|
PROLOGUE
|
|
.Louter_call:
|
|
call GuestInner
|
|
.Louter_call_end:
|
|
ud2
|
|
.Louter_catch:
|
|
cmpq $2, %rdx
|
|
jne .Louter_bad
|
|
movq %rax, %rdi
|
|
call __cxa_begin_catch_nid_postfix
|
|
cmpq FixtureLastObject(%rip), %rax
|
|
jne .Louter_bad
|
|
incl FixtureCaught(%rip)
|
|
WHAT
|
|
call __cxa_end_catch_nid_postfix
|
|
xorl %eax, %eax
|
|
leave
|
|
.cfi_def_cfa %rsp, 8
|
|
ret
|
|
.Louter_bad:
|
|
movl $32, %edi
|
|
call FixtureFail
|
|
ud2
|
|
.cfi_endproc
|
|
|
|
.globl GuestStdCapture
|
|
GuestStdCapture:
|
|
.cfi_startproc
|
|
.cfi_personality 0x00, __gxx_personality_v0_nid_postfix
|
|
.cfi_lsda 0x00, .Lstd_lsda
|
|
PROLOGUE
|
|
movq FixtureArgument(%rip), %rdi
|
|
.Lstd_call:
|
|
call *FixtureThrow(%rip)
|
|
.Lstd_call_end:
|
|
ud2
|
|
.Lstd_catch:
|
|
cmpq $1, %rdx
|
|
jne .Lstd_bad
|
|
movq %rax, %rdi
|
|
call __cxa_begin_catch_nid_postfix
|
|
movq %rax, %rdi
|
|
call FixtureInspect
|
|
call __cxa_end_catch_nid_postfix
|
|
leave
|
|
.cfi_def_cfa %rsp, 8
|
|
ret
|
|
.Lstd_bad:
|
|
movl $33, %edi
|
|
call FixtureFail
|
|
ud2
|
|
.cfi_endproc
|
|
|
|
.globl ProbeWhat
|
|
ProbeWhat:
|
|
.globl ProbeDestroy
|
|
ProbeDestroy:
|
|
.cfi_startproc
|
|
PROLOGUE
|
|
subq $32, %rsp
|
|
movq %rdi, %r11
|
|
movq %rsi, %rdi
|
|
movq %rdx, %rcx
|
|
call *%r11
|
|
leave
|
|
.cfi_def_cfa %rsp, 8
|
|
ret
|
|
.cfi_endproc
|
|
.section .rdata,"dr"
|
|
.Linner_lsda:
|
|
.byte 0xff, 0x00
|
|
.uleb128 .Linner_types_end-.Linner_types_offset
|
|
.Linner_types_offset:
|
|
.byte 0x01
|
|
.uleb128 .Linner_calls_end-.Linner_calls
|
|
.Linner_calls:
|
|
.uleb128 .Linner_call-GuestInner
|
|
.uleb128 .Linner_call_end-.Linner_call
|
|
.uleb128 .Linner_catch-GuestInner
|
|
.uleb128 1
|
|
.uleb128 .Linner_rethrow-GuestInner
|
|
.uleb128 .Linner_rethrow_end-.Linner_rethrow
|
|
.uleb128 .Linner_cleanup-GuestInner
|
|
.uleb128 0
|
|
.Linner_calls_end:
|
|
.byte 1, 0
|
|
.quad FixtureErrorType
|
|
.Linner_types_end:
|
|
.Louter_lsda:
|
|
.byte 0xff, 0x00
|
|
.uleb128 .Louter_types_end-.Louter_types_offset
|
|
.Louter_types_offset:
|
|
.byte 0x01
|
|
.uleb128 .Louter_calls_end-.Louter_calls
|
|
.Louter_calls:
|
|
.uleb128 .Louter_call-GuestOuter
|
|
.uleb128 .Louter_call_end-.Louter_call
|
|
.uleb128 .Louter_catch-GuestOuter
|
|
.uleb128 1
|
|
.Louter_calls_end:
|
|
.byte 1, 1, 2, 0
|
|
.quad FixtureBaseType
|
|
.quad FixtureOtherType
|
|
.Louter_types_end:
|
|
.Lstd_lsda:
|
|
.byte 0xff, 0x80
|
|
.uleb128 .Lstd_types_end-.Lstd_types_offset
|
|
.Lstd_types_offset:
|
|
.byte 0x01
|
|
.uleb128 .Lstd_calls_end-.Lstd_calls
|
|
.Lstd_calls:
|
|
.uleb128 .Lstd_call-GuestStdCapture
|
|
.uleb128 .Lstd_call_end-.Lstd_call
|
|
.uleb128 .Lstd_catch-GuestStdCapture
|
|
.uleb128 1
|
|
.Lstd_calls_end:
|
|
.byte 1, 0
|
|
.quad FixtureStdOutType
|
|
.Lstd_types_end:
|