# REQUIRES: ppc # RUN: split-file %s %t # RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/initexec -o %t/initexec.o # RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/defs -o %t/defs.o # RUN: ld.lld %t/initexec.o %t/defs.o -o %t/out # RUN: llvm-objdump -d --no-show-raw-insn %t/out | FileCheck %s # CHECK-LABEL: : # CHECK: mflr 0 # CHECK-NEXT: std 30, -16(1) # CHECK-NEXT: std 0, 16(1) # CHECK-NEXT: stdu 1, -48(1) # CHECK-NEXT: paddi 3, 13, -28672, 0 # CHECK-NEXT: mr 30, 3 # CHECK-NEXT: mr 3, 30 # CHECK-NEXT: bl # CHECK-NEXT: mr 4, 30 # CHECK-NEXT: addi 1, 1, 48 # CHECK-NEXT: ld 0, 16(1) # CHECK-NEXT: ld 30, -16(1) # CHECK-NEXT: mtlr 0 # CHECK-NEXT: b ## Generated From: ## extern __thread unsigned TGlobal; ## unsigned getConst(unsigned*); ## unsigned addVal(unsigned, unsigned*); ## ## unsigned GetAddrT() { ## return addVal(getConst(&TGlobal), &TGlobal); ## } //--- initexec GetAddrT: mflr 0 std 30, -16(1) std 0, 16(1) stdu 1, -48(1) pld 3, TGlobal@got@tprel@pcrel(0), 1 add 30, 3, TGlobal@tls@pcrel mr 3, 30 bl getConst@notoc mr 4, 30 addi 1, 1, 48 ld 0, 16(1) ld 30, -16(1) mtlr 0 b addVal@notoc ## Generated From: ## __thread unsigned TGlobal; ## ## unsigned getConst(unsigned* A) { ## return *A + 3; ## } ## ## unsigned addVal(unsigned A, unsigned* B) { ## return A + *B; ## } //--- defs .globl getConst getConst: lwz 3, 0(3) addi 3, 3, 3 clrldi 3, 3, 32 blr .globl addVal addVal: lwz 4, 0(4) add 3, 4, 3 clrldi 3, 3, 32 blr .section .tbss,"awT",@nobits .globl TGlobal .p2align 2 TGlobal: .long 0 .size TGlobal, 4