2 # RUN: rm -rf %t && split-file %s %t && cd %t
3 # RUN: llvm-mc -filetype=obj -triple=x86_64 -crel a.s -o a.o
4 # RUN: llvm-mc -filetype=obj -triple=x86_64 -crel b.s -o b.o
5 # RUN: ld.lld -r b.o a.o -o out
6 # RUN: llvm-readobj -r out | FileCheck %s --check-prefixes=CHECK,CRELFOO
8 # RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a1.o
9 # RUN: ld.lld -r b.o a1.o -o out1
10 # RUN: llvm-readobj -r out1 | FileCheck %s --check-prefixes=CHECK,RELAFOO
11 # RUN: ld.lld -r a1.o b.o -o out2
12 # RUN: llvm-readobj -r out2 | FileCheck %s --check-prefixes=CHECK2
14 # CHECK: Relocations [
15 # CHECK-NEXT: .crel.text {
16 # CHECK-NEXT: 0x1 R_X86_64_PLT32 fb 0xFFFFFFFFFFFFFFFC
17 # CHECK-NEXT: 0x9 R_X86_64_PLT32 foo 0xFFFFFFFFFFFFFFFC
18 # CHECK-NEXT: 0xE R_X86_64_PLT32 .text.foo 0xFFFFFFFFFFFFFFFC
20 # CHECK-NEXT: .crel.rodata {
21 # CHECK-NEXT: 0x0 R_X86_64_PC32 foo 0x0
22 # CHECK-NEXT: 0xF R_X86_64_PC32 foo 0x3F
23 # CHECK-NEXT: 0x1F R_X86_64_PC64 foo 0x7F
24 # CHECK-NEXT: 0x27 R_X86_64_PC32 _start 0xFFFFFFFFFFFFE07F
25 # CHECK-COUNT-12: R_X86_64_32 _start 0x0
27 # CRELFOO-NEXT: .crel.text.foo {
28 # RELAFOO-NEXT: .rela.text.foo {
29 # CHECK-NEXT: 0x3 R_X86_64_PC32 .L.str 0xFFFFFFFFFFFFFFFC
30 # CHECK-NEXT: 0xA R_X86_64_PC32 .L.str1 0xFFFFFFFFFFFFFFFC
31 # CHECK-NEXT: 0xF R_X86_64_PLT32 g 0xFFFFFFFFFFFFFFFC
32 # CHECK-NEXT: 0x14 R_X86_64_PLT32 g 0xFFFFFFFFFFFFFFFC
34 # CRELFOO-NEXT: .crel.data {
35 # RELAFOO-NEXT: .rela.data {
36 # CHECK-NEXT: 0x8 R_X86_64_64 _start 0x8000000000000000
37 # CHECK-NEXT: 0x18 R_X86_64_64 _start 0xFFFFFFFFFFFFFFFF
41 # CHECK2: Relocations [
42 # CHECK2-NEXT: .crel.text {
43 # CHECK2-NEXT: 0x1 R_X86_64_PLT32 foo 0xFFFFFFFFFFFFFFFC
44 # CHECK2-NEXT: 0x6 R_X86_64_PLT32 .text.foo 0xFFFFFFFFFFFFFFFC
45 # CHECK2-NEXT: 0xD R_X86_64_PLT32 fb 0xFFFFFFFFFFFFFFFC
47 # CHECK2-NEXT: .rela.text.foo {
48 # CHECK2-NEXT: 0x3 R_X86_64_PC32 .L.str 0xFFFFFFFFFFFFFFFC
49 # CHECK2-NEXT: 0xA R_X86_64_PC32 .L.str1 0xFFFFFFFFFFFFFFFC
50 # CHECK2-NEXT: 0xF R_X86_64_PLT32 g 0xFFFFFFFFFFFFFFFC
51 # CHECK2-NEXT: 0x14 R_X86_64_PLT32 g 0xFFFFFFFFFFFFFFFC
53 # CHECK2-NEXT: .rela.data {
54 # CHECK2-NEXT: 0x8 R_X86_64_64 _start 0x8000000000000000
55 # CHECK2-NEXT: 0x18 R_X86_64_64 _start 0xFFFFFFFFFFFFFFFF
57 # CHECK2-NEXT: .crel.rodata {
58 # CHECK2-NEXT: 0x0 R_X86_64_PC32 foo 0x0
59 # CHECK2-NEXT: 0xF R_X86_64_PC32 foo 0x3F
60 # CHECK2-NEXT: 0x1F R_X86_64_PC64 foo 0x7F
61 # CHECK2-NEXT: 0x27 R_X86_64_PC32 _start 0xFFFFFFFFFFFFE07F
62 # CHECK2-COUNT-12: R_X86_64_32 _start 0x0
72 .section .text.foo,"ax"
74 leaq
.L.str(%rip), %rsi
75 leaq
.L.str1(%rip), %rsi
79 .section .rodata.str1.1,"aMS",@progbits,1
87 .quad _start - 0x8000000000000000
99 .long foo - . + 63 # offset+=15
101 .quad foo - . + 127 # offset+=16
102 .long _start - . - 8065
104 ## Ensure .crel.rodata contains 16 relocations so that getULEB128Size(crelHeader) > 1.