Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 1 | # REQUIRES: aarch64 |
| 2 | # RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux-gnu %s -o %t.o |
| 3 | |
| 4 | # RUN: ld.lld %t.o -o %t |
| 5 | # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s --check-prefix=PDE |
| 6 | # RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=PDE-RELOC |
| 7 | |
| 8 | # RUN: ld.lld -pie %t.o -o %t |
| 9 | # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s --check-prefix=PIE |
| 10 | # RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=PIE-RELOC |
| 11 | |
| 12 | ## When compiling with -fno-PIE or -fPIE, if the ifunc is in the same |
| 13 | ## translation unit as the address taker, the compiler knows that ifunc is not |
| 14 | ## defined in a shared library so it can use a non GOT generating relative reference. |
| 15 | .text |
| 16 | .globl myfunc |
| 17 | .type myfunc,@gnu_indirect_function |
| 18 | myfunc: |
| 19 | .globl myfunc_resolver |
| 20 | .type myfunc_resolver,@function |
| 21 | myfunc_resolver: |
| 22 | ret |
| 23 | |
| 24 | .text |
| 25 | .globl main |
| 26 | .type main,@function |
| 27 | main: |
| 28 | adrp x8, myfunc |
| 29 | add x8, x8, :lo12: myfunc |
| 30 | ret |
| 31 | |
| 32 | ## The address of myfunc is the address of the PLT entry for myfunc. |
Fangrui Song | 71e2ca6 | 2020-03-05 22:18:38 | [diff] [blame] | 33 | # PDE: <myfunc_resolver>: |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 34 | # PDE-NEXT: 210170: ret |
Fangrui Song | 71e2ca6 | 2020-03-05 22:18:38 | [diff] [blame] | 35 | # PDE: <main>: |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 36 | # PDE-NEXT: 210174: adrp x8, #0 |
| 37 | # PDE-NEXT: 210178: add x8, x8, #384 |
| 38 | # PDE-NEXT: 21017c: ret |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 39 | # PDE-EMPTY: |
Fangrui Song | 345f596 | 2019-12-15 00:19:03 | [diff] [blame] | 40 | # PDE-NEXT: Disassembly of section .iplt: |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 41 | # PDE-EMPTY: |
Fangrui Song | 71e2ca6 | 2020-03-05 22:18:38 | [diff] [blame] | 42 | # PDE-NEXT: <myfunc>: |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 43 | ## page(.got.plt) - page(0x210010) = 65536 |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 44 | # PDE-NEXT: 210180: adrp x16, #65536 |
| 45 | # PDE-NEXT: 210184: ldr x17, [x16, #400] |
| 46 | # PDE-NEXT: 210188: add x16, x16, #400 |
| 47 | # PDE-NEXT: 21018c: br x17 |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 48 | |
| 49 | ## The adrp to myfunc should generate a PLT entry and a GOT entry with an |
| 50 | ## irelative relocation. |
Fangrui Song | 25ab1c6 | 2019-08-03 02:26:52 | [diff] [blame] | 51 | # PDE-RELOC: .rela.dyn { |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 52 | # PDE-RELOC-NEXT: 0x220190 R_AARCH64_IRELATIVE - 0x210170 |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 53 | # PDE-RELOC-NEXT: } |
| 54 | |
Fangrui Song | 71e2ca6 | 2020-03-05 22:18:38 | [diff] [blame] | 55 | # PIE: <myfunc_resolver>: |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 56 | # PIE-NEXT: 10260: ret |
Fangrui Song | 71e2ca6 | 2020-03-05 22:18:38 | [diff] [blame] | 57 | # PIE: <main>: |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 58 | # PIE-NEXT: 10264: adrp x8, #0 |
| 59 | # PIE-NEXT: 10268: add x8, x8, #624 |
| 60 | # PIE-NEXT: 1026c: ret |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 61 | # PIE-EMPTY: |
Fangrui Song | 345f596 | 2019-12-15 00:19:03 | [diff] [blame] | 62 | # PIE-NEXT: Disassembly of section .iplt: |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 63 | # PIE-EMPTY: |
Fangrui Song | 71e2ca6 | 2020-03-05 22:18:38 | [diff] [blame] | 64 | # PIE-NEXT: <myfunc>: |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 65 | # PIE-NEXT: 10270: adrp x16, #131072 |
| 66 | # PIE-NEXT: 10274: ldr x17, [x16, #880] |
| 67 | # PIE-NEXT: 10278: add x16, x16, #880 |
| 68 | # PIE-NEXT: 1027c: br x17 |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 69 | |
Fangrui Song | 25ab1c6 | 2019-08-03 02:26:52 | [diff] [blame] | 70 | # PIE-RELOC: .rela.dyn { |
Fangrui Song | f66b767 | 2019-08-20 08:34:56 | [diff] [blame] | 71 | # PIE-RELOC-NEXT: 0x30370 R_AARCH64_IRELATIVE - 0x10260 |
Fangrui Song | bcc0bd7 | 2019-06-01 11:01:26 | [diff] [blame] | 72 | # PIE-RELOC-NEXT: } |