1// Test that basic ELF static initializers work. The main function in this 2// test returns the value of 'x', which is initially 1 in the data section, 3// and reset to 0 if the _static_init function is run. If the static initializer 4// does not run then main will return 1, causing the test to be treated as a 5// failure. 6// 7// RUN: %clang -c -o %t %s 8// RUN: %llvm_jitlink %t 9 .text 10 .abiversion 2 11 .file "init.c" 12 .globl static_init 13 .p2align 4 14 .type static_init,@function 15static_init: 16.Lfunc_begin0: 17.Lfunc_gep0: 18 addis 2, 12, .TOC.-.Lfunc_gep0@ha 19 addi 2, 2, .TOC.-.Lfunc_gep0@l 20.Lfunc_lep0: 21 .localentry static_init, .Lfunc_lep0-.Lfunc_gep0 22 addis 3, 2, x@toc@ha 23 li 4, 0 24 stw 4, x@toc@l(3) 25 blr 26 .long 0 27 .quad 0 28.Lfunc_end0: 29 .size static_init, .Lfunc_end0-.Lfunc_begin0 30 31 .globl main 32 .p2align 4 33 .type main,@function 34main: 35.Lfunc_begin1: 36.Lfunc_gep1: 37 addis 2, 12, .TOC.-.Lfunc_gep1@ha 38 addi 2, 2, .TOC.-.Lfunc_gep1@l 39.Lfunc_lep1: 40 .localentry main, .Lfunc_lep1-.Lfunc_gep1 41 addis 3, 2, x@toc@ha 42 lwa 3, x@toc@l(3) 43 blr 44 .long 0 45 .quad 0 46.Lfunc_end1: 47 .size main, .Lfunc_end1-.Lfunc_begin1 48 49 .type x,@object 50 .data 51 .globl x 52 .p2align 2, 0x0 53x: 54 .long 1 55 .size x, 4 56 57 .section .init_array.0,"aw",@init_array 58 .p2align 3 59 .quad static_init 60