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