127 lines · plain
1// Test that ELF static initializers with different constructor priorities work2// and are executed in the proper order.3//4// RUN: %clang -c -o %t %s5// RUN: %llvm_jitlink %t | FileCheck %s6 7// CHECK: constructor 1008// CHECK-NEXT: constructor 2009// CHECK-NEXT: constructor 6553510// CHECK-NEXT: main11// CHECK-NEXT: destructor12 13 .text14 .globl destructor15 .p2align 216 .type destructor,@function17destructor:18.Ldestructor$local:19 20 pcalau12i $a0, %pc_hi20(.L.str.2)21 addi.d $a0, $a0, %pc_lo12(.L.str.2)22 b %plt(puts)23 24 .globl main25 .p2align 226 .type main,@function27main:28 29 addi.d $sp, $sp, -1630 st.d $ra, $sp, 8 # 8-byte Folded Spill31 pcalau12i $a0, %pc_hi20(.L.str)32 addi.d $a0, $a0, %pc_lo12(.L.str)33 bl %plt(puts)34 move $a0, $zero35 ld.d $ra, $sp, 8 # 8-byte Folded Reload36 addi.d $sp, $sp, 1637 ret38 39 .p2align 240 .type constructor.65535,@function41constructor.65535:42 43 addi.d $sp, $sp, -1644 st.d $ra, $sp, 8 # 8-byte Folded Spill45 pcalau12i $a0, %pc_hi20(.L.str.65535)46 addi.d $a0, $a0, %pc_lo12(.L.str.65535)47 bl %plt(puts)48 pcalau12i $a0, %got_pc_hi20(__dso_handle)49 ld.d $a0, $a0, %got_pc_lo12(__dso_handle)50 ld.d $a2, $a0, 051 pcalau12i $a0, %pc_hi20(.Ldestructor$local)52 addi.d $a0, $a0, %pc_lo12(.Ldestructor$local)53 move $a1, $zero54 ld.d $ra, $sp, 8 # 8-byte Folded Reload55 addi.d $sp, $sp, 1656 b %plt(__cxa_atexit)57 58 .p2align 259 .type constructor.100,@function60constructor.100:61 62 addi.d $sp, $sp, -1663 st.d $ra, $sp, 8 # 8-byte Folded Spill64 st.d $fp, $sp, 0 # 8-byte Folded Spill65 addi.d $fp, $sp, 1666 pcalau12i $a0, %pc_hi20(.L.str.100)67 addi.d $a0, $a0, %pc_lo12(.L.str.100)68 bl %plt(puts)69 ld.d $fp, $sp, 0 # 8-byte Folded Reload70 ld.d $ra, $sp, 8 # 8-byte Folded Reload71 addi.d $sp, $sp, 1672 ret73 74 .p2align 275 .type constructor.200,@function76constructor.200:77 78 addi.d $sp, $sp, -1679 st.d $ra, $sp, 8 # 8-byte Folded Spill80 st.d $fp, $sp, 0 # 8-byte Folded Spill81 addi.d $fp, $sp, 1682 pcalau12i $a0, %pc_hi20(.L.str.200)83 addi.d $a0, $a0, %pc_lo12(.L.str.200)84 bl %plt(puts)85 ld.d $fp, $sp, 0 # 8-byte Folded Reload86 ld.d $ra, $sp, 8 # 8-byte Folded Reload87 addi.d $sp, $sp, 1688 ret89 90 .hidden __dso_handle91 .type .L.str,@object92 .section .rodata.str1.1,"aMS",@progbits,193.L.str:94 .asciz "main"95 .size .L.str, 596 97 .type .L.str.100,@object98.L.str.100:99 .asciz "constructor 100"100 .size .L.str.100, 16101 102 .type .L.str.200,@object103.L.str.200:104 .asciz "constructor 200"105 .size .L.str.200, 16106 107 .type .L.str.65535,@object108.L.str.65535:109 .asciz "constructor 65535"110 .size .L.str.65535, 18111 112 113 .type .L.str.2,@object114.L.str.2:115 .asciz "destructor"116 .size .L.str.2, 11117 118 .section .init_array.100,"aw",@init_array119 .p2align 3120 .dword constructor.100121 .section .init_array.200,"aw",@init_array122 .p2align 3123 .dword constructor.200124 .section .init_array,"aw",@init_array125 .p2align 3126 .dword constructor.65535127