1# REQUIRES: x86 2# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o 3# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/relocatable.s -o %t2.o 4# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/relocatable2.s -o %t3.o 5# RUN: ld.lld -r %t1.o %t2.o %t3.o -o %t 6# RUN: llvm-readobj -file-headers -sections -program-headers -symbols -r %t | FileCheck %s 7# RUN: llvm-objdump -s -d %t | FileCheck -check-prefix=CHECKTEXT %s 8 9## Test --relocatable alias 10# RUN: ld.lld --relocatable %t1.o %t2.o %t3.o -o %t 11# RUN: llvm-readobj -file-headers -sections -program-headers -symbols -r %t | FileCheck %s 12# RUN: llvm-objdump -s -d %t | FileCheck -check-prefix=CHECKTEXT %s 13 14## Verify that we can use our relocation output as input to produce executable 15# RUN: ld.lld -e main %t -o %texec 16# RUN: llvm-readobj -file-headers %texec | FileCheck -check-prefix=CHECKEXE %s 17 18# CHECK: ElfHeader { 19# CHECK-NEXT: Ident { 20# CHECK-NEXT: Magic: (7F 45 4C 46) 21# CHECK-NEXT: Class: 64-bit 22# CHECK-NEXT: DataEncoding: LittleEndian 23# CHECK-NEXT: FileVersion: 1 24# CHECK-NEXT: OS/ABI: SystemV 25# CHECK-NEXT: ABIVersion: 0 26# CHECK-NEXT: Unused: (00 00 00 00 00 00 00) 27# CHECK-NEXT: } 28# CHECK-NEXT: Type: Relocatable 29# CHECK-NEXT: Machine: EM_X86_64 30# CHECK-NEXT: Version: 1 31# CHECK-NEXT: Entry: 0x0 32# CHECK-NEXT: ProgramHeaderOffset: 0x0 33# CHECK-NEXT: SectionHeaderOffset: 0x2C0 34# CHECK-NEXT: Flags [ 35# CHECK-NEXT: ] 36# CHECK-NEXT: HeaderSize: 64 37# CHECK-NEXT: ProgramHeaderEntrySize: 0 38# CHECK-NEXT: ProgramHeaderCount: 0 39# CHECK-NEXT: SectionHeaderEntrySize: 64 40# CHECK-NEXT: SectionHeaderCount: 7 41# CHECK-NEXT: StringTableSectionIndex: 5 42# CHECK-NEXT: } 43 44# CHECK: Relocations [ 45# CHECK-NEXT: Section ({{.*}}) .rela.text { 46# CHECK-NEXT: 0x3 R_X86_64_32S x 0x0 47# CHECK-NEXT: 0xE R_X86_64_32S y 0x0 48# CHECK-NEXT: 0x23 R_X86_64_32S xx 0x0 49# CHECK-NEXT: 0x2E R_X86_64_32S yy 0x0 50# CHECK-NEXT: 0x43 R_X86_64_32S xxx 0x0 51# CHECK-NEXT: 0x4E R_X86_64_32S yyy 0x0 52# CHECK-NEXT: } 53 54# CHECKTEXT: Disassembly of section .text: 55# CHECKTEXT-NEXT: main: 56# CHECKTEXT-NEXT: 0: c7 04 25 00 00 00 00 05 00 00 00 movl $5, 0 57# CHECKTEXT-NEXT: b: c7 04 25 00 00 00 00 07 00 00 00 movl $7, 0 58# CHECKTEXT: foo: 59# CHECKTEXT-NEXT: 20: c7 04 25 00 00 00 00 01 00 00 00 movl $1, 0 60# CHECKTEXT-NEXT: 2b: c7 04 25 00 00 00 00 02 00 00 00 movl $2, 0 61# CHECKTEXT: bar: 62# CHECKTEXT-NEXT: 40: c7 04 25 00 00 00 00 08 00 00 00 movl $8, 0 63# CHECKTEXT-NEXT: 4b: c7 04 25 00 00 00 00 09 00 00 00 movl $9, 0 64 65# CHECKEXE: Format: ELF64-x86-64 66# CHECKEXE-NEXT: Arch: x86_64 67# CHECKEXE-NEXT: AddressSize: 64bit 68# CHECKEXE-NEXT: LoadName: 69# CHECKEXE-NEXT: ElfHeader { 70# CHECKEXE-NEXT: Ident { 71# CHECKEXE-NEXT: Magic: (7F 45 4C 46) 72# CHECKEXE-NEXT: Class: 64-bit 73# CHECKEXE-NEXT: DataEncoding: LittleEndian 74# CHECKEXE-NEXT: FileVersion: 1 75# CHECKEXE-NEXT: OS/ABI: SystemV (0x0) 76# CHECKEXE-NEXT: ABIVersion: 0 77# CHECKEXE-NEXT: Unused: (00 00 00 00 00 00 00) 78# CHECKEXE-NEXT: } 79# CHECKEXE-NEXT: Type: Executable 80# CHECKEXE-NEXT: Machine: EM_X86_64 81# CHECKEXE-NEXT: Version: 1 82# CHECKEXE-NEXT: Entry: 0x201000 83# CHECKEXE-NEXT: ProgramHeaderOffset: 0x40 84# CHECKEXE-NEXT: SectionHeaderOffset: 0x11F8 85# CHECKEXE-NEXT: Flags [ 86# CHECKEXE-NEXT: ] 87# CHECKEXE-NEXT: HeaderSize: 64 88# CHECKEXE-NEXT: ProgramHeaderEntrySize: 56 89# CHECKEXE-NEXT: ProgramHeaderCount: 5 90# CHECKEXE-NEXT: SectionHeaderEntrySize: 64 91# CHECKEXE-NEXT: SectionHeaderCount: 7 92# CHECKEXE-NEXT: StringTableSectionIndex: 5 93# CHECKEXE-NEXT: } 94 95.text 96.type x,@object 97.bss 98.globl x 99.align 4 100x: 101.long 0 102.size x, 4 103.type y,@object 104.globl y 105.align 4 106y: 107.long 0 108.size y, 4 109 110.text 111.globl main 112.align 16, 0x90 113.type main,@function 114main: 115movl $5, x 116movl $7, y 117 118blah: 119goo: 120abs = 42 121