File: coff-relocations.s

package info (click to toggle)
llvm-toolchain-14 1%3A14.0.6-16
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,496,368 kB
  • sloc: cpp: 5,593,980; ansic: 986,873; asm: 585,869; python: 184,223; objc: 72,530; lisp: 31,119; f90: 27,793; javascript: 9,780; pascal: 9,762; sh: 9,482; perl: 7,468; ml: 5,432; awk: 3,523; makefile: 2,547; xml: 953; cs: 573; fortran: 567
file content (117 lines) | stat: -rw-r--r-- 3,359 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// RUN: llvm-mc -triple aarch64-windows -filetype obj -o %t.obj %s
// RUN: llvm-readobj -r %t.obj | FileCheck %s
// RUN: llvm-objdump -d %t.obj | FileCheck %s --check-prefix=DISASM
// RUN: llvm-objdump -s %t.obj | FileCheck %s --check-prefix=DATA

// IMAGE_REL_ARM64_ADDR32
.Linfo_foo:
  .asciz "foo"
  .long foo

// IMAGE_REL_ARM64_ADDR32NB
.long func@IMGREL

// IMAGE_REL_ARM64_ADDR64
.globl struc
struc:
  .quad arr

// IMAGE_REL_ARM64_BRANCH26
b target

// IMAGE_REL_ARM64_PAGEBASE_REL21
adrp x0, foo

// IMAGE_REL_ARM64_PAGEOFFSET_12A
add x0, x0, :lo12:foo

// IMAGE_REL_ARM64_PAGEOFFSET_12L
ldr x0, [x0, :lo12:foo]

// IMAGE_REL_ARM64_PAGEBASE_REL21, even if the symbol offset is known
adrp x0, bar
bar:

// IMAGE_REL_ARM64_SECREL
.secrel32 .Linfo_bar
.Linfo_bar:

// IMAGE_REL_ARM64_SECTION
.secidx func

.align 2
adrp x0, baz + 0x12345
baz:
add x0, x0, :lo12:foo + 0x12345
ldrb w0, [x0, :lo12:foo + 0x12345]
ldr x0, [x0, :lo12:foo + 0x12348]

// IMAGE_REL_ARM64_SECREL_LOW12A
add x0, x0, :secrel_lo12:foo
// IMAGE_REL_ARM64_SECREL_HIGH12A
add x0, x0, :secrel_hi12:foo
// IMAGE_REL_ARM64_SECREL_LOW12L
ldr x0, [x0, :secrel_lo12:foo]

// IMAGE_REL_ARM64_REL21
adr x0, foo + 0x12345

// IMAGE_REL_ARM64_BRANCH19
bne target

// IMAGE_REL_ARM64_BRANCH14
tbz x0, #0, target

.section .rdata, "dr"
.Ltable:
.word .Linfo_bar - .Ltable
.word .Linfo_foo - .Ltable

// As an extension, we allow 64-bit label differences. They lower to
// IMAGE_REL_ARM64_REL32 because IMAGE_REL_ARM64_REL64 does not exist.
.xword .Linfo_foo - .Ltable

// CHECK: Format: COFF-ARM64
// CHECK: Arch: aarch64
// CHECK: AddressSize: 64bit
// CHECK: Relocations [
// CHECK:   Section (1) .text {
// CHECK: 0x4 IMAGE_REL_ARM64_ADDR32 foo
// CHECK: 0x8 IMAGE_REL_ARM64_ADDR32NB func
// CHECK: 0xC IMAGE_REL_ARM64_ADDR64 arr
// CHECK: 0x14 IMAGE_REL_ARM64_BRANCH26 target
// CHECK: 0x18 IMAGE_REL_ARM64_PAGEBASE_REL21 foo
// CHECK: 0x1C IMAGE_REL_ARM64_PAGEOFFSET_12A foo
// CHECK: 0x20 IMAGE_REL_ARM64_PAGEOFFSET_12L foo
// CHECK: 0x24 IMAGE_REL_ARM64_PAGEBASE_REL21 bar
// CHECK: 0x28 IMAGE_REL_ARM64_SECREL .text
// CHECK: 0x2C IMAGE_REL_ARM64_SECTION func
// CHECK: 0x30 IMAGE_REL_ARM64_PAGEBASE_REL21 baz
// CHECK: 0x34 IMAGE_REL_ARM64_PAGEOFFSET_12A foo
// CHECK: 0x38 IMAGE_REL_ARM64_PAGEOFFSET_12L foo
// CHECK: 0x3C IMAGE_REL_ARM64_PAGEOFFSET_12L foo
// CHECK: 0x40 IMAGE_REL_ARM64_SECREL_LOW12A foo
// CHECK: 0x44 IMAGE_REL_ARM64_SECREL_HIGH12A foo
// CHECK: 0x48 IMAGE_REL_ARM64_SECREL_LOW12L foo
// CHECK: 0x4C IMAGE_REL_ARM64_REL21 foo
// CHECK: 0x50 IMAGE_REL_ARM64_BRANCH19 target
// CHECK: 0x54 IMAGE_REL_ARM64_BRANCH14 target
// CHECK:   }
// CHECK:   Section (4) .rdata {
// CHECK: 0x0 IMAGE_REL_ARM64_REL32 .text
// CHECK: 0x4 IMAGE_REL_ARM64_REL32 .text
// CHECK: 0x8 IMAGE_REL_ARM64_REL32 .text
// CHECK:   }
// CHECK: ]

// DISASM: 30:       20 1a 09 b0     adrp    x0, 0x12345000
// DISASM: 34:       00 14 0d 91     add     x0, x0, #837
// DISASM: 38:       00 14 4d 39     ldrb    w0, [x0, #837]
// DISASM: 3c:       00 a4 41 f9     ldr     x0, [x0, #840]
// DISASM: 40:       00 00 00 91     add     x0, x0, #0
// DISASM: 44:       00 00 40 91     add     x0, x0, #0, lsl #12
// DISASM: 48:       00 00 40 f9     ldr     x0, [x0]
// DISASM: 4c:       20 1a 09 30     adr     x0, #74565

// DATA: Contents of section .rdata:
// DATA-NEXT:  0000 30000000 08000000