Fangrui Song | 513d365 | 2019-04-24 14:03:30 | [diff] [blame] | 1 | # REQUIRES: ppc |
| 2 | |
| 3 | # RUN: llvm-mc -filetype=obj -triple=ppc64le %s -o %t.o |
Fangrui Song | 01c7f4b | 2019-08-20 08:34:25 | [diff] [blame] | 4 | # RUN: ld.lld %t.o -z separate-code -o %t |
Fangrui Song | 513d365 | 2019-04-24 14:03:30 | [diff] [blame] | 5 | # RUN: llvm-nm %t | FileCheck %s |
| 6 | |
| 7 | # CHECK-DAG: 0000000010010000 t __long_branch_callee |
Albion Fung | 3619279 | 2021-03-04 18:17:40 | [diff] [blame] | 8 | # CHECK-DAG: 0000000010010020 T _start |
| 9 | # CHECK-DAG: 0000000012010018 T callee |
Fangrui Song | 513d365 | 2019-04-24 14:03:30 | [diff] [blame] | 10 | |
| 11 | # The bl instruction jumps to the local entry. The distance requires a long branch stub: |
| 12 | # localentry(callee) - _start = 0x12010008+8 - 0x10010010 = 0x2000000 |
| 13 | |
| 14 | # We used to compute globalentry(callee) - _start and caused a "R_PPC64_REL24 |
| 15 | # out of range" error because we didn't create the stub. |
| 16 | |
| 17 | .globl _start |
| 18 | _start: |
| 19 | bl callee |
| 20 | |
| 21 | .space 0x1fffff4 |
| 22 | |
| 23 | .globl callee |
| 24 | callee: |
| 25 | .Lgep0: |
| 26 | addis 2, 12, .TOC.-.Lgep0@ha |
| 27 | addi 2, 2, .TOC.-.Lgep0@l |
| 28 | .Llep0: |
| 29 | .localentry callee, .Llep0-.Lgep0 |
| 30 | blr |