[flang] Support OPEN(..., FORM="BINARY") (#124657)
[llvm-project.git] / lld / test / ELF / relocatable-crel.s
blob6e97c3e24d66c09d262b6425afa40ad5c9fe7fff
1 # REQUIRES: x86
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
19 # CHECK-NEXT: }
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
26 # CHECK-NEXT: }
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
33 # CHECK-NEXT: }
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
38 # CHECK-NEXT: }
39 # CHECK-NEXT: ]
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
46 # CHECK2-NEXT: }
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
52 # CHECK2-NEXT: }
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
56 # CHECK2-NEXT: }
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
63 # CHECK2-NEXT: }
64 # CHECK2-NEXT: ]
66 #--- a.s
67 .global _start, foo
68 _start:
69 call foo
70 call .text.foo
72 .section .text.foo,"ax"
73 foo:
74 leaq .L.str(%rip), %rsi
75 leaq .L.str1(%rip), %rsi
76 call g
77 call g
79 .section .rodata.str1.1,"aMS",@progbits,1
80 .L.str:
81 .asciz "abc"
82 .L.str1:
83 .asciz "def"
85 .data
86 .quad 0
87 .quad _start - 0x8000000000000000
88 .quad 0
89 .quad _start - 1
91 #--- b.s
92 .globl fb
93 fb:
94 call fb
96 .section .rodata,"a"
97 .long foo - .
98 .space 15-4
99 .long foo - . + 63 # offset+=15
100 .space 16-4
101 .quad foo - . + 127 # offset+=16
102 .long _start - . - 8065
104 ## Ensure .crel.rodata contains 16 relocations so that getULEB128Size(crelHeader) > 1.
105 .rept 12
106 .long _start
107 .endr