Since jitlink for ppc64le is ready for general use, test cases in compiler-rt for ELFNixPlatform support can be enabled. Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D156399
189 lines
3.4 KiB
ArmAsm
189 lines
3.4 KiB
ArmAsm
// Test that ELF static initializers with different constructor priorities work
|
|
// and are executed in the proper order.
|
|
//
|
|
// RUN: %clang -c -o %t %s
|
|
// RUN: %llvm_jitlink %t | FileCheck %s
|
|
|
|
// CHECK: constructor 100
|
|
// CHECK-NEXT: constructor 200
|
|
// CHECK-NEXT: constructor 65535
|
|
// CHECK-NEXT: main
|
|
// CHECK-NEXT: destructor
|
|
|
|
.text
|
|
.abiversion 2
|
|
.globl constructor.100
|
|
.p2align 4
|
|
.type constructor.100,@function
|
|
constructor.100:
|
|
.Lfunc_begin0:
|
|
.Lfunc_gep0:
|
|
addis 2, 12, .TOC.-.Lfunc_gep0@ha
|
|
addi 2, 2, .TOC.-.Lfunc_gep0@l
|
|
.Lfunc_lep0:
|
|
.localentry constructor.100, .Lfunc_lep0-.Lfunc_gep0
|
|
mflr 0
|
|
stdu 1, -32(1)
|
|
std 0, 48(1)
|
|
addis 3, 2, .L.str@toc@ha
|
|
addi 3, 3, .L.str@toc@l
|
|
bl puts
|
|
nop
|
|
addi 1, 1, 32
|
|
ld 0, 16(1)
|
|
mtlr 0
|
|
blr
|
|
.long 0
|
|
.quad 0
|
|
.Lfunc_end0:
|
|
.size constructor.100, .Lfunc_end0-.Lfunc_begin0
|
|
|
|
.globl constructor.200
|
|
.p2align 4
|
|
.type constructor.200,@function
|
|
constructor.200:
|
|
.Lfunc_begin1:
|
|
.Lfunc_gep1:
|
|
addis 2, 12, .TOC.-.Lfunc_gep1@ha
|
|
addi 2, 2, .TOC.-.Lfunc_gep1@l
|
|
.Lfunc_lep1:
|
|
.localentry constructor.200, .Lfunc_lep1-.Lfunc_gep1
|
|
mflr 0
|
|
stdu 1, -32(1)
|
|
std 0, 48(1)
|
|
addis 3, 2, .L.str.1@toc@ha
|
|
addi 3, 3, .L.str.1@toc@l
|
|
bl puts
|
|
nop
|
|
addi 1, 1, 32
|
|
ld 0, 16(1)
|
|
mtlr 0
|
|
blr
|
|
.long 0
|
|
.quad 0
|
|
.Lfunc_end1:
|
|
.size constructor.200, .Lfunc_end1-.Lfunc_begin1
|
|
|
|
.globl constructor.65535
|
|
.p2align 4
|
|
.type constructor.65535,@function
|
|
constructor.65535:
|
|
.Lfunc_begin2:
|
|
.Lfunc_gep2:
|
|
addis 2, 12, .TOC.-.Lfunc_gep2@ha
|
|
addi 2, 2, .TOC.-.Lfunc_gep2@l
|
|
.Lfunc_lep2:
|
|
.localentry constructor.65535, .Lfunc_lep2-.Lfunc_gep2
|
|
mflr 0
|
|
stdu 1, -32(1)
|
|
std 0, 48(1)
|
|
addis 3, 2, .L.str.2@toc@ha
|
|
addi 3, 3, .L.str.2@toc@l
|
|
bl puts
|
|
nop
|
|
addis 3, 2, destructor@toc@ha
|
|
addi 3, 3, destructor@toc@l
|
|
addis 5, 2, __dso_handle@toc@ha
|
|
addi 5, 5, __dso_handle@toc@l
|
|
li 4, 0
|
|
bl __cxa_atexit
|
|
nop
|
|
addi 1, 1, 32
|
|
ld 0, 16(1)
|
|
mtlr 0
|
|
blr
|
|
.long 0
|
|
.quad 0
|
|
.Lfunc_end2:
|
|
.size constructor.65535, .Lfunc_end2-.Lfunc_begin2
|
|
|
|
.globl destructor
|
|
.p2align 4
|
|
.type destructor,@function
|
|
destructor:
|
|
.Lfunc_begin3:
|
|
.Lfunc_gep3:
|
|
addis 2, 12, .TOC.-.Lfunc_gep3@ha
|
|
addi 2, 2, .TOC.-.Lfunc_gep3@l
|
|
.Lfunc_lep3:
|
|
.localentry destructor, .Lfunc_lep3-.Lfunc_gep3
|
|
mflr 0
|
|
stdu 1, -32(1)
|
|
std 0, 48(1)
|
|
addis 3, 2, .L.str.3@toc@ha
|
|
addi 3, 3, .L.str.3@toc@l
|
|
bl puts
|
|
nop
|
|
addi 1, 1, 32
|
|
ld 0, 16(1)
|
|
mtlr 0
|
|
blr
|
|
.long 0
|
|
.quad 0
|
|
.Lfunc_end3:
|
|
.size destructor, .Lfunc_end3-.Lfunc_begin3
|
|
|
|
.globl main
|
|
.p2align 4
|
|
.type main,@function
|
|
main:
|
|
.Lfunc_begin4:
|
|
.Lfunc_gep4:
|
|
addis 2, 12, .TOC.-.Lfunc_gep4@ha
|
|
addi 2, 2, .TOC.-.Lfunc_gep4@l
|
|
.Lfunc_lep4:
|
|
.localentry main, .Lfunc_lep4-.Lfunc_gep4
|
|
mflr 0
|
|
stdu 1, -32(1)
|
|
std 0, 48(1)
|
|
addis 3, 2, .L.str.4@toc@ha
|
|
addi 3, 3, .L.str.4@toc@l
|
|
bl puts
|
|
nop
|
|
li 3, 0
|
|
addi 1, 1, 32
|
|
ld 0, 16(1)
|
|
mtlr 0
|
|
blr
|
|
.long 0
|
|
.quad 0
|
|
.Lfunc_end4:
|
|
.size main, .Lfunc_end4-.Lfunc_begin4
|
|
|
|
.hidden __dso_handle
|
|
.type .L.str,@object
|
|
.section .rodata.str1.1,"aMS",@progbits,1
|
|
.L.str:
|
|
.asciz "constructor 100"
|
|
.size .L.str, 16
|
|
|
|
.type .L.str.1,@object
|
|
.L.str.1:
|
|
.asciz "constructor 200"
|
|
.size .L.str.1, 16
|
|
|
|
.type .L.str.2,@object
|
|
.L.str.2:
|
|
.asciz "constructor 65535"
|
|
.size .L.str.2, 18
|
|
|
|
.type .L.str.3,@object
|
|
.L.str.3:
|
|
.asciz "destructor"
|
|
.size .L.str.3, 11
|
|
|
|
.type .L.str.4,@object
|
|
.L.str.4:
|
|
.asciz "main"
|
|
.size .L.str.4, 5
|
|
|
|
.section .init_array.100,"aw",@init_array
|
|
.p2align 3
|
|
.quad constructor.100
|
|
.section .init_array.200,"aw",@init_array
|
|
.p2align 3
|
|
.quad constructor.200
|
|
.section .init_array,"aw",@init_array
|
|
.p2align 3
|
|
.quad constructor.65535
|