1// REQUIRES: x86 2// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t 3// RUN: ld.lld %t -o %t2 4// RUN: llvm-objdump -d %t2 | FileCheck %s 5// RUN: ld.lld -pie %t -o %t3 6// RUN: llvm-objdump -d %t3 | FileCheck --check-prefix=PIE %s 7 8.globl _start 9_start: 10 call __preinit_array_start 11 call __preinit_array_end 12 call __init_array_start 13 call __init_array_end 14 call __fini_array_start 15 call __fini_array_end 16 17// With no .init_array section the symbols resolve to .text. 18// 0x201000 - (0x201000 + 5) = -5 19// 0x201000 - (0x201005 + 5) = -10 20// ... 21 22// CHECK: Disassembly of section .text: 23// CHECK-EMPTY: 24// CHECK-NEXT: _start: 25// CHECK-NEXT: 201000: e8 fb ff ff ff callq -5 26// CHECK-NEXT: 201005: e8 f6 ff ff ff callq -10 27// CHECK-NEXT: 20100a: e8 f1 ff ff ff callq -15 28// CHECK-NEXT: 20100f: e8 ec ff ff ff callq -20 29// CHECK-NEXT: 201014: e8 e7 ff ff ff callq -25 30// CHECK-NEXT: 201019: e8 e2 ff ff ff callq -30 31 32// In position-independent binaries, they resolve to .text too. 33 34// PIE: Disassembly of section .text: 35// PIE-EMPTY: 36// PIE-NEXT: _start: 37// PIE-NEXT: 1000: e8 fb ff ff ff callq -5 38// PIE-NEXT: 1005: e8 f6 ff ff ff callq -10 39// PIE-NEXT: 100a: e8 f1 ff ff ff callq -15 40// PIE-NEXT: 100f: e8 ec ff ff ff callq -20 41// PIE-NEXT: 1014: e8 e7 ff ff ff callq -25 42// PIE-NEXT: 1019: e8 e2 ff ff ff callq -30 43