| // RUN: llvm-mc -triple=powerpc64le-pc-linux -filetype=obj %s -o - | \ |
| // RUN: llvm-readobj -r - | FileCheck %s |
| |
| // RUN: llvm-mc -triple=powerpc64-pc-linux -filetype=obj %s -o - | \ |
| // RUN: llvm-readobj -r - | FileCheck %s |
| |
| // Verify we can handle all the tprel symbol modifiers for local exec tls. |
| // Tests 16 bit offsets on both DS-form and D-form instructions, 32 bit |
| // adjusted and non-adjusted offsets and 64 bit adjusted and non-adjusted |
| // offsets. |
| .text |
| .abiversion 2 |
| |
| .globl short_offset_ds |
| .p2align 4 |
| .type short_offset_ds,@function |
| short_offset_ds: |
| lwa 3, i@tprel(13) |
| blr |
| |
| .globl short_offset |
| .p2align 4 |
| .type short_offset,@function |
| short_offset: |
| addi 3, 13, i@tprel |
| blr |
| |
| .globl medium_offset |
| .p2align 4 |
| .type medium_offset,@function |
| medium_offset: |
| addis 3, 13, i@tprel@ha |
| lwa 3, i@tprel@l(3) |
| blr |
| |
| .globl medium_not_adjusted |
| .p2align 4 |
| .type medium_not_adjusted,@function |
| medium_not_adjusted: |
| lis 3, i@tprel@h |
| ori 3, 3, i@tprel@l |
| lwax 3, 3, 13 |
| blr |
| |
| .globl large_offset |
| .p2align 4 |
| .type large_offset,@function |
| large_offset: |
| lis 3, i@tprel@highesta |
| ori 3, 3, i@tprel@highera |
| sldi 3, 3, 32 |
| oris 3, 3, i@tprel@higha |
| addi 3, 3, i@tprel@l |
| lwax 3, 3, 13 |
| blr |
| |
| .globl not_adjusted |
| .p2align 4 |
| .type not_adjusted,@function |
| not_adjusted: |
| lis 3, i@tprel@highest |
| ori 3, 3, i@tprel@higher |
| sldi 3, 3, 32 |
| oris 3, 3, i@tprel@high |
| ori 3, 3, i@tprel@l |
| lwax 3, 3, 13 |
| blr |
| |
| .type i,@object |
| .section .tdata,"awT",@progbits |
| .p2align 2 |
| i: |
| .long 55 |
| .size i, 4 |
| |
| .type j,@object |
| .data |
| .p2align 3 |
| j: |
| .quad i@tprel |
| .size j, 8 |
| |
| |
| # CHECK: Relocations [ |
| # CHECK: Section {{.*}} .rela.text { |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_DS i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16 i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HA i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_LO_DS i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HI i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_LO i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HIGHESTA i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HIGHERA i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HIGHA i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_LO i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HIGHEST i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HIGHER i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_HIGH i |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL16_LO i |
| # CHECK: } |
| # CHECK: Section (6) .rela.data { |
| # CHECK: 0x{{[0-9A-F]+}} R_PPC64_TPREL64 i |
| # CHECK: } |
| # CHECK: ] |