| # REQUIRES: ppc |
| |
| # RUN: split-file %s %t |
| |
| # RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/asm -o %t.o |
| # RUN: llvm-mc -filetype=obj -triple=powerpc64le %t/defs -o %t-defs.o |
| # RUN: ld.lld --shared %t-defs.o --soname=t-defs -o %t-defs.so |
| # RUN: ld.lld -T %t/lds %t.o %t-defs.so -o %t-ie |
| # RUN: ld.lld -T %t/lds %t.o %t-defs.o -o %t-le |
| |
| # RUN: llvm-readelf -r %t-ie | FileCheck %s --check-prefix=IE-RELOC |
| # RUN: llvm-readelf -s %t-ie | FileCheck %s --check-prefix=IE-SYM |
| # RUN: llvm-readelf -x .got %t-ie | FileCheck %s --check-prefix=IE-GOT |
| # RUN: llvm-objdump -d --no-show-raw-insn --mcpu=pwr10 %t-ie | FileCheck %s --check-prefix=IE |
| |
| # RUN: llvm-readelf -r %t-le | FileCheck %s --check-prefix=LE-RELOC |
| # RUN: llvm-readelf -s %t-le | FileCheck %s --check-prefix=LE-SYM |
| # RUN: llvm-readelf -x .got %t-le 2>&1 | FileCheck %s --check-prefix=LE-GOT |
| # RUN: llvm-objdump -d --no-show-raw-insn --mcpu=pwr10 %t-le | FileCheck %s --check-prefix=LE |
| |
| ## This test checks the Initial Exec PC Relative TLS implementation. |
| ## The IE version checks that the relocations are generated correctly. |
| ## The LE version checks that the Initial Exec to Local Exec relaxation is |
| ## done correctly. |
| |
| #--- lds |
| SECTIONS { |
| .text_addr 0x1001000 : { *(.text_addr) } |
| .text_val 0x1002000 : { *(.text_val) } |
| .text_twoval 0x1003000 : { *(.text_twoval) } |
| .text_incrval 0x1004000 : { *(.text_incrval) } |
| } |
| |
| #--- defs |
| .section .tbss,"awT",@nobits |
| .globl x |
| x: |
| .long 0 |
| .globl y |
| y: |
| .long 0 |
| |
| #--- asm |
| # IE-RELOC: Relocation section '.rela.dyn' at offset 0x10090 contains 2 entries: |
| # IE-RELOC: 00000000010040e0 0000000100000049 R_PPC64_TPREL64 0000000000000000 x + 0 |
| # IE-RELOC: 00000000010040e8 0000000200000049 R_PPC64_TPREL64 0000000000000000 y + 0 |
| |
| # IE-SYM: Symbol table '.dynsym' contains 3 entries: |
| # IE-SYM: 1: 0000000000000000 0 TLS GLOBAL DEFAULT UND x |
| # IE-SYM: 2: 0000000000000000 0 TLS GLOBAL DEFAULT UND y |
| |
| # IE-GOT: Hex dump of section '.got': |
| # IE-GOT-NEXT: 0x010040d8 d8c00001 00000000 00000000 00000000 |
| |
| # LE-RELOC: There are no relocations in this file. |
| |
| # LE-SYM: Symbol table '.symtab' contains 8 entries: |
| # LE-SYM: 6: 0000000000000000 0 TLS GLOBAL DEFAULT 6 x |
| # LE-SYM: 7: 0000000000000004 0 TLS GLOBAL DEFAULT 6 y |
| |
| # LE-GOT: could not find section '.got' |
| |
| # IE-LABEL: <IEAddr>: |
| # IE-NEXT: pld 3, 12512(0), 1 |
| # IE-NEXT: add 3, 3, 13 |
| # IE-NEXT: blr |
| # LE-LABEL: <IEAddr>: |
| # LE-NEXT: paddi 3, 13, -28672, 0 |
| # LE-NEXT: nop |
| # LE-NEXT: blr |
| .section .text_addr, "ax", %progbits |
| IEAddr: |
| pld 3, x@got@tprel@pcrel(0), 1 |
| add 3, 3, x@tls@pcrel |
| blr |
| |
| # IE-LABEL: <IEAddrCopy>: |
| # IE-NEXT: pld 3, 12496(0), 1 |
| # IE-NEXT: add 4, 3, 13 |
| # IE-NEXT: blr |
| # LE-LABEL: <IEAddrCopy>: |
| # LE-NEXT: paddi 3, 13, -28672, 0 |
| # LE-NEXT: mr 4, 3 |
| # LE-NEXT: blr |
| .section .text_addr, "ax", %progbits |
| IEAddrCopy: |
| pld 3, x@got@tprel@pcrel(0), 1 |
| add 4, 3, x@tls@pcrel |
| blr |
| |
| # IE-LABEL: <IEVal>: |
| # IE-NEXT: pld 3, 8416(0), 1 |
| # IE-NEXT: lwzx 3, 3, 13 |
| # IE-NEXT: blr |
| # LE-LABEL: <IEVal>: |
| # LE-NEXT: paddi 3, 13, -28672, 0 |
| # LE-NEXT: lwz 3, 0(3) |
| # LE-NEXT: blr |
| .section .text_val, "ax", %progbits |
| IEVal: |
| pld 3, x@got@tprel@pcrel(0), 1 |
| lwzx 3, 3, x@tls@pcrel |
| blr |
| |
| # IE-LABEL: <IETwoVal>: |
| # IE-NEXT: pld 3, 4320(0), 1 |
| # IE-NEXT: pld 4, 4320(0), 1 |
| # IE-NEXT: lwzx 3, 3, 13 |
| # IE-NEXT: lwzx 4, 4, 13 |
| # IE-NEXT: blr |
| # LE-LABEL: <IETwoVal>: |
| # LE-NEXT: paddi 3, 13, -28672, 0 |
| # LE-NEXT: paddi 4, 13, -28668, 0 |
| # LE-NEXT: lwz 3, 0(3) |
| # LE-NEXT: lwz 4, 0(4) |
| # LE-NEXT: blr |
| .section .text_twoval, "ax", %progbits |
| IETwoVal: |
| pld 3, x@got@tprel@pcrel(0), 1 |
| pld 4, y@got@tprel@pcrel(0), 1 |
| lwzx 3, 3, x@tls@pcrel |
| lwzx 4, 4, y@tls@pcrel |
| blr |
| |
| # IE-LABEL: <IEIncrementVal>: |
| # IE-NEXT: pld 4, 232(0), 1 |
| # IE-NEXT: lwzx 3, 4, 13 |
| # IE-NEXT: stwx 3, 4, 13 |
| # IE-NEXT: blr |
| # LE-LABEL: <IEIncrementVal>: |
| # LE-NEXT: paddi 4, 13, -28668, 0 |
| # LE-NEXT: lwz 3, 0(4) |
| # LE-NEXT: stw 3, 0(4) |
| # LE-NEXT: blr |
| .section .text_incrval, "ax", %progbits |
| IEIncrementVal: |
| pld 4, y@got@tprel@pcrel(0), 1 |
| lwzx 3, 4, y@tls@pcrel |
| stwx 3, 4, y@tls@pcrel |
| blr |