| // Test that the runtime correctly interposes ___cxa_atexit. |
| // |
| // RUN: %clang -c -o %t %s |
| // RUN: %llvm_jitlink %t |
| |
| .section __TEXT,__text,regular,pure_instructions |
| .build_version macos, 12, 0 sdk_version 12, 0 |
| |
| # main registers the atexit and sets the test result to one. |
| .globl _main ; -- Begin function main |
| .p2align 2 |
| _main: ; @main |
| ; %bb.0: |
| sub sp, sp, #32 ; =32 |
| stp x29, x30, [sp, #16] ; 16-byte Folded Spill |
| add x29, sp, #16 ; =16 |
| stur wzr, [x29, #-4] |
| adrp x8, __ZGVZ4mainE6onExit@PAGE |
| add x8, x8, __ZGVZ4mainE6onExit@PAGEOFF |
| ldarb w8, [x8] |
| and w8, w8, #0x1 |
| and w8, w8, #0xff |
| cbnz w8, LBB0_3 |
| ; %bb.1: |
| adrp x0, __ZGVZ4mainE6onExit@PAGE |
| add x0, x0, __ZGVZ4mainE6onExit@PAGEOFF |
| bl ___cxa_guard_acquire |
| cbz w0, LBB0_3 |
| ; %bb.2: |
| adrp x0, __ZN6OnExitD1Ev@GOTPAGE |
| ldr x0, [x0, __ZN6OnExitD1Ev@GOTPAGEOFF] |
| adrp x1, __ZZ4mainE6onExit@PAGE |
| add x1, x1, __ZZ4mainE6onExit@PAGEOFF |
| adrp x2, ___dso_handle@PAGE |
| add x2, x2, ___dso_handle@PAGEOFF |
| bl ___cxa_atexit |
| adrp x0, __ZGVZ4mainE6onExit@PAGE |
| add x0, x0, __ZGVZ4mainE6onExit@PAGEOFF |
| bl ___cxa_guard_release |
| LBB0_3: |
| mov x0, #1 |
| bl _llvm_jitlink_setTestResultOverride |
| mov w0, #0 |
| ldp x29, x30, [sp, #16] ; 16-byte Folded Reload |
| add sp, sp, #32 ; =32 |
| ret |
| ; -- End function |
| |
| # OnExit destructor resets the test result override to zero. |
| .globl __ZN6OnExitD1Ev ; -- Begin function _ZN6OnExitD1Ev |
| .weak_def_can_be_hidden __ZN6OnExitD1Ev |
| .p2align 2 |
| __ZN6OnExitD1Ev: ; @_ZN6OnExitD1Ev |
| ; %bb.0: |
| sub sp, sp, #32 ; =32 |
| stp x29, x30, [sp, #16] ; 16-byte Folded Spill |
| add x29, sp, #16 ; =16 |
| str x0, [sp, #8] |
| ldr x0, [sp, #8] |
| str x0, [sp] ; 8-byte Folded Spill |
| bl __ZN6OnExitD2Ev |
| ldr x0, [sp] ; 8-byte Folded Reload |
| ldp x29, x30, [sp, #16] ; 16-byte Folded Reload |
| add sp, sp, #32 ; =32 |
| ret |
| ; -- End function |
| .globl __ZN6OnExitD2Ev ; -- Begin function _ZN6OnExitD2Ev |
| .weak_def_can_be_hidden __ZN6OnExitD2Ev |
| .p2align 2 |
| __ZN6OnExitD2Ev: ; @_ZN6OnExitD2Ev |
| ; %bb.0: |
| sub sp, sp, #32 ; =32 |
| stp x29, x30, [sp, #16] ; 16-byte Folded Spill |
| add x29, sp, #16 ; =16 |
| str x0, [sp, #8] |
| ldr x8, [sp, #8] |
| str x8, [sp] ; 8-byte Folded Spill |
| mov x0, #0 |
| bl _llvm_jitlink_setTestResultOverride |
| ldr x0, [sp] ; 8-byte Folded Reload |
| ldp x29, x30, [sp, #16] ; 16-byte Folded Reload |
| add sp, sp, #32 ; =32 |
| ret |
| ; -- End function |
| .zerofill __DATA,__bss,__ZZ4mainE6onExit,1,0 ; @_ZZ4mainE6onExit |
| .zerofill __DATA,__bss,__ZGVZ4mainE6onExit,8,3 ; @_ZGVZ4mainE6onExit |
| .subsections_via_symbols |